c1cd862eea
这批是 09-24 那轮仿真工作的收尾,一直没提交。内容按目的分四块: 1) 仿真真能「夹住」工件 sim_grasp_lock:给规与夹爪之间加接触锁(默认关,run_gauge_assembly --sim 才开)。 没有它时仿真里规只靠摩擦,S08 棘轮一转就滑出指间,于是把「仿真不真」误读成 「力判据不对」。新增 test_sim_grasp_lock.py。 2) 腕部力传感器进仿真 sim_wrist_ft(+ config/wrist_ft.yaml):S07 的首选判据是腕部 FT 的轴向突变, 而仿真里以前根本没有腕部力,S07 只能退到触觉兜底,两套判据从没在同一场景下比过。 现在两条通道都在,接触判定可对照。 3) 真值位姿可查(不再靠猜) sim_live_pose / sim_pose_service:把 Gazebo 里刚体的实测位姿发布出来, stage2 的真值路径按**实测**位姿算孔位,而不是按场景文件里的标称位姿。 顺带把真值孔位的推导(truth_holes)独立出来并补测。 4) 工具几何成为可配置项 config/sim_tool_geometry.yaml + stage2 的 tool_tip_below_flange_m 启动参数: 仿真里规会在指间下滑,工具长每次装夹都不同(实测见过 243/254mm), 悬停高度与 S07 下探预算必须按实测值算,不能再写死。 应用层同时跟进:gauge_fsm / gauge_config 把「悬停时工具尖端入没入工件」的判据 (hover_z_guard)与拖件判定(drag_verdict)收成纯函数并补测;stage3 搜孔、 site 导出、run_gauge_assembly 与若干文档同步。 新增 test_gauge_exit_lift / test_gauge_gripper_client / test_node_handler_collisions。 测试:全仓库 1085 passed。
devices/grippers/ —— 夹爪
厂商物料放置要求
| 项 | 要求 |
|---|---|
| 格式 | 厂商原始发布的驱动/SDK/协议文档,不要转换 |
| 命名 | 保持原文件名。若厂商只提供 PDF 协议手册,把它放进来即可(适配器按手册实现) |
| 通讯参数 | 不要写在这里。串口、波特率、从站号、行程全部在 config/site.yaml |
| 生效 | 放好物料 → 改 devices/registry.yaml 选型 → 改 site.yaml 里的串口与行程 → 重启 scripts/run_gripper.sh |
目录结构
grippers/
├── README.md
├── dh_pgea/ # 大寰(当前在用)
│ ├── manifest.yaml
│ ├── protocol/ # 厂商协议手册 / 寄存器表
│ └── driver/
└── <新品牌>/
适配器必须实现的接口契约
夹爪的接口刻意做成和机械臂对称 —— 上层只调接口,不关心是哪个品牌、走 Modbus 还是走 RDK。
| 能力 | 用途 |
|---|---|
open |
张开 |
close |
夹紧(可带力/速度参数) |
move |
移动到指定开度 |
rotate |
旋转到指定角度(旋转爪) |
get_status |
读开度、力、是否夹持到位 |
关键设计:rotate 与 open/close 解耦。 通止规装配的 S08 循环是
「转 180° → 松爪 → 快回转 → 夹紧」四步反复,这四步必须是四个独立可调用的原语,
不能封装成一个「拧螺丝」复合动作 —— 否则中途掉件时无法精确恢复。
当前状态(迁移参考)
大寰现有实现有两套互不复用的 Modbus 栈,P1 之后会合并到 dh_pgea/driver/ 下:
| 文件 | 内容 | 处置 |
|---|---|---|
src/arm_application/arm_application/dh_pgea.py |
PGEA Modbus 客户端 + 自带 CRC 表 + CLI | 保留,收敛为驱动 |
src/arm_application/arm_application/dh_official.py |
另一份寄存器级客户端(含 RGI 旋转寄存器) | 合并进来,消除重复 |
src/arm_application/arm_application/dual_gripper.py |
PGEA/RGI 统一抽象 | 改为调用新驱动接口 |
src/arm_application/arm_application/dh_pgea_node.py |
ROS 节点封装 | 改为通用夹爪节点的品牌无关实现 |
注意:site.yaml 里 gripper.backend: rdk 这条路径已被 run_gripper.sh 明确拒绝,
scripts/rdk_gripper.py 是孤儿脚本。这条「走控制器 RS485」的分支在 P2 会被清理。