2、开发环境搭建(Linux):安装Ubuntu 20.04/22.04、配置Git、安装必要的编译工具链

说实话,很多初学者在ArduPilot上栽的第一个跟头,不是代码看不懂,而是环境没搭好。我见过太多人花了两天时间折腾Windows下的编译,最后跑来问我为什么报错。我的建议很直接——用Linux,用Ubuntu。这不是偏见,而是ArduPilot的官方支持环境就是Linux,你想想看,何必跟自己过不去呢?

2.1 为什么选择Ubuntu 20.04/22.04?

ArduPilot的编译系统对Linux发行版其实挺挑剔的。我个人习惯用Ubuntu 20.04 LTS,因为它稳定,而且很多第三方库的兼容性最好。22.04 LTS也可以,但要注意Python版本——22.04默认带了Python 3.10,而有些老旧的工具链可能还没完全适配。

核心原则:如果你刚入门,选20.04;如果你喜欢新特性,选22.04。两者都能用,但别选Ubuntu 24.04——我试过,踩坑踩到怀疑人生。

2.2 安装Ubuntu:双系统还是虚拟机?

这个问题我经常被问到。我的回答是:能用双系统就用双系统。虚拟机虽然方便,但编译ArduPilot这种大型项目时,磁盘I/O和内存瓶颈会让你抓狂。我曾经在VirtualBox里编译一次固件,等了40分钟——而双系统下只要8分钟。

当然,如果你只是学习,不想折腾分区,虚拟机也行。记得给虚拟机分配至少4核CPU、8GB内存、60GB磁盘空间。嗯,这里要注意:磁盘格式选VMDK,性能比VDI好一些

2.3 配置Git:你的代码管家

Git是ArduPilot开发的基础。你不需要成为Git专家,但几个基本操作必须熟练:clone、pull、branch、checkout。我建议你一开始就养成好习惯——不要直接在master分支上改代码

安装Git很简单:

sudo apt update
sudo apt install git -y

配置你的身份信息:

git config --global user.name "你的名字"
git config --global user.email "你的邮箱"

小技巧:我个人习惯把默认分支名改成main,因为master这个词在开源社区越来越不受待见。执行 git config --global init.defaultBranch main 即可。

克隆ArduPilot代码库:

git clone https://github.com/ArduPilot/ardupilot.git
cd ardupilot

这里有个坑——ArduPilot的仓库很大,包含很多子模块。如果你网络不好,可以用 --depth=1 参数只克隆最新版本:

git clone --depth=1 https://github.com/ArduPilot/ardupilot.git

2.4 安装编译工具链:核心中的核心

ArduPilot的固件编译需要交叉编译工具链。说白了,就是你在x86的电脑上编译出能在ARM芯片上运行的代码。最常用的工具链是 gcc-arm-none-eabi

安装命令:

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

验证安装:

arm-none-eabi-gcc --version

你应该看到类似这样的输出:

arm-none-eabi-gcc (GNU Arm Embedded Toolchain 10.3-2021.10) 10.3.1 20210824

注意:Ubuntu软件源里的gcc-arm-none-eabi版本可能比较旧。我曾经在Ubuntu 20.04上遇到过一个bug——旧版本的编译器生成的代码会导致Pixhawk在特定条件下死机。如果你遇到奇怪的问题,建议从ARM官网下载最新版:https://developer.arm.com/tools-and-software/open-source-software/developer-tools/gnu-toolchain/gnu-rm

2.5 Python3与pip:脚本依赖的基石

ArduPilot的编译脚本大量依赖Python。安装Python3和pip:

sudo apt install python3 python3-pip -y

然后安装ArduPilot的Python依赖:

cd ardupilot
pip3 install -r requirements.txt

这里有个常见问题——pip安装时提示权限不足。我的建议是使用虚拟环境:

python3 -m venv ardupilot_env
source ardupilot_env/bin/activate
pip install -r requirements.txt

虚拟环境的好处是,不会污染系统级的Python包。我自己的开发机上每个项目都有自己的虚拟环境,互不干扰。

2.6 其他必要工具

除了上面这些,还有一些工具是编译过程中会用到的:

工具 用途 安装命令
make 构建系统 sudo apt install make
cmake 跨平台构建工具 sudo apt install cmake
gawk 文本处理 sudo apt install gawk
genromfs 生成ROMFS文件系统 sudo apt install genromfs

你可以一次性安装所有依赖:

sudo apt install -y make cmake gawk genromfs python3 python3-pip

2.7 验证环境:编译一个最简单的固件

环境搭好了,总得试试能不能用。我们来编译一个最简单的固件——CubeBlack(Pixhawk 1)的ArduCopter:

cd ardupilot
./waf configure --board CubeBlack
./waf copter

第一次编译会比较慢,因为要下载子模块、编译工具链等。如果一切顺利,你会在 build/CubeBlack/bin 目录下看到生成的 arducopter.apj 文件。

常见错误:如果编译过程中提示缺少某个库,别慌。看看错误信息,一般会告诉你缺什么。比如缺少 libpython3-dev,那就 sudo apt install libpython3-dev。我刚开始学的时候,遇到错误就慌了,其实大部分问题都是缺包,装上去就好了。

2.8 本章知识体系

下面这张图帮你理清开发环境搭建的核心逻辑:

ArduPilot Linux开发环境搭建 Ubuntu 20.04/22.04 Git 版本控制 交叉编译工具链 (gcc-arm-none-eabi) Python3 + pip + make + cmake 选择LTS版本 双系统性能更优 配置user.name/email 使用--depth=1加速克隆 注意版本兼容性 建议从ARM官网下载 使用虚拟环境隔离 一次性安装所有依赖

这张图展示了从操作系统到最终编译的完整链路。每一层都依赖下一层,缺一不可。我见过有人跳过了Git配置,结果提交代码时发现作者信息是错的——虽然不影响编译,但看着别扭。

2.9 避坑指南

最后,分享几个我踩过的坑:

  • 路径不要有中文或空格——我曾经把项目放在"我的文档"里,结果编译报错,查了半天才发现是路径问题。
  • 不要用root用户编译——虽然能编译,但生成的文件权限会乱掉,后续操作很麻烦。
  • 网络问题——如果git clone太慢,可以试试换国内镜像源,或者用代理。我个人习惯用 git clone https://gitclone.com/github.com/ArduPilot/ardupilot.git 加速。
  • 磁盘空间——编译一次ArduPilot大约需要5-10GB空间,加上源码和工具链,建议预留30GB以上。

环境搭建这一步,说白了就是一次性的体力活。但别小看它——基础打好了,后面编译固件、调试代码才会顺风顺水。我记得第一次成功编译出固件时,那种成就感真的难以形容。你也很快就能体验到。

专注资料整理