在Ubuntu 20.04/ROS Noetic上搞定Rotors Simulator:从源码编译到第一个悬停仿真(附常见编译错误解决)
在Ubuntu 20.04/ROS Noetic上部署Rotors Simulator从依赖解析到悬停仿真实战最近在无人机仿真领域Rotors Simulator因其丰富的多旋翼模型和灵活的传感器配置受到开发者青睐。但许多用户在从Ubuntu 16.04/Kinetic迁移到20.04/Noetic环境时常被新版系统的依赖关系和编译问题困扰。本文将带您一步步解决这些新环境老问题。1. 环境准备与依赖安装Noetic作为ROS 1的最终版本其软件包结构与早期Kinetic存在显著差异。我们先配置基础环境sudo apt update sudo apt upgrade -y sudo apt install -y python3-catkin-tools python3-osrf-pycommon关键依赖包清单需要针对Noetic调整依赖类型Kinetic版本Noetic版本调整作用说明核心框架ros-kinetic-desktop-fullros-noetic-desktop-fullROS基础环境工具链python-wstoolpython3-wstool源码管理工具地理信息libgeographic-devlibgeographic-devMAVROS依赖可视化ros-kinetic-octomap-rosros-noetic-octomap-ros3D地图支持特别提醒Gazebo版本从7升级到11需要额外处理sudo apt install -y gazebo11 libgazebo11-dev2. 源码编译与排错指南获取源码后常见的三类编译错误及解决方案2.1 头文件路径问题OGRE相关错误是最典型的版本兼容问题fatal error: OgrePagedWorldSection.h: No such file or directory解决方法是在rotors_gazebo_plugins/CMakeLists.txt中添加include_directories( ${OGRE_INCLUDE_DIRS}/Paging ${OGRE_INCLUDE_DIRS}/Terrain )2.2 MAV_MSGS缺失问题通过以下命令安装必要通信包cd ~/catkin_ws/src git clone https://github.com/ethz-asl/mav_comm.git2.3 Protobuf版本冲突当遇到protobuf相关错误时尝试sudo apt install -y libprotobuf-dev protobuf-compiler export PROTOBUF_PROTOC_EXECUTABLE/usr/bin/protoc3. 仿真启动与验证创建验证用的launch文件hover_test.launchlaunch arg namemodel defaulthummingbird/ include file$(find rotors_gazebo)/launch/spawn_mav.launch arg namemav_name value$(arg model)/ /include node namehover_node pkgrotors_gazebo typehovering_example/ /launch启动命令roslaunch rotors_gazebo hover_test.launch world_name:basic成功运行的三个验证点Gazebo界面正常显示无人机模型终端无错误提示且显示Controller armed消息通过rostopic echo /hummingbird/odometry_sensor1/odometry可查看位姿数据4. 进阶调试技巧4.1 传感器数据可视化添加RVIZ监控配置rosrun rviz rviz -d $(rospack find rotors_gazebo)/rviz/imu_visualization.rviz4.2 控制器参数调整修改lee_controller.yaml关键参数position_gain: 5.0 # 增大可提高响应速度 attitude_gain: 1.5 # 减小可降低震荡4.3 性能优化建议对于复杂场景仿真建议在empty.world基础上逐步添加模型关闭不必要的传感器插件使用arg nameheadless valuetrue/模式进行无界面测试遇到Gazebo崩溃时检查日志中的内存使用情况grep -i memory ~/.gazebo/gzserver.log