# ============================================================================= # devices/sim/gazebo/config/grasp_lock.yaml # # 仿真"抓取锁"(grasp lock)的口径。**只对仿真有意义**,真机没有任何对应物 —— # 真机靠夹爪的摩擦夹持,本来就不会掉。 # # ----------------------------------------------------------------------------- # 它解决什么问题(2026-09-24 一整轮排查换来的) # ----------------------------------------------------------------------------- # 仿真里的夹持力不是"设"出来的,而是**位置误差 × 接触刚度**(见 gauge/model.sdf # 里 kp 那段)。规站着不动时够用;机械臂一动就不行: # # S01 绕工具轴快转 150°、pre_lift/粗定位是 60~100mm 的连续轨迹 —— # 这两步里规在指间打滑。实测工具长度 0.243m → 0.285m、规歪 62°, # S07 随后拿到的几何全错,现象是"S07 判不到接触"或"规掉了(E1)"。 # # 真机不会这样:握力 46N、µ≈0.8、规 0.265kg —— 摩擦余量两个数量级。 # 所以这把锁补的是 **Gazebo 缺的那块物理**(刚性接触没有静摩擦迟滞、也不模拟 # 指垫橡胶的贴合),不是绕过物理:规与指垫的接触对仍在,触觉与腕部 FT 的读数 # 依旧是真实接触力。 # # ----------------------------------------------------------------------------- # ⚠️ 一处对不上就**静默失效**(不报错,只是规不跟着走) # ----------------------------------------------------------------------------- # 本文件的名字必须与下面三处一致: # ① gauge/model.sdf 里 DetachableJoint 插件的 / # ② gauge/model.sdf 里插件的 / # ③ 真名(Gazebo 里实际存在的连杆名)—— URDF 里与固定关节相连的连杆会被 # sdformat **合并(lump)**,名字会变:手指只剩 sim_left_finger_mount。 # 查真名的办法: # ros2 topic echo /sim/world_pose_info ← 看全部 child_frame_id # gazebo_sim.launch.py 启动时会读 gauge 的 SDF 核对 ① ②,不一致就直接报出来。 # ----------------------------------------------------------------------------- # 总开关。关掉它仿真照样跑,只是回到"靠摩擦夹持",也就是上面那串毛病。 enabled: true # 被夹住的物体(scene.yaml 里的物体名 = Gazebo 里的模型名)。 object: "gauge" # 该模型里被夹的那根连杆。 object_link: "body" # 机器人侧:模型名 = launch 里 spawn 的 -name;连杆名必须是 Gazebo 的**真名**。 # # ⚠️ 必须锁到**不会跟着张爪动的**连杆上 —— 默认是 `sim_link7`(法兰)。 # 为什么(2026-09-24 实测,一条假 E1 的真因): # 起初锁到 `sim_left_finger_mount`(左手指)。夹住的规被**刚性**锁在这根 # 手指上,而 S08 棘轮每轮都要"松爪 → 回转 → 夹紧":张爪时手指往外走 # 40mm,被锁住的规却还插在孔里(6mm 销 / 7mm 方孔)——两处约束打架, # 物理解算把规**从孔里拽出来**(实测规尖跳 +17.5mm、偏摆 64°), # 然后在回转那一步掉到地上。日志只看得到"通止规掉了(E1)"。 # `sim_grav_base_link`(夹爪本体)在 sdformat 里被**合并**进了 `sim_link7` # (见 /sim/world_pose_info 里的 `sim_link7_fixed_joint_lump__...`), # 所以锚点就写 `sim_link7`:张爪不影响它,松爪/夹紧都不会带偏规。 # `sim_grasp_lock.load_grasp_lock()` 会拒绝含 `finger` 的连杆名(带这段原因)。 robot_model: "rizon_sim" robot_link: "sim_link7" # 触发话题(gz 侧,由本模块用 ign topic 发一个空消息触发)。 # 名字必须与 gauge/model.sdf 里插件的 attach_topic/detach_topic 一致。 attach_topic: "/sim/grasp_lock/attach" detach_topic: "/sim/grasp_lock/detach" # 插件状态回执(会 attach/detach 成功时各发一条)。用它来判断"锁到底有没有生效", # 而不是靠"看规掉没掉"——后者要等故障发生才知道。 state_topic: "/sim/grasp_lock/state" # 发一次触发消息后等多久 [ms](ign topic 是短命进程,给足启动时间)。 publish_timeout_ms: 3000