编译APM固件详细步骤
本文编译环境:win11,wsl2,ubuntu22.04
本文视频教程已上传至B站:《APM源码的编译》
1.1下载WFG100硬件配置文件并解压。
访问:0199a3ef-6738-7cdb-ba80-1e5530dd389a
将WFG100飞控的APM固件硬件配置文件下载至本地电脑,并解压,所下图所示:

解压后,可以看到在WFG100文件夹下,有2个.DAT的文件。
1.2 下载Ardupilot源码
克隆官方源码:
git clone --recursive https://github.com/ArduPilot/ardupilot.git回车执行,等待下载完成

1.3 进入下载好的ardupilot文件夹中
cd ardupilot
1.4 切换分支
默认下载的代码是在master分支下,这个分支是开发版的固件,不是稳定的 版本,通常我们需要切换到稳定版本的分支,使用git checkout命令。截止至2026年2月10日,多轴固件最新的版本号为4.6.3。 此处我们以切换至多旋翼4.6.3版本分支为例,输入以下命令,回车执行。
git checkout Copter-4.6.3 #注释切换至多轴4.6.2的版本分支如要编译的是固定翼固件,则输入指令应该改为: git checkout Plane-4.6.3
如要编译的是巡航车固件,则输入指令应该改为: git checkout Rover-4.6.3
切换其他的分支:
APM是一套可以多旋翼、固定翼、无人车/船、潜艇、追踪天线的代码,除了多旋翼外可能有小伙伴有固定翼固件的需求,大家可按需进行版本切换。切换的命令格式为: git checkout 载具类型-版本号。
例如: git checkout ArduSub-4.5.0,具体版本号以及更新说明详见下表。
分支切换命令 | 载具类型 | 最新版本号 (截至25.7.30) | 更新说明 |
|---|---|---|---|
git checkout | Copter(多旋翼) | 4.6.2 | https://github.com/ArduPilot/ardupilot/blob/master/ArduCopter/ReleaseNotes.txt |
git checkout | Plane(固定翼) | 4.6.2 | https://github.com/ArduPilot/ardupilot/blob/master/ArduPlane/ReleaseNotes.txt |
git checkout | ArduSub(潜艇) | 4.5.0 | https://github.com/ArduPilot/ardupilot/blob/master/ArduSub/ReleaseNotes.txt |
git checkout | Rover(无人车/船) | 4.6.2 | https://github.com/ArduPilot/ardupilot/blob/master/Rover/ReleaseNotes.txt |
git checkout | AntennaTracker (追踪天线) | 4.6.2 | https://github.com/ArduPilot/ardupilot/blob/master/AntennaTracker/ReleaseNotes.txt |
1.5 确认分支切换成功
输入以下指令,确认切换分支成功。
git branch
查看*号位于哪里。
1.6 更新子模块
更新子模块是将上述切换的分支版本相关的模块补全,此步骤非常重要!没下载好会导致后续报错。
注:每次切换了版本分支,都要执行一次更新子模块的命令。
git submodule update --init --recursive
1.7 安装开发环境
sudo apt-get update
sudo apt-get upgrade -y
Tools/environment_install/install-prereqs-ubuntu.sh -y
注:安装编译环境这一步非常关键,请确保网络环境良好,如果条件允许最好能够魔法一下!如果编译环境安装不完整,后续编译代码的过程中会有各种各样的问题!
1.8 安装交叉编译工具
部分朋友编译可能会报错,因为提前先执行这条命令:
sudo apt update
sudo apt install gcc-arm-none-eabi1.9 将解压后的WFG100文件夹拷贝至ardupilot源码项目中
1)在电脑上进入ubuntu系统的文件夹

将本文1.1章节中解压的WFG100文件夹拷贝到,源码文件ardupilot/libraries/AP_HAL_ChibiOS/hwdef这个文件夹中!

1.10 配置waf
./waf configure
1.11 执行关联bootloader命令
关联bootloader,执行以下命令,输入以下命令,回车执行。因为物唯的这款飞控命名为WFG100,之前的硬件配置文件夹的命名也为WFG100。
如果大家的想命名为别的板子,只需要把拷贝到ardupilot/libraries/AP_HAL_ChibiOS/hwdef目录下的WFG100硬件配置文件夹的名字,改为你自己定义的飞控名即可。
python3 Tools/scripts/build_bootloaders.py WFG100执行可能会报错,如果报错就执行以下命令。
source ~/.profile 再次执行:
python3 Tools/scripts/build_bootloaders.py WFG100执行成功后,界面如下:

1.12 选择WFG100板卡
有了bootloader后,我们就可以选择需要编译的板子了。此处我编译板子类型为WFG100.(因为物唯的这款飞控命名为WFG100,因此文件夹名字就是WFG100,大家可按需更改文件夹的名字即可),输入以下命令,回车执行。
./waf configure --board WFG100 执行成功的界面,如下图所示:

1.13 执行编译多轴命令、生成固件
./waf copter如果要编译固定翼则输入命令为:./waf plane
如果要编译巡航车则输入命令为:./waf rover
如果要编译直升机则输入命令为:./waf heli
等待编译执行,默认是编译1000多个文件,待编译完成后会显示固件的存放位置。

打开固件的生成目录,会发现以下2种类型的固件文件

附:编译到一半失败,重新编译代码的操作。
报错时,重新编译之前,先执行以下命令清楚配置,然后再重新配置,重新编译。
./waf distclean
./waf configure --board WFG100
./waf copter烧录固件
至此固件就编译完成,至于APM固件如何烧录到飞控硬件手上,请见固件烧录说明
附:切换分支:
git checkout Copter-4.6.3 (切多轴分支)git checkout Plane-4.6.3 (切固定翼分支)git checkout Rover-4.6.3 (切巡航车分支)附:固件编译命令:
./waf copter (多轴)./waf plane (固定翼)./waf rover (巡航车)./waf heli (直升机)执行上述编译后,仿真也就可以正常执行了
../Tools/autotest/sim_vehicle.py --map --console