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 仿真环境整体架构 飞控代码 (ArduPilot / PX4) SITL 仿真器 (模拟硬件 & 传感器) 物理模型 (JSBSim / Gazebo) 编译运行 控制指令 传感器数据 地面站 (Mission Planner / QGC) MAVLink 通信 (UDP / TCP) 可视化界面 (3D 视图 / HUD) 指令/参数 状态数据 双向通信 架构说明: 1. 飞控代码被编译为本地进程,运行在电脑上。 2. SITL 仿真器模拟硬件接口,生成传感器数据。 3. 物理模型(如 JSBSim)计算空气动力学响应。 4. 地面站通过 MAVLink 协议与 SITL 进程通信。 5. 可视化界面实时显示无人机状态。

从这张图你可以看到,SITL 仿真环境主要由以下几个部分组成:

  1. 飞控代码: 这是核心。我们编译的是真实的飞控固件,不是玩具代码。
  2. SITL 仿真器: 它负责模拟飞控板上的硬件接口,比如 I2C、SPI、UART,以及 IMU、GPS、气压计等传感器。它把物理模型算出来的「真实状态」转换成传感器读数,喂给飞控代码。
  3. 物理模型: 这是仿真环境的大脑。它根据飞控发来的控制指令(油门、舵量),结合空气动力学、重力、风等模型,计算出无人机的位置、姿态、速度。常用的物理引擎有 JSBSim(固定翼)和 Gazebo(多旋翼/通用)。
  4. 地面站: 你通过它来监控和指挥虚拟无人机。可以发指令、看参数、规划航线。地面站跟真机通信用的是 MAVLink 协议,跟 SITL 通信用的也是同样的协议。
  5. 可视化界面: 让你看到无人机在 3D 世界里飞行的样子。常用的有 Mission Planner 自带的 3D 视图、QGroundControl 的 3D 地图,或者独立的 Gazebo 客户端。

注意: 这个架构里,所有组件都跑在你的电脑上。飞控代码、仿真器、物理模型、地面站、可视化,它们之间通过网络(UDP/TCP)通信。所以你的电脑性能会直接影响仿真效果。我建议至少 8GB 内存,i5 以上处理器。

嗯,到这里,SITL 仿真的基本概念就讲完了。你可能会问:「这些组件怎么装?怎么配置?怎么跑起来?」别急,后面的章节我会手把手带你搭建。今天先把这些概念刻在脑子里,后面动手的时候你会觉得一切都很自然。