运行gazebo_iris_opt_flow时PX4无人机相机无ROS话题输出问题
问题排查与解决方案
核心问题定位
你的操作流程存在两个关键错误,导致相机话题未发布:
- 仿真启动命令重复,创建了多个冲突的SITL实例
gazebo_iris_opt_flow模型默认未配置RGB相机的ROS话题发布
具体修复步骤
1. 修正仿真启动流程
当前先执行make px4_sitl_default gazebo_iris_opt_flow再执行roslaunch px4 posix_sitl.launch的操作,会启动两个独立的SITL实例,导致Mavros连接的实例与Gazebo显示实例不一致,且环境变量配置被覆盖。正确流程如下:
- 先清理残留进程:
killall px4 gzserver gzclient - 切换到PX4源码目录,执行单条命令启动仿真并配置ROS环境:
注意:不要重复执行cd ~/PX4-Autopilot # 替换为你的PX4源码路径 make px4_sitl_default gazebo_iris_opt_flow source ~/catkin_ws/devel/setup.bash source Tools/simulation/gazebo/setup_gazebo.bash $(pwd) $(pwd)/build/px4_sitl_default export ROS_PACKAGE_PATH=$ROS_PACKAGE_PATH:$(pwd):$(pwd)/Tools/simulation/gazebo/sitl_gazeboroslaunch px4 posix_sitl.launch,make命令已完成SITL与Gazebo的启动。
2. 启用RGB相机话题发布
gazebo_iris_opt_flow模型默认仅加载光流相机,未配置RGB相机的ROS话题输出,需修改模型配置文件:
- 打开模型配置文件:
nano Tools/simulation/gazebo/sitl_gazebo/models/iris_opt_flow/iris_opt_flow.sdf - 在光流相机配置块(
<sensor name="camera" type="camera">)后,添加以下RGB相机配置:<sensor name="rgb_camera" type="camera"> <pose>0.05 0 0.1 0 0 0</pose> <camera name="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"> <ros> <namespace>iris</namespace> <remapping>image_raw:=camera/rgb/image_raw</remapping> <remapping>camera_info:=camera/rgb/camera_info</remapping> </ros> <update_rate>30</update_rate> </plugin> </sensor> - 保存文件后重启仿真,执行
rostopic list即可看到/iris/camera/rgb/image_raw话题。
3. 验证代码与话题兼容性
- 用
rostopic echo /iris/camera/rgb/image_raw确认话题有数据输出 - 检查Python代码中的话题名称是否为
/iris/camera/rgb/image_raw(ROS话题为全局命名空间,需带开头斜杠,避免受节点命名空间影响) - 确认代码订阅的消息类型为
sensor_msgs/Image,回调函数能正确解析图像数据
额外注意事项
- Mavros启动命令需在仿真启动后执行,确保连接正确的SITL实例:
roslaunch mavros px4.launch fcu_url:="udp://:14540@192.168.1.36:14557" - 若仍无法看到话题,检查Gazebo终端输出是否有相机插件加载错误(如找不到
libgazebo_ros_camera.so),可安装对应版本的Gazebo ROS包:sudo apt install ros-noetic-gazebo-ros-pkgs # 替换为你的ROS版本,如melodic/rolling
内容的提问来源于stack exchange,提问作者user19726663
相关产品推荐
相关产品推荐

