当前位置: 首页 > news >正文

在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-dev

2. 源码编译与排错指南

获取源码后,常见的三类编译错误及解决方案:

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.git

2.3 Protobuf版本冲突

当遇到protobuf相关错误时,尝试:

sudo apt install -y libprotobuf-dev protobuf-compiler export PROTOBUF_PROTOC_EXECUTABLE=/usr/bin/protoc

3. 仿真启动与验证

创建验证用的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

成功运行的三个验证点:

  1. Gazebo界面正常显示无人机模型
  2. 终端无错误提示且显示"Controller armed"消息
  3. 通过rostopic echo /hummingbird/odometry_sensor1/odometry可查看位姿数据

4. 进阶调试技巧

4.1 传感器数据可视化

添加RVIZ监控配置:

rosrun rviz rviz -d $(rospack find rotors_gazebo)/rviz/imu_visualization.rviz

4.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
http://www.jsqmd.com/news/693549/

相关文章:

  • 让你的ThinkBook 14+在Ubuntu下火力全开:加装AX210网卡、升级1T固态与指纹模块实战
  • 上海留学机构选择不踩坑技巧
  • Qwen3.5-4B-AWQ实操手册:WebUI界面导出对话历史+JSON格式保存
  • Claude Code GitHub Actions 使用指南
  • Weka机器学习平台入门与实践指南
  • 【会议征稿通知 | xx主办 | xxx出版 | EI 、Scopus稳定检索】第二届机电一体化、机器人与人工智能国际学术会议(MRAI 2026)
  • 上海创赢建筑科技:上海围挡租赁公司 - LYL仔仔
  • 告别杂乱文件夹:我是如何用tinyMediaManager给群晖里的老电影批量‘换脸’的
  • 手把手教你为GD32F103移植FreeRTOS:从SysTick时基配置到任务调度实战
  • 专注复杂婚姻家事案 梁聪律师团队实战履历解析 - 律界观察
  • 别再死记硬背了!用ENSP模拟器5分钟搞懂华为网络设备全家桶(路由器/交换机/防火墙)
  • 家庭组网避坑指南:为什么你家的WiFi总卡?可能是路由器模式没选对(802.11b/g/n/ac混合模式详解)
  • 如何快速掌握岛屿设计:智能规划工具完整指南
  • NLP序列生成:贪婪搜索与束搜索解码器详解
  • 2026北京老房翻新避坑指南:5大核心环节+3大痛点解决方案 - 速递信息
  • 三步解锁终极游戏性能:DLSS Swapper让你的显卡发挥全部潜力
  • 考研复试机试翻车实录:从VS2010环境配置到文件读写,我踩过的那些坑
  • 泉州鼎盛拆除:泉州学校拆除公司 - LYL仔仔
  • 告别手动配置!Spring Boot 2.x + Druid Starter一键集成PostgreSQL监控(含监控页面安全加固)
  • 别再只改颜色了!用QSS的background属性组合,让你的Qt按钮背景瞬间高级起来
  • 4.20课后作业2
  • 告别ResNet的显存焦虑:用RepVGG重参数化,让你的模型推理又快又省
  • 上海湘峰图文制作:上海包装礼盒定制企业 - LYL仔仔
  • 告别虚拟机!用Code::Blocks+MinGW在Win10/Win11上快速玩转LVGL官方Demo
  • Canmv K230实战:从MNIST模型训练到端侧部署全流程解析
  • 惠州哪个口腔医院比较好 - 舒雯文化
  • 【ROS2笔记四】ROS2功能包的依赖管理与接口设计
  • 淮南市劳美劳务:淮南下水管道改造公司 - LYL仔仔
  • 从‘黑箱’到‘白盒’:手把手教你用Alibi Explain把模型解释部署到生产环境(集成Seldon Core/KFServing)
  • 异构计算集群中RTT预测与资源调度优化实践