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
验证输出应该类似:
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
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 窗口启动,无人机出现 |
每一项都通过的话,恭喜你,开发环境搭建完成。后面咱们就可以开始写代码、调参数了。
这张图把整个环境搭建的流程串起来了。从 Ubuntu 系统开始,一步步装依赖、拉源码、配工具链、装仿真器,最后统一验证。你跟着这个顺序走,基本不会出大问题。