基于 ROS2 Humble+ Gazebo Sim+ PX4 搭建的四旋翼无人机仿真开发环境,支持无人机姿态控制、路径规划、SLAM 等算法验证与开发。
项目简介
本项目用于快速搭建 ROS2 Humble (Ubuntu 22.04) 下的四旋翼无人机仿真平台,集成物理仿真器 Gazebo、无人机动力学模型、控制接口与可视化工具,无需实体无人机即可完成无人机算法开发、调试与测试。
环境依赖
- 操作系统:Ubuntu 22.04 LTS
- ROS 版本:ROS2 Humble
目录结构
1 | ~/uav_ws/ |
系统介绍
ROS 2用户指南
ROS 2-PX4 架构在 ROS 2 和 PX4 之间进行了深度整合。允许 ROS 2 订阅或发布节点直接使用 PX4 uORB 话题。
本指南介绍了系统架构和应用程序流程,并解释了如何与 PX4 一起安装和使用 ROS2。
INFO
从 PX4 v1.14,ROS 2 使用uXRCE-DDS中间件替换版本 1 中使用的FastRTPS中间件。3 (v1.13 不支持 uXRCE-DDS)。
migration guide解释您需要做什么来将 ROS2 应用程序从 PX4 v1.13 迁移到 PX4 v1.14。
If you’re still working on PX4 v1.13, please follow the instructions in the PX4 v1.13 Docs.
综述
得益于 uXRCE-DDS 通信中间件的使用,ROS 2 的应用流程非常简单直接。
uXRCE-DDS 中间件由两部分组成:一部分是运行在 PX4 上的客户端,另一部分是运行在机载计算机上的代理;二者之间通过串口、UDP、TCP 或自定义链路进行双向数据交换。代理充当客户端的代理角色,以便在全局 DDS 数据空间中发布和订阅主题。
PX4 uxrce_dds_client 是在构建时生成,并且默认包含在 PX4 固件中。它包含“通用”XRCE-DDS客户端代码和它用来发布到来自 uORB 主题的 PX4 特定转换代码。生成到客户端中的 uORB 消息子集在 dds_topics.yaml 中说明。生成器使用源代码树中的 uORB 消息定义:PX4-Autopilot/msg 用于生成发送 ROS 2 消息的代码。
ROS 2 应用程序需要在一个工作空间中构建,该工作空间需包含与 PX4 固件中创建 uXRCE-DDS 客户端模块时所用完全相同的消息定义。您可以通过克隆接口包 PX4/px4_msgs 将这些内容纳入您的 ROS 2 工作空间(repo 中的范围与不同的 PX4 版本的消息相对应)。
从 PX4 v1.16 版本开始 message versioning,ROS 2 应用程序所使用的消息定义版本,可与构建 PX4 时所用的消息定义版本不同。这需要 ROS 2 Message Translation Node 运行 ROS 2 消息转换节点,以确保消息能够正确转换和交互。
需要注意的是,微型 XRCE-DDS agent 本身并不依赖客户端代码。它可以从 source 中单独构建,或者作为 ROS 构建的一部分,或者作为 snap 包安装。
在使用 ROS 2 时,您通常需要同时启动客户端和代理。需要注意的是,uXRCE-DDS 客户端默认已内置到固件中,但除仿真器构建版本外,不会自动启动。
INFO
在 PX4 v1.13 及更早版本中,ROS 2 依赖于px4_ros_com中的消息定义。该代码仓库已不再需要,但其中包含一些实用的示例。
PX4-Autopilot
PX4-Autopilot是由Dronecode基金会(Linux基金会旗下)维护的开源无人机与无人车辆飞控堆栈仓库,采用BSD 3-Clause宽松开源协议,支持商业与闭源二次开发。项目基于NuttX RTOS与Linux等系统,以模块化uORB发布订阅中间件为核心架构,实现全并行、线程安全的飞行控制功能,可按需裁剪模块以适配不同硬件资源。它全面支持多旋翼、固定翼、倾转旋翼(VTOL)、无人车、直升机等多种飞行/移动平台,兼容Pixhawk系列及各类主流飞控硬件、传感器与外设。仓库内置完整的自主飞行能力,包含航点任务、自动起降、返航、多传感器融合(IMU/GPS/视觉/激光雷达)、避障与路径规划等核心功能,同时原生支持MAVLink通信协议与DDS/ROS 2生态集成,可通过QGroundControl地面站或MAVSDK进行外部控制与数据交互。配套提供完善的SITL仿真、硬件在环测试与日志分析工具,拥有全球活跃的开发者社区与稳定的版本迭代机制,广泛应用于工业巡检、农业植保、物流配送、科研勘探及消费级航拍等领域,是目前全球最主流、功能最完善的开源飞控解决方案之一。
Micro-XRCE-DDS-Agent
Micro-XRCE-DDS-Agent是eProsima公司开源实现的遵循OMG XRCE-DDS标准的代理服务端仓库,作为Micro XRCE-DDS架构中的核心网关组件,常与运行在单片机、嵌入式MCU、PX4飞控等资源受限设备上的客户端配合使用。该项目基于C++11开发,依赖Fast DDS库,通过CMake完成编译构建,采用客户端与代理端分离的架构模式,由代理端代为在DDS网络域中创建发布订阅实体、完成数据收发与消息转发,大幅降低低端嵌入式设备的算力与内存开销。仓库原生支持UDP、TCP、串口等多种通信传输方式,兼容发布订阅通信模式以及DDS-RPC请求响应机制,能够无缝将资源受限的嵌入式设备接入标准DDS网络与ROS2生态系统,广泛应用于无人机飞控与ROS2通信、小型嵌入式机器人、物联网终端接入机器人中间件等轻量化工业与机器人开发场景,同时支持常规编译部署、Docker容器部署等多种运行方式,适配不同开发与工程部署需求。
lightning_ws
Lightning-LM工作空间
Lightning-LM 全称 Lightweight LiDAR-Inertial Mapping,采用前端里程计 + 回环检测 + 轻量级位姿图优化的模块化架构,基于 ROS 2 开发(兼容 ROS 1),支持纯定位与 SLAM 双模式运行。前端借鉴 Fast-LIO 思想,以iVox 体素索引实现高效点云匹配,结合 IMU 预积分补偿运动畸变,输出高频(100Hz)平滑位姿;后端通过NDT 回环检测与自研miao 轻量级优化库(基于 g2o 精简重构,支持增量优化)抑制累积漂移,全局一致性强。
px4_ws
PX4工作空间储存ROS 2 消息定义仓库、ROS 2与PX4固件通信桥接及工具库仓库
px4_msgs是 PX4 官方维护的 ROS 2 消息定义仓库,专门为 PX4 Autopilot 与 ROS 2 生态的通信提供标准化接口。它包含与 PX4 固件内部 uORB 消息完全对应的 ROS 2 消息(.msg)与服务(.srv)定义,覆盖传感器数据、飞行状态、控制指令、任务信息等全维度通信接口。仓库通过自动化 CI/CD 流水线与 PX4-Autopilot 主仓库同步,确保 uORB 与 ROS 2 消息定义实时一致,支持多版本 PX4 与 ROS 2(如 Humble、Iron)的兼容性适配。作为 PX4-ROS 2 通信的基础依赖包,它不包含可执行代码,仅提供接口定义,是构建 ROS 2 控制节点、状态订阅节点的前提,广泛用于无人机自主控制、传感器融合、避障算法开发等场景。
px4_ros_com是 PX4 官方的 ROS 2 与 PX4 固件通信桥接及工具库仓库,强依赖 px4_msgs,基于 Micro-XRCE-DDS(原 Fast-RTPS)中间件实现 ROS 2 与 PX4 uORB 系统的双向数据交互。它提供核心通信桥接功能、坐标系转换工具库(解决 ROS 2 与 PX4 坐标系差异)及丰富的示例节点(如传感器数据监听、离线控制、航点任务下发等),帮助开发者快速上手 ROS 2 控制 PX4 无人机。仓库包含 C++/Python 实现的通信节点、启动文件与测试脚本,支持 SITL 仿真与真机环境的无缝对接,同时提供时间同步、数据转换、异常处理等基础能力,是开发 ROS 2 端自主飞行、路径规划、多机协同等高级应用的核心工具包。
ws_xtd2
XTDrone2工作空间
XTDrone是一款基于ROS、Gazebo与PX4开发的开源通用无人机仿真平台,可看作无人机开发的“虚拟沙盒”,核心用于无人机算法调试、功能验证与开发练习,无需真机即可完成各类测试,安全且高效。
它支持多旋翼、固定翼、VTOL等多种机型,还可适配无人车、无人船、机械臂等多种无人系统,能实现多机编队、自主导航、SLAM、目标追踪等多种场景的仿真。其核心优势是模块化设计,可灵活修改仿真模型与参数,且在平台上验证通过的算法,能方便地部署到真实无人机上。
XTDrone与PX4飞控配合紧密,可通过相关通信工具实现ROS与PX4飞控的通信,构建起“仿真环境-飞控”的完整开发架构,是无人机智能化开发与调试的重要工具。
在XTDrone的基础上,XTDrone2更新采用了更模块化和轻量化的仿真器Gazebo Ignition;同时由于ROS1版本不再更新维护,XTDrone2将全部基于ROS2进行开发;同时PX4的版本也采用了更新更稳定的1.15.3版本。
使用文档 :https://www.yuque.com/xtdrone/xtdrone2
(项目还在开发过程中,功能待完善…)
安装与设置
安装使用 PX4 的 ROS 2:
- Install PX4 (to use the PX4 simulator)
- Install ROS 2
- Setup Micro XRCE-DDS Agent & Client
- Build & Run ROS 2 Workspace
该架构中会自动安装的其他依赖项(如 Fast DDS)未在此处提及。
1.从本仓库安装
1 | git clone https://github.com/sduzgx/sduav.git |
编译报错可以用Claude code 或者 codex等Agent解决
2.自己手动安装
安装 PX4
若要使用该仿真器,你需要安装 PX4 开发工具链。
INFO
唯一依赖于 ROS2 的 PX4 是一组信息定义,它从px4_msgs获取。您只需要安装 PX4 当您需要模拟器时(如我们在本指南中所做的那样),或者如果您正在创建一个发布自定义 uORB 主题的构建。
通过以下方式在 Ubuntu 上配置一个 PX4 开发环境:
1 | git clone https://github.com/PX4/PX4-Autopilot.git --recursive |
请注意,上述命令将为您的 Ubuntu 版本安装推荐的模拟器。如果您想要安装 PX4,但保留您现有的模拟器安装,请使用 --no-sim-tools 标志运行 ubuntu.sh。
安装 ROS 2
安装 ROS 2 及其依赖:
安装 ROS 2.
humble
To install ROS 2 “Humble” on Ubuntu 22.04:1
2
3
4
5
6
7
8
9
10
11
12sudo apt update && sudo apt install locales
sudo locale-gen en_US en_US.UTF-8
sudo update-locale LC_ALL=en_US.UTF-8 LANG=en_US.UTF-8
export LANG=en_US.UTF-8
sudo apt install software-properties-common
sudo add-apt-repository universe
sudo apt update && sudo apt install curl -y
sudo curl -sSL https://raw.githubusercontent.com/ros/rosdistro/master/ros.key -o /usr/share/keyrings/ros-archive-keyring.gpg
echo "deb [arch=$(dpkg --print-architecture) signed-by=/usr/share/keyrings/ros-archive-keyring.gpg] http://packages.ros.org/ros2/ubuntu $(. /etc/os-release && echo $UBUNTU_CODENAME) main" | sudo tee /etc/apt/sources.list.d/ros2.list > /dev/null
sudo apt update && sudo apt install ros-humble-desktop
sudo apt install ros-humble-tools
source /opt/ros/humble/setup.bash && echo "source /opt/ros/humble/setup.bash" >> ~/.bashrc以上说明转载自官方安装指南:Install ROS 2 Humble。您可以安装 either the desktop (
ros-humble-desktop) or bare-bones versions (ros-humble-ros-base), and the development tools (ros-dev-tools).一些 Python 依赖关系也必须安装(使用
pip或apt):1
pip install --user -U empy==3.3.4 pyros-genmsg setuptools
配置微型 XRCE-DDS 代理与客户端
要实现 ROS 2 与 PX4 的通信,uXRCE-DDS client 必须在 PX4 上运行,且需与运行在机载计算机上的微型 XRCE-DDS 代理建立连接。
设置代理(Agent)
代理可以安装在机载计算机上 number of ways。下文将介绍如何从源代码“独立”构建代理,并连接到运行在 PX4 仿真器上的客户端。
设置并启动代理:
打开一个终端。
输入以下命令从仓库获取源代码并构建代理(Agent):
1
2
3
4
5
6
7
8git clone -b v2.4.3 https://github.com/eProsima/Micro-XRCE-DDS-Agent.git
cd Micro-XRCE-DDS-Agent
mkdir build
cd build
cmake ..
make
sudo make install
sudo ldconfig /usr/local/lib/启动代理并设置以连接运行在模拟器上的 uXRCE-DDS 客户端(Client):
1
MicroXRCEAgent udp4 -p 8888
启动客户端(Client)
PX4 仿真器会自动启动 uXRCE-DDS 客户端,并连接到本地主机上的 UDP 8888 端口。
启动模拟器(和客户端):
在之前安装好的 PX4 自动驾驶仪 代码仓库的根目录下,打开一个新的终端。
humble
- 使用 PX4 Gazebo 模拟:
1
make px4_sitl gz_x500
代理和客户端现已运行并二者应已建立连接。
PX4 终端会显示 NuttShell/PX4 System Console 系统控制台的输出内容,该输出会在 PX4 启动和运行过程中实时呈现。代理一建立连接,输出内容中就应包含 INFO 级别的消息,这些消息会显示数据撰写器的创建情况:
1 | INFO [uxrce_dds_client] synchronized with time offset 1675929429203524us |

微型 XRCE-DDS 代理终端也应开始显示输出内容,因为在 DDS 网络中会创建对应的主题:
1 | [1675929445.268957] info | ProxyClient.cpp | create_publisher | publish |
构建 ROS 2 工作空间
本节介绍如何在你的主目录中创建一个 ROS 2 工作空间(可根据需要修改命令,将源代码放置到其他位置)。
px4_ros_com 和 px4_msgs 这两个功能包会被克隆到工作空间文件夹中,之后使用 colcon 工具对该工作空间进行构建 此示例使用 “ros2 launch” 运行。
您应该使用一个 px4_msgs 包的版本与 same_ 消息定义作为您已经安装在上面步骤中的 PX4 固件对应。px4_msgs 代码仓库中的分支均以特定名称命名,这些名称与不同 PX4 版本的消息定义——对应。如果出于任何原因,您不能确保您的 PX4 固件和 ROS 2 px4_msgs 包之间具有相同的消息定义。 您还需要 start the message translation node,作为您设置过程的一部分。
INFO
该示例会构建 ROS 2 Listener 示例应用程序,该程序位于px4_ros_com中。px4_msgs也是需要的,以便示例能够解释 PX4 ROS 2 主题。
构建工作空间
要创建和构建工作空间:
打开一个新的终端。
使用以下方式创建并进入一个新的工作空间目录:
1
2mkdir -p ~/ws_sensor_combined/src/
cd ~/ws_sensor_combined/src/INFO
一个为工作空间文件夹制定命名规范,有助于更轻松地管理工作空间。将示例代码仓库和
px4_msgs克隆到/src目录下(默认克隆main分支,该分支与我们当前运行的 PX4 版本相对应):1
2git clone https://github.com/PX4/px4_msgs.git
git clone https://github.com/PX4/px4_ros_com.git在当前终端中加载 ROS 2 开发环境,并使用
colcon工具编译工作空间:1
2
3cd ..
source /opt/ros/humble/setup.bash
colcon build
该操作会使用已加载的工具链对 /src 目录下的所有文件夹进行构建。
运行示例
要运行你刚刚构建好的可执行文件,需加载 local_setup.bash。 这提供了当前工作空间的 “environment hooks” 访问权限。 换句话说,它会让刚刚构建好的可执行文件在当前终端中可用。
INFO
ROS2 初学者教程建议您打开一个新的终端来运行您的可执行文件。
在新终端中:
进入工作空间目录的顶层,并加载 ROS 2 环境(本例中为 “Humble” 版本):
1
2cd ~/ws_sensor_combined/
source /opt/ros/humble/setup.bash加载
1
local_setup.bash
1
source install/local_setup.bash
现在启动示例。 请注意,此处我们使用的是
1
ros2 launch
,其相关说明如下。
1
ros2 launch px4_ros_com sensor_combined_listener.launch.py
若此功能正常运行,你应能在启动 ROS 监听器的终端 / 控制台上看到数据正在打印输出:
1 | RECEIVED DATA FROM SENSOR COMBINED |
3.安装QGC
无论是从仓库安装还是手动安装都可以安装QGC软件来实现手动控制无人机仿真
QGroundControl (QGC) 是一款开源、跨平台、专业级的无人机 / 无人系统地面控制站(GCS),基于 MAVLink 协议,为 PX4、ArduPilot 等主流飞控提供全链路控制、任务规划与数据分析能力。
完全适配 PX4 仿真。
官网: https://qgroundcontrol.com/

On the command prompt enter:
1
2
3
4
5sudo usermod -a -G dialout $USER
sudo apt-get remove modemmanager -y
sudo apt install gstreamer1.0-plugins-bad gstreamer1.0-libav gstreamer1.0-gl -y
sudo apt install libfuse2 -y
sudo apt install libxcb-xinerama0 libxkbcommon-x11-0 libxcb-cursor-dev -yLogout and login again to enable the change to user permissions.
To install QGroundControl:
Download QGroundControl-x86_64.AppImage.
Install (and run) using the terminal commands:
1
2chmod +x ./QGroundControl-x86_64.AppImage
./QGroundControl-x86_64.AppImage (or double click)
4.安装Lightning_LM算法
若采用从本仓库安装可不用执行以下命令
1 | cd ~/catkin_ws/src |
运行
1 | source ./install/setup.bash |

使用说明
运行PX4 Gazebo仿真
1 | cd PX4-Autopilot/ |

打开XRCE-DDS通信
1 | cd Micro-XRCE-DDS-Agent |

查看ROS2话题
1 | ros2 topic list |

启动QGC

最终仿真结果

实时建图仿真
LightningLM算法
