P5c-5 触觉三向力落地:改用力指关节 force_torque 传感器(接触消息根本没有力)

此前方案是"从接触传感器拿力",实测证明**行不通**:
gz.msgs.Contacts 虽然 schema 里有 wrench/force 字段,但 Fortress 的
Contact 系统从不填充它们 —— 一条接触消息全文只有 header + 碰撞体名 +
接触点坐标,连 normal/depth 都是空的;该系统的二进制里连一个 "wrench"
字符串都搜不到。所以那不是配置问题,是设计上只有位置。

改为:
- 三向力 ← <sensor type="force_torque"> 挂在**指尖关节**上
  (转动关节物理上要承受三向约束力,读到的即整条手指链的力)
- 是否接触 ← 保留接触传感器(几何接触,比力阈值准)
- URDF 无"关节传感器"语法,用 sdformat 扩展 <gazebo reference="关节名">
  表达;已验证转换后传感器确实落在 <joint> 内

踩坑(与 contact-system 同一个坑的第二次):
world 里声明了任何 <plugin> 后 gz 不再加载默认系统列表,所以
forcetorque-system 必须显式声明,否则 /tactile/*/wrench 话题**不出现**、
日志一片空白。补上后立即出现。

已实测确认:
- wrench 话题 ~100Hz **持续发布**(无接触也发零)—— 这点关键,接触传感器
  只在接触时发消息,若适配器只靠它驱动,下游会误判"话题断流"
- 静止读数 = 远端三个 link 重量 2.94mN,物理自洽
- 轴向:静止重量落在 child x(竖直),child z = 世界 +x,故法向 = child y;
  符号与 force_scale 一起作为可配置标定项

Co-authored-by: Cursor <cursoragent@cursor.com>
This commit is contained in:
arm_dev
2026-09-23 16:00:52 +08:00
parent 83c7a89731
commit 768da34cf4
2 changed files with 99 additions and 13 deletions
+25
View File
@@ -255,6 +255,31 @@
<plugin filename="libignition-gazebo6-contact-system.so"
name="ignition::gazebo::systems::Contact"/>
<!-- =========================================================================
关节力传感器系统插件(触觉三向力必需)
=========================================================================
⚠️ 与上面的 Contact 是**同一个坑的第二次踩**:只要 world 里声明了任何
<plugin>,gz 就不再加载默认系统列表,凡是"传感器数据由某个系统提供"
的,都必须自己声明。漏了的症状完全一样 —— 静默:
传感器标签写在描述里、SDF 转换后确实在 <joint> 内、
但 /tactile/<side>/wrench 话题**根本不出现**,日志空白。
实测(2026-09-23)确认的因果链:
- 只有 contact-system 时:/tactile/{left,right}/raw 在(接触话题)
/tactile/{left,right}/wrench **不存在**
- 补上本插件后:wrench 话题立刻出现
为什么需要 force_torque(而不是从接触消息里拿力):
见 devices/sim/gazebo/urdf/arm.sim.sensors.xacro 里的长注释 ——
简言之 gz.msgs.Contacts 里**没有任何力**,只有接触点位置。
⚠️ 以后往这个 world 加任何 <plugin>,这两个传感器系统(Sensors /
Contact / ForceTorque)都不能被挤掉,否则对应的传感器全部静默。
========================================================================= -->
<plugin filename="libignition-gazebo6-forcetorque-system.so"
name="ignition::gazebo::systems::ForceTorque"/>
<!-- =========================================================================
RealSense D435 —— 眼在手外(俯视工作台)
=========================================================================