ARTICLE DETAIL

资讯详情

深耕郑州网站建设与运营推广的一线实战洞察。

ROS2+PX4+AirSim环境搭建

ROS2+PX4+AirSim环境搭建 摘要本文详细介绍如何在 Ubuntu 22.04 上搭建 ROS2、PX4 与 AirSim 的联合仿真环境。文章从系统框图入手梳理飞控、主机系统与仿真环境三者的协作关系随后依次讲解前置依赖安装、Micro-XRCE-DDS-Agent 安装、ROS2 安装、PX4 固件安装、AirSim 安装与配置以及 ROS2 与 PX4 的桥接方法。最后给出联合仿真启动步骤、验证测试方法和常见问题排查表帮助读者从零开始构建完整的无人机开发与验证闭环。一、系统框图ROS2、PX4 与 AirSim 的联合仿真环境由多个组件协同工作整体架构如下图所示整个系统可以划分为三个主要部分1. PX4飞行控制系统PX4 负责无人机底层飞行控制包括姿态估计位置估计姿态控制位置控制飞行模式管理Offboard 控制故障保护执行器输出在真实无人机中PX4 通常运行在 Pixhawk 等飞控硬件上在本文仿真环境中则使用 PX4 SITLSoftware In The Loop直接运行在 WSL2 Ubuntu 中。2. ROS2上层算法系统ROS2 运行在主机侧负责路径规划目标识别视觉算法自主导航任务规划多机协同上层控制逻辑ROS2 与 PX4 之间不需要通过 MAVLink 进行核心 Topic 通信而是使用PX4 uORB ↕ uXRCE-DDS Client ↕ Micro-XRCE-DDS-Agent ↕ DDS ↕ ROS23. AirSim物理与传感器仿真环境AirSim 运行在 Windows 中用于提供无人机动力学模型IMUGPS气压计相机深度图碰撞Unreal Engine 场景PX4 与 AirSim 之间通过 MAVLink / Simulator 接口形成仿真闭环。二、通信关系说明整套环境中最容易混淆的是 MAVLink 与 uXRCE-DDS。它们不是同一个东西也不是互相替代关系。1. PX4 ↔ ROS2使用 uXRCE-DDS DDS通信路径ROS2 ↕ DDS ↕ Micro-XRCE-DDS-Agent ↕ uXRCE-DDS Client ↕ PX4 uORBMicro-XRCE-DDS-Agent 的作用是把 PX4 中的 uORB 数据带入 DDS 数据空间从而让 ROS2 可以通过 Topic 与 PX4 交换数据。2. PX4 ↔ AirSim使用 MAVLink / PX4 Simulator Interface主要传输仿真 IMUGPS气压计飞行状态电机/执行器控制量形成PX4 ↓ 控制输出 AirSim ↓ 物理仿真 传感器数据 ↓ PX43. PX4 ↔ QGroundControl同样主要使用 MAVLink。QGC 用于飞行状态监控参数配置飞行模式切换航点任务规划解锁/上锁日志与调试因此本文的核心关系可以记为ROS2 ←── uXRCE-DDS ──→ PX4 ←── MAVLink ──→ AirSim ↕ MAVLink ↕ QGC二、环境概述本文采用「Windows WSL2」双环境架构Windows 11运行 Unreal Engine 4.27、AirSim 与 QGroundControlWSL2 Ubuntu 22.04运行 PX4 SITL、ROS2 Humble、Micro-XRCE-DDS-Agent 以及自定义 ROS2 节点。这样划分的原因是 AirSim/Unreal Engine 在 Windows 下图形与驱动支持更成熟而 PX4 与 ROS2 的 Linux 工具链更适合运行在 Ubuntu 中。需要特别注意WSL2 本质上运行在独立虚拟机网络中Windows 与 WSL2 拥有不同 IP因此 PX4 与 AirSim 不能直接依赖 127.0.0.1 通信必须显式配置 Windows 主机 IP、WSL2 IP 和防火墙端口。下面梳理一下这套双环境架构下的网络拓扑与数据流向┌───────────────────────────── Windows 11 ─────────────────────────────┐ │ │ │ AirSim (UE4.27) QGroundControl │ │ ───────────── ───────────── │ │ TcpPort: 4560 MAVLink: 14550 │ │ │ │ │ │ │ MAVLink │ MAVLink │ └────────┼────────────────────────┼────────────────────────────────────┘ │ │ │ vEthernet (WSL) │ │ (Windows 主机 IP) │ ▼ ▼ ┌───────────────────────────── WSL2 Ubuntu 22.04 ──────────────────────┐ │ │ │ PX4 SITL (none_iris) │ │ ├── MAVLink ←── 连接 AirSim 4560 端口 │ │ └── uXRCE-DDS Client ←── 连接 Agent 8888 端口 │ │ │ │ Micro-XRCE-DDS-Agent (udp4 -p 8888) │ │ │ │ │ │ DDS │ │ ▼ │ │ ROS2 Humble │ │ ├── px4_msgs │ │ ├── ROS2 DDS │ │ └── 自定义 ROS2 Node │ └──────────────────────────────────────────────────────────────────────┘从上图可以看出整个系统存在两条独立的通信链路MAVLink 链路PX4 SITL 与 AirSim 之间通过 4560 端口进行仿真数据交换QGroundControl 通过 14550 端口接入同一 MAVLink 网络用于监控与调试。uXRCE-DDS 链路PX4 内部的 uORB 消息通过 uXRCE-DDS Client 发送到 Micro-XRCE-DDS-Agent8888 端口再由 Agent 桥接到 DDS 数据空间最终被 ROS2 节点订阅或发布。两条链路相互独立、互不干扰这也是为什么 ROS2 与 PX4 的核心 Topic 通信不需要经过 MAVLink 的原因。本文采用 PX4 内置的 uXRCE-DDS Client 与 Micro-XRCE-DDS-Agent 建立 PX4 与 ROS2 之间的通信。px4_ros_com不是当前通信链路中必须运行的桥接节点主要可用于示例代码和辅助开发。三、版本矩阵与网络端口在开始搭建之前需要先明确各组件版本与网络端口这是 Windows WSL2 跨主机方案能否跑通的关键。版本不匹配是联合仿真环境搭建中最常见的失败原因之一因此建议严格按照下表选择版本。3.1 版本矩阵操作系统Windows 11 WSL2 Ubuntu 22.04 LTSROS2Humble Hawksbill安装在 WSL2 Ubuntu 22.04 中PX4固定一个稳定 tag/commit建议固定你实际验证通过的版本不要写宽泛范围Micro XRCE-DDS Agentv2.4.2对应 ROS2 Humble / Fast DDS 2.6.xAirSimWindows 原生安装与 UE4.27 兼容版本Unreal Engine4.27Visual Studio2022QGroundControl稳定版本推荐放 WindowsMAVSDK可选开发工具主链路不依赖关于版本选择有几点需要特别说明ROS2 与 Agent 的对应关系ROS2 Humble 默认使用 Fast DDS 2.6.xPX4 官方兼容表明确要求 Micro-XRCE-DDS-Agent 使用 v2.4.2。如果 Agent 版本过高或过低可能导致 uORB Topic 无法正确映射到 DDS 数据空间。PX4 版本固定PX4 主分支更新频繁不同版本对 uXRCE-DDS 的支持和默认配置可能存在差异。建议在验证通过后使用git checkout tag固定版本避免后续升级引入未知问题。UE 与 AirSim 的兼容性AirSim 对 Unreal Engine 版本有严格要求UE4.27 是当前验证最充分的组合。使用其他 UE 版本时需要确认 AirSim 是否支持对应的引擎版本。3.2 网络端口表端口协议用途4560TCPPX4 simulator 与 AirSim 通信14540UDPAirSim/PX4 控制链路14580UDPAirSim/PX4 控制链路远端8888UDPPX4 uXRCE-DDS Client 与 Agent 通信14550UDPQGroundControl MAVLink 端口41451TCPAirSim API Server可选WSL2 直接访问时端口配置时需要注意以下几点4560 端口这是 PX4 与 AirSim 之间 MAVLink 通信的核心端口对应 AirSim settings.json 中的 TcpPort 配置。PX4 启动时会主动连接该端口因此 AirSim 必须先于 PX4 启动。8888 端口这是 PX4 的 uXRCE-DDS Client 与 Micro-XRCE-DDS-Agent 之间的通信端口。Agent 启动时使用MicroXRCEAgent udp4 -p 8888监听该端口PX4 启动后会自动建立连接。防火墙放行在 Windows 防火墙中需要放行 4560、14540、14580、14550 等端口否则 WSL2 中的 PX4 无法访问 Windows 中的 AirSim 和 QGroundControl。飞控部分基础环境安装教程Windows11下WSLPX4Gazebo QGroundContro安装_linkgroundcontrol-CSDN博客四、Micro-XRCE-DDS-Agent 安装Micro-XRCE-DDS-Agent 是 PX4 与 ROS2 之间通信的关键桥梁。PX4 内部使用 uORB 消息机制而 ROS2 使用 DDS 通信协议两者无法直接互通。Micro-XRCE-DDS-Agent 作为 DDS 代理负责将 PX4 的 uORB Topic 映射为 ROS2 的 Topic从而实现飞控与上层算法框架之间的数据交换。ROS2 Humble 对应 Fast DDS 2.6.xPX4 官方兼容表要求 Micro-XRCE-DDS-Agent 2.4.2。Agent 可以独立编译也可以放到 ROS2 工作空间中。为了目录清晰这里采用独立安装# 进入用户主目录 cd ~ # 克隆指定版本 v2.4.2 的 Agent 源码 git clone -b v2.4.2 https://github.com/eProsima/Micro-XRCE-DDS-Agent.git # 进入源码目录 cd Micro-XRCE-DDS-Agent # 创建编译目录并进入 mkdir -p build cd build # 配置 CMake 构建 cmake .. # 使用多核并行编译 make -j$(nproc) # 安装到系统目录 sudo make install # 刷新动态链接库缓存 sudo ldconfig /usr/local/lib/编译安装完成后可通过以下命令验证 Micro-XRCE-DDS-Agent 是否安装成功# 查看 Micro-XRCE-DDS-Agent 的帮助信息确认命令可用 MicroXRCEAgent --help启动 Micro-XRCE-DDS-Agent 服务默认监听 UDP 端口 8888# 启动 Agent使用 UDP 协议并监听 8888 端口 MicroXRCEAgent udp4 -p 8888启动成功后终端会显示 Agent 正在监听指定端口等待 PX4 通过串口或 UDP 连接。至此Micro-XRCE-DDS-Agent 安装完成。后续在启动 PX4 时PX4 的 uXRCE-DDS Client 与 Agent 建立传输连接后PX4 指定的 uORB 话题才能进入 DDS 数据空间进而与 ROS2 通信。这里补充一个关键细节Agent 与 PX4 的 uXRCE-DDS Client 之间是「先启动 Agent、后启动 PX4」的依赖关系。如果先启动 PX4 再启动 AgentPX4 的 uXRCE-DDS Client 会因找不到 Agent 而反复重试连接虽然最终也能连上但会拖慢启动流程并产生大量重试日志。因此建议严格按照「先 Agent、后 PX4」的顺序启动。另外Agent 默认只监听 UDP 8888 端口。如果你的网络环境存在多个网卡例如 WSL2 的虚拟网卡与 Windows 物理网卡并存可以显式指定监听地址避免 Agent 绑定到错误的网卡上# 查看本机所有 IP 地址确认 WSL2 网卡地址 ip addr show # 显式指定监听地址示例监听 172.20.10.5 的 8888 端口 MicroXRCEAgent udp4 -p 8888 -i 172.20.10.5如果后续在「九、验证与测试」中发现ros2 topic echo无输出可以优先检查 Agent 是否监听在正确的网卡地址上以及 PX4 启动日志中是否出现 uXRCE-DDS Client 连接成功的记录。四、ROS2 安装ROS2 是上层算法框架的核心本节介绍在 Ubuntu 22.04 上安装 ROS2 Humble 版本并初始化工作空间。首先配置 ROS2 软件源并完成安装# 更新软件源并安装 curl 工具 sudo apt update sudo apt install curl # 下载 ROS2 官方 GPG 密钥并保存到系统密钥环 curl -sSL https://raw.githubusercontent.com/ros/rosdistro/master/ros.key -o /usr/share/keyrings/ros-archive-keyring.gpg # 添加 ROS2 软件源到 apt 源列表 echo deb [arch$(dpkg --print-architecture) signed-by/usr/share/keyrings/ros-archive-keyring.gpg] http://packages.ros.org/ros2/ubuntu $(source /etc/os-release echo $UBUNTU_CODENAME) main | sudo tee /etc/apt/sources.list.d/ros2.list /dev/null # 更新软件源索引 sudo apt update # 安装 ROS2 Humble 桌面版及 colcon 构建工具 sudo apt install ros-humble-desktop python3-colcon-common-extensions这里补充一个细节ros-humble-desktop 是完整桌面版包含 RViz、rqt 等可视化工具适合需要调试和观察话题数据的场景。如果只想最小化安装可以替换为ros-humble-ros-base但后续验证阶段缺少 RViz 等工具会不太方便因此建议直接安装桌面版。ROS2 安装完成后需要初始化环境变量并创建工作空间以便后续编译和运行自定义节点# 加载 ROS2 环境变量 source /opt/ros/humble/setup.bash # 创建工作空间目录并进入 mkdir -p ~/ros2_px4_ws/src cd ~/ros2_px4_ws # 编译工作空间 colcon build编译完成后工作空间会生成 install 目录其中包含编译好的包和 setup.bash 环境脚本。后续每次打开新终端时都需要先执行 source /opt/ros/humble/setup.bash 和 source ~/ros2_px4_ws/install/setup.bash 来加载 ROS2 与工作空间的环境变量才能正常使用 ros2 命令。为了验证 ROS2 是否安装成功可以运行以下命令检查版本信息# 检查当前加载的 ROS2 发行版 echo $ROS_DISTRO # 查看 ROS2 命令帮助确认 CLI 正常 ros2 --help # 查看已安装的 ROS2 包数量 ros2 pkg list | wc -l如果echo $ROS_DISTRO输出humble说明 ROS2 环境变量已正确加载。此外还可以通过printenv | grep ROS查看完整的 ROS2 环境变量正常情况下应能看到ROS_VERSION2、ROS_PYTHON_VERSION3和ROS_DISTROhumble。建议在~/.bashrc末尾追加以下两行让每次打开终端时自动加载 ROS2 与工作空间的环境变量避免手动 source 的麻烦# 追加到 ~/.bashrc 末尾 echo source /opt/ros/humble/setup.bash ~/.bashrc echo source ~/ros2_px4_ws/install/setup.bash ~/.bashrc # 使配置立即生效 source ~/.bashrc注意如果后续在「七、ROS2 与 PX4 桥接」中编译 px4_ros_com 时提示找不到某些依赖包可以回到本节确认ros-humble-desktop是否完整安装必要时补充安装ros-humble-rmw-fastrtps-cpp等与 Fast DDS 相关的包。五、PX4 固件安装克隆 PX4 源码并安装依赖工具链。注意AirSim 场景下不要使用make px4_sitl gazebo-classic因为这会启动 Gazebo Classic 目标而不是等待 Windows AirSim 连接。AirSim 官方 PX4 SITL 流程使用make px4_sitl_default none_iris# 进入工作目录 cd ~/workspace # 克隆 PX4 源码含子模块 git clone --recursive https://github.com/PX4/PX4-Autopilot.git # 进入源码目录 cd PX4-Autopilot # 强烈建议固定你实际验证通过的 tag/commit例如 # git checkout 你的固定版本 # 更新子模块 git submodule update --init --recursive # 安装 SITL 所需工具链跳过 NuttX 和仿真工具 bash ./Tools/setup/ubuntu.sh --no-nuttx --no-sim-tools这里补充一个细节PX4 主分支更新频繁不同版本对 uXRCE-DDS 的支持和默认配置可能存在差异。建议在验证通过后使用git checkout tag固定版本避免后续升级引入未知问题。同时安装工具链完成后建议重新打开一个 WSL2 终端确保环境变量生效。编译完成后验证固件是否正常启动make px4_sitl_default none_iris启动 PX4 前需要先设置PX4_SIM_HOST_ADDR环境变量指向 AirSim 所在的 Windows 主机地址即 WSL2 的默认网关也就是 Windows 的 vEthernet (WSL) 地址# 自动获取 Windows 主机在 WSL2 网络中的地址 export PX4_SIM_HOST_ADDR$(ip route | awk /default/ {print $3; exit}) # 打印确认地址 echo $PX4_SIM_HOST_ADDR重要WSL2 重启后虚拟网卡地址可能变化不要写死某个 172.x.x.x 地址应每次启动前重新获取实际地址。如果 PX4 一直显示Waiting for simulator to connect请优先检查PX4_SIM_HOST_ADDR是否与 Windows 的 vEthernet (WSL) IPv4 地址一致并确认 Windows 防火墙已放行 4560 端口。六、AirSim 安装与配置本文的 AirSim运行在 Windows 中而不是在 WSL2 Ubuntu 中编译和启动。因此不再使用./setup.sh和./build.sh这种 Linux 安装方式而是采用 Windows Unreal Engine 4.27 AirSim 的组合。AirSim 原项目已经比较老建议固定 AirSim commit、Unreal Engine 4.27 和 PX4 tag避免后续因为版本变化导致无法复现。Windows 中 AirSim 的配置文件一般位于Documents\AirSim\settings.json。针对 Windows AirSim WSL2 PX4 的跨主机方案可以使用类似配置{ SettingsVersion: 1.2, SimMode: Multirotor, ClockType: SteppableClock, Vehicles: { PX4: { VehicleType: PX4Multirotor, UseSerial: false, LockStep: true, UseTcp: true, TcpPort: 4560, ControlIp: remote, ControlPortLocal: 14540, ControlPortRemote: 14580, LocalHostIp: 172.31.64.1 } } }其中172.31.64.1必须替换为你自己的 Windows vEthernet (WSL) IPv4 地址。获取方法在 Windows CMD 或 PowerShell 中执行ipconfig找到Ethernet adapter vEthernet (WSL)对应的 IPv4 地址。注意不同电脑地址不同且 WSL2 重启之后 IP 可能变化。配置完成后启动 Windows 上的 AirSim / Unreal 场景确保场景已经进入运行状态再回到 WSL2 中启动 PX4。七、ROS2 与 PX4 桥接这里需要先澄清一个容易混淆的点px4_ros_com 并不是当前 PX4 与 ROS2 通信必须运行的「桥接节点」。核心通信链路实际上是PX4 uORB ↓ uXRCE-DDS Client ↓ Micro-XRCE-DDS-Agent ↓ DDS ↓ px4_msgs / ROS2 NodeROS2 侧需要px4_msgs提供与 PX4 对应的 ROS2 消息定义。进入工作空间并克隆# 进入工作空间源码目录 cd ~/ros2_px4_ws/src # 克隆 px4_msgs 消息定义包 git clone https://github.com/PX4/px4_msgs.git # 进入 px4_msgs 目录 cd px4_msgs # 建议根据 PX4 版本切换对应分支 # git checkout 与你的PX4版本匹配的分支然后重新构建工作空间# 回到工作空间根目录 cd ~/ros2_px4_ws # 加载 ROS2 环境变量 source /opt/ros/humble/setup.bash # 使用符号链接方式编译便于后续开发调试 colcon build --symlink-install # 加载工作空间环境变量 source ~/ros2_px4_ws/install/setup.bash编译完成后PX4 的 uORB 消息会通过 uXRCE-DDS Client 进入 DDS 数据空间ROS2 节点即可通过px4_msgs提供的消息类型订阅或发布对应 Topic无需额外运行桥接节点。八、联合仿真启动按以下顺序启动各组件顺序颠倒会导致 MAVLink 连接失败或话题为空Windows 启动 AirSim 仿真环境加载无人机场景。WSL2 设置 Windows 主机地址PX4_SIM_HOST_ADDR。WSL2 启动 Micro-XRCE-DDS-Agent监听 8888 端口。WSL2 启动 PX4 SITL连接 AirSim 的 MAVLink 端口。WSL2 验证 ROS2 话题确认数据流通。Windows 启动 QGroundControl确认 MAVLink 连接。启动命令示例# 终端1Windows启动 AirSim / Unreal Engine 场景 # 确保场景已进入运行状态等待 PX4 连接 终端2WSL2设置 Windows 主机地址 export PX4_SIM_HOST_ADDR$(ip route | awk /default/ {print $3; exit}) echo $PX4_SIM_HOST_ADDR 终端3WSL2启动 Micro-XRCE-DDS-Agent source /opt/ros/humble/setup.bash source ~/ros2_px4_ws/install/setup.bash MicroXRCEAgent udp4 -p 8888 终端4WSL2启动 PX4 SITL cd ~/PX4-Autopilot export PX4_SIM_HOST_ADDR$(ip route | awk /default/ {print $3; exit}) make px4_sitl_default none_iris 终端5WSL2验证 ROS2 话题 source /opt/ros/humble/setup.bash source ~/ros2_px4_ws/install/setup.bash ros2 topic list注意PX4 启动命令必须使用make px4_sitl_default none_iris不要使用make px4_sitl gazebo-classic后者会启动 Gazebo Classic 目标而不是等待 Windows 上的 AirSim 连接。正常情况下 PX4 会显示Waiting for simulator to connect ...连接成功后即可进入 PX4 SITL shell。九、验证与测试保持 AirSim 与 PX4 正常运行另外打开一个 WSL2 终端进行验证。首先确认 Micro-XRCE-DDS-Agent 已启动# 加载 ROS2 与工作空间环境变量 source /opt/ros/humble/setup.bash source ~/ros2_px4_ws/install/setup.bash # 启动 Agent监听 8888 端口 MicroXRCEAgent udp4 -p 8888进入 PX4 shell 后可以检查 uXRCE-DDS Client 是否正常运行# 在 PX4 SITL shell 中检查 uXRCE-DDS Client 状态 uxrce_dds_client status新开一个 WSL2 终端查看当前所有 ROS2 话题# 加载环境变量 source /opt/ros/humble/setup.bash source ~/ros2_px4_ws/install/setup.bash # 查看当前所有 ROS2 话题 ros2 topic list如果通信成功应该能够看到类似/fmu/in/...和/fmu/out/...的话题例如/fmu/out/vehicle_status /fmu/out/vehicle_odometry /fmu/out/vehicle_local_position读取状态和里程计数据# 读取 PX4 状态话题的实时消息 ros2 topic echo /fmu/out/vehicle_status # 读取里程计话题的实时消息 ros2 topic echo /fmu/out/vehicle_odometry如果能够正常接收到 PX4 的状态消息说明 ROS2、PX4 与 AirSim 的联合仿真环境搭建成功。此外还可以通过以下命令进一步验证# 查看话题发布频率确认数据持续流动 ros2 topic hz /fmu/out/vehicle_status # 查看节点列表确认相关节点正常运行 ros2 node list在 QGroundControl 中如果能看到无人机模型并实时显示姿态、高度等状态信息说明 AirSim 与 PX4 的 MAVLink 链路也已打通。需要注意PX4 并不会自动把所有 uORB Topic 都暴露到 ROS2实际发布和订阅的 Topic 由 PX4 对应版本中的 DDS Topic 配置决定。十、常见问题排查搭建过程中难免遇到各种问题下面汇总了最常见的几类故障及其排查思路问题可能原因解决方案AirSim 无法启动Unreal Engine 版本不匹配确认使用 UE4.27 构建 AirSimPX4 连接失败MAVLink 端口配置错误检查 settings.json 中的 TcpPort 设置ROS2 话题为空Agent 未连接 / PX4 uXRCE-DDS Client 未运行 / ROS2 工作空间未加载检查 Agent、PX4 Client 状态和 ROS2 环境PX4 无法连接 AirSimPX4_SIM_HOST_ADDR 未设置或地址错误启动前执行 export PX4_SIM_HOST_ADDR$(ip route | awk /default/ {print $3; exit}) 重新获取地址Micro-XRCE-DDS-Agent 启动失败端口 8888 被占用使用 lsof -i:8888 查看占用进程或更换端口并同步修改 PX4 配置WSL2 重启后无法通信虚拟网卡 IP 地址发生变化不要写死 IP每次启动前重新获取 PX4_SIM_HOST_ADDR 并检查防火墙规则PX4 启动后立即退出AirSim 尚未启动或端口未就绪先启动 AirSim 并确认 4560 端口可访问再启动 PX4 SITLros2 topic echo 无输出Agent 未连接 / PX4 uXRCE-DDS Client 未运行 / ROS2 工作空间未加载检查 Agent、PX4 Client 状态和 ROS2 环境如果遇到上述表格之外的问题建议按以下顺序排查先确认各组件版本与版本矩阵一致再检查网络端口是否被占用最后查看终端日志中的错误提示通常能快速定位问题根源。此外建议在搭建过程中养成记录日志的习惯。每个组件启动时都会输出关键信息例如 PX4 启动日志中的 MAVLink 连接状态、Agent 日志中的 Client 连接记录、ROS2 节点的话题发布频率等。遇到问题时先对照日志定位是哪个环节出错再结合上表针对性解决往往能事半功倍。十一、总结本文详细介绍了 ROS2、PX4 与 AirSim 联合仿真环境的搭建流程从依赖安装、组件编译到联合启动与验证覆盖了完整的开发链路。该环境可用于无人机算法验证、路径规划测试和视觉感知研究为后续开发提供了可靠的仿真基础。回顾整个搭建过程核心要点可以归纳为以下四点版本固定ROS2 Humble、PX4 固定 tag、Micro-XRCE-DDS-Agent v2.4.2、UE4.27 与 AirSim 之间必须保持兼容建议将实际验证通过的版本记录下来避免升级引入未知问题。网络打通Windows WSL2 跨主机方案的关键在于 IP 与端口。PX4 与 AirSim 通过 4560 端口通信PX4 与 Agent 通过 8888 端口通信每次启动前都要重新获取 PX4_SIM_HOST_ADDR并确保防火墙放行相关端口。启动顺序先在 Windows 中启动 AirSim然后在 WSL2 中启动 Micro-XRCE-DDS-Agent再启动 PX4 SITL。PX4 与 Agent 建立连接后加载 ROS2 工作空间并通过/fmu/in/...与/fmu/out/...Topic 验证 PX4 与 ROS2 的通信是否正常。最后可以启动 QGroundControl 对 PX4 飞行状态进行监控。其中 ROS2 与 PX4 的通信并不依赖单独启动px4_ros_com桥接节点而是由 PX4 内置的 uXRCE-DDS Client 与 Micro-XRCE-DDS-Agent 完成 DDS 数据交换。日志排查搭建过程中养成查看日志的习惯PX4 启动日志中的 MAVLink 连接状态、Agent 日志中的 Client 连接记录、ROS2 节点的话题发布频率都是定位问题的关键线索。后续可以在此基础上继续深入的方向包括使用 MAVSDK 编写更复杂的航点任务、接入视觉传感器进行目标检测与避障、将仿真中验证通过的算法迁移到真实无人机等。希望本文能帮助你顺利搭建起属于自己的无人机仿真开发环境。
返回列表