如何用 waf 构建 ArduPilot 固件并首次烧录到 Pixhawk 或 Navio2 板?
发布时间:2026/9/15 20:21:26 作者:尧图编辑部 阅读量:1,286

如何用 waf 构建 ArduPilot 固件并首次烧录到 Pixhawk 或 Navio2 板【免费下载链接】ardupilotArduPlane, ArduCopter, ArduRover, ArduSub source项目地址: https://gitcode.com/GitHub_Trending/ar/ardupilot目标是完成 ArduPilot 开发环境的首次跑通在 Linux 机器上装好依赖克隆源码用 waf 构建出 ArduCopter或其他车种二进制并把固件首次刷进开发板。本文覆盖两条烧录路径Pixhawk 类板子fmuv3对应 3DR Pixhawk 2 系列Pixhawk1对应 Pixhawk1走--upload直接上板Navio2navio2eMlid navio2Linux 板则先配置目标地址再上传。所有命令均来自仓库内的 BUILD.md环境脚本对应 Tools/environment_install/install-prereqs-ubuntu.sh。准备构建机安装依赖环境ArduPilot 的构建依赖较多交叉编译工具链、Python 包等官方提供了一键安装脚本按平台各有一个Ubuntuinstall-prereqs-ubuntu.sh其他发行版install-prereqs-arch.sh、install-prereqs-alpine.sh、install-prereqs-openSUSE-Tumbleweed.sh、install-prereqs-mac.sh、Windows 用 install-prereqs-windows.ps1以 Ubuntu 脚本为例在仓库根目录下执行Tools/environment_install/install-prereqs-ubuntu.sh这个脚本的副作用需要你心里有数它使用sudo apt-get安装系统包检查发行版是否受支持bookworm、trixie、jammy、noble、plucky、questing、resolute为支持版本已停止标准支持的版本如focal、bionic等会直接退出把当前用户加入dialout组以获得串口管理权限烧录 Pixhawk 走串口这一步是必要的安装基础构建包、Python 依赖以及 STM32 板子的 ARM 工具链脚本交互提示是否安装可用-y跳过所有确认移除modemmanager和brltty包脚本说明这两个包可能与固件上传冲突如果你的系统装有这两个包会被卸载最后执行git submodule update --init --recursive同步子模块。脚本不允许以 root 运行会直接报错退出。安装完成后建议重开终端让 PATH 变更/opt/gcc-arm-none-eabi-10-2020-q4-major/bin等生效。克隆源码并进入构建目录git clone --recurse-submodules https://github.com/ArduPilot/ardupilot.git cd ardupilot注意两点waf必须始终从本地克隆的 ardupilot 根目录调用且针对你要构建的本地分支不要用sudo运行wafBUILD.md 明确警告这会导致权限和环境问题。配置目标板Pixhawk 还是 Navio2configure只需执行一次或者在想更换构建选项例如换板子时再执行。查看支持的全部板子./waf list_boards针对本文的两类目标板BUILD.md 给出的常用配置命令是# 3DR Pixhawk 2 系列fmuv3 ./waf configure --board fmuv3 # eMlid navio2Linux 板 ./waf configure --board navio2其他常见对照原文注释Pixhawk1对应 Pixhawk1CubeBlack对应 Hex/ProfiCNC Cube Black即早期的 Pixhawk 2.1。Navio2 属于 Linux 板上传前还必须告诉 waf 固件要同步到哪台机器。这一步在 configure 阶段完成./waf configure --board navio2 --rsync-dest root192.168.1.2:/其中root192.168.1.2:/是文档示例--rsync-dest接收用户板子IP:路径形式的目标请按你的 navio2 实际账号和 IP 替换。构建固件配置完成后执行构建命令。车种选择BUILD.md 列出的常用目标./waf copter # 所有多旋翼类型 ./waf heli # 直升机 ./waf plane # 固定翼含 VTOL ./waf rover # 地面车与水面艇 ./waf sub # 水下机器人以 Pixhawk 2 上的 ArduCopter 为例./waf configure --board fmuv3 ./waf copter构建完成后二进制会出现在build/board-name/bin目录例如build/fmuv3/bin/arducopter。这是判断构建是否成功的最直接标志。补充说明waf 默认会自动并行构建一般不需要-j参数想限制并行度或配合 icecc 时才用./waf -j8这类形式切换板子时重新执行./waf configure --board new-board即可平时不需要执行clean/distclean增量构建比全量构建快一个数量级文档明确不推荐例行清理distclean会清除所有板的产物包括已保存的 configure 信息仅在确有需要时使用如果在 stable 分支和 master 之间切换开发导致子模块失步用./waf submodulesync重新同步极端情况用./waf submodule_force_clean它会删除所有子模块再同步白名单模块如 esp_idf 除外想确认某个目标是否存在可用./waf list列出所有 target或./waf -h查看全部命令与选项。可选分支用 Docker 隔离构建BUILD.md 提供了 Docker 构建环境用于在不改动宿主环境的情况下构建。首次构建镜像只需一次docker build --rm -t ardupilot-dev .之后所有 waf 命令加docker run前缀docker run --rm -it -v $PWD:/ardupilot ardupilot-dev ./waf configure --boardsitl docker run --rm -it -v $PWD:/ardupilot ardupilot-dev ./waf copter也可以只运行docker run --rm -it -v $PWD:/ardupilot ardupilot-dev进入容器内的 bash再按本文其他章节执行命令。注意这个隔离环境适合构建与 SITL把固件烧到实体板时宿主机仍需要有对应的串口访问权限或到 navio2 的网络通道。首次烧录--upload选项在构建命令上生效BUILD.md 说明它支持 Pixhawk 和 Linux 两类板子。Pixhawk 类板子fmuv3 / Pixhawk1 / CubeBlack 等板子通过 USB 串口连接后构建并上传一条命令完成./waf --targets bin/arducopter --uploadwaf 还支持--upload-port指定上传使用的串口例如/dev/ttyS10表示串口 10--upload-force在板型检查不匹配时强制继续。Navio2Linux 板前提是上面已经执行过带--rsync-dest的 configure然后./waf --target bin/arducopter --upload它的原理是先把固件装到一个临时目录再调用rsync temp_install_location/ destination同步到你配置的目标路径——也就是说固件会直接覆盖 navio2 上对应目录的内容执行前请确认--rsync-dest指向的就是目标板而不是别的机器。上传完成后板子重启并从新固件启动即为烧录成功后续验证连接 MAVProxy、检查参数已超出本文文档范围不再展开。排查与限制构建输出位置产物一律在build/board/main_group/主程序属于bin组即build/board/bin/。找不到固件先确认 configure 的板名与查看的目录一致子模块问题clone 未带--recurse-submodules或切换分支后构建报缺文件的错误优先执行./waf submodulesync上传失败Ubuntu 安装脚本之所以移除modemmanager、brltty就是因为它们会抢占串口导致固件上传出问题确认用户已在dialout组且重开了终端板子范围--upload只支持 Pixhawk 与 Linux 板其他 HAL如 ESP32 类板不在该选项的支持范围内不要假设可以通刷静态构建个别板子有特殊要求例如 bebop2 必须./waf configure --board bebop --static静态编译遇到类似提示时以./waf list_boards输出和对应板子说明为准。构建与烧录都走通后下一步通常是修改代码再增量构建./waf copter会只重编译受影响的部分或用DESTDIR临时目录 ./waf install生成可打包的安装目录——后者是文档中给发行版维护者制作 .deb/.rpm 的入口按需使用即可。【免费下载链接】ardupilotArduPlane, ArduCopter, ArduRover, ArduSub source项目地址: https://gitcode.com/GitHub_Trending/ar/ardupilot创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考