基于STM32F405RGT6二次开发ArduPliot飞控固件
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 文件。
等待进度条走完,飞控会发出成功的重启蜂鸣声。
更多推荐
所有评论(0)