2. 开发环境搭建:Ubuntu 22.04 LTS 安装、Git 配置与 SSH 密钥、Python3 虚拟环境、ARM 交叉编译链与必备工具链

做 ArduPilot 仿真联调,第一步就是把开发环境搭稳。我见过太多人花了一周时间在环境问题上折腾,最后发现只是某个工具版本不对。这一章,咱们就把 Ubuntu 22.04、Git、Python 虚拟环境、ARM 交叉编译链和基础工具链一次性搞定。

核心原则:所有工具版本必须与 ArduPilot 官方推荐的版本对齐。别用太新的,也别用太旧的。稳定第一。

2.1 Ubuntu 22.04 LTS 安装

我个人习惯用 Ubuntu 22.04 LTS 作为主力开发系统。为什么选它?因为 ArduPilot 的 CI 流水线就是跑在这个版本上,兼容性最好。

安装方式有两种:

  • 双系统(推荐):如果你有独立显卡,建议直接装双系统。虚拟机跑仿真时,USB 转发和实时性会有问题。
  • 虚拟机(尝鲜):用 VMware 或 VirtualBox 也行,但记得给虚拟机分配至少 4 核 CPU 和 8GB 内存。

安装完成后,第一件事就是换源。国内用户不换源,apt 下载能急死人。

# 备份原源
sudo cp /etc/apt/sources.list /etc/apt/sources.list.bak

# 替换为清华源(Ubuntu 22.04)
sudo sed -i 's/archive.ubuntu.com/mirrors.tuna.tsinghua.edu.cn/g' /etc/apt/sources.list
sudo sed -i 's/security.ubuntu.com/mirrors.tuna.tsinghua.edu.cn/g' /etc/apt/sources.list

# 更新
sudo apt update && sudo apt upgrade -y

小技巧:装完系统后,顺手装个 build-essential 和 dkms,后面编译内核模块时会用到。

2.2 Git 配置与 SSH 密钥

Git 是咱们和代码仓库打交道的桥梁。ArduPilot 的代码托管在 GitHub 上,所以 SSH 密钥是必须的。

2.2.1 安装与基础配置

sudo apt install git -y

# 配置用户名和邮箱(用你自己的)
git config --global user.name "Your Name"
git config --global user.email "your.email@example.com"

# 推荐配置:换行符处理
git config --global core.autocrlf input

嗯,这里要注意:core.autocrlf input 这个配置能避免 Windows 和 Linux 混用时换行符乱掉的问题。我在项目中遇到过好几次因为换行符导致编译报错,后来统一设成 input 就再也没出过事。

2.2.2 生成 SSH 密钥

# 生成 ed25519 密钥(比 RSA 更安全、更快)
ssh-keygen -t ed25519 -C "your.email@example.com"

# 一路回车,默认路径是 ~/.ssh/id_ed25519

生成完后,把公钥添加到 GitHub:

cat ~/.ssh/id_ed25519.pub

复制输出内容,登录 GitHub → Settings → SSH and GPG keys → New SSH key,粘贴保存。

避坑指南:我曾经因为没设置 ~/.ssh/config 导致每次 git push 都要输入密码。建议你提前配好:

Host github.com
  HostName github.com
  User git
  IdentityFile ~/.ssh/id_ed25519
  IdentitiesOnly yes

测试连接:

ssh -T git@github.com
# 看到 "Hi xxx! You've successfully authenticated" 就对了

2.3 Python3 虚拟环境

ArduPilot 的仿真脚本、MAVSDK、DroneKit 都依赖 Python。我强烈建议用虚拟环境隔离项目依赖,别污染系统 Python。

2.3.1 安装 venv

sudo apt install python3 python3-pip python3-venv -y

2.3.2 创建并激活虚拟环境

# 在项目目录下创建虚拟环境
python3 -m venv ardupilot_env

# 激活环境
source ardupilot_env/bin/activate

# 确认 Python 路径
which python3
# 应该指向 ardupilot_env/bin/python3

激活后,终端前面会出现 (ardupilot_env) 前缀。这时候安装的所有包都只在这个环境里生效。

我的习惯:在项目根目录建一个 .venv 文件夹,然后配到 .gitignore 里。这样团队其他人 clone 后也能快速重建环境。

2.3.3 安装常用 Python 包

pip install --upgrade pip
pip install pymavlink mavproxy dronekit

退出虚拟环境用 deactivate 命令。

2.4 ARM 交叉编译链:gcc-arm-none-eabi

ArduPilot 的飞控固件要编译成 ARM Cortex-M 系列芯片能跑的机器码。咱们的 PC 是 x86 架构,所以需要交叉编译链。

2.4.1 安装方式

我推荐用 ARM 官方提供的预编译包,别用 apt 源里的老版本。

# 下载 ARM 官方工具链(以 12.3 版本为例)
wget https://developer.arm.com/-/media/Files/downloads/gnu/12.3.rel1/binrel/arm-gnu-toolchain-12.3.rel1-x86_64-arm-none-eabi.tar.xz

# 解压到 /opt
sudo tar -xf arm-gnu-toolchain-12.3.rel1-x86_64-arm-none-eabi.tar.xz -C /opt/

# 添加环境变量
echo 'export PATH=$PATH:/opt/arm-gnu-toolchain-12.3.rel1-x86_64-arm-none-eabi/bin' >> ~/.bashrc
source ~/.bashrc

2.4.2 验证安装

arm-none-eabi-gcc --version
# 应该显示 12.3 版本信息

避坑指南:我曾经用 apt 安装的 gcc-arm-none-eabi,版本是 9.x,结果编译 ArduPilot 4.5 时链接器报错。换成官方 12.3 版本后一次通过。所以,一定要用官方最新稳定版。

2.5 必备工具链:CMake、Make、GDB

这三个工具是编译和调试的基石。ArduPilot 从 4.x 开始全面转向 CMake 构建系统,所以 CMake 是重中之重。

工具 用途 安装命令 推荐版本
CMake 构建系统生成器 sudo apt install cmake -y ≥ 3.20
Make 构建执行器 sudo apt install make -y ≥ 4.3
GDB 调试器 sudo apt install gdb-multiarch -y ≥ 12.1

安装完成后,验证版本:

cmake --version
make --version
gdb-multiarch --version

为什么用 gdb-multiarch?因为 ArduPilot 固件是 ARM 架构的,普通 gdb 只能调试本地 x86 程序。gdb-multiarch 支持多架构,既能调 x86 也能调 ARM。

2.6 本章知识体系总览

下面这张图把咱们刚才搭建的整个环境串起来了。你想想看,从操作系统到编译工具,再到调试器,每一层都是环环相扣的。

ArduPilot 开发环境总览 Ubuntu 22.04 LTS Git + SSH 密钥 Python3 虚拟环境 CMake/Make/GDB ARM 交叉编译链 (gcc-arm-none-eabi) ArduPilot 源码编译与仿真 说明: 每一层都依赖下一层。操作系统是基础,版本控制和 Python 环境是开发工具, 交叉编译链是桥梁,最终所有工具协同工作,完成 ArduPilot 的编译与仿真。

2.7 环境验证清单

所有工具装完后,我建议你跑一遍这个清单,确保每个环节都没问题:

  1. 系统:lsb_release -a 确认是 Ubuntu 22.04
  2. Git:git --version 且 ssh -T git@github.com 成功
  3. Python:虚拟环境激活后 python3 --version 显示 3.10+
  4. 交叉编译链:arm-none-eabi-gcc --version 显示 12.3
  5. 工具链:cmake --version、make --version、gdb-multiarch --version 都正常