Ubuntu搭建PX4无人机仿真环境(5) —— 仿真环境搭建(以Ubuntu 22.04,ROS2 Humble,Micro XRCE-DDS Agent为例)
目录
前言
本教程基于 ROS2 ,在搭建之前,需要把 ROS2、QGC 等基础环境安装配置完成。但是这块的资料相比较于 ROS1 下的少很多,不利于快速上手和后期开发,小白慎选!
小白必看:👇👇👇👇👇👇👇
本次安装是以px4 v1.14.0为例,不适用之前的 px4 版本。
我的配置如下:
虚拟机Ubuntu 22.04(运行内存 4G、硬盘内存 80G) 、ROS2 Humble、QGC
- 禁止无脑复制:首先大部分命令都有先后顺序,就是要上一个命令执行成下一个才能执行成功,对于不熟悉的命令可以直接复制问
AI这样还能顺带学习学习;其次在有些情况下多个命令一起执行会出现奇怪的错误,而且有些命令旁边有注释,有时候复制上去可能也会出现错误。- 建议使用虚拟机:虽然虚拟机得性能有限,但是对于新手入门阶段是完全够用了,后续大型仿真再用双系统也比较熟悉了。而且虚拟机有一个快照功能,可以保存当前虚拟机的状态 (相当于存档),这样如果后面出了问题要重新搭建环境,可以用快照回到上一个状态,这样就不用重头开始(我一般是安装好 ROS 拍一个、安装好 mavros 拍一个…)。
- 关于网络:由于一些懂得都得的原因,再加上每个人的网络环境不同,我们下载 GitHub上的资源、安装 Python 包、apt 安装包等会时快时慢,所以大家会换源,比如一开始的换 apt 软件安装源等。但是下载资源一定要耐心,如果是网络问题,可以尝试多执行几次命令,而且有些我也给了相应的解决方案。
基于 ROS2 的 PX4 仿真环境搭建系列: 👇👇👇
建议安装之前可以先看看这个 👉 ubuntu搭建PX4无人机仿真环境(1) —— 概念介绍
Ubuntu安装ROS(2) —— 安装ROS2 humble(最新、超详细图文教程,包含配置rosdep)-CSDN博客
ubuntu搭建PX4无人机仿真环境(1) —— 概念介绍_Tfly__的博客-CSDN博客
ubuntu搭建PX4无人机仿真环境(3) —— ubuntu安装QGC地面站_Tfly__的博客-CSDN博客
ROS1 请看 👇👇👇
ubuntu搭建PX4无人机仿真环境(4) —— 仿真环境搭建、基于ROS1-CSDN博客
如果想要自己编译 PX4 固件可以看 Ubuntu编译PX4固件 这篇教程
1. 准备
1.1 下载 PX4 源码
方式一:
从 Github 上下载,但是比较考验个人网速
sudo apt install git
下载并切换版本:
git clone https://github.com/PX4/PX4-Autopilot.git # 下载源码
mv PX4-Autopilot PX4_Firmware # 更改目录名
cd PX4_Firmware
git checkout v1.14.0 # 切换版本
更新子模块:
git submodule update --init --recursive # 更新下载子模块
方式二:
从提供的网盘里下载,或者从QQ群(961297255)里下载
链接: https://pan.baidu.com/s/1MJWtK8XkLsdzvJKrpCMz6Q
提取码: rbrk
下载后解压,然后执行下面命令:
cd PX4_Firmware
wget https://gitee.com/tyx6/mytools/raw/main/px4/set_executable.sh
chmod +x set_executable.sh
./set_executable.sh

1.2 安装仿真依赖
sudo apt install ros-dev-tools
cd ~/PX4_Firmware/Tools/setup
修改文件并备份 (就把 pip 安装源换成了清华源),这一步是可做可不做,如果觉得python 包下载太慢了,可以试试
sed -i.bak 's|\/requirements.txt|\/requirements.txt -i https:\/\/pypi.tuna.tsinghua.edu.cn\/simple|' ./ubuntu.sh
chmod +x ubuntu.sh
./ubuntu.sh --no-nuttx --no-sim-tools
# 这是官方提供的脚本 有两个可选参数
# --no-sim-tools 不安装仿真环境
# --no-nuttx 不安装交叉编译环境
#(如果需要自己编译飞控固件,烧录到飞控中,那就需要交叉编译环境)
# 脚本执行时间,跟个人网络有关,可能需要一段时间
安装完成后,重启 Ubuntu
1.3 安装 Gazebo
Gazebo是一款强大的3D仿真软件,主要用于机器人学的研究和开发。它提供了高度逼真的物理模拟环境,包括动力学、碰撞检测、传感器模型以及与真实世界相似的物理属性如重力、摩擦力等。Gazebo可以模拟各种类型的机器人,从移动机器人、无人机到机械臂,甚至可以模拟整个城市环境。
根据上图说明,Gazebo 官方做了更新将之前的 Gazebo Ignition 命名为 Gazebo,以前的 Gazebo 现在叫 Gazebo Classic ,而 Ubuntu 22.04 及以后的版本就支持 Gazebo (Gazebo Ignition) 。
因为几年前官方对 Gazebo 进行了重大架构变更,然后将变更后的版本叫 Gazebo Ignition,旧的仍叫 Gazebo。后面Gazebo Ignition 逐渐成熟并经过使用验证,所以他结束了旧的 Gazebo ( Gazebo 11 是 Gazebo Classic 的最后一个版本,支持到 2025 年 ),并重新对它们命了名。而且两个应该不能共存,安装一个会卸载另一个。
cd ~/PX4_Firmware/Tools/setup
./ubuntu.sh --no-nuttx
# 这一步会安装仿真环境依赖,包括 gazebo
# 脚本执行时间,跟个人网络有关
再运行一下 gazebo :
gz sim

成功后再重启 Ubuntu
2. 安装 Micro XRCE-DDS Agent

在 ROS2 中 PX4 使用 uXRCE-DDS 中间件来允许在配套计算机上发布和订阅 uORB 消息,就像它们是 ROS2 话题一样。这提供了 PX4 和 ROS2 之间快速可靠的集成,并使 ROS2 应用程序更容易获取车辆信息和发送命令,如上图所示。(来自官方文档说明)
这应该跟 ROS2 将中间件改为 DDS 有关,但是官方又说明了在 ROS2 中仍可以使用 MAVROS ,可能官方觉得在 ROS2 中 Micro XRCE-DDS Agent 更好用 😂,也可能是因为 MAVLink 是外部通信协议,uORB 是内部通信协议。
注:如果想用 Mavros 请参考这篇文章 👉 ubuntu搭建PX4无人机仿真环境(2) —— MAVROS安装(适用于ROS1、ROS2)-CSDN博客
使用方法跟 ROS1 类似,这里不做描述。
Micro XRCE-DDS Agent 与 MAVROS 的对比(来自豆包AI,仅供参考)
MAVROS 是 ROS(机器人操作系统)生态中连接 MAVLink 协议设备(如 PX4、ArduPilot 飞控)的主流工具,本质是 ROS 与 MAVLink 的桥梁。二者的核心差异体现在如下方面:
| 维度 | Micro XRCE-DDS Agent | MAVROS |
|---|---|---|
| 核心定位 | 资源受限设备与 DDS 分布式网络的通信代理,支持多设备协同 | ROS 与 MAVLink 设备(如飞控)的通信桥梁,专注无人机控制 |
| 生态兼容性 | 兼容 DDS 生态(如 Fast DDS、Cyclone DDS),可与非 ROS 系统集成 | 强依赖 ROS 生态,仅支持 ROS 节点与 MAVLink 设备交互 |
| 资源占用 | 客户端(Client)极轻量(适合 MCU 等嵌入式设备),Agent 本身资源消耗中等 | 依赖 ROS 节点和进程,资源占用较高(不适合极简嵌入式环境) |
| 灵活性 | 支持自定义数据类型,可灵活扩展消息结构,适应复杂分布式场景 | 消息类型固定为 MAVLink 标准消息,扩展需修改协议或自定义消息 |
| 实时性 | 原生支持实时性配置(通过 DDS QoS),适合低延迟场景 | 实时性依赖 ROS 调度,默认配置下实时性中等 |
| 适用场景 | 无人机集群协同、多传感器分布式融合、跨平台设备互联 | 单无人机与 ROS 系统的通信(如地面站控制、数据日志、任务规划) |
| 优点 | 1. 分布式架构,支持多设备协同; 2. 轻量级客户端适合嵌入式; 3. 可自定义消息,灵活性高; 4. 强实时性与 QoS 保障 | 1. 无缝集成 ROS 生态,开发便捷; 2. 成熟稳定,支持 MAVLink 全功能(控制、参数、日志等); 3. 社区活跃,问题易解决 |
| 缺点 | 1. 学习成本高(需理解 DDS 概念),目前资料相比于mavros少很多; 2. 与 ROS 集成需额外适配; 3. 对单设备简单通信场景略显复杂 | 1. 依赖 ROS,非 ROS 环境下使用不便,但非ROS环境也有其他基于mavlink的库可以使用; 2. 分布式多设备协同能力弱; 3. 资源占用较高,不适合极简嵌入式 |
- 下载源码:
git clone -b v2.4.2 https://github.com/eProsima/Micro-XRCE-DDS-Agent.git
- 编译:
cd Micro-XRCE-DDS-Agent
mkdir build
cd build
cmake ..
make # make 的时候还会额外下载代码,跟个人网速有有关,大概要10-20分钟

如果出现如下图错误:
build 目录下执行下面命令,改完后再重新 make:
sed -i 's/checkout 2\.12\.x --/checkout v2.12.1 --/' ./fastdds/tmp/fastdds-gitclone.cmake
也可以用文本编辑器打开fastdds-gitclone.cmake 文件,将 2.12.x 改为 v2.12.1 就行。
- 安装:
sudo make install
sudo ldconfig /usr/local/lib/ # 更新动态链接器的缓存

3. 编译 PX4
cd ~/PX4_Firmware
make px4_sitl gz_x500 # 这步可能有点慢
出现这个表示编译成功 😄
错误 1️⃣:如果在虚拟机中可能遇到下面错误,这是由于在虚拟机设置中开启了 3D 图形加速,导致系统的 OpenGL 版本降低。
参考这个 Issue 中的解决方法,降低仿真使用的渲染引擎的版本
打开文件,修改处大概在 73 行:
gedit ~/PX4_Firmware/ROMFS/px4fmu_common/init.d-posix/px4-rc.simulator
修改前:
if [ -z "${HEADLESS}" ]; then
# HEADLESS not set, starting gui
${gz_command} ${gz_sub_command} -g &
fi
修改后:
if [ -z "${HEADLESS}" ]; then
# HEADLESS not set, starting gui
${gz_command} ${gz_sub_command} -g --render-engine ogre &
fi
错误 2️⃣:如果编译过程中出现类似下面错误,应该是 gz_bridge 启动超时
INFO [gz_bridge] world: default, model name: x500_0, simulation model: x500
ERROR [gz_bridge] Service call timed out
ERROR [gz_bridge] Task start failed (-1)
ERROR [init] gz_bridge failed to start
ERROR [px4] Startup script returned with return value: 256
参考下面链接中给出的解决方法 👇
make px4_sitl gz_x500出错 - 哔哩哔哩
然后,再重新编译
4. 通信测试
打开一个终端,启动 MicroXRCEAgent:
MicroXRCEAgent udp4 -p 8888
打开另一个终端,启动仿真:
cd ~/PX4_Firmware
make px4_sitl gz_x500
都启动后,可以看到通信成功
5. 官方 offboard 程序
- 创建工作空间:
mkdir -p ~/ros2_ws/src
- 下载源码:
cd ~/ros2_ws/src
# 1.14
git clone https://github.com/PX4/px4_msgs.git -b release/1.14
git clone https://github.com/PX4/px4_ros_com.git -b release/v1.14
# 1.15
# git clone https://github.com/PX4/px4_msgs.git -b release/1.15
# git clone https://github.com/PX4/px4_ros_com.git -b release/1.15
- 编译:
cd ~/ros2_ws
colcon build

- 更新环境:
echo "source ~/ros2_ws/install/setup.bash" >> ~/.bashrc
source ~/.bashrc #使环境生效
6. offboard 测试
先启动 QGC,然后执行下面命令
- 终端一,启动 MicroXRCEAgent:
MicroXRCEAgent udp4 -p 8888
- 终端二,启动仿真:
cd ~/PX4_Firmware
make px4_sitl gz_x500
- 终端三,启动官方 offboard 案例(上升5米):
ros2 run px4_ros_com offboard_control

注:如果过了一段时间,无人机无法 offboard 起飞,程序都正常启动,这时可以尝试下面命令
cd ~/ros2_ws/src rm -f ./px4_msgs/msg/*.msg cp ~/PX4_Firmware/msg/*.msg ./px4_msgs/msg/ # rm -f ./px4_msgs/srv/*.srv # v1.15.0 之后 # cp ~/PX4_Firmware/srv/*.srv ./px4_msgs/srv/ # v1.15.0 之后然后重新编译
cd ~/ros2_ws colcon build编译成功后,记得 source 一下,再重新offboard测试
到这 PX4 无人机基本仿真环境就搭建完成了,大家可以基于此来拓展自己的仿真。
建了个交流群QQ群(961297255),方便大家交流学习,但是关于 ROS2 下的 PX4 仿真资料不多 😁
参考
ROS 2 用户指南 | PX4 Guide (main)
PX4 ROS 2 User Guide v1.14
PX4 documentation
uXRCE-DDS
Ubuntu Development Environment
a-new-era-for-gazebo
如有其他问题,或者发现文章有错误,请在评论区留言
Keep learning!
更多推荐



所有评论(0)