# ============================================================================= # devices/sim/gazebo/config/wrist_ft.yaml # # 仿真腕部力扭矩传感器(wrist force/torque)的话题与口径。 # sim_wrist_ft.py、gazebo_sim.launch.py 从这里读;改这里不用重编译。 # # 真机的对应物:Flexiv 的 flexiv_robot_states_broadcaster 自动发 # //ft_sensor_wrench geometry_msgs/msg/WrenchStamped(法兰系) # 不需要任何配置 —— 它在真机 bringup 里无条件启动。 # # ----------------------------------------------------------------------------- # 为什么仿真与真机能共用一套判据(这与触觉**相反**) # ----------------------------------------------------------------------------- # 手指触觉(tactile.yaml)两边单位不同,所以阈值必须各配一套;腕部 FT 不同: # # 真机 ft_sensor_wrench 单位就是牛顿,坐标系是法兰系。 # 仿真 force_torque 传感器单位也是牛顿,挂 joint7 取 child(link7) 系, # 而 link7 的 z 轴 = 工具轴(工具竖直朝下时即竖直方向)。 # # 于是两边的"z 分量"都是**轴向力,单位牛顿** —— 公式一致,只有具体阈值 # 可以按现场标定分开配(见 site.yaml 的 gauge_assembly.contact_axial_delta)。 # # ⚠️ 与触觉一样,这也是一处"选错不报错"的口径:口径错了只会表现为 # "判据不触发"或"一碰就炸",看起来像算法问题。 # ----------------------------------------------------------------------------- # gz 侧话题名。**必须与应用层按 sn 推出来的名字一致**: # 应用层算 f"/{sn}/ft_sensor_wrench",仿真臂 sn = "sim" # ⇒ /sim/ft_sensor_wrench # 改 sn(config/site.yaml 的 robot.arms[sim])时必须同步改这里。 # 也同时写死在 arm.sim.sensors.xacro 的 wrist_ft_topic 默认值里 —— 两处 # 必须一致,check_sim_wrist_ft.py 会核对 xacro 展开结果里有没有这个话题。 topic: "/sim/ft_sensor_wrench" # 挂载关节。改这里必须同步改 arm.sim.sensors.xacro 里的 。 # 为什么是 joint7 见 xacro 里那段注释(不能挂 fixed 关节:物理引擎不把它当 # 独立关节求解,传感器永远没输出且不报错)。 joint: "sim_joint7" # 期望消息类型(ROS 侧)。gz.msgs.Wrench → WrenchStamped 由 ros_gz_bridge # 直接支持(实测确认,无需中间适配器节点)。 # # 为什么是 WrenchStamped 而不是 Wrench:真机发的就是 WrenchStamped。 # 类型一致,应用层才能不加分支地两边通用。 ros_type: "geometry_msgs/msg/WrenchStamped" gz_type: "gz.msgs.Wrench" # 传感器输出率 [Hz]。与真机 broadcaster 对齐(100Hz)。 # 下游按"数据够不够新"判活,率太低会被误判成掉线。 publish_hz: 100.0