1. SITL仿真环境搭建:ArduPilot SITL简介、Windows/Linux环境配置、MAVProxy安装与基础使用
各位同学,咱们正式开始这门课的第一讲。说实话,每次带新人入门,我最怕的就是环境搭建这一步——明明是个工具链问题,却能把人卡好几天。今天咱们就把这块硬骨头啃下来。
1.1 什么是SITL?为什么我们需要它?
SITL,全称Software In The Loop,说白了就是「软件在环仿真」。你不需要真飞机、真飞控,直接在电脑上跑一套完整的飞控固件。我当年刚入行时,公司连台像样的四旋翼都没有,全靠SITL调参数、测逻辑。
它的核心价值在于:
- 零成本试错——炸机?重启仿真就行
- 快速迭代——改完代码,几秒就能跑起来看效果
- 复现bug——真实飞行中偶现的问题,在仿真里可以反复触发
一句话总结:SITL让你在写代码阶段就能验证飞行逻辑,而不是等到真机上天才发现问题。
1.2 ArduPilot SITL的架构概览
先别急着装环境,咱们花两分钟看看SITL到底是怎么工作的。我画了张图,帮你建立整体认知。
看到这张图,你应该能明白: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%的坑。
具体步骤:
- 安装WSL2——以管理员身份打开PowerShell,执行:
wsl --install -d Ubuntu-22.04 - 安装依赖包——进入WSL终端,执行:
sudo apt update sudo apt install git python3 python3-pip g++ gcc-arm-none-eabi -y - 克隆ArduPilot源码:
git clone https://github.com/ArduPilot/ardupilot.git cd ardupilot git submodule update --init --recursive - 安装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的体验