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 @@ + + +