2. 无人机与PX4概述

说实话,做嵌入式开发这么多年,我踩过最多的坑就是环境问题。很多同学代码写得挺好,结果卡在编译不过、仿真跑不起来,一查全是环境没配对。这一章咱们就把地基打牢。

我个人习惯用 Ubuntu 22.04 LTS,原因很简单——稳定、社区活跃、PX4 官方支持最到位。你想想看,要是用个冷门发行版,出问题连搜都搜不到答案,多耽误事。

2.1 Ubuntu 22.04 LTS 基础配置

装好系统后,第一件事不是急着下代码,而是把源换掉。国内用户你懂的,不改源的话,apt update 能等到你怀疑人生。

我的习惯: 清华源或阿里源都行,我个人偏向清华源,更新快、稳定。改完源记得 sudo apt update && sudo apt upgrade -y。

然后安装基础依赖包。PX4 官方给了一个脚本,但我建议你手动装,这样心里有数。

sudo apt install -y \
  git zip cmake build-essential genromfs ninja-build \
  exiftool libgstreamer1.0-dev libgstreamer-plugins-base1.0-dev \
  libpulse-dev python3-pip python3-dev python3-venv \
  protobuf-compiler libprotobuf-dev libusb-1.0-0-dev \
  curl wget vim

嗯,这里要注意:Python 版本一定要用 3.8 以上。Ubuntu 22.04 默认是 3.10,没问题。但如果你用旧系统,记得升级。

2.2 PX4 Firmware 源码编译

源码从 GitHub 拉下来,这个不用多说。但我建议你加个 --recursive,因为 PX4 依赖很多子模块,漏了后面编译会报错。

git clone https://github.com/PX4/PX4-Autopilot.git --recursive
cd PX4-Autopilot
make px4_fmu-v5_default

第一次编译会比较慢,因为要下载交叉编译工具链和依赖库。我记得有一次在办公室编译,同事以为我在下载电影……

避坑指南: 我曾经遇到过编译到一半报错 arm-none-eabi-gcc: not found。原因是网络不好,工具链没下载完整。解决办法是手动下载工具链,放到 ~/PX4-Autopilot/Tools/gcc/ 目录下。

编译成功后,你会看到类似这样的输出:

-- Build files have been written to: /home/user/PX4-Autopilot/build/px4_fmu-v5_default
[100%] Built target px4_fmu-v5_default

看到 100% 就说明固件编译成功了。生成的固件在 build/px4_fmu-v5_default/ 目录下,文件名是 px4_fmu-v5_default.px4。

2.3 交叉编译工具链:arm-none-eabi-gcc

PX4 的飞控固件跑在 ARM Cortex-M 系列芯片上,所以我们需要交叉编译工具链。说白了,就是在 x86 的电脑上编译出 ARM 能跑的二进制文件。

PX4 的 make 命令会自动下载工具链,但如果你网络不好,或者想用特定版本,可以手动安装。

# 下载 ARM 官方工具链
wget https://armkeil.blob.core.windows.net/developer/Files/downloads/gnu-rm/10.3-2021.10/gcc-arm-none-eabi-10.3-2021.10-x86_64-linux.tar.bz2

# 解压到指定目录
tar -xjf gcc-arm-none-eabi-10.3-2021.10-x86_64-linux.tar.bz2 -C ~/tools/

# 添加环境变量
echo 'export PATH=$PATH:~/tools/gcc-arm-none-eabi-10.3-2021.10/bin' >> ~/.bashrc
source ~/.bashrc

# 验证安装
arm-none-eabi-gcc --version
版本选择: PX4 官方推荐 10.3-2021.10 版本。太新的版本可能有兼容性问题,太旧的版本不支持某些新特性。我建议你就用这个版本,稳。

验证输出应该类似:

arm-none-eabi-gcc (GNU Arm Embedded Toolchain 10.3-2021.10) 10.3.1 20210824 (release)
Copyright (C) 2020 Free Software Foundation, Inc.

2.4 仿真环境安装与验证

仿真环境是开发调试的利器。没有硬件也能跑飞控,你敢信?PX4 支持两种仿真器:Gazebo Classic 和 Gazebo Ignition(现在叫 Gazebo Garden)。

我个人建议初学者用 Gazebo Classic,资料多、教程全。Ignition 虽然新,但坑也多。

2.4.1 Gazebo Classic 安装

# 安装 Gazebo 11
sudo apt install gazebo11 libgazebo11-dev

# 安装 PX4 仿真依赖
cd ~/PX4-Autopilot
make px4_sitl gazebo-classic

第一次运行会下载模型文件,大概几百兆。我建议你找个网络好的时候搞,不然等得心焦。

小技巧: 如果模型下载慢,可以手动下载 https://github.com/PX4/PX4-SITL_gazebo-classic 放到 ~/PX4-Autopilot/Tools/simulation/gazebo-classic/sitl_gazebo-classic/models/ 目录下。

启动成功后,你会看到 Gazebo 窗口和 QGroundControl 地面站。这时候你可以用键盘控制无人机起飞、悬停、降落。

2.4.2 Gazebo Ignition 安装

Ignition 是新一代仿真器,性能更好,但配置稍微复杂一点。

# 安装 Ignition Fortress
sudo apt install ignition-fortress

# 编译 PX4 的 Ignition 仿真
cd ~/PX4-Autopilot
make px4_sitl ignition
注意: Ignition 和 Gazebo Classic 不能同时运行。如果你之前启动了 Classic,记得先关掉。我曾经因为这个折腾了一下午,最后发现是端口冲突。

2.5 环境验证清单

配完环境别急着走,跑一遍验证清单,确保每个环节都通。

验证项 命令 预期结果
交叉编译工具链 arm-none-eabi-gcc --version 显示 10.3-2021.10 版本信息
PX4 固件编译 make px4_fmu-v5_default 编译成功,生成 .px4 文件
Gazebo Classic 仿真 make px4_sitl gazebo-classic Gazebo 窗口启动,无人机出现
Gazebo Ignition 仿真 make px4_sitl ignition Ignition 窗口启动,无人机出现

每一项都通过的话,恭喜你,开发环境搭建完成。后面咱们就可以开始写代码、调参数了。

我的经验: 环境搭建是最容易出问题的一步,但也是最值得花时间的一步。配好了,后面一路顺畅;配不好,天天跟编译错误打交道。所以,耐心点,别急。
PX4 开发环境搭建流程 Ubuntu 22.04 LTS 基础依赖包安装 PX4 Firmware 源码 arm-none-eabi-gcc Gazebo Classic / Ignition 环境验证清单 💡 建议按顺序搭建 每一步验证通过再继续

这张图把整个环境搭建的流程串起来了。从 Ubuntu 系统开始,一步步装依赖、拉源码、配工具链、装仿真器,最后统一验证。你跟着这个顺序走,基本不会出大问题。