2. 开发环境搭建:Ubuntu下的PX4固件编译环境、QGC地面站与仿真环境配置
说实话,做嵌入式飞控开发,环境搭建往往是第一道坎。我见过太多人卡在这一步,明明代码逻辑没问题,编译就是过不去。说白了,环境没配好,后面全是白搭。
这一章,我就带你一步步把PX4的编译环境、QGC地面站和Gazebo仿真环境全部搞定。嗯,都是我在项目中反复验证过的流程,你照着来就行。
2.1 系统准备与基础依赖
我个人习惯用 Ubuntu 20.04 LTS,这是目前PX4官方支持最稳定的版本。当然,22.04也行,但有些依赖包版本需要手动调整。
先更新系统,这是老生常谈了:
sudo apt update
sudo apt upgrade -y
然后安装基础编译工具链:
sudo apt install -y \
git zip cmake build-essential \
ninja-build exiftool \
python3-pip python3-dev \
astyle libxml2-utils \
libgstreamer1.0-dev \
libgstreamer-plugins-base1.0-dev
这里有个坑——exiftool 很多人会漏掉,但PX4的固件签名需要它。我曾经有一次编译完刷进去飞控不认,查了半天才发现是签名校验失败。
2.2 PX4固件编译环境
2.2.1 克隆源码
我建议你创建一个专用工作目录,别散得到处都是:
mkdir -p ~/px4_workspace
cd ~/px4_workspace
git clone https://github.com/PX4/PX4-Autopilot.git --recursive
cd PX4-Autopilot
--recursive 这个参数很重要,它会一并拉取所有子模块。如果你忘了加,后面编译会报一堆莫名其妙的错误。
2.2.2 安装ARM交叉编译工具链
飞控固件是ARM架构的,所以需要交叉编译器。PX4官方提供了一个自动化脚本:
make px4_sitl_default
第一次运行这个命令,它会自动检测并安装缺失的工具链。但说实话,这个脚本有时候会卡在网络问题上。我建议你手动装:
sudo apt install -y gcc-arm-none-eabi gdb-multiarch
验证一下版本:
arm-none-eabi-gcc --version
输出应该类似 arm-none-eabi-gcc (GNU Arm Embedded Toolchain) 10.3-2021.10。如果版本太老,后面编译某些新模块会报错。
2.2.3 编译固件
先试试编译仿真版本,这个不需要硬件:
cd ~/px4_workspace/PX4-Autopilot
make px4_sitl_default gazebo
第一次编译会比较慢,大概10-20分钟,取决于你的机器配置。编译成功后你会看到类似这样的输出:
[100%] Built target px4
SITL: Starting gazebo...
make px4_fmu-v5_default 对应Pixhawk 4,make px4_fmu-v6x_default 对应Pixhawk 6X。别每次都全量编译,浪费时间。
编译实际飞控固件时,用这个命令:
make px4_fmu-v5_default
生成的固件在 build/px4_fmu-v5_default/px4_fmu-v5_default.px4。这个文件就是你要刷到飞控里的。
2.3 QGC地面站配置
QGroundControl(QGC)是PX4最常用的地面站。我建议用 每日构建版,稳定版功能更新太慢。
2.3.1 安装QGC
下载AppImage文件:
cd ~/Downloads
wget https://d176tv9ibo4jno.cloudfront.net/latest/QGroundControl.AppImage
chmod +x QGroundControl.AppImage
然后把它放到一个固定位置,比如 ~/Applications/:
mkdir -p ~/Applications
mv QGroundControl.AppImage ~/Applications/
第一次运行需要安装一些依赖:
sudo usermod -a -G dialout $USER
sudo apt install -y libfuse2
然后重启一下,或者重新登录让用户组生效。
2.3.2 连接飞控
用USB线连接飞控,运行QGC:
~/Applications/QGroundControl.AppImage
正常情况下,QGC会自动识别飞控。如果没识别,检查一下:
- USB线是不是数据线(有些充电线不能用)
- 飞控有没有上电(光靠USB供电有时不够)
ls /dev/ttyACM*看看设备有没有出现
sudo lsof /dev/ttyACM0 查一下谁在用。
2.4 Gazebo仿真环境
Gazebo是PX4官方推荐的仿真器。说实话,我刚开始用的时候也觉得它笨重,但后来发现它的物理引擎确实准,尤其是做测绘航线仿真时,地形跟随效果很真实。
2.4.1 安装Gazebo
如果你已经用 make px4_sitl_default gazebo 编译过,Gazebo应该已经自动装好了。但为了保险,可以手动确认:
sudo apt install -y gazebo11 libgazebo11-dev
验证安装:
gazebo --version
输出类似 Gazebo multi-robot simulator, version 11.x.x。
2.4.2 启动仿真
最简单的启动方式:
cd ~/px4_workspace/PX4-Autopilot
make px4_sitl_default gazebo
这会启动一个默认的iris四旋翼模型,停在某个坐标点。你可以用QGC连接它——QGC会自动发现仿真环境中的飞控。
如果你想指定起飞位置,比如模拟某个测绘区域:
make px4_sitl_default gazebo PX4_SITL_LAT=39.9042 PX4_SITL_LON=116.4074
这是北京天安门的坐标。你想想看,做测绘航线规划时,用真实坐标仿真,后面实际飞的时候几乎不用改参数。
2.4.3 常用仿真命令
| 命令 | 说明 |
|---|---|
make px4_sitl_default gazebo |
启动默认iris四旋翼仿真 |
make px4_sitl_default gazebo-classic |
启动旧版Gazebo(某些机型需要) |
make px4_sitl_default gazebo_typhoon_h480 |
启动六旋翼Typhoon H480模型 |
make px4_sitl_default gazebo_plane |
启动固定翼模型 |
2.5 整体环境结构
下面这张图,是我画的环境搭建整体架构。你看一眼,心里就有数了:
2.6 常见问题与避坑
环境搭建过程中,有几个坑我踩过不止一次,列出来你注意一下:
- Python版本冲突: PX4依赖Python 3.8+,但某些工具链需要Python 3.6。我建议用
virtualenv隔离环境。 - 磁盘空间不足: 完整编译一次大概占5-8GB,加上Gazebo模型库,轻松超过20GB。给虚拟机分配至少40GB。
- 网络问题:
git submodule update经常超时。可以用git submodule update --init --recursive --depth 1减少拉取量。
✅ 验证环境是否搭好:
- 运行
make px4_sitl_default gazebo,看到Gazebo窗口弹出 - 启动QGC,看到仿真飞控自动连接(显示"Vehicle 1 connected")
- 在QGC里点"Arm"按钮,电机应该转起来
三步都通过,说明环境完全OK。后面就可以开始写代码了。
嗯,环境搭建就到这里。别嫌麻烦,这一步做好了,后面开发会顺畅很多。我曾经在一个项目里因为环境问题折腾了两天,后来发现只是少装了一个库。你按这个流程走,应该半小时就能搞定。