在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-full | ros-noetic-desktop-full | ROS基础环境 |
| 工具链 | python-wstool | python3-wstool | 源码管理工具 |
| 地理信息 | libgeographic-dev | libgeographic-dev | MAVROS依赖 |
| 可视化 | ros-kinetic-octomap-ros | ros-noetic-octomap-ros | 3D地图支持 |
特别提醒: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.launch:
<launch> <arg name="model" default="hummingbird"/> <include file="$(find rotors_gazebo)/launch/spawn_mav.launch"> <arg name="mav_name" value="$(arg model)"/> </include> <node name="hover_node" pkg="rotors_gazebo" type="hovering_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 name="headless" value="true"/>模式进行无界面测试
遇到Gazebo崩溃时,检查日志中的内存使用情况:
grep -i memory ~/.gazebo/gzserver.log