第三章 测试环境搭建:硬件在环(HIL)与软件在环(SIL)

各位工程师,大家好。这一章我们聊聊测试环境搭建。说实话,很多团队在飞控开发初期,都急着把代码往真飞机上怼。结果呢?炸机、烧板子、电机堵转……我见过太多惨痛的教训了。

所以,在飞控验证测试里,环境搭建是地基。地基不稳,后面全是白干。我个人习惯把测试环境分成两类:软件在环(SIL)硬件在环(HIL)。这两者各有各的用处,咱们一个一个说。

核心观点:SIL 跑逻辑,HIL 跑接口。两者结合,才能覆盖从算法到硬件的全链路验证。

飞控验证测试环境体系 软件在环(SIL) 纯软件仿真环境 验证控制算法逻辑 无需真实硬件 硬件在环(HIL) 真实硬件 + 仿真模型 验证接口与实时性 需要飞控板、传感器等 逐步递进 推荐流程 算法开发 → SIL 验证 → HIL 验证 → 真机试飞 每一步都不可跳过,否则风险自担

3.1 软件在环(SIL)测试环境配置

SIL 说白了,就是让飞控代码跑在一个虚拟的飞机模型上。你想想看,代码还没烧进板子,就能先跑一圈,多省事。我刚开始做飞控时,总觉得 SIL 是浪费时间,后来有一次在 SIL 里发现了一个积分饱和的 bug,要是真机试飞,估计就炸了。从那以后,我再也不敢跳过 SIL。

3.1.1 SIL 环境的核心组件

  • 飞控代码:你写的控制算法、状态估计、导航逻辑。通常是 C/C++ 或 Python。
  • 飞机模型:一个数学仿真模型,模拟四旋翼、固定翼或 VTOL 的动力学。我常用的是 PX4 的 SITL 框架,或者自己搭的 MATLAB/Simulink 模型。
  • 通信接口:飞控代码和模型之间通过 UDP、共享内存或 socket 交换数据。比如飞控发油门指令,模型回传姿态和位置。
  • 可视化工具:比如 Gazebo、FlightGear 或 JMAVSim。能看到飞机在虚拟世界里飞,心里踏实。

我的小技巧:SIL 环境里,时间可以加速。比如你想跑 10 分钟的飞行,可以设置 2 倍速,5 分钟就跑完了。但注意,加速后模型稳定性会变差,别问我怎么知道的……

3.1.2 SIL 环境搭建步骤(以 PX4 SITL 为例)

  1. 安装依赖:Ubuntu 20.04 上装 GCC、CMake、Python3、Gazebo 等。我建议用脚本一键安装,别手动一个个装,容易漏。
  2. 下载源码git clone https://github.com/PX4/PX4-Autopilot.git,然后切到稳定分支。
  3. 编译 SITL 目标make px4_sitl gazebo。第一次编译会下载模型和依赖,大概 10-20 分钟。
  4. 启动仿真:运行 ./Tools/sitl_run.sh,或者直接用 make px4_sitl gazebo_iris
  5. 连接地面站:QGroundControl 会自动检测到 UDP 端口,你就能看到虚拟飞机了。
# 快速启动命令示例
cd ~/PX4-Autopilot
make px4_sitl gazebo_iris
# 等待终端输出 "INFO  [simulator] Waiting for simulator to connect..."
# 然后打开 QGC,就能看到飞机了

注意:SIL 环境里,传感器噪声和真实硬件不一样。我曾经遇到过 SIL 里飞得好好的,上 HIL 就抖。原因是 SIL 的 IMU 噪声模型太理想了。所以,SIL 只能验证逻辑,不能验证硬件适配。

3.2 硬件在环(HIL)测试平台搭建

HIL 就比 SIL 重多了。你需要真实的飞控板、传感器、甚至执行器。但回报也大——你能验证硬件接口、实时性、以及代码在真实 MCU 上的表现。

我个人习惯,HIL 是飞控验证的「最后一道防线」。过了 HIL,我才敢说「这版固件可以上真机」。

3.2.1 HIL 平台的硬件组成

组件 说明 我常用的型号
飞控板 运行飞控固件的 MCU 板 Pixhawk 4、CUAV V5+
仿真器 模拟传感器和执行器信号 dSPACE、NI PXI、或者自研的 STM32 仿真板
信号接口 PWM、I2C、SPI、UART、CAN 等 根据飞控板接口定制
上位机 运行仿真模型和监控软件 工控机 + MATLAB/Simulink

3.2.2 HIL 环境搭建步骤

  1. 硬件连接:把飞控板通过串口或 USB 连接到仿真器。注意电源和地线,别接反了。我见过有人把 5V 和 GND 接反,板子直接冒烟。
  2. 配置仿真模型:在 MATLAB/Simulink 里搭建飞机动力学模型,并配置 I/O 接口。比如 PWM 输出对应油门,UART 接收 GPS 数据。
  3. 编译飞控固件:针对你的飞控板编译 HIL 版本。PX4 有专门的 px4_fmu-v5_hil 目标。
  4. 烧录固件:用 QGC 或命令行烧录到飞控板。
  5. 启动仿真:先启动仿真器上的模型,再给飞控板上电。顺序反了可能会造成通信超时。
  6. 监控数据:用 QGC 或 MATLAB 的 Scope 查看姿态、位置、控制输出等。
# 编译 PX4 HIL 固件示例
cd ~/PX4-Autopilot
make px4_fmu-v5_hil
# 烧录到飞控板(通过 USB)
./Tools/upload.sh px4_fmu-v5_hil

关键点:HIL 测试中,仿真器的实时性至关重要。如果仿真步长不稳定,飞控会误判为传感器故障。我建议仿真器的实时周期控制在 1ms 以内,抖动不超过 10% 。

3.2.3 避坑指南

  • 我曾经遇到过:HIL 里飞控一直报「传感器超时」。查了两天,发现是仿真器的 I2C 速率设置太快,飞控板跟不上。后来把速率降到 100kHz,问题解决。
  • 我曾经遇到过:PWM 信号在 HIL 里正常,但真机上电机不转。原因是 HIL 里用的 PWM 频率是 50Hz,真机电机需要 400Hz。所以,HIL 的参数必须和真机一致。
  • 我曾经遇到过:仿真模型里忘了加地磁干扰,结果 HIL 里航向一直漂。后来加了地磁模型,才复现了真机上的问题。

我的建议:HIL 测试不要只跑正常情况。一定要注入故障——比如 GPS 丢失、IMU 饱和、电机堵转。这些才是 HIL 的价值所在。你想想看,真机上你敢故意拔 GPS 天线吗?HIL 里随便拔。

3.3 SIL 与 HIL 的对比与选择

维度 SIL HIL
硬件需求 仅需一台电脑 需要飞控板、仿真器等
实时性 非实时(可加速/减速) 硬实时(必须与真实时间同步)
验证范围 算法逻辑、控制律 硬件接口、实时性、故障注入
搭建成本 低(免费开源工具) 高(仿真器几万到几十万)
适用阶段 算法开发初期 固件发布前

嗯,这里要注意:不要以为 SIL 跑通了,HIL 就一定能过。我见过太多团队在 SIL 里调好了 PID,上 HIL 就发散。原因往往是 SIL 里忽略了传感器延迟和量化误差。所以,我的流程是:先 SIL 调逻辑,再 HIL 调接口,最后真机试飞。

总结一句话:SIL 让你放心写代码,HIL 让你放心飞真机。两者缺一不可。


专注资料整理