Files
arm_dev c1cd862eea 真机落地前的仿真补齐:夹持/腕力/真值位姿,让仿真能验证 S07–S09
这批是 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。
2026-09-28 10:17:06 +08:00
..

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 会被清理。