如何让Gazebo中创建的相机发布camera_info话题?
在Gazebo中配置相机发布camera_info话题
1. 修改URDF/SDF中的相机插件配置
要让Gazebo相机发布camera_info话题,核心是通过gazebo_ros_camera插件(ROS1/ROS2通用)配置对应参数。以下是URDF和SDF的具体配置示例:
URDF示例
<gazebo reference="camera_link"> <sensor type="camera" name="camera_sensor"> <update_rate>30.0</update_rate> <camera name="head"> <horizontal_fov>1.047</horizontal_fov> <!-- 对应60度视场角 --> <image> <width>640</width> <height>480</height> <format>R8G8B8</format> </image> <clip> <near>0.05</near> <far>100.0</far> </clip> </camera> <plugin name="camera_controller" filename="libgazebo_ros_camera.so"> <camera_name>my_camera</camera_name> <image_topic>/camera/image_raw</image_topic> <camera_info_topic>/camera/camera_info</camera_info_topic> <!-- 关键配置项 --> <frame_name>camera_link</frame_name> <!-- 可选:手动指定内参,不填则Gazebo自动计算 --> <distortion_k1>0.0</distortion_k1> <distortion_k2>0.0</distortion_k2> <distortion_k3>0.0</distortion_k3> <distortion_t1>0.0</distortion_t1> <distortion_t2>0.0</distortion_t2> <intrinsics_matrix> 554.25 0.0 320.0 0.0 554.25 240.0 0.0 0.0 1.0 </intrinsics_matrix> </plugin> </sensor> </gazebo>
SDF示例
<model name="camera_model"> <link name="camera_link"> <sensor name="camera_sensor" type="camera"> <update_rate>30</update_rate> <camera> <horizontal_fov>1.047</horizontal_fov> <image> <width>640</width> <height>480</height> <format>R8G8B8</format> </image> <clip> <near>0.05</near> <far>100</far> </clip> </camera> <plugin name="camera_controller" filename="libgazebo_ros_camera.so"> <camera_name>my_camera</camera_name> <image_topic>/camera/image_raw</image_topic> <camera_info_topic>/camera/camera_info</camera_info_topic> <frame_name>camera_link</frame_name> </plugin> </sensor> </link> </model>
2. 确认依赖包安装
确保ROS环境中已安装gazebo_ros_pkgs:
- ROS1:
sudo apt-get install ros-noetic-gazebo-ros-pkgs(替换noetic为你的ROS版本) - ROS2:
sudo apt-get install ros-humble-gazebo-ros-pkgs(替换humble为你的ROS版本)
3. 验证话题发布
启动Gazebo和机器人模型后,通过以下命令检查:
- ROS1:
rostopic list | grep camera_info rostopic echo /camera/camera_info - ROS2:
ros2 topic list | grep camera_info ros2 topic echo /camera/camera_info
能看到话题并输出包含内参、畸变参数的消息,说明配置成功。
常见问题排查
- 话题未出现:检查插件文件名是否为
libgazebo_ros_camera.so,确认<camera_info_topic>参数已添加,且Gazebo成功加载模型。 - 内参异常:手动指定内参时,确保
intrinsics_matrix数值符合相机实际参数;未指定时,Gazebo会自动计算,可通过camera_info消息验证合理性。 - TF报错:确认
<frame_name>与相机link名称一致,避免坐标系不匹配问题。
内容的提问来源于stack exchange,提问作者Kevin Ortega
相关产品推荐
相关产品推荐

