如何用lbr_fri_ros2_stack在ROS2 Humble的Gazebo中模拟KUKA iiwa14力扭矩数据
一、修复机器人未加载到Gazebo的问题
你当前的launch文件存在两个关键问题导致机器人无法加载:
硬编码xacro路径不可靠
替换绝对路径为基于包的相对路径,避免环境变化导致路径失效:robot_description_content = ParameterValue( Command([ "xacro ", PathJoinSubstitution([ FindPackageShare("lbr_description"), "urdf/iiwa14/iiwa14.xacro" ]), " mode:=gazebo" ]), value_type=str )robot_description话题命名空间不匹配
你的robot_state_publisher在lbr命名空间下发布robot_description,但spawn节点默认监听全局话题,需指定完整话题路径:Node( package='ros_gz_sim', executable='create', output='screen', arguments=[ '-name', LaunchConfiguration("robot_name"), '-topic', '/lbr/robot_description', # 加上命名空间 '-z', '0.1' ] )
修改后重新启动launch文件,机器人应该能正常加载到Gazebo空世界中。
二、配置模拟力扭矩传感器(两种方案)
要让/lbr/force_torque_broadcaster/wrench输出模拟数据,推荐以下两种方案:
方案1:复用ros2_control控制器(与硬件逻辑一致)
这种方案和真实硬件的工作流程完全对齐,无需额外桥接:
在ros2_control配置中添加FT传感器插件
找到lbr_description中对应ros2_control的xacro文件(如iiwa14_ros2_control.xacro),添加传感器配置:<sensor name="force_torque_sensor" type="force_torque"> <plugin>ros2_control_ft_sensor/FTSensor</plugin> <param name="frame_id">${robot_name}_link_ee</param> <param name="update_rate">200</param> </sensor>添加force_torque_broadcaster控制器配置
在lbr_bringup/config/controllers.yaml中添加:force_torque_broadcaster: ros__parameters: type: force_torque_sensor_broadcaster/ForceTorqueSensorBroadcaster sensor_name: force_torque_sensor frame_id: iiwa14_link_ee在launch文件中启动该控制器
在Controllers部分添加:force_torque_broadcaster = LBRROS2ControlMixin.node_controller_spawner( controller="force_torque_broadcaster" ) ld.add_action(force_torque_broadcaster)
方案2:Gazebo原生传感器+话题桥接
如果你更倾向于用Gazebo原生传感器,需添加桥接节点将Gazebo话题转成ROS2目标话题:
保留你添加的Gazebo传感器配置
确保${robot_name}_link_ee是已存在的末端link(不要重复定义空link)。在launch文件中添加ros_gz_bridge节点
将Gazebo输出的FT数据桥接到目标话题:ld.add_action(Node( package='ros_gz_bridge', executable='parameter_bridge', arguments=[ '/iiwa14/ft_sensor/force_torque@sensor_msgs/msg/Wrench@ignition.msgs.Wrench', '--ros-args', '--remap', '/iiwa14/ft_sensor/force_torque:/lbr/force_torque_broadcaster/wrench' ], output='screen' ))注意:Gazebo传感器的话题默认格式为
/模型名/传感器名/force_torque,需根据你的机器人名称调整前缀。
三、验证
完成配置后,重启launch文件,运行:
ros2 topic echo /lbr/force_torque_broadcaster/wrench
即可看到模拟的力扭矩数据。
内容的提问来源于stack exchange,提问作者Maha Tri

