ArduPilot 开源飞控完整指南:三步编译并启动 SITL 仿真
【免费下载链接】ardupilotArduPlane, ArduCopter, ArduRover, ArduSub source项目地址: https://gitcode.com/GitHub_Trending/ar/ardupilot
做多旋翼、地面车或水下机器人时,从零写一套能用的飞控并不容易:姿态滤波、位置估计、电机混控、失效保护都要自己搭。ArduPilot 是 2010 年起持续迭代的开源飞控系统,一份代码库覆盖多旋翼、固定翼、地面、水下、天线跟踪五类载具,适合想学飞控原理的学习者,也适合想快速做出可用机载系统的工程团队。
它解决的问题
没有现成飞控方案时,你的工作流通常断在两个地方:一是自研代码从传感器驱动写到 PID 混控动辄几个月,而且换一种机型几乎推倒重来;二是用闭源固件时遇到问题只能靠猜,看不到源码就无法定位。
ArduPilot 把这条链路补上了。你可以在 PC 上先用 SITL(软件在环)仿真跑通一台完整的四轴机,不接任何硬件;之后同一套代码换到固定翼或地面车目录,改参数即可复用。当前稳定发布为 4.7.1,主线正在开发 4.8.0,整个项目遵循 GPLv3 协议(见 COPYING.txt)。
ArduPilot SITL 最短启动路径
SITL 让你在没有开发板的情况下把固件跑在电脑上,用仿真器提供 GPS、IMU 等传感器数据。最短路径只有四步,前提是装好 Ubuntu 依赖脚本 里的前置依赖:
git clone --recurse-submodules https://gitcode.com/GitHub_Trending/ar/ardupilot cd ardupilot ./waf configure --board sitl ./waf copterconfigure只需执行一次,之后换载具类型直接换第二个命令的参数(plane、rover、sub)。编译产物在build/sitl/bin/下,启动方式:
build/sitl/bin/arducopter Tools/autotest/sim_vehicle.py -v ArduCopterArduCopter 四轴机型是 ArduPilot SITL 测试中出现频率最高的对象
配合 MAVProxy 命令行地面站(仓库自带扩展见 Tools/mavproxy_modules/)即可观察模式切换和电机输出。
ArduPilot 核心能力拆解
五类载具共用同一套飞控内核
每个载具是根目录下的独立工程(ArduCopter/、ArduPlane/、Rover/、ArduSub/、AntennaTracker/,另有 Blimp/),它们共享 libraries/ 下的姿态控制、导航 EKF、任务管理模块。原理上就是"应用层按载具拆分,算法层全局共用"。你能拿来做的是:在 ArduCopter 里验证过的导航逻辑,移植到固定翼时不用重写。
硬件抽象层:一套代码跑在数百块开发板上
ArduPilot 通过 HAL(硬件抽象层)把传感器、串口、PWM 引脚定义与业务代码隔离,具体板子的接线信息放在 libraries/AP_HAL_ChibiOS/hwdef/ 的硬件描述文件里。这个目录下有 400 多块开发板的定义,从 Pixhawk 到各类 H7 核心板。换板子时通常只改--board参数,不碰业务代码。
CM4Pilot 由 CM4 计算模块与运行 ArduPilot 的 FMU(STM32F405)通过串口总线连接,展示了典型的双核飞控架构
20 余种飞行模式的状态机
ArduCopter 目录下有 28 个mode_*.cpp,对应 Auto、RTL、Loiter、PosHold、Land、Guided 等模式。每个模式是一个独立的状态机,负责"该往哪去、多快去",底层姿态环统一由 AC_AttitudeControl 的 PID 回路执行。你可以通过地面站一键切换模式,也可以写脚本按任务编排。
参数系统与全链路日志
所有行为都由参数系统驱动,每个参数有编号、默认值和范围约束;飞行数据按固定格式写入 DataFlash,可用 Tools/Replay/ 的工具在电脑上重放,复现飞行瞬间的状态。这意味着问题定位不靠回忆,而靠日志。
ArduPilot 落地场景
第一次做无人机:从 SITL 到实机
你有一块入门级 Pixhawk 兼容板和一台 PC。先在 SITL 里用sim_vehicle.py跑通起飞、悬停、任务航线,确认参数理解正确,再把固件烧到实机。好处是调参失误的代价从炸机降为零。
飞控集成商:定制编译并烧录
你的产品要在量产前改混控或增加传感器驱动。按 BUILD.md 指定目标板编译,例如./waf configure --board CubeBlack后执行./waf copter,再用--upload选项直接刷到板子上,跳过手动拷贝固件的步骤。
研究人员:用脚本与 ROS2 扩展行为
你想在平台上加自定义实验逻辑。ArduPilot 内置 Lua 脚本引擎(AP_Scripting)可在飞行中执行逻辑;若做机器人栈研究,仓库里还带 ROS2 接口(Tools/ros2/)和 Linux HAL(AP_HAL_Linux/),可在 Jetson 这类板卡上直接运行。
ArduPilot 编译常见坑对照表
| 现象 | 原因 | 处理 |
|---|---|---|
用sudo ./waf后权限异常 | 官方明确禁止 sudo 运行 waf | 用普通用户执行,权限问题单独处理 |
| 切换板子后编译行为怪异 | 改板后没有重新配置 | 重新执行./waf configure --board <板名> |
| 换分支后缺文件报错 | git 子模块未同步 | 运行./waf submodulesync重新同步 |
| 找不到编译出的固件 | 去错目录 | 产物在build/<板名>/bin/,如build/sitl/bin/ |
| 全新系统编译报缺依赖 | 未装构建环境 | 跑Tools/environment_install/install-prereqs-ubuntu.sh |
生态与资源
- 构建系统细节全部写在 BUILD.md,含 Docker 编译环境和上传刷机命令
- SITL 仿真与回归测试脚本集中在 Tools/autotest/,含各载具的自动测试用例
- 各载具发布记录见对应目录的
ReleaseNotes.txt(如 ArduCopter/ReleaseNotes.txt) - 社区支持走官方论坛与 Discord,入口信息见根目录 README.md
如果你刚接触飞控开发,现在就从 SITL 上手:先按上面四步命令把build/sitl/bin/arducopter跑起来,再对照 Tools/autotest/ArduCopter_Tests/ 里的测试脚本读一遍起飞流程。接触实机前请务必在空旷、合法空域内飞行,完成指南针与传感器校准,并为失控保护配置可靠的 RTL 高度,再谈自主任务。
【免费下载链接】ardupilotArduPlane, ArduCopter, ArduRover, ArduSub source项目地址: https://gitcode.com/GitHub_Trending/ar/ardupilot
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考