diff --git a/devices/sim/gazebo/urdf/arm.sim.sensors.xacro b/devices/sim/gazebo/urdf/arm.sim.sensors.xacro
index 953ab8b..fa15c90 100644
--- a/devices/sim/gazebo/urdf/arm.sim.sensors.xacro
+++ b/devices/sim/gazebo/urdf/arm.sim.sensors.xacro
@@ -130,20 +130,33 @@
Orisys 视触觉传感器
=======================================================================
真机上是视触觉:一块弹性体 + 内置相机,读出三向力、深度图、力矢量图。
- 仿真里没法真的模拟弹性体形变成像,采取的务实方案是:
- 用 Gazebo 内置的 contact sensor 取接触处的真实接触力,
- 再由 sim_tactile_adapter 把力投影到指尖坐标系,
- 按 Orisys 的 TactileStatus 消息格式发布出去。
+ 仿真里没法真的模拟弹性体形变成像,采取的务实方案是**两个内置传感器协作**:
- ⚠️ 这里**不再**新建空的 tactile link。
- 曾经的做法是建两个空的 sim_tactile_*_link(既无 visual 也无
- collision),挂在 **法兰** 的 tcp 上(不是指尖),而 里
- 又引用了一个 sim_tactile_left_link_collision
- —— 那个 collision 元素根本不存在。三重错叠在一起,
- 结果是传感器**永远收不到任何数据**,而 Gazebo 不会为此报任何错:
- 话题在、没有输出、看起来像"还没接触"。极难查。
- 这也正是把传感器挂到真实碰撞体所在的 link(指尖)上的理由 ——
- "接触到的就是读到的",中间不再有需要对齐的第二套几何。
+ 力的三分量 ← 挂在**指尖关节**上
+ 是否接触 ← 挂在**指尖 link** 上
+ 接触位置 ← 同上,取接触点坐标 → 映射成 centroid_u/v
+
+ ⚠️ 为什么力必须用 force_torque,而不是从接触传感器拿 —— 这条很反直觉,
+ 而且已经为此走过一次弯路,务必看完:
+
+ gz.msgs.Contacts(接触传感器发的消息)**不带任何力**。它的
+ Contact 消息体里确实有 wrench/force 字段(ros_gz_interfaces/Contact.msg
+ 也照着声明了 wrenches),但 Fortress 的 Contact 系统**从不填充它们**:
+ 实测一条接触消息全文只有 header + 碰撞体名 + 接触点坐标,
+ 连 normal / depth 都是空的。而 Contact 系统的二进制里连一个
+ "wrench" 字符串都搜不到 —— 所以这不是配置问题,是它设计上就只有位置。
+
+ 正确的力来源是关节:**转动关节在物理上要承受三个方向的约束力**
+ (它只放开绕轴转动这一个自由度)。所以挂在指尖关节上的
+ force_torque 传感器,读到的就是"整条手指链传过来的力" ≈ 接触力
+ (相差一个手指自身重力的偏置,正好由适配器做基线相减消掉,
+ 这与真机 Orisys "相对静止基线取增量"的口径天然一致)。
+ 由 Gazebo 内置的 forcetorque-system 实现,**无需自写 C++ 插件**。
+
+ ⚠️ URDF 语法里没有"关节传感器"。这里靠 sdformat 的扩展写法实现:
+
+ sdformat 的 URDF 解析器会把这类 sensor **移进对应的 块**
+ (已实测确认,生成的 SDF 里传感器确实在 joint 内)。
为什么要挂两个(left/right):
真机是双指各贴一片,tangential_1/2 + normal 三路力分别来自两片,
@@ -197,6 +210,54 @@
+
+
+
+
+ true
+ 100
+
+ /tactile/left/wrench
+
+ child
+ parent_to_child
+
+
+
+
+
+
+ true
+ 100
+ /tactile/right/wrench
+
+ child
+ parent_to_child
+
+
+
diff --git a/devices/sim/gazebo/worlds/assembly.world b/devices/sim/gazebo/worlds/assembly.world
index 44518f7..562dd5c 100644
--- a/devices/sim/gazebo/worlds/assembly.world
+++ b/devices/sim/gazebo/worlds/assembly.world
@@ -255,6 +255,31 @@
+
+
+