1. SITL仿真环境搭建:ArduPilot SITL简介、Windows/Linux环境配置、MAVProxy安装与基础使用

各位同学,咱们正式开始这门课的第一讲。说实话,每次带新人入门,我最怕的就是环境搭建这一步——明明是个工具链问题,却能把人卡好几天。今天咱们就把这块硬骨头啃下来。

1.1 什么是SITL?为什么我们需要它?

SITL,全称Software In The Loop,说白了就是「软件在环仿真」。你不需要真飞机、真飞控,直接在电脑上跑一套完整的飞控固件。我当年刚入行时,公司连台像样的四旋翼都没有,全靠SITL调参数、测逻辑。

它的核心价值在于:

  • 零成本试错——炸机?重启仿真就行
  • 快速迭代——改完代码,几秒就能跑起来看效果
  • 复现bug——真实飞行中偶现的问题,在仿真里可以反复触发

一句话总结:SITL让你在写代码阶段就能验证飞行逻辑,而不是等到真机上天才发现问题。

1.2 ArduPilot SITL的架构概览

先别急着装环境,咱们花两分钟看看SITL到底是怎么工作的。我画了张图,帮你建立整体认知。

ArduPilot SITL 仿真架构 MAVProxy / 地面站 用户指令输入 ArduPilot SITL 飞控固件仿真 仿真模型 物理/传感器模型 MAVLink 协议通信 飞行模式切换逻辑 EKF / 导航 关键说明 • MAVProxy 作为用户与 SITL 之间的桥梁,发送指令并接收遥测数据 • SITL 核心运行完整的 ArduPilot 固件,包含所有飞行模式切换逻辑 • 仿真模型提供虚拟的物理环境(重力、空气动力、传感器噪声等)

看到这张图,你应该能明白:SITL不是个黑盒子,它由几个明确的部分组成。咱们这门课的核心,就是中间那个橙色模块——飞行模式切换逻辑。

1.3 环境配置:Windows vs Linux

我个人习惯用Linux做开发,但考虑到很多同学手头只有Windows机器,咱们两种都讲。

1.3.1 Windows环境配置

Windows下跑SITL,最省心的方式是使用WSL2(Windows Subsystem for Linux)。为什么?因为ArduPilot的编译工具链原生支持Linux,在WSL里跑最稳。

我的建议:别在Windows原生CMD里折腾编译,直接上WSL2,省掉90%的坑。

具体步骤:

  1. 安装WSL2——以管理员身份打开PowerShell,执行:
    wsl --install -d Ubuntu-22.04
  2. 安装依赖包——进入WSL终端,执行:
    sudo apt update
    sudo apt install git python3 python3-pip g++ gcc-arm-none-eabi -y
  3. 克隆ArduPilot源码:
    git clone https://github.com/ArduPilot/ardupilot.git
    cd ardupilot
    git submodule update --init --recursive
  4. 安装Python依赖:
    pip3 install -r requirements.txt

注意:WSL2默认不开启systemd,但SITL不需要,所以不用管。如果你遇到网络问题,检查一下WSL的DNS配置。

1.3.2 Linux环境配置(原生)

如果你用的是Ubuntu 20.04或22.04,那就简单多了。我自己的主力机就是Ubuntu 22.04,跑SITL非常丝滑。

# 安装基础工具
sudo apt update
sudo apt install git python3 python3-pip g++ gcc-arm-none-eabi -y

# 克隆代码
git clone https://github.com/ArduPilot/ardupilot.git
cd ardupilot
git submodule update --init --recursive

# 安装Python依赖
pip3 install -r requirements.txt

# 安装额外工具(可选,但推荐)
sudo apt install libtool automake autoconf libexpat1-dev -y

这里有个小细节:git submodule update这一步可能会比较慢,因为要拉很多子模块。我曾经在网速不好的时候等了快半小时……建议找个网络好的时段操作。

1.4 MAVProxy:你的仿真控制台

MAVProxy是什么?说白了,它是一个基于MAVLink协议的通信网关。你通过它给SITL发指令,它帮你转发;SITL返回的数据,它帮你展示。

安装很简单:

pip3 install mavproxy

装完之后,验证一下:

mavproxy.py --version

看到版本号就说明装好了。

1.5 启动你的第一次SITL仿真

环境搭好了,咱们跑起来看看。以四旋翼为例:

cd ardupilot
sim_vehicle.py -v ArduCopter --map --console

这条命令干了三件事:

  • -v ArduCopter——指定机型为四旋翼
  • --map——打开地图窗口
  • --console——打开控制台窗口

启动后你会看到类似这样的输出:

Starting SITL
APM: ArduCopter V4.5.0-dev
APM: Frame: QUAD
APM: Calibrating barometer
APM: Initialising AP_InertialSensor
APM: AP_InertialSensor: 1000Hz
APM: GPS 1: detected as u-blox at 115200 baud
Ready to fly

看到「Ready to fly」就说明SITL跑起来了。这时候你可以用MAVProxy输入指令:

# 解锁
arm throttle
# 起飞到10米
mode guided
takeoff 10

第一次跑起来的感觉:看着虚拟飞机在地图上移动,说实话,我当年第一次跑通时还挺激动的。虽然只是个软件窗口,但背后跑的是和真飞机一模一样的代码。

1.6 常见问题与避坑指南

问题 原因 解决办法
ImportError: No module named 'mavproxy' MAVProxy未安装或Python环境不对 检查是否在正确的Python环境下执行 pip3 install mavproxy
sim_vehicle.py: command not found 未进入ardupilot目录 cd ardupilot 后再执行
WSL下地图窗口不显示 WSL默认不支持GUI 安装VcXsrv或使用 --no-map 参数
编译时提示缺少 arm-none-eabi-gcc 交叉编译工具链未安装 sudo apt install gcc-arm-none-eabi

我曾经踩过的坑:有一次在Windows下直接跑Python原生环境,结果MAVProxy和SITL的通信端口死活对不上。后来发现是Windows防火墙把UDP端口拦了。如果你遇到类似问题,先检查防火墙。

1.7 本章小结

到这,咱们的环境就搭好了。你有了:

  • 一个能跑ArduPilot SITL的开发环境
  • MAVProxy这个趁手的仿真控制台
  • 第一次成功启动SITL的体验