编译APM固件详细步骤

本文编译环境:win11,wsl2,ubuntu22.04

本文视频教程已上传至B站:《APM源码的编译》

1.1下载WFG100硬件配置文件并解压。

访问:0199a3ef-6738-7cdb-ba80-1e5530dd389a

将WFG100飞控的APM固件硬件配置文件下载至本地电脑,并解压,所下图所示:

image

解压后,可以看到在WFG100文件夹下,有2个.DAT的文件。

1.2 下载Ardupilot源码

克隆官方源码:

git clone --recursive https://github.com/ArduPilot/ardupilot.git

回车执行,等待下载完成

image

1.3 进入下载好的ardupilot文件夹中

cd ardupilot

image

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

image

1.7 安装开发环境

sudo apt-get update
sudo apt-get upgrade -y
Tools/environment_install/install-prereqs-ubuntu.sh -y

image

注:安装编译环境这一步非常关键,请确保网络环境良好,如果条件允许最好能够魔法一下!如果编译环境安装不完整,后续编译代码的过程中会有各种各样的问题!

1.8 安装交叉编译工具

部分朋友编译可能会报错,因为提前先执行这条命令:

sudo apt update
sudo apt install gcc-arm-none-eabi

1.9 将解压后的WFG100文件夹拷贝至ardupilot源码项目中

1)在电脑上进入ubuntu系统的文件夹

image

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

image

1.10 配置waf

./waf configure

image

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

执行成功后,界面如下:

image

1.12 选择WFG100板卡

有了bootloader后,我们就可以选择需要编译的板子了。此处我编译板子类型为WFG100.(因为物唯的这款飞控命名为WFG100,因此文件夹名字就是WFG100,大家可按需更改文件夹的名字即可),输入以下命令,回车执行。

./waf configure --board WFG100  

执行成功的界面,如下图所示:

image

1.13 执行编译多轴命令、生成固件

./waf copter

如果要编译固定翼则输入命令为:./waf plane

如果要编译巡航车则输入命令为:./waf rover

如果要编译直升机则输入命令为:./waf heli

等待编译执行,默认是编译1000多个文件,待编译完成后会显示固件的存放位置。

image

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

image

附:编译到一半失败,重新编译代码的操作。

报错时,重新编译之前,先执行以下命令清楚配置,然后再重新配置,重新编译。

./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

相关文档