1. SITL 仿真概述
各位同学,欢迎来到《从零搭建你的首套 SITL 仿真环境》。我是你们这门课的老朋友,一个在嵌入式与无人机领域摸爬滚打了十几年的工程师。
咱们第一节课,不急着敲代码。先聊聊 SITL 到底是什么,它跟 HITL 有啥区别,能用在哪些地方,以及整个仿真环境长什么样。把这些概念理清了,后面动手搭建的时候你心里才有底。
什么是 SITL?
SITL,全称 Software-in-the-Loop,中文叫「软件在环仿真」。说白了,就是用纯软件来模拟硬件的行为。
你想想看,平时我们写飞控代码,是不是得烧到真实的飞控板(比如 Pixhawk)上,再连上 GPS、电机、遥控器才能测试?这一套下来,场地、设备、安全都是问题。SITL 就是帮你省掉这些麻烦的。
它把你的飞控代码(比如 ArduPilot 或 PX4)直接编译成电脑上的一个可执行程序。这个程序会模拟一个虚拟的无人机,连传感器数据(IMU、GPS、气压计)都是软件生成的。你可以在电脑上跑这个程序,然后用地面站(比如 Mission Planner 或 QGroundControl)去连接它,就像连接一架真飞机一样。
核心要点: SITL 让你在「没有硬件」的情况下,完整运行飞控软件。它跑的是真实的飞控代码,不是简化版。
我记得刚入行那会儿,有一次在野外调试无人机,结果电机意外启动,差点打到人。从那以后,我养成了一个习惯:任何新功能、新参数,先在 SITL 里跑一遍。这个习惯救了我很多次。
SITL 与 HITL 的区别
很多新手容易把 SITL 和 HITL 搞混。其实它们俩是「兄弟」,但分工不同。
HITL,全称 Hardware-in-the-Loop,中文叫「硬件在环仿真」。它跟 SITL 最大的区别在于:HITL 需要真实的飞控硬件。
在 HITL 模式下,你的飞控板(比如 Pixhawk)是真实存在的。它通过串口或 USB 连接电脑,电脑上运行一个仿真器(比如 Gazebo 或 X-Plane)来模拟飞机的物理模型和传感器。飞控板接收仿真器发来的「虚拟传感器数据」,然后计算控制指令,再发回给仿真器去驱动虚拟飞机。
你看,HITL 的飞控代码是跑在真实硬件上的,而 SITL 的飞控代码是跑在电脑上的。这是最根本的区别。
| 对比维度 | SITL(软件在环) | HITL(硬件在环) |
|---|---|---|
| 硬件需求 | 仅需一台电脑 | 需要飞控板 + 电脑 |
| 代码运行环境 | 电脑的 CPU/操作系统 | 飞控板的 MCU/RTOS |
| 实时性 | 较差(受操作系统调度影响) | 较好(硬件实时运行) |
| 传感器模拟 | 完全由软件生成 | 仿真器生成,经接口传入硬件 |
| 适用阶段 | 算法开发、功能验证、CI 测试 | 硬件驱动测试、时序验证、集成测试 |
| 搭建成本 | 低(免费、纯软件) | 高(需要购买飞控板) |
我的建议: 如果你刚开始学,或者主要做上层算法开发,从 SITL 入手就够了。等你需要验证硬件驱动、测试实时性的时候,再上 HITL。别一上来就买一堆硬件,容易吃灰。
SITL 的应用场景
SITL 能做的事,比你想象的多。我简单列几个最常见的场景:
- 算法开发与调试: 写了个新的姿态控制算法?在 SITL 里跑一下,看看响应曲线。我曾经花了两周调一个 PID 参数,最后发现是坐标系定义错了。要是在真机上试,炸机都不知道怎么炸的。
- CI/CD 持续集成: 很多开源飞控项目(比如 ArduPilot)的 GitHub 仓库,每次提交代码都会自动跑 SITL 测试。如果仿真没过,代码根本合不进去。这是保证代码质量的重要手段。
- 教学与培训: 让学生每人配一套真机?成本太高了。SITL 让每个学生都能在电脑上拥有一架「虚拟无人机」,随便炸,不心疼。
- 仿真与规划: 在真机起飞前,先用 SITL 模拟整个任务航线,检查航点、高度、应急逻辑是否合理。我习惯在每次外场飞行前,都在 SITL 里跑一遍任务。
- 复现与排查 Bug: 用户报告了一个奇怪的空中失控问题。你可以在 SITL 里设置相同的初始条件,复现那个场景,然后单步调试代码。这在真机上几乎不可能做到。
仿真环境整体架构
好了,概念讲完了。咱们来看看 SITL 仿真环境到底长什么样。我画了一张图,帮你理清各个组件之间的关系。
从这张图你可以看到,SITL 仿真环境主要由以下几个部分组成:
- 飞控代码: 这是核心。我们编译的是真实的飞控固件,不是玩具代码。
- SITL 仿真器: 它负责模拟飞控板上的硬件接口,比如 I2C、SPI、UART,以及 IMU、GPS、气压计等传感器。它把物理模型算出来的「真实状态」转换成传感器读数,喂给飞控代码。
- 物理模型: 这是仿真环境的大脑。它根据飞控发来的控制指令(油门、舵量),结合空气动力学、重力、风等模型,计算出无人机的位置、姿态、速度。常用的物理引擎有 JSBSim(固定翼)和 Gazebo(多旋翼/通用)。
- 地面站: 你通过它来监控和指挥虚拟无人机。可以发指令、看参数、规划航线。地面站跟真机通信用的是 MAVLink 协议,跟 SITL 通信用的也是同样的协议。
- 可视化界面: 让你看到无人机在 3D 世界里飞行的样子。常用的有 Mission Planner 自带的 3D 视图、QGroundControl 的 3D 地图,或者独立的 Gazebo 客户端。
注意: 这个架构里,所有组件都跑在你的电脑上。飞控代码、仿真器、物理模型、地面站、可视化,它们之间通过网络(UDP/TCP)通信。所以你的电脑性能会直接影响仿真效果。我建议至少 8GB 内存,i5 以上处理器。
嗯,到这里,SITL 仿真的基本概念就讲完了。你可能会问:「这些组件怎么装?怎么配置?怎么跑起来?」别急,后面的章节我会手把手带你搭建。今天先把这些概念刻在脑子里,后面动手的时候你会觉得一切都很自然。