4. PX4 SITL仿真配置

PX4 SITL(Software-In-The-Loop)仿真通过在本地计算机上运行完整的PX4飞行栈,配合Gazebo物理引擎模拟无人机机体、传感器和动力学模型,为开发者提供了一个无需真实硬件即可验证飞控逻辑、视觉算法和控制策略的高保真环境。本章将深入讲解如何通过make px4_sitl gazebo命令启动仿真,系统配置机架类型、仿真速度与关键环境变量,并完成与地面控制站QGroundControl(QGC)的联调验证。理解这一配置流程,是后续开展视觉输入仿真、控制策略迭代和故障注入测试的基础。

PX4 SITL 仿真配置与验证链路 make px4_sitl gazebo PX4固件编译 Gazebo世界加载 SITL接口启动 机架类型配置 PX4_AIRFRAME iris / plane / rover 模型参数加载 环境变量设置 PX4_HOME_LAT/LON PX4_SIM_SPEED_FACTOR 仿真速度控制 QGC连接 UDP 14550 MAVLink 状态验证 核心配置流程 选择机架模型 → 设置仿真速度与地理坐标 → 启动SITL → 连接QGC → 验证传感器/姿态/模式切换 关键环境变量 PX4_HOME_LAT: 初始纬度 PX4_HOME_LON: 初始经度 PX4_HOME_ALT: 初始高度 PX4_SIM_SPEED_FACTOR: 仿真倍速 QGC验证要点 1. 通信连接状态 (UDP 14550) 2. 姿态/罗盘/气压计数据流 3. 飞行模式切换 (Stabilize/Offboard) 4. 虚拟摇杆/任务上传响应

4.1 核心原理:SITL仿真架构与Gazebo交互机制

PX4 SITL仿真的核心在于将完整的PX4飞控固件编译为本地Linux进程,通过共享内存或UDP/TCP端口与Gazebo仿真器进行数据交换。PX4固件内部包含传感器驱动、姿态估计器(如EKF2)、导航和控制算法,这些模块在SITL模式下直接运行于宿主机CPU上,而Gazebo则负责模拟物理世界中的机体动力学、传感器噪声和环境交互。两者通过MAVLink协议或uORB消息桥接,实现双向数据流:PX4向Gazebo发送电机指令(PWM值),Gazebo计算后返回IMU、GPS、气压计等传感器数据。

这种架构的优势在于:代码复用性高——同一套PX4固件代码既可用于真机也可用于仿真,无需修改核心算法;调试便捷——开发者可以在仿真中设置断点、打印日志,甚至注入传感器故障;成本低且安全——无需担心炸机风险,可快速迭代控制参数。然而,SITL仿真也有其局限性,例如无法模拟真实的电磁干扰、风场湍流等复杂环境,且仿真时间步长与实时性受限于宿主机性能。

关键理解:SITL仿真中,PX4固件进程与Gazebo进程是相互独立的实体。PX4通过px4_sitl启动脚本加载机架模型参数,并创建MAVLink通信端点(默认UDP端口14540用于与QGC通信,14550用于与Gazebo通信)。Gazebo则通过插件(如libgazebo_ros_mavlink_interface.so)接收PX4的电机指令并反馈传感器数据。理解这一数据流,有助于排查“仿真器无响应”或“QGC无法连接”等常见问题。

4.2 操作流程:从命令行启动到QGC连接验证

本节以PX4官方支持的iris四旋翼模型为例,演示完整的SITL仿真配置流程。操作环境为Ubuntu 20.04/22.04 LTS,已安装PX4-Autopilot源码和Gazebo 9/11。

4.2.1 基础启动命令与机架类型配置

进入PX4固件根目录,执行以下命令启动默认的iris四旋翼SITL仿真:

cd ~/PX4-Autopilot
make px4_sitl gazebo

该命令会编译PX4固件(首次编译约需10-20分钟),随后自动启动Gazebo并加载iris模型。若要选择其他机架类型,可使用PX4_AIRFRAME环境变量指定,例如固定翼plane或地面车辆rover:

PX4_AIRFRAME=plane make px4_sitl gazebo
# 或使用更精确的模型名称
PX4_AIRFRAME=plane_aav make px4_sitl gazebo

机架类型决定了PX4加载的混控器(mixer)文件、几何参数和默认控制增益。例如,iris四旋翼使用quad_x混控器,而固定翼使用plane混控器。选择错误的机架类型会导致电机输出异常或姿态控制发散。

4.2.2 仿真速度与环境变量配置

仿真速度控制是SITL调试的重要环节。PX4默认以1倍速实时运行,但可通过PX4_SIM_SPEED_FACTOR环境变量加速或减速仿真,以节省时间或便于观察慢速现象:

# 以2倍速运行仿真
PX4_SIM_SPEED_FACTOR=2 make px4_sitl gazebo
# 以0.5倍速运行(便于观察细节)
PX4_SIM_SPEED_FACTOR=0.5 make px4_sitl gazebo

地理坐标环境变量PX4_HOME_LAT、PX4_HOME_LON和PX4_HOME_ALT用于设置无人机在仿真世界中的初始位置。默认情况下,PX4使用Gazebo世界原点(通常为北纬47.3977°,东经8.5456°,即苏黎世联邦理工学院附近)。若要模拟特定区域的飞行任务,可自定义坐标:

PX4_HOME_LAT=31.2304 PX4_HOME_LON=121.4737 PX4_HOME_ALT=10 make px4_sitl gazebo

设置正确的初始坐标对于GPS相关测试至关重要,例如验证航点任务、返航(RTL)功能或地理围栏。若坐标设置错误,可能导致GPS定位异常或地图显示偏移。

4.2.3 验证QGC连接与数据流

启动仿真后,打开QGroundControl地面站。QGC默认通过UDP端口14550监听MAVLink数据。PX4 SITL启动时,会自动向本机14550端口发送数据,因此QGC通常无需额外配置即可自动发现仿真无人机。验证步骤如下:

  1. 检查通信状态:在QGC右上角查看“通信连接”图标,应显示为绿色并标注“UDP Link”或“MAVLink”已连接。
  2. 查看传感器数据:进入“仪表盘”或“状态”页面,确认姿态(横滚/俯仰/偏航)、高度、空速(若适用)、GPS卫星数等数据持续更新。
  3. 测试飞行模式切换:在QGC的“飞行模式”下拉菜单中选择“Stabilize”或“Offboard”,观察PX4控制台输出是否确认模式切换。
  4. 虚拟摇杆控制:启用QGC的虚拟摇杆(需在设置中开启),推动油门和方向杆,观察Gazebo中无人机模型是否响应。
经验提示:若QGC无法连接,首先检查PX4终端是否输出INFO [mavlink] mode: Normal和INFO [mavlink] MAVLink on port 14550。若端口被占用,可使用PX4_SIM_MAVLINK_PORT环境变量修改端口。另外,确保防火墙允许UDP 14550端口通信。

4.3 案例拆解:自定义仿真场景与QGC联调实战

本案例模拟一个典型的视觉算法验证场景:在仿真环境中设置无人机初始位置为上海某坐标,以2倍速运行,并通过QGC上传一个简单的航点任务,验证PX4的导航控制链路。

背景与目标:开发者需要验证一个基于视觉的降落算法,要求无人机在指定坐标上空悬停后执行垂直降落。由于真实飞行成本高,选择SITL仿真进行初步验证。

关键参数设置:

参数项设置值说明
机架类型iris四旋翼标准模型
仿真速度2.0加速仿真,缩短测试时间
PX4_HOME_LAT31.2304上海北纬坐标
PX4_HOME_LON121.4737上海东经坐标
PX4_HOME_ALT50.0初始高度50米

操作步骤:

  1. 在PX4源码目录执行:PX4_HOME_LAT=31.2304 PX4_HOME_LON=121.4737 PX4_HOME_ALT=50 PX4_SIM_SPEED_FACTOR=2 make px4_sitl gazebo。
  2. 等待Gazebo加载完成,PX4终端输出Ready for takeoff。
  3. 打开QGC,确认自动连接。在“规划”页面添加一个航点(坐标设为当前位置北100米、东50米,高度80米),上传任务。
  4. 切换至“Offboard”模式,点击“开始任务”。观察QGC地图中无人机轨迹和Gazebo中的物理运动。
  5. 在PX4终端使用listener sensor_gps命令查看GPS数据,确认经纬度与设定值一致。

结果与复盘:仿真以2倍速运行,整个航点任务在约3分钟内完成(实时时间)。QGC中轨迹平滑,PX4日志无报错。但发现一个问题:由于仿真速度加倍,视觉算法(运行在另一台计算机上)接收到的图像帧率也加倍,导致算法处理延迟。复盘结论:在涉及视觉算法验证时,应保持仿真速度为1.0,以确保图像时间戳与真实场景一致。

风险提示:修改PX4_SIM_SPEED_FACTOR会影响所有与时间相关的传感器数据(如IMU积分、GPS更新率)。当速度因子大于1时,PX4的EKF2估计器可能因数据到达过快而出现数值不稳定。建议仅在非实时性要求不高的控制逻辑测试中使用加速仿真,视觉或传感器融合测试应使用1倍速。

4.4 常见误区与总结复盘

在SITL仿真配置过程中,开发者常遇到以下几类问题,本节进行归纳并提供排查思路。

误区/问题现象原因分析解决方案
机架类型错误电机输出异常、无人机无法起飞混控器与机架不匹配检查PX4_AIRFRAME设置,使用make list_config_targets查看可用机架
QGC无法连接QGC显示“无连接”端口冲突或防火墙拦截使用PX4_SIM_MAVLINK_PORT修改端口;检查防火墙规则
仿真速度异常无人机运动卡顿或过快宿主机性能不足或速度因子设置不当降低PX4_SIM_SPEED_FACTOR;关闭其他高CPU占用程序
GPS坐标无效QGC地图显示位置错误环境变量未正确传递确认环境变量在make命令前设置;使用echo $PX4_HOME_LAT验证

总结复盘:成功的SITL仿真配置需要关注三个核心要素:机架模型与混控器的一致性、环境变量的正确传递、通信链路的畅通。建议在每次启动仿真前,使用make px4_sitl gazebo的-v选项(如make px4_sitl gazebo -v)查看详细编译和启动日志,这有助于快速定位配置错误。此外,养成检查PX4终端输出的习惯——它包含了MAVLink端口、传感器初始化状态和EKF收敛信息,是判断仿真健康度的第一手资料。

最佳实践:对于需要反复调试的仿真场景,建议编写一个启动脚本(如start_sitl.sh),将机架类型、环境变量和Gazebo世界文件统一管理。例如:
#!/bin/bash
export PX4_HOME_LAT=31.2304
export PX4_HOME_LON=121.4737
export PX4_HOME_ALT=50
export PX4_SIM_SPEED_FACTOR=1
make px4_sitl gazebo
这样既能保证配置的可重复性,也便于团队协作时共享仿真环境。