1、准备工作目录:

cd ~
mkdir flight_controller_build
cd flight_controller_build

2、克隆源码

git clone https://github.com/ArduPilot/ardupilot.git
cd ardupilot
git submodule update --init --recursive

3、创建 Python 虚拟环境 (隔离的核心)

1、安装env虚拟环境

sudo apt update
sudo apt install python3-venv -y

2、创建虚拟环境

python3 -m venv venv

3、激活环境

source venv/bin/activate

4、在虚拟环境中安装依赖

1、安装python依赖

pip install -U pip
pip install empy==3.3.4 pexpect future lxml
pip install intelhex

2、安装 ARM 编译器 (系统级) 编译器(gcc-arm)是二进制程序,不会和 ROS 的 Python 库冲突,所以直接用 apt 安装最稳妥。Ubuntu 22.04 源里的版本已经足够编译 F405

sudo apt install gcc-arm-none-eabi build-essential -y

3、验证编译器版本

arm-none-eabi-gcc --version

5、编译MATEKF405版型

1、清理环境

./waf distclean

2、编译 Bootloader (使用专用脚本)

Tools/scripts/build_bootloaders.py MatekF405

3、编译主固件 (自动打包成 .hex)

# 1. 配置主板
./waf configure --board MatekF405

# 2. 编译飞控 (它会自动抓取上一步生成的 Bootloader 打包进去)
./waf copter

[1039/1039] Generating bin/arducopter_with_bl.hex
Waf: Leaving directory `/home/xk/flight_controller_build/ardupilot/build/MatekF405'

BUILD SUMMARY
Build directory: /home/xk/flight_controller_build/ardupilot/build/MatekF405
Target          Text (B)  Data (B)  BSS (B)  Total Flash Used (B)  Free Flash (B)  External Flash Used (B)
----------------------------------------------------------------------------------------------------------
bin/arducopter    884151      3072    80156                887223           95756  Not Applicable         

'copter' finished successfully (2m35.732s)
(venv) xk@LAPTOP-RG2RFUD6:~/flight_controller_build/ardupilot$ 

1. 编译数据解读
这其实就是飞控的“体检报告”:

Text (884203 B): 约 884 KB。这是代码段,也就是你写的 C++ 代码编译后的机器指令。它占据了 Flash 的大部分空间。

Data (3072 B): 约 3 KB。这是已初始化的数据(比如预设的参数值)。

Total Flash Used (887275 B): 约 887 KB。这是最终烧录到芯片里的总大小(Text + Data)。

你的芯片总容量是 1024 KB,用掉了 887 KB,说明代码比较庞大,但完全塞得下。

Free Flash (95700 B): 约 95 KB。还剩下这么多空间,这就给你的后续开发留了余地(比如你想自己写几个新功能模块,完全够用)。

BSS (80156 B): 约 80 KB。这是RAM 占用(变量、堆栈等)。F405 有 192KB RAM,用掉 80KB,内存非常充裕。

总结: 固件体积健康,资源充裕,是一个完美的构建版本。

PS:如果文件内容重新问题,可以进行回溯拉取原版的文档:

cd ~/flight_controller_build/ardupilot

# 1. 恢复文件到官方原始状态
git checkout libraries/AP_HAL_ChibiOS/hwdef/MatekF405/hwdef.dat

# 2. 确保 Bootloader 定义文件也在
git checkout libraries/AP_HAL_ChibiOS/hwdef/MatekF405/hwdef-bl.dat

6、整体流程总结

#!/bin/bash
# =================================================================
# ArduPilot 开发环境构建与编译全流程指南 (F405版)
# 适用环境: WSL2 Ubuntu 22.04 / 20.04
# 硬件目标: WeAct F405 (使用 MatekF405 官方固件定义)
# =================================================================

# -----------------------------------------------------------------
# 第一部分:环境搭建与隔离 (一次性工作)
# -----------------------------------------------------------------
# 目的:使用 Python venv 虚拟环境,防止污染系统自带的 ROS/Python 环境

# 1. 创建工作目录
cd ~
mkdir -p flight_controller_build
cd flight_controller_build

# 2. 克隆源码 (如果已有则跳过)
# git clone https://github.com/ArduPilot/ardupilot.git
# cd ardupilot
# git submodule update --init --recursive

# 3. 创建 Python 虚拟环境 (名为 venv)
# sudo apt install python3-venv -y  # 如果系统没装 venv 工具需先安装
python3 -m venv venv

# -----------------------------------------------------------------
# 第二部分:激活环境与安装依赖 (每次编译前必做)
# -----------------------------------------------------------------

# 1. 激活虚拟环境
# 激活后,终端提示符前会出现 (venv) 字样,此时 python 命令只影响该环境
source ~/flight_controller_build/ardupilot/venv/bin/activate

# 2. 安装/检查核心编译依赖
# empy==3.3.4 是 ArduPilot 旧脚本强依赖的版本
# intelhex 是 Bootloader 打包成 .hex 文件的关键库
pip install empy==3.3.4 pexpect future lxml intelhex

# 3. 检查编译器 (确保已安装 ARM GCC)
# sudo apt install gcc-arm-none-eabi build-essential -y
# arm-none-eabi-gcc --version

# -----------------------------------------------------------------
# 第三部分:编译 Bootloader (引导程序)
# -----------------------------------------------------------------
# 目的:生成 .bin 和 .hex 格式的引导程序,供主固件打包使用
# 注意:不需要每次都编,除非你修改了 Bootloader 代码或分区表

# 1. 清理旧的编译缓存 (防止玄学报错)
./waf distclean

# 2. 运行 Bootloader 专用编译脚本
# 这一步会生成 Tools/bootloaders/MatekF405_bl.hex
Tools/scripts/build_bootloaders.py MatekF405

# -----------------------------------------------------------------
# 第四部分:编译主固件 (Copter)
# -----------------------------------------------------------------
# 目的:编译飞控主程序,并自动将 Bootloader 拼接到头部

# 1. 配置板型
./waf configure --board MatekF405

# 2. 编译多旋翼固件
./waf copter

# -----------------------------------------------------------------
# 第五部分:获取成果与烧录
# -----------------------------------------------------------------

# 编译成功后,目标文件位置:
# build/MatekF405/bin/arducopter_with_bl.hex

echo "编译完成!请按以下步骤烧录:"
echo "1. 将 arducopter_with_bl.hex 复制到 Windows。"
echo "2. 使用 STM32CubeProgrammer 打开该文件。"
echo "3. 不需要手动填地址 (hex自带地址)。"
echo "4. 连接板子 (DFU模式),点击 Download。"

# -----------------------------------------------------------------
# 第六部分:退出环境
# -----------------------------------------------------------------
# 编译结束,想去玩 ROS 时,执行此命令退出虚拟环境
deactivate


软件在环仿真:
cd ardupilot/ArduCopter
../Tools/autotest/sim_vehicle.py -v ArduCopter -f quad --console --map --out=udp:192.168.:14550


编译其他固件执行以下命令:
cd ~/ardupilot
./waf clean
./waf configure --board Pixhawk6C --enable-opendroneid
当终端提示 build finished successfully 后,你需要把生成的固件转移到 Win11 系统中。
固件的存放路径非常明确:
~/ardupilot/build/Pixhawk6C/bin/arducopter.apj
(把这个 .apj 文件复制到你的 Windows 桌面。)

第五步:在 Mission Planner 中烧录
拔掉 ESP32-S3 等所有外设,只用一根 Type-C 线将 Pixhawk 6C 直接连到 Windows 电脑。

打开 Mission Planner(不要点击右上角的“连接”)。

点击左上角的 初始设置 (SETUP) -> 安装固件 (Install Firmware)。

点击右下角不起眼的 加载自定义固件 (Load custom firmware) 文字链接。

在弹出的文件选择框中,找到你刚才转移过来的 arducopter.apj 文件。

等待进度条走完,飞控会发出成功的重启蜂鸣声。

Logo

腾讯云面向开发者汇聚海量精品云计算使用和开发经验,营造开放的云计算技术生态圈。

更多推荐