1. SITL 仿真环境搭建:从零跑通你的第一个仿真
说实话,很多朋友学 ArduPilot 第一步就卡在环境搭建上。我见过太多人下载了源码,装了一堆依赖,最后跑起来报错,然后就放弃了。
这一章,我带你一步步把 SITL 环境搭好。保证你能在 30 分钟内看到无人机在电脑屏幕上飞起来。
什么是 SITL?为什么非它不可?
SITL,全称 Software In The Loop。说白了,就是把飞控代码直接在你的电脑上跑,模拟出一架完整的无人机。
你想想看,没有 SITL 的时候,改一行代码就要编译、烧录、上电、试飞。万一炸机了,还得修硬件。有了 SITL,你可以在电脑上随便折腾,参数调错了?重启一下就好。
我个人习惯:每次开发新功能前,先在 SITL 里跑三天,把边界情况都测一遍,再上真机。这个习惯帮我省了至少五架飞机的钱。
核心价值:SITL 让你用零成本、零风险的方式,体验完整的飞控开发流程。从参数调优到航线规划,从故障注入到模式切换,全都能在电脑上完成。
Windows 环境准备
我知道大部分初学者用的是 Windows。别担心,虽然 ArduPilot 官方推荐 Linux,但 Windows 下一样能跑得很顺。
1. 安装 Cygwin(关键一步)
ArduPilot 的编译工具链依赖 POSIX 环境。Windows 下最稳的方式就是用 Cygwin。
- 去
cygwin.com下载 setup-x86_64.exe - 安装时记得选这些包:
gcc-g++、make、cmake、git、python3、python3-pip - 安装路径不要有中文和空格,我一般放
C:\cygwin64
我曾经踩过的坑:第一次装 Cygwin 时漏选了 gcc-g++,结果编译报错找了半天。建议你对照列表一个一个勾,别偷懒。
2. 克隆 ArduPilot 源码
打开 Cygwin 终端,执行:
cd ~
git clone https://github.com/ArduPilot/ardupilot.git
cd ardupilot
git submodule update --init --recursive
这个过程会下载所有子模块,大概 1-2 个 G。网速慢的话,建议找个咖啡时间慢慢等。
3. 安装 Python 依赖
ArduPilot 的 SITL 启动脚本和 MAVProxy 都依赖 Python。我建议用 Python 3.8 以上版本。
python3 -m pip install --upgrade pip
python3 -m pip install mavproxy pyserial future lxml
小技巧:如果 pip 下载慢,可以加 -i https://pypi.tuna.tsinghua.edu.cn/simple 用清华镜像。
Linux 环境准备(Ubuntu 22.04 为例)
如果你用 Linux,那恭喜你,过程会顺畅很多。我个人也更推荐在 Linux 下做飞控开发。
1. 一键安装依赖
ArduPilot 官方提供了一个安装脚本,省心不少:
sudo apt update
sudo apt install git python3 python3-pip python3-venv
git clone https://github.com/ArduPilot/ardupilot.git
cd ardupilot
Tools/environment_install/install-prereqs-ubuntu.sh -y
这个脚本会自动装好 gcc、cmake、wxWidgets 等一堆东西。跑完后重启一下终端。
2. 配置 MAVSDK-Python
MAVSDK 是我们后面写控制程序要用到的库。安装很简单:
python3 -m pip install mavsdk
验证一下:
python3 -c "import mavsdk; print(mavsdk.__version__)"
如果输出版本号,说明装好了。
首次启动 SITL 仿真
环境搭好了,咱们来跑第一个仿真。我选 Copter 机型做演示,因为四旋翼最直观。
1. 编译 Copter 固件
cd ~/ardupilot
./waf configure --board sitl
./waf copter
编译时间取决于你的电脑配置,一般 5-10 分钟。第一次编译会慢一些,后面改代码再编译就快多了。
2. 启动仿真
cd ~/ardupilot/ArduCopter
../Tools/autotest/sim_vehicle.py -v ArduCopter --map --console
你会看到三个窗口弹出来:
- 控制台:显示飞控的实时日志和状态信息
- 地图:显示无人机的位置和姿态
- 终端:MAVProxy 的命令行界面
成功了! 你现在看到的就是一架在电脑里飞行的无人机。虽然它没有螺旋桨,但它的飞控代码和真机完全一样。
3. 让无人机起飞
在 MAVProxy 终端里输入以下命令:
STABILIZE> arm throttle
STABILIZE> takeoff 10
第一行是解锁,第二行是起飞到 10 米高度。你会看到地图上的无人机缓缓上升。
嗯,这里要注意:如果提示 Pre-arm: GPS not ready,别慌。在终端输入 param set SIM_GPS_DISABLE 1 关掉 GPS 检测就行。仿真环境里我们不需要真 GPS。
SITL 架构速览
为了让你对 SITL 有个整体认识,我画了张图:
从这张图你能看到,SITL 把整个飞控栈都跑在你的电脑上。最上层是你的控制程序,中间是 MAVLink 通信,核心是完整的 ArduPilot 飞控,底层是物理仿真引擎。
验证环境是否正常
跑完上面的步骤后,我建议你做几个快速验证:
| 检查项 | 预期结果 | 如果失败怎么办 |
|---|---|---|
| MAVProxy 终端能输入命令 | 显示 STABILIZE> 提示符 |
检查 sim_vehicle.py 是否正常启动 |
| 地图窗口显示无人机图标 | 能看到蓝色箭头或飞机图标 | 检查 --map 参数是否加上 |
arm throttle 成功 |
显示 Armed |
检查 Pre-arm 报错,按提示处理 |
takeoff 10 成功 |
高度从 0 上升到 10 | 检查是否已解锁,油门是否归零 |
我的经验:第一次跑 SITL 时,如果地图窗口没出来,多半是 wxPython 没装好。在 Cygwin 里重新装一下 python3-wxPython 就好。
常见问题速查
我整理了几个新手最容易碰到的问题:
- 编译报错找不到头文件:多半是子模块没更新完。重新跑
git submodule update --init --recursive。 - 启动后闪退:检查端口是否被占用。有时候之前没关干净的仿真进程还占着 14550 端口。
- MAVSDK 连不上:确认 SITL 启动时加了
--out 127.0.0.1:14540,MAVSDK 默认连这个端口。