ROS2 Humble四旋翼无人机仿真环境搭建
发表于:2026-05-24 | 分类: Linux ROS

基于 ROS2 Humble+ Gazebo Sim+ PX4 搭建的四旋翼无人机仿真开发环境,支持无人机姿态控制、路径规划、SLAM 等算法验证与开发。

Architecture uXRCE-DDS with ROS 2

项目简介

本项目用于快速搭建 ROS2 Humble (Ubuntu 22.04) 下的四旋翼无人机仿真平台,集成物理仿真器 Gazebo、无人机动力学模型、控制接口与可视化工具,无需实体无人机即可完成无人机算法开发、调试与测试。

环境依赖

  • 操作系统:Ubuntu 22.04 LTS
  • ROS 版本:ROS2 Humble

目录结构

1
2
3
4
5
6
7
8
9
10
~/uav_ws/
-Micro-XRCE-DDS-Agent/
-PX4-Autopilot/
-ROS2_WS/
-lightning_ws/
-px4_ws/
-src/
-px4_msgs
-px4_ros_com
-ws_xtd2/

系统介绍

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
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
git clone https://github.com/sduzgx/sduav.git
git submodule update --init --recursive
cd Simulation
# 编译PX4
cd PX4-Autopilot
bash ./Tools/setup/ubuntu.sh
make px4_sitl
cd ..
# 编译XRCE-DDS
cd Micro-XRCE-DDS-Agent && mkdir build
cd build
cmake ..
make
sudo make install
sudo ldconfig /usr/local/lib/
# 编译ROS2_WS
cd ROS2_WS/lightning_ws/ && colcon build
cd ROS2_WS/px4_ws/ && colcon build
cd ws_xtd2 && colcon build

编译报错可以用Claude code 或者 codex等Agent解决

2.自己手动安装

安装 PX4

若要使用该仿真器,你需要安装 PX4 开发工具链。

INFO
唯一依赖于 ROS2 的 PX4 是一组信息定义,它从 px4_msgs 获取。您只需要安装 PX4 当您需要模拟器时(如我们在本指南中所做的那样),或者如果您正在创建一个发布自定义 uORB 主题的构建。

通过以下方式在 Ubuntu 上配置一个 PX4 开发环境:

1
2
3
4
git clone https://github.com/PX4/PX4-Autopilot.git --recursive
bash ./PX4-Autopilot/Tools/setup/ubuntu.sh
cd PX4-Autopilot/
make px4_sitl

请注意,上述命令将为您的 Ubuntu 版本安装推荐的模拟器。如果您想要安装 PX4,但保留您现有的模拟器安装,请使用 --no-sim-tools 标志运行 ubuntu.sh

安装 ROS 2

安装 ROS 2 及其依赖:

  1. 安装 ROS 2.

    humble
    To install ROS 2 “Humble” on Ubuntu 22.04:

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    sudo 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).

  2. 一些 Python 依赖关系也必须安装(使用 pipapt):

    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 仿真器上的客户端。

设置并启动代理:

  1. 打开一个终端。

  2. 输入以下命令从仓库获取源代码并构建代理(Agent):

    1
    2
    3
    4
    5
    6
    7
    8
    git 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/
  3. 启动代理并设置以连接运行在模拟器上的 uXRCE-DDS 客户端(Client):

    1
    MicroXRCEAgent udp4 -p 8888
启动客户端(Client)

PX4 仿真器会自动启动 uXRCE-DDS 客户端,并连接到本地主机上的 UDP 8888 端口。

启动模拟器(和客户端):

  1. 在之前安装好的 PX4 自动驾驶仪 代码仓库的根目录下,打开一个新的终端。

    humble

    • 使用 PX4 Gazebo 模拟:
    1
    make px4_sitl gz_x500

代理和客户端现已运行并二者应已建立连接。

PX4 终端会显示 NuttShell/PX4 System Console 系统控制台的输出内容,该输出会在 PX4 启动和运行过程中实时呈现。代理一建立连接,输出内容中就应包含 INFO 级别的消息,这些消息会显示数据撰写器的创建情况:

1
2
3
4
INFO  [uxrce_dds_client] synchronized with time offset 1675929429203524us
INFO [uxrce_dds_client] successfully created rt/fmu/out/failsafe_flags data writer, ...
INFO [uxrce_dds_client] successfully created rt/fmu/out/sensor_combined data writer, ...
INFO [uxrce_dds_client] successfully created rt/fmu/out/timesync_status data writer, ...

image.png

微型 XRCE-DDS 代理终端也应开始显示输出内容,因为在 DDS 网络中会创建对应的主题:

1
2
3
[1675929445.268957] info  | ProxyClient.cpp | create_publisher   | publish
[1675929445.269521] info | ProxyClient.cpp | create_datawriter | datawri
[1675929445.270412] info | ProxyClient.cpp | create_topic | topic c

构建 ROS 2 工作空间

本节介绍如何在你的主目录中创建一个 ROS 2 工作空间(可根据需要修改命令,将源代码放置到其他位置)。

px4_ros_compx4_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. 打开一个新的终端。

  2. 使用以下方式创建并进入一个新的工作空间目录:

    1
    2
    mkdir -p ~/ws_sensor_combined/src/
    cd ~/ws_sensor_combined/src/

    INFO
    一个为工作空间文件夹制定命名规范,有助于更轻松地管理工作空间。

  3. 将示例代码仓库和 px4_msgs 克隆到 /src 目录下(默认克隆 main 分支,该分支与我们当前运行的 PX4 版本相对应):

    1
    2
    git clone https://github.com/PX4/px4_msgs.git
    git clone https://github.com/PX4/px4_ros_com.git
  4. 在当前终端中加载 ROS 2 开发环境,并使用 colcon 工具编译工作空间:

    1
    2
    3
    cd ..
    source /opt/ros/humble/setup.bash
    colcon build

该操作会使用已加载的工具链对 /src 目录下的所有文件夹进行构建。

运行示例

要运行你刚刚构建好的可执行文件,需加载 local_setup.bash。 这提供了当前工作空间的 “environment hooks” 访问权限。 换句话说,它会让刚刚构建好的可执行文件在当前终端中可用。

INFO
ROS2 初学者教程建议您打开一个新的终端来运行您的可执行文件。

在新终端中:

  1. 进入工作空间目录的顶层,并加载 ROS 2 环境(本例中为 “Humble” 版本):

    1
    2
    cd ~/ws_sensor_combined/
    source /opt/ros/humble/setup.bash
  2. 加载

    1
    local_setup.bash
    1
    source install/local_setup.bash
  3. 现在启动示例。 请注意,此处我们使用的是

    1
    ros2 launch

    ,其相关说明如下。

    1
    ros2 launch px4_ros_com sensor_combined_listener.launch.py

若此功能正常运行,你应能在启动 ROS 监听器的终端 / 控制台上看到数据正在打印输出:

1
2
3
4
5
6
7
8
9
10
11
12
RECEIVED DATA FROM SENSOR COMBINED
===================================
ts: 870938190
gyro_rad[0]: 0.00341645
gyro_rad[1]: 0.00626475
gyro_rad[2]: -0.000515705
gyro_integral_dt: 4739
accelerometer_timestamp_relative: 0
accelerometer_m_s2[0]: -0.273381
accelerometer_m_s2[1]: 0.0949186
accelerometer_m_s2[2]: -9.76044
accelerometer_integral_dt: 4739

3.安装QGC

无论是从仓库安装还是手动安装都可以安装QGC软件来实现手动控制无人机仿真

QGroundControl (QGC) 是一款开源、跨平台、专业级的无人机 / 无人系统地面控制站(GCS),基于 MAVLink 协议,为 PX4、ArduPilot 等主流飞控提供全链路控制、任务规划与数据分析能力。
完全适配 PX4 仿真。

官网: https://qgroundcontrol.com/

image.png

  1. On the command prompt enter:

    1
    2
    3
    4
    5
    sudo 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 -y
  2. Logout and login again to enable the change to user permissions.

    To install QGroundControl:

  3. Download QGroundControl-x86_64.AppImage.

  4. Install (and run) using the terminal commands:

    1
    2
    chmod +x ./QGroundControl-x86_64.AppImage
    ./QGroundControl-x86_64.AppImage (or double click)

4.安装Lightning_LM算法

若采用从本仓库安装可不用执行以下命令

1
2
3
4
cd ~/catkin_ws/src
git clone https://github.com/gaoxiang12/lightning-lm.git
cd ..
colcon build

运行

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
source ./install/setup.bash
# 实时建图
ros2 run lightning run_slam_online --config ./config/default_livox.yaml
ros2bag play XXX.db
# 离线建图
ros2 run lightning run_slam_offline --input_bag ~/data/NCLT/20130110/20130110.db3 --config ./config/default_livox.yaml
#保存地图
ros2 service call /lightning/save_map lightning/srv/SaveMap "{map_id: new_map}"
# 实时定位
ros2 run lightning run_loc_online --config ./config/default_livox.yaml
ros2bag play XXX.db
# 离线定位
ros2 run lightning run_loc_offline --input_bag ~/data/NCLT/20130110/20130110.db3 --config ./config/default_livox.yaml
# 查看地图
pcl_viewer ./data/new_map/global.pcd

image-20260507161721403

使用说明

运行PX4 Gazebo仿真

1
2
cd PX4-Autopilot/
make px4_sitl gz_x500

image.png

打开XRCE-DDS通信

1
2
cd Micro-XRCE-DDS-Agent
MicroXRCEAgent udp4 -p 8888

image.png

查看ROS2话题

1
ros2 topic list

image-20260507165614382

启动QGC

image-20260507170230960

最终仿真结果

image-20260507154005212

实时建图仿真

LightningLM算法

下一篇: