Rviz启动后未发布相机话题问题咨询,已附对应MoveIt启动文件
问题根因
- 当前启动文件为MoveIt纯演示模式,仅启动了关节状态发布、机器人TF发布、MoveIt规划模块和RViz可视化模块,不存在任何生成相机话题的节点。
robot_state_publisher仅负责发布机器人各连杆的TF变换,不会主动生成图像、点云等相机数据话题。 - Gazebo环境下的相机话题由
gazebo_ros_camera类插件生成,纯RViz模式不会加载Gazebo相关插件,即使URDF中写了Gazebo相机插件配置也不会生效。 - 若URDF未定义相机对应的link、joint坐标系,即使后续添加了相机发布节点,也无法和机器人TF树正常关联。
解决方案
以下方案均不需要启动完整Gazebo环境,可直接在现有启动文件基础上修改:
方案1:发布本地静态图像/实物相机数据
适合仅需要固定图像输入、不需要模拟相机视野随机器人运动变化的场景:
- 安装依赖包:
sudo apt install ros-${ROS_DISTRO}-usb-cam ros-${ROS_DISTRO}-image-publisher - 在现有launch文件末尾添加对应节点配置:
- 若使用本地图片模拟:
<node name="sim_camera_pub" pkg="image_publisher" type="image_publisher_node" output="screen"> <param name="filename" value="$(find new_techman)/config/test_image.jpg" /> <!-- 替换为你的本地图片路径 --> <param name="frame_id" value="camera_link" /> <!-- 替换为URDF中定义的相机连杆名称 --> <param name="publish_rate" value="30" /> <remap from="/image_raw" to="/camera/color/image_raw" /> <!-- 替换为你需要的话题名称 --> </node>
- 若调用本地USB实物相机:
<node name="usb_cam" pkg="usb_cam" type="usb_cam_node" output="screen"> <param name="video_device" value="/dev/video0" /> <param name="frame_id" value="camera_link" /> <remap from="/usb_cam/image_raw" to="/camera/color/image_raw" /> </node>
方案2:使用fake_camera生成仿真测试数据
适合需要相机话题参数完整、且和机器人TF联动的测试场景:
- 安装依赖包:
sudo apt install ros-${ROS_DISTRO}-fake-camera - 在现有launch文件末尾添加节点配置:
<node name="fake_camera" pkg="fake_camera" type="fake_camera_node" output="screen"> <param name="frame_id" value="camera_link" /> <param name="width" value="640" /> <param name="height" value="480" /> <param name="rate" value="30" /> <param name="camera_info_url" value="file://$(find new_techman)/config/camera_info.yaml" /> <!-- 替换为你的相机内参文件路径,无内参文件可删除该参数 --> </node>
该节点会自动发布/camera/image_raw、/camera/camera_info标准话题,帧ID和机器人相机连杆绑定,和真实相机输出格式完全一致。
注意事项
修改前先确认你的机器人URDF中已经添加了相机的link和joint配置,将相机连杆固定到机器人对应安装位置,确保TF树可以正常关联相机坐标系和机器人基坐标系。
内容的提问来源于stack exchange,提问作者Akash
相关产品推荐
相关产品推荐

