P5c-5 触觉链路打通:接触传感器此前是"完全静默失效",已定位并修复
两条独立的静默坑,都不报错、不告警,只会"永远收不到数据":
1) world 里没声明 contact-system 系统插件。
gz-sim 的 <sensor type="contact"> 不由 ignition-sensors 库实现,而是由
ignition-gazebo6-contact-system 插件实现 —— 所以环境里根本没有
libignition-sensors6-contact.so(相机/IMU/lidar 的后端都在,唯独缺它),
那不是包缺失。不声明插件的症状:话题不出现、日志空白。
实测:加上插件后 /tactile/left/raw、/tactile/right/raw 立刻出现。
2) 接触传感器的三个必备写法,错一个就静默失效:
- <contact><collision> 必须写 URDF→SDF 自动生成的 collision 名;
留空 <contact/> 会被补成 SDF 规范的默认值 __default__(不存在的
collision)。实测生成名:
sim_left_finger_mount_fixed_joint_lump__sim_left_finger_tip_collision
- 话题必须写在 <contact><topic> 里,写在外层 <sensor><topic> 无效,
gz 会静默改用默认 scoped 话题名。
- 传感器必须挂在有碰撞体的 link 上(指尖),不是另建的空 link。
两处均已按实测结果修正,并把"为什么这么写"写进文件注释。
Co-authored-by: Cursor <cursoragent@cursor.com>
This commit is contained in:
@@ -221,6 +221,40 @@
|
||||
<render_engine>ogre2</render_engine>
|
||||
</plugin>
|
||||
|
||||
<!-- =========================================================================
|
||||
接触系统插件(触觉传感器必需)
|
||||
=========================================================================
|
||||
⚠️ 这是本项目踩得最深的一个坑,务必看懂:
|
||||
|
||||
**gz-sim 里的 `<sensor type="contact">` 不是由 ignition-sensors 库
|
||||
实现的,而是由这个 contact-system 系统插件实现的。**
|
||||
所以 conda 环境里根本不存在 libignition-sensors6-contact.so
|
||||
(相机/IMU/lidar 的后端都在,唯独没有 contact)—— 那不是包缺失,
|
||||
而是接触本来就不归 sensors 库管。
|
||||
|
||||
不声明它的后果是**彻底静默**:
|
||||
- 传感器永远不会被创建
|
||||
- /tactile/left/raw 话题不出现(连空消息都没有)
|
||||
- Gazebo 日志里**什么都不打**:没有 error、没有 warn
|
||||
- 看起来就像"还没接触到东西",而实际上永远不会接触到
|
||||
|
||||
实测确认方式(2026-09-23):
|
||||
ign topic -l | grep tactile # 不声明时:无任何输出
|
||||
# 加上下面这行插件后立刻出现 /tactile/left/raw 与 /tactile/right/raw
|
||||
|
||||
⚠️ 另外两个必须同时满足的条件(否则一样是静默失效):
|
||||
1. `<contact><collision>` 里写的是 **URDF 转 SDF 后自动生成的 collision 名**
|
||||
(URDF 无法给 collision 命名),例如
|
||||
sim_left_finger_mount_fixed_joint_lump__sim_left_finger_tip_collision
|
||||
留空 `<contact/>` 不会"监测全部",而是被补成 SDF 规范的默认值
|
||||
`__default__`(一个不存在的 collision)。启动检查
|
||||
robot_description.check_tactile_collisions() 会核对这两个名字,
|
||||
一旦 sdformat 换了命名规则就明确报错。
|
||||
2. 传感器必须挂在**有碰撞体的那个 link** 上(指尖),不是另建空 link。
|
||||
========================================================================= -->
|
||||
<plugin filename="libignition-gazebo6-contact-system.so"
|
||||
name="ignition::gazebo::systems::Contact"/>
|
||||
|
||||
<!-- =========================================================================
|
||||
RealSense D435 —— 眼在手外(俯视工作台)
|
||||
=========================================================================
|
||||
|
||||
Reference in New Issue
Block a user