Ubuntu 20.04下PX4 1.13与XTDrone版本适配实战指南当你在Ubuntu 20.04上尝试搭建PX4 1.13与XTDrone的仿真环境时版本冲突就像一场没有硝烟的战争。作为一个从Ubuntu 18.04迁移到20.04的头铁开发者我深刻体会过这种痛苦——Python 3与Python 2的纠缠、OpenCV 4与旧版本的兼容性问题最令人头疼的还是Gazebo 9与11的选择困境。本文将分享我在这个过程中的实战经验帮助你避开那些让我熬夜的坑。1. 环境准备选择正确的战场在开始之前我们需要明确一个关键问题为什么Ubuntu 20.04下的PX4与XTDrone适配如此困难核心原因在于版本断层Ubuntu 18.04生态Python 2.7、OpenCV 3、Gazebo 9、ROS MelodicUbuntu 20.04生态Python 3.8、OpenCV 4、Gazebo 11、ROS NoeticXTDrone最初是为Ubuntu 18.04设计的而PX4 1.13则开始拥抱新环境。这种新旧交替的状态导致了各种依赖冲突。1.1 系统基础配置首先确保你的Ubuntu 20.04系统已经更新到最新状态sudo apt update sudo apt upgrade -y然后安装一些基础工具sudo apt install -y git wget curl build-essential cmake python3-pip1.2 Python环境管理由于同时涉及Python 2和Python 3的依赖建议使用virtualenv创建隔离环境sudo apt install -y python3-venv python3 -m venv ~/px4_venv source ~/px4_venv/bin/activate提示在虚拟环境中安装Python包可以避免污染系统Python环境特别是在需要同时满足PX4和XTDrone的不同Python依赖时。2. Gazebo版本抉择9还是11这是整个适配过程中最关键的决策点。经过多次尝试我总结出以下对比特性Gazebo 9Gazebo 11与XTDrone兼容性高官方推荐低需要额外适配与PX4 1.13兼容性中需要修改部分插件高官方默认支持性能表现稳定但较旧新特性多但可能有bug安装复杂度高需手动降级低系统默认最终建议如果你主要使用XTDrone的功能选择Gazebo 9如果以PX4原生功能为主可以考虑Gazebo 11。本文以Gazebo 9方案为例。2.1 卸载Gazebo 11如果你的系统已经安装了Gazebo 11需要彻底卸载sudo apt-get remove gazebo11 libgazebo11-dev gazebo11-common -y sudo apt-get remove ros-noetic-gazebo-* -y sudo apt autoremove -y2.2 安装Gazebo 9添加Gazebo 9的官方仓库sudo sh -c echo deb http://packages.osrfoundation.org/gazebo/ubuntu-stable $(lsb_release -cs) main /etc/apt/sources.list.d/gazebo-stable.list获取密钥并安装wget https://packages.osrfoundation.org/gazebo.key -O - | sudo apt-key add - sudo apt update sudo apt install gazebo9 libgazebo9-dev -y验证安装gazebo --version # 应该显示: gazebo9.x.x3. ROS Noetic与PX4的适配虽然ROS Noetic是Ubuntu 20.04的官方ROS版本但与PX4的配合仍需注意以下几点3.1 安装ROS Noetic按照官方指南安装ROS Noeticsudo sh -c echo deb http://packages.ros.org/ros/ubuntu $(lsb_release -cs) main /etc/apt/sources.list.d/ros-latest.list sudo apt-key adv --keyserver hkp://keyserver.ubuntu.com:80 --recv-key C1CF6E31E6BADE8868B172B4F42ED6FBAB17C654 sudo apt update sudo apt install ros-noetic-desktop-full -y初始化ROS环境echo source /opt/ros/noetic/setup.bash ~/.bashrc source ~/.bashrc3.2 安装MAVROSXTDrone依赖MAVROS进行通信sudo apt install ros-noetic-mavros ros-noetic-mavros-extras -y wget https://gitee.com/robin_shaun/XTDrone/raw/master/sitl_config/mavros/install_geographiclib_datasets.sh chmod x install_geographiclib_datasets.sh sudo ./install_geographiclib_datasets.sh4. PX4 1.13源码处理这里有一个关键决策使用官方源码还是XTDrone修改版我强烈建议使用XTDrone提供的打包版原因如下已经解决了ROS1/ROS2头文件冲突问题包含了必要的插件修改确保与XTDrone其他组件的兼容性4.1 获取PX4源码从XTDrone语雀文档提供的链接下载打包版PX4 1.13源码解压后执行mv PX4-Autopilot ~/PX4_Firmware cd ~/PX4_Firmware git checkout -b xtdrone/dev v1.13.2 git submodule update --init --recursive4.2 解决常见编译问题即使使用打包版编译时仍可能遇到以下问题问题1缺少Eigen3sudo apt install libeigen3-dev -y问题2Python包版本冲突在虚拟环境中安装指定版本pip install numpy1.19.5 empy3.3.4 toml0.10.2 pyyaml5.4.1 jinja22.11.3问题3gazebo_motor_failure.h错误如果遇到ROS2头文件错误确保使用了XTDrone修改过的版本。检查文件// 正确应该是ROS1风格的头文件 #include ros/subscribe_options.h // 而不是ROS2的 // #include rclcpp/rclcpp.hpp4.3 编译PX4make px4_sitl_default gazebo第一次编译可能需要较长时间30分钟以上取决于你的网络和硬件配置。5. XTDrone配置与集成XTDrone的配置是最后也是最重要的一步这里有几个关键操作5.1 获取XTDrone源码git clone https://gitee.com/robin_shaun/XTDrone.git cd XTDrone git checkout 1_13_2 git submodule update --init --recursive5.2 文件替换与整合执行XTDrone提供的文件替换脚本# 复制初始化脚本 cp sitl_config/init.d-posix/* ~/PX4_Firmware/ROMFS/px4fmu_common/init.d-posix/ # 复制launch文件 cp -r sitl_config/launch/* ~/PX4_Firmware/launch/ # 复制世界文件 cp sitl_config/worlds/* ~/PX4_Firmware/Tools/sitl_gazebo/worlds/ # 复制修改过的插件 cp sitl_config/gazebo_plugin/gimbal_controller/gazebo_gimbal_controller_plugin.cpp ~/PX4_Firmware/Tools/sitl_gazebo/src/ cp sitl_config/gazebo_plugin/gimbal_controller/gazebo_gimbal_controller_plugin.hh ~/PX4_Firmware/Tools/sitl_gazebo/include/ cp sitl_config/gazebo_plugin/wind_plugin/gazebo_ros_wind_plugin_xtdrone.cpp ~/PX4_Firmware/Tools/sitl_gazebo/src/ cp sitl_config/gazebo_plugin/wind_plugin/gazebo_ros_wind_plugin_xtdrone.h ~/PX4_Firmware/Tools/sitl_gazebo/include/ # 复制CMakeLists.txt cp sitl_config/CMakeLists.txt ~/PX4_Firmware/Tools/sitl_gazebo/ # 复制模型文件 cp -r sitl_config/models/* ~/PX4_Firmware/Tools/sitl_gazebo/models/5.3 环境变量配置编辑~/.bashrc文件添加以下内容# PX4环境 source ~/PX4_Firmware/Tools/setup_gazebo.bash ~/PX4_Firmware/ ~/PX4_Firmware/build/px4_sitl_default export ROS_PACKAGE_PATH$ROS_PACKAGE_PATH:~/PX4_Firmware export ROS_PACKAGE_PATH$ROS_PACKAGE_PATH:~/PX4_Firmware/Tools/sitl_gazebo # ROS工作空间 source ~/catkin_ws/devel/setup.bash然后执行source ~/.bashrc6. 验证与测试完成所有配置后进行系统验证6.1 启动PX4仿真cd ~/PX4_Firmware roslaunch px4 indoor1.launch如果一切正常你应该能看到Gazebo启动并加载一个室内环境。6.2 测试XTDrone控制在新的终端中cd ~/XTDrone python3 control/keyboard_control.py iris 0这时你应该能够通过键盘控制Gazebo中的无人机。6.3 常见问题排查问题1Gazebo无法启动检查Gazebo版本gazebo --version确保显示的是9.x版本。如果仍有问题尝试删除Gazebo缓存rm -rf ~/.gazebo/问题2ROS话题无法通信检查MAVROS是否正确安装rostopic list | grep mavros应该能看到一系列mavros相关话题。如果没有重新检查MAVROS安装步骤。问题3模型加载失败确保模型文件已正确复制到两个位置ls ~/PX4_Firmware/Tools/sitl_gazebo/models/ ls ~/.gazebo/models/7. 性能优化与进阶配置完成基础配置后可以考虑以下优化7.1 使用多线程编译加快PX4编译速度make px4_sitl_default gazebo -j$(nproc)7.2 禁用不需要的模块编辑PX4 Firmware中的default.cmake文件注释掉不需要的驱动模块可以显著减少编译时间。7.3 图形性能优化对于Gazebo的图形性能可以尝试export LIBGL_ALWAYS_SOFTWARE1或者在启动Gazebo时添加参数gazebo --verbose经过三个周末的反复尝试和失败我终于在Ubuntu 20.04上成功搭建了PX4 1.13与XTDrone的仿真环境。最深的体会是版本选择的一致性比技术本身更重要有时候坚持官方推荐的反而不是最佳方案。希望这篇指南能帮你少走弯路把更多时间花在真正的无人机开发上而不是环境配置上。
Ubuntu20.04下PX4 1.13与XTDrone的版本适配避坑全记录(含Gazebo9/11选择)
发布时间:2026/6/1 2:16:19
Ubuntu 20.04下PX4 1.13与XTDrone版本适配实战指南当你在Ubuntu 20.04上尝试搭建PX4 1.13与XTDrone的仿真环境时版本冲突就像一场没有硝烟的战争。作为一个从Ubuntu 18.04迁移到20.04的头铁开发者我深刻体会过这种痛苦——Python 3与Python 2的纠缠、OpenCV 4与旧版本的兼容性问题最令人头疼的还是Gazebo 9与11的选择困境。本文将分享我在这个过程中的实战经验帮助你避开那些让我熬夜的坑。1. 环境准备选择正确的战场在开始之前我们需要明确一个关键问题为什么Ubuntu 20.04下的PX4与XTDrone适配如此困难核心原因在于版本断层Ubuntu 18.04生态Python 2.7、OpenCV 3、Gazebo 9、ROS MelodicUbuntu 20.04生态Python 3.8、OpenCV 4、Gazebo 11、ROS NoeticXTDrone最初是为Ubuntu 18.04设计的而PX4 1.13则开始拥抱新环境。这种新旧交替的状态导致了各种依赖冲突。1.1 系统基础配置首先确保你的Ubuntu 20.04系统已经更新到最新状态sudo apt update sudo apt upgrade -y然后安装一些基础工具sudo apt install -y git wget curl build-essential cmake python3-pip1.2 Python环境管理由于同时涉及Python 2和Python 3的依赖建议使用virtualenv创建隔离环境sudo apt install -y python3-venv python3 -m venv ~/px4_venv source ~/px4_venv/bin/activate提示在虚拟环境中安装Python包可以避免污染系统Python环境特别是在需要同时满足PX4和XTDrone的不同Python依赖时。2. Gazebo版本抉择9还是11这是整个适配过程中最关键的决策点。经过多次尝试我总结出以下对比特性Gazebo 9Gazebo 11与XTDrone兼容性高官方推荐低需要额外适配与PX4 1.13兼容性中需要修改部分插件高官方默认支持性能表现稳定但较旧新特性多但可能有bug安装复杂度高需手动降级低系统默认最终建议如果你主要使用XTDrone的功能选择Gazebo 9如果以PX4原生功能为主可以考虑Gazebo 11。本文以Gazebo 9方案为例。2.1 卸载Gazebo 11如果你的系统已经安装了Gazebo 11需要彻底卸载sudo apt-get remove gazebo11 libgazebo11-dev gazebo11-common -y sudo apt-get remove ros-noetic-gazebo-* -y sudo apt autoremove -y2.2 安装Gazebo 9添加Gazebo 9的官方仓库sudo sh -c echo deb http://packages.osrfoundation.org/gazebo/ubuntu-stable $(lsb_release -cs) main /etc/apt/sources.list.d/gazebo-stable.list获取密钥并安装wget https://packages.osrfoundation.org/gazebo.key -O - | sudo apt-key add - sudo apt update sudo apt install gazebo9 libgazebo9-dev -y验证安装gazebo --version # 应该显示: gazebo9.x.x3. ROS Noetic与PX4的适配虽然ROS Noetic是Ubuntu 20.04的官方ROS版本但与PX4的配合仍需注意以下几点3.1 安装ROS Noetic按照官方指南安装ROS Noeticsudo sh -c echo deb http://packages.ros.org/ros/ubuntu $(lsb_release -cs) main /etc/apt/sources.list.d/ros-latest.list sudo apt-key adv --keyserver hkp://keyserver.ubuntu.com:80 --recv-key C1CF6E31E6BADE8868B172B4F42ED6FBAB17C654 sudo apt update sudo apt install ros-noetic-desktop-full -y初始化ROS环境echo source /opt/ros/noetic/setup.bash ~/.bashrc source ~/.bashrc3.2 安装MAVROSXTDrone依赖MAVROS进行通信sudo apt install ros-noetic-mavros ros-noetic-mavros-extras -y wget https://gitee.com/robin_shaun/XTDrone/raw/master/sitl_config/mavros/install_geographiclib_datasets.sh chmod x install_geographiclib_datasets.sh sudo ./install_geographiclib_datasets.sh4. PX4 1.13源码处理这里有一个关键决策使用官方源码还是XTDrone修改版我强烈建议使用XTDrone提供的打包版原因如下已经解决了ROS1/ROS2头文件冲突问题包含了必要的插件修改确保与XTDrone其他组件的兼容性4.1 获取PX4源码从XTDrone语雀文档提供的链接下载打包版PX4 1.13源码解压后执行mv PX4-Autopilot ~/PX4_Firmware cd ~/PX4_Firmware git checkout -b xtdrone/dev v1.13.2 git submodule update --init --recursive4.2 解决常见编译问题即使使用打包版编译时仍可能遇到以下问题问题1缺少Eigen3sudo apt install libeigen3-dev -y问题2Python包版本冲突在虚拟环境中安装指定版本pip install numpy1.19.5 empy3.3.4 toml0.10.2 pyyaml5.4.1 jinja22.11.3问题3gazebo_motor_failure.h错误如果遇到ROS2头文件错误确保使用了XTDrone修改过的版本。检查文件// 正确应该是ROS1风格的头文件 #include ros/subscribe_options.h // 而不是ROS2的 // #include rclcpp/rclcpp.hpp4.3 编译PX4make px4_sitl_default gazebo第一次编译可能需要较长时间30分钟以上取决于你的网络和硬件配置。5. XTDrone配置与集成XTDrone的配置是最后也是最重要的一步这里有几个关键操作5.1 获取XTDrone源码git clone https://gitee.com/robin_shaun/XTDrone.git cd XTDrone git checkout 1_13_2 git submodule update --init --recursive5.2 文件替换与整合执行XTDrone提供的文件替换脚本# 复制初始化脚本 cp sitl_config/init.d-posix/* ~/PX4_Firmware/ROMFS/px4fmu_common/init.d-posix/ # 复制launch文件 cp -r sitl_config/launch/* ~/PX4_Firmware/launch/ # 复制世界文件 cp sitl_config/worlds/* ~/PX4_Firmware/Tools/sitl_gazebo/worlds/ # 复制修改过的插件 cp sitl_config/gazebo_plugin/gimbal_controller/gazebo_gimbal_controller_plugin.cpp ~/PX4_Firmware/Tools/sitl_gazebo/src/ cp sitl_config/gazebo_plugin/gimbal_controller/gazebo_gimbal_controller_plugin.hh ~/PX4_Firmware/Tools/sitl_gazebo/include/ cp sitl_config/gazebo_plugin/wind_plugin/gazebo_ros_wind_plugin_xtdrone.cpp ~/PX4_Firmware/Tools/sitl_gazebo/src/ cp sitl_config/gazebo_plugin/wind_plugin/gazebo_ros_wind_plugin_xtdrone.h ~/PX4_Firmware/Tools/sitl_gazebo/include/ # 复制CMakeLists.txt cp sitl_config/CMakeLists.txt ~/PX4_Firmware/Tools/sitl_gazebo/ # 复制模型文件 cp -r sitl_config/models/* ~/PX4_Firmware/Tools/sitl_gazebo/models/5.3 环境变量配置编辑~/.bashrc文件添加以下内容# PX4环境 source ~/PX4_Firmware/Tools/setup_gazebo.bash ~/PX4_Firmware/ ~/PX4_Firmware/build/px4_sitl_default export ROS_PACKAGE_PATH$ROS_PACKAGE_PATH:~/PX4_Firmware export ROS_PACKAGE_PATH$ROS_PACKAGE_PATH:~/PX4_Firmware/Tools/sitl_gazebo # ROS工作空间 source ~/catkin_ws/devel/setup.bash然后执行source ~/.bashrc6. 验证与测试完成所有配置后进行系统验证6.1 启动PX4仿真cd ~/PX4_Firmware roslaunch px4 indoor1.launch如果一切正常你应该能看到Gazebo启动并加载一个室内环境。6.2 测试XTDrone控制在新的终端中cd ~/XTDrone python3 control/keyboard_control.py iris 0这时你应该能够通过键盘控制Gazebo中的无人机。6.3 常见问题排查问题1Gazebo无法启动检查Gazebo版本gazebo --version确保显示的是9.x版本。如果仍有问题尝试删除Gazebo缓存rm -rf ~/.gazebo/问题2ROS话题无法通信检查MAVROS是否正确安装rostopic list | grep mavros应该能看到一系列mavros相关话题。如果没有重新检查MAVROS安装步骤。问题3模型加载失败确保模型文件已正确复制到两个位置ls ~/PX4_Firmware/Tools/sitl_gazebo/models/ ls ~/.gazebo/models/7. 性能优化与进阶配置完成基础配置后可以考虑以下优化7.1 使用多线程编译加快PX4编译速度make px4_sitl_default gazebo -j$(nproc)7.2 禁用不需要的模块编辑PX4 Firmware中的default.cmake文件注释掉不需要的驱动模块可以显著减少编译时间。7.3 图形性能优化对于Gazebo的图形性能可以尝试export LIBGL_ALWAYS_SOFTWARE1或者在启动Gazebo时添加参数gazebo --verbose经过三个周末的反复尝试和失败我终于在Ubuntu 20.04上成功搭建了PX4 1.13与XTDrone的仿真环境。最深的体会是版本选择的一致性比技术本身更重要有时候坚持官方推荐的反而不是最佳方案。希望这篇指南能帮你少走弯路把更多时间花在真正的无人机开发上而不是环境配置上。