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

避坑指南:在Ubuntu 20.04上为PX4 1.13和XTDrone手动降级安装Gazebo 9(附完整依赖清单)

避坑指南:在Ubuntu 20.04上为PX4 1.13和XTDrone手动降级安装Gazebo 9(附完整依赖清单)

当你在Ubuntu 20.04上尝试运行基于PX4 1.13和XTDrone的无人机仿真时,可能会遇到一个棘手的问题:系统默认安装的Gazebo 11与许多遗留算法和早期教程不兼容。本文将带你一步步解决这个版本冲突问题,从彻底卸载Gazebo 11到成功安装并配置Gazebo 9,同时提供一份经过验证的完整依赖包清单,帮助你避开那些容易忽视的"隐性依赖缺失"陷阱。

1. 为什么需要降级到Gazebo 9?

Ubuntu 20.04默认搭载的是Gazebo 11,而许多现有的PX4仿真环境和XTDrone教程都是基于Gazebo 9开发的。这种版本差异会导致以下典型问题:

  • 插件兼容性问题:Gazebo 11的API与Gazebo 9有显著差异,导致许多为Gazebo 9开发的插件无法正常工作
  • 模型渲染差异:同一模型在不同Gazebo版本中可能呈现不同的物理特性和视觉效果
  • ROS接口变更:gazebo_ros插件在不同版本间的接口变化会影响与PX4的通信

关键决策点:虽然XTDrone最新文档已开始支持Gazebo 11,但如果你需要:

  • 复现早期研究成果
  • 使用特定版本的算法
  • 遵循某些尚未更新的教程 那么降级到Gazebo 9仍然是更稳妥的选择。

2. 彻底卸载Gazebo 11

在安装Gazebo 9之前,必须确保系统完全清除Gazebo 11及其相关组件。不彻底的卸载会导致后续安装出现难以诊断的冲突问题。

执行以下命令序列进行完整卸载:

# 移除所有Gazebo 11相关包 sudo apt-get remove gazebo11* libgazebo11* ros-noetic-gazebo-ros* -y # 清理残留配置和依赖 sudo apt-get autoremove -y sudo apt-get purge gazebo* libgazebo* -y # 删除可能存在的用户配置文件 rm -rf ~/.gazebo/

注意:执行完上述命令后,建议重启系统以确保所有变更生效。重启后可以通过运行gazebo命令验证是否已完全卸载——如果系统提示"command not found",则说明卸载成功。

3. 安装Gazebo 9及其核心依赖

Ubuntu 20.04的官方仓库不再直接提供Gazebo 9的二进制包,我们需要手动添加OSRF的旧版仓库。

3.1 添加Gazebo 9软件源

# 添加Gazebo 9稳定版仓库 sudo sh -c 'echo "deb http://packages.osrfoundation.org/gazebo/ubuntu-stable bionic main" > /etc/apt/sources.list.d/gazebo-stable.list' # 导入仓库密钥 wget https://packages.osrfoundation.org/gazebo.key -O - | sudo apt-key add - # 更新软件包索引 sudo apt-get update

3.2 安装Gazebo 9主程序

安装基础包和开发库:

sudo apt-get install gazebo9 libgazebo9-dev -y

验证安装是否成功:

gazebo --version # 应输出: gazebo9.x.x

3.3 安装必要依赖项

以下是经过验证的完整依赖清单,包含PX4 1.13和XTDrone所需的全部组件:

# 基础编译工具和库 sudo apt install ninja-build protobuf-compiler libeigen3-dev genromfs \ xmlstarlet libgstreamer1.0-dev libgstreamer-plugins-base1.0-dev \ python3-pip gawk -y # Python依赖(注意使用pip3) pip3 install pandas jinja2 pyserial cerberus pyulog==0.7.0 \ numpy toml pyquaternion empy pyyaml packaging # ROS Noetic相关依赖 sudo apt install ros-noetic-moveit-msgs ros-noetic-object-recognition-msgs \ ros-noetic-octomap-msgs ros-noetic-camera-info-manager \ ros-noetic-control-toolbox ros-noetic-polled-camera \ ros-noetic-controller-manager ros-noetic-transmission-interface \ ros-noetic-joint-limits-interface -y

4. 编译定制版gazebo_ros插件

XTDrone使用了一些修改过的gazebo_ros插件,这些插件需要从源码编译安装。

4.1 创建工作空间

mkdir -p ~/catkin_ws/src cd ~/catkin_ws catkin init

4.2 获取并编译插件源码

将XTDrone提供的修改版gazebo_ros_pkg复制到工作空间:

cp -r ~/XTDrone/sitl_config/gazebo_ros_pkg ~/catkin_ws/src/

编译工作空间:

cd ~/catkin_ws catkin build

将工作空间添加到环境变量:

echo "source ~/catkin_ws/devel/setup.bash" >> ~/.bashrc source ~/.bashrc

5. 配置PX4 1.13与XTDrone环境

5.1 PX4固件配置

cd ~/PX4-Autopilot make px4_sitl_default gazebo

如果编译过程中出现依赖缺失错误,根据终端提示安装相应包。常见缺失包包括:

sudo apt install libopencv-dev libboost-all-dev libtinyxml2-dev -y

5.2 环境变量设置

~/.bashrc末尾添加以下内容:

# PX4环境设置 source ~/PX4-Autopilot/Tools/setup_gazebo.bash ~/PX4-Autopilot ~/PX4-Autopilot/build/px4_sitl_default # ROS包路径 export ROS_PACKAGE_PATH=$ROS_PACKAGE_PATH:~/PX4-Autopilot export ROS_PACKAGE_PATH=$ROS_PACKAGE_PATH:~/PX4-Autopilot/Tools/sitl_gazebo

应用变更:

source ~/.bashrc

6. 常见问题解决方案

在实际操作中,你可能会遇到以下典型问题:

6.1 Gazebo启动时模型缺失

解决方法:手动下载并安装Gazebo模型库

mkdir -p ~/.gazebo/models wget http://file.ncnynl.com/ros/gazebo_models.txt wget -i gazebo_models.txt -P ~/.gazebo/models/

6.2 编译PX4时出现头文件错误

典型错误示例:

PX4-Autopilot/Tools/sitl_gazebo/include/gazebo_motor_failure.h:32:10: fatal error: rclcpp/rclcpp.hpp: No such file or directory

解决方案:使用XTDrone提供的修改版文件替换原始文件:

cp ~/XTDrone/sitl_config/gazebo_plugin/gimbal_controller/* ~/PX4-Autopilot/Tools/sitl_gazebo/

6.3 ROS话题通信失败

检查步骤:

  1. 确保roscore已运行
  2. 验证环境变量设置正确
  3. 检查rosnode listrostopic list输出是否正常

7. 完整依赖清单参考

为方便查阅,以下是所有必要依赖的分类整理:

类别包名称备注
基础工具ninja-build, protobuf-compiler编译系统必需
数学库libeigen3-dev矩阵运算核心
Python工具python3-pip, gawk脚本处理
ROS插件ros-noetic-moveit-msgs运动规划支持
Gazebo组件libgazebo9-dev开发头文件
视觉处理libopencv-dev传感器数据处理

在实际项目中,这套配置已经成功支持了以下典型应用场景:

  • 多机协同仿真
  • 复杂传感器模拟(激光雷达、摄像头等)
  • 基于视觉的自主导航算法测试
http://www.gsyq.cn/news/1449129.html

相关文章:

  • 【RHCA+】figlet命令(生成艺术字)
  • Ambari3.0集成Flink 1.20+Paimon1.4
  • 别慌!Ubuntu开机卡在/dev/sda4: clean界面?手把手教你用Recovery Mode清理磁盘空间
  • 2026 年成都性价比高的旅游机构推荐:官方深度精选报告 - 13724980961
  • 国内直连 Claude Code 保姆级教程:从 Node.js 安装到 API 配置,亲测跑通(附常见问题解决)
  • 告别‘炼丹’:从Mamba-minimal入手,亲手调参并可视化SSM的状态变化
  • 智能家居自动化:从核心架构到实战部署的完整指南
  • 解锁ARM设备远程控制新范式:RDP Wrapper的技术实现与创新应用
  • Ollama 本地跑开源模型:开发者最小上手命令与环境备忘
  • cubase15 R2R最新完整一键安装版本下载安装cubase 15最新版本下载安装支持Win/Mac 双系统版本加104G原厂音源Mac系统不关SIP安装Mac Cubase15.0.10编曲软件
  • Windows环境下CP/M BIOS定制:从环境搭建到源码修改实战
  • Windows HEIC缩略图终极解决方案:5分钟让iPhone照片在资源管理器完美预览
  • 计量室工业仪表IP分配记录
  • Windows风扇控制终极指南:Fan Control完全配置与优化教程
  • 【字节跳动】「第四篇」山西大同太行算力中心全套设备及能耗安保弱电完整详单
  • AI工具链统一纳管实战手册(从零构建可信模型注册中心)
  • 终极免费MP4视频修复工具:如何从损坏文件中拯救珍贵记忆
  • 2026 企业软件开发新风向: AI+原生代码平台快速迭代
  • 【真实经验分享】PDB未按预期时间执行自动统计信息收集问题分析
  • 微信聊天记录永久保存终极指南:WeChatMsg开源工具完全教程
  • AI Agent:不是预测器,而是决胜市场的“决策操作系统”!提升信息处理、决策一致性,降低人为误差!
  • 【触想智能】工业安卓平板电脑在物流运输行业的应用特点与发展趋势
  • 终极B站广告跳过指南:小电视空降助手完整使用教程
  • 有支持多业务单位切换的ITSM平台吗?企业选型解析
  • W55RP20芯片 CircuitPython 实战 (1):快速完成静态IP联网测试
  • 2026年在线SS分析仪十大品牌推荐|国产替代核心力量与选型实战全解析 - 液体流量液位品牌推荐
  • TypeScript 编程:实现 Fibonacci 序列与阶乘类型计算
  • PingFangSC字体包:跨平台字体一致性解决方案技术指南
  • 从“拼图式采购“到“全域闭环“:2026年GEO监测工具终极选型指南
  • 2026年济南钻戒回收实用科普:素军奢品汇钻石回收闲置处置参考文稿 - GrowthUME