3. HITL硬件在环仿真
讲完了SITL纯软件仿真,咱们得聊聊更贴近实战的玩法——HITL(Hardware-in-the-Loop)。说白了,就是把真实的飞控硬件(比如Pixhawk)连到电脑上,让它在虚拟世界里飞。
我最早接触HITL时,心里也犯嘀咕:这不就是SITL加块板子吗?后来踩了坑才明白,两者差别大了去了。HITL能验证硬件驱动、传感器时序、甚至固件在真实MCU上的跑分表现。你想想看,SITL跑得再欢,也测不出I2C总线上的干扰问题。
3.1 硬件在环的核心逻辑
HITL的原理其实不复杂。飞控板通过USB或串口连到PC,PC上跑着Gazebo或PX4的仿真环境。仿真器把传感器数据(IMU、GPS、气压计)通过MAVLink协议喂给飞控。飞控以为自己在真飞,实际上在虚拟世界里打转。
我习惯把HITL比作「飞行模拟器」——飞行员在模拟舱里操作,仪表盘上的数据都是假的,但操作杆的反馈是真的。HITL也一样,飞控输出的PWM信号被仿真器截获,换算成电机推力,再更新物理模型。
3.2 硬件连接与准备工作
动手之前,先把家伙事儿备齐。我列个清单,你照着准备就行。
| 硬件/软件 | 说明 | 备注 |
|---|---|---|
| 飞控板(Pixhawk 4 / Cube Orange) | 刷好HITL专用固件 | 固件版本需与仿真器匹配 |
| USB数据线 | 连接飞控与PC | 建议用带屏蔽的线,抗干扰 |
| QGroundControl | 地面站,用于配置和监控 | v4.2以上版本 |
| Gazebo / jMAVSim | 仿真环境 | 推荐Gazebo,模型更丰富 |
| PX4 Firmware | 源码编译或预编译固件 | make px4_fmu-v5_hitl |
3.3 HITL配置步骤
配置过程其实不复杂,但步骤顺序很重要。我习惯按这个流程走,基本一次过。
- 编译HITL固件
编译完成后,固件在cd ~/PX4-Autopilot make px4_fmu-v5_hitlbuild/px4_fmu-v5_hitl/px4_fmu-v5_hitl.px4。 - 刷写固件
用QGC刷写。连上飞控,在「固件」页面选择「高级设置」→「自定义固件文件」,选中刚才编译好的
.px4文件。刷完后飞控会自动重启。 - 配置HITL参数
在QGC的参数列表中,修改以下关键参数:
参数名 值 说明 SYS_HITL 1 启用HITL模式 COM_RC_IN_MODE 0 RC输入模式,HITL下通常用虚拟RC SIM_GPS1_ENABLE 1 启用仿真GPS - 启动仿真环境
注意:这里虽然用了make px4_sitl gazebo_irispx4_sitl命令,但实际启动的是Gazebo仿真器。飞控硬件会通过MAVLink连接到仿真器。 - 连接飞控与仿真器
在QGC中,确认飞控已经通过USB连接。仿真器启动后,会自动在UDP端口14550上监听。飞控的HITL固件会主动向仿真器发送传感器数据请求。
- 验证连接
在QGC的「状态」页面,查看GPS、姿态、气压计数据是否在跳动。如果数据稳定更新,说明HITL连接成功。
mavlink-router 把飞控的串口数据转发到UDP。这样即使仿真器崩溃,QGC还能保持连接,方便排查问题。
3.4 HITL与SITL的差异对比
很多新手会问:既然SITL那么方便,为什么还要折腾HITL?我直接给你列个对比表,看完就明白了。
| 对比维度 | SITL | HITL |
|---|---|---|
| 运行平台 | PC(Linux / macOS / Windows) | 真实飞控硬件(STM32 / STM32H7) |
| 传感器数据 | 完全由仿真器生成 | 仿真器生成,通过MAVLink注入飞控 |
| 执行器输出 | 仿真器直接计算电机模型 | 飞控输出真实PWM信号,仿真器捕获后计算 |
| RC输入 | 键盘/手柄映射 | 真实RC接收机或虚拟RC |
| 固件验证 | 验证算法逻辑 | 验证固件在真实MCU上的运行稳定性 |
| 调试难度 | 低,可直接GDB调试 | 中等,需通过SWD或串口日志 |
| 适用场景 | 算法开发、快速原型验证 | 硬件驱动测试、时序验证、系统集成测试 |
说白了,SITL是「软仿真」,适合在代码层面快速迭代。HITL是「硬仿真」,能暴露硬件相关的问题。我遇到过最典型的例子:SITL里跑得好好的航线,上了HITL就偏航。查了半天,发现是磁罗盘的I2C时序在真实硬件上有延迟,导致航向数据滞后。
3.5 常见问题与避坑指南
HITL配置过程中,有几个坑我替你们踩过了,直接说重点。
- 飞控无法解锁:检查
SYS_HITL参数是否设为1。如果没设,飞控会认为自己在真机上,检测不到GPS就会拒绝解锁。 - 仿真器收不到飞控数据:确认USB线是否支持数据传输。有些充电线只能充电,不能传数据。我吃过这个亏,换了根线就好了。
- 姿态数据跳动:检查飞控的固件版本是否与仿真器匹配。我建议都用最新稳定版,避免协议不兼容。
- PWM输出异常:HITL模式下,飞控的PWM输出是真实的。如果接了电调或舵机,注意不要接动力电源,否则可能烧坏设备。
嗯,HITL的内容差不多就这些。记住一句话:SITL帮你把逻辑跑通,HITL帮你把硬件跑稳。两者结合,才是完整的仿真测试流程。