1. 课程导入
1.1 什么是SITL?
SITL,全称 Software-in-the-Loop,中文叫「软件在环仿真」。说白了,就是用纯软件模拟整个无人机系统——飞控固件、传感器、物理模型、环境,全都在你的电脑上跑。
我刚开始接触无人机开发时,总觉得SITL是个「玩具」。直到有一次,我在实飞测试中炸了一架四轴,原因只是参数调错了一个小数点。嗯,从那以后,我再也不敢轻视SITL了。
SITL的核心逻辑很简单:
- 飞控代码:直接编译成PC可执行文件,跑在本地
- 传感器模型:模拟GPS、IMU、气压计、磁力计的数据
- 物理引擎:计算空气动力学、重力、推力、阻力
- 环境模拟:风、地形、光照、GPS信号质量
你想想看,整个系统都在一台笔记本里运行,不需要任何硬件。这就是SITL最大的魅力——零硬件成本,无限次重试。
核心要点:SITL不是「简化版」飞控,而是完整飞控固件在PC上的编译运行。你写的代码、调的参数,和实飞时完全一致。
1.2 SITL与HITL的区别
很多新手分不清SITL和HITL。我习惯用一个比喻来解释:
- SITL = 在电脑上玩飞行模拟器,键盘鼠标操作
- HITL = 用真实遥控器连接模拟器,手感更真实
HITL(Hardware-in-the-Loop)需要真实的飞控硬件(比如Pixhawk),通过USB或串口连接到仿真环境。飞控跑的是嵌入式固件,但传感器数据由仿真器提供。
| 对比维度 | SITL | HITL |
|---|---|---|
| 硬件需求 | 仅需一台电脑 | 需要飞控板、数传模块等 |
| 编译目标 | PC原生可执行文件 | 嵌入式固件(ARM等) |
| 实时性 | 依赖CPU性能,可加速/减速 | 硬件实时运行,与真实时间同步 |
| 传感器模拟 | 纯软件模型 | 硬件读取仿真数据 |
| 调试便利性 | 可直接GDB断点调试 | 需JTAG/SWD调试器 |
| 适用阶段 | 算法开发、单元测试、CI/CD | 硬件验证、集成测试 |
避坑提醒:我曾经见过团队在HITL上花了大量时间调试,结果发现是仿真环境配置问题,根本不是飞控代码的bug。我的建议是——先SITL跑通逻辑,再HITL验证硬件,顺序别搞反。
1.3 SITL在无人机开发中的价值
为什么每个无人机团队都应该用SITL?我总结了四个核心价值:
- 成本归零:一次实飞炸机可能损失几千块,SITL里炸一万次也不心疼。我团队的新人培训,前两周全在SITL里练,练熟了才上真机。
- 快速迭代:修改代码 → 编译 → 运行,整个过程不到30秒。实飞的话,光去场地、架设备、等电池充电,半小时就没了。
- 极限测试:在SITL里你可以模拟GPS丢失、电机失效、强风干扰。这些场景在实飞中很难复现,而且风险极高。
- CI/CD集成:把SITL测试写进自动化流水线,每次提交代码自动跑一遍仿真。我团队现在有200多个SITL测试用例,覆盖了90%的飞行场景。
个人经验:我建议每个项目都建立一个「SITL测试矩阵」——不同机型、不同环境、不同故障模式组合起来跑。你会发现很多在实飞中根本想不到的边界情况。
1.4 主流SITL框架对比:PX4 SITL vs ArduPilot SITL
目前主流的开源无人机飞控有两个:PX4和ArduPilot。它们都提供了SITL仿真能力,但实现方式和侧重点不同。
PX4 SITL
PX4的SITL基于Gazebo仿真器(现在也支持Ignition Gazebo)。飞控代码用make px4_sitl gazebo编译,启动后会自动加载无人机模型和环境。
我个人觉得PX4 SITL的优势在于:
- 与ROS/ROS2深度集成,适合学术研究和算法开发
- 多机仿真支持好,可以同时跑几十架无人机
- 物理引擎基于Gazebo,模型精度较高
ArduPilot SITL
ArduPilot的SITL更轻量。它自带一个内置物理模型,不需要外部仿真器也能跑。启动命令很简单:sim_vehicle.py -v ArduCopter。
ArduPilot SITL的特点:
- 启动快,依赖少,适合快速测试
- 支持多种机型:四轴、固定翼、VTOL、无人船
- MAVLink协议支持完善,可对接QGroundControl、Mission Planner
| 对比维度 | PX4 SITL | ArduPilot SITL |
|---|---|---|
| 仿真器 | Gazebo / Ignition | 内置物理模型(可选Gazebo) |
| 启动速度 | 较慢(需加载Gazebo) | 快(秒级启动) |
| 多机仿真 | 原生支持 | 需额外配置 |
| ROS集成 | 深度集成 | 通过MAVROS桥接 |
| 机型支持 | 多旋翼、VTOL、固定翼 | 多旋翼、固定翼、VTOL、无人船、无人车 |
| 学习曲线 | 较陡(需了解Gazebo) | 平缓(文档丰富) |
| 社区生态 | 学术圈、Dronecode联盟 | 爱好者、商业应用 |
我的选择建议:如果你做的是算法研究、多机协同、视觉SLAM,选PX4 SITL。如果你做的是产品原型验证、航线规划测试、快速迭代,ArduPilot SITL更顺手。我自己两个都用,但日常快速测试我偏向ArduPilot——启动快,省时间。
1.5 SITL仿真核心架构图
下面这张图展示了SITL仿真的整体数据流。我把它画出来,方便你理解各个模块之间的关系。
从这张图你可以看到,SITL仿真本质上是一个闭环系统:飞控发出控制指令 → 物理引擎计算运动 → 传感器模型生成数据 → 飞控接收数据并调整控制。地面站和用户接口层则提供了人机交互的通道。
实用技巧:刚开始用SITL时,我建议你先跑一个最简单的悬停测试。启动SITL后,用地面的站解锁、切到定点模式、推油门。如果飞机能稳定悬停,说明你的SITL环境搭建成功了。这个过程我一般控制在5分钟以内。