4. PX4 SITL仿真配置
PX4 SITL(Software-In-The-Loop)仿真通过在本地计算机上运行完整的PX4飞行栈,配合Gazebo物理引擎模拟无人机机体、传感器和动力学模型,为开发者提供了一个无需真实硬件即可验证飞控逻辑、视觉算法和控制策略的高保真环境。本章将深入讲解如何通过make px4_sitl gazebo命令启动仿真,系统配置机架类型、仿真速度与关键环境变量,并完成与地面控制站QGroundControl(QGC)的联调验证。理解这一配置流程,是后续开展视觉输入仿真、控制策略迭代和故障注入测试的基础。
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仿真也有其局限性,例如无法模拟真实的电磁干扰、风场湍流等复杂环境,且仿真时间步长与实时性受限于宿主机性能。
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通常无需额外配置即可自动发现仿真无人机。验证步骤如下:
- 检查通信状态:在QGC右上角查看“通信连接”图标,应显示为绿色并标注“UDP Link”或“MAVLink”已连接。
- 查看传感器数据:进入“仪表盘”或“状态”页面,确认姿态(横滚/俯仰/偏航)、高度、空速(若适用)、GPS卫星数等数据持续更新。
- 测试飞行模式切换:在QGC的“飞行模式”下拉菜单中选择“Stabilize”或“Offboard”,观察PX4控制台输出是否确认模式切换。
- 虚拟摇杆控制:启用QGC的虚拟摇杆(需在设置中开启),推动油门和方向杆,观察Gazebo中无人机模型是否响应。
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_LAT | 31.2304 | 上海北纬坐标 |
| PX4_HOME_LON | 121.4737 | 上海东经坐标 |
| PX4_HOME_ALT | 50.0 | 初始高度50米 |
操作步骤:
- 在PX4源码目录执行:
PX4_HOME_LAT=31.2304 PX4_HOME_LON=121.4737 PX4_HOME_ALT=50 PX4_SIM_SPEED_FACTOR=2 make px4_sitl gazebo。 - 等待Gazebo加载完成,PX4终端输出
Ready for takeoff。 - 打开QGC,确认自动连接。在“规划”页面添加一个航点(坐标设为当前位置北100米、东50米,高度80米),上传任务。
- 切换至“Offboard”模式,点击“开始任务”。观察QGC地图中无人机轨迹和Gazebo中的物理运动。
- 在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
这样既能保证配置的可重复性,也便于团队协作时共享仿真环境。