1. SITL仿真概述:什么是SITL、SITL与HITL的区别、SITL在无人机开发中的价值、主流SITL框架对比

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?我总结了四个核心价值:

  1. 成本归零:一次实飞炸机可能损失几千块,SITL里炸一万次也不心疼。我团队的新人培训,前两周全在SITL里练,练熟了才上真机。
  2. 快速迭代:修改代码 → 编译 → 运行,整个过程不到30秒。实飞的话,光去场地、架设备、等电池充电,半小时就没了。
  3. 极限测试:在SITL里你可以模拟GPS丢失、电机失效、强风干扰。这些场景在实飞中很难复现,而且风险极高。
  4. 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) PX4 / ArduPilot 编译为PC可执行文件 传感器模型 GPS / IMU / 气压计 磁力计 / 光流 物理引擎 空气动力学 / 重力 推力 / 阻力 / 惯性 控制指令 传感器数据 环境模拟 风场 / 地形 / 光照 GPS信号质量 / 磁场 状态反馈 地面站 (GCS) QGroundControl Mission Planner MAVLink 用户接口层 命令行 / Python API / ROS话题 / Web界面 说明: SITL仿真中,飞控固件、传感器模型、物理引擎、环境模拟全部运行在同一台PC上。 地面站通过MAVLink协议与SITL飞控通信,操作方式与实飞完全一致。

从这张图你可以看到,SITL仿真本质上是一个闭环系统:飞控发出控制指令 → 物理引擎计算运动 → 传感器模型生成数据 → 飞控接收数据并调整控制。地面站和用户接口层则提供了人机交互的通道。

实用技巧:刚开始用SITL时,我建议你先跑一个最简单的悬停测试。启动SITL后,用地面的站解锁、切到定点模式、推油门。如果飞机能稳定悬停,说明你的SITL环境搭建成功了。这个过程我一般控制在5分钟以内。