2. PX4 SITL环境搭建:Ubuntu系统准备、PX4源码编译、Gazebo与jMAVSim仿真器选择、首次启动SITL
好,咱们直接进入正题。这一章我带你亲手把PX4的SITL环境搭起来。说实话,我第一次搭这个环境的时候,光是编译就折腾了大半天,各种依赖缺失、版本冲突。后来摸清了套路,其实也就那么几步。你跟着我的节奏来,别跳步骤,基本一次过。
2.1 Ubuntu系统准备——别在Windows上硬扛
我个人习惯用Ubuntu 20.04 LTS,这是目前PX4官方支持最稳定的版本。22.04也能用,但有些依赖包需要手动处理,新手容易踩坑。
装好系统后,先把软件源更新一下:
sudo apt update
sudo apt upgrade -y
然后安装基础开发工具。这里有个坑——千万别一股脑全装,有些包是互斥的。我列个清单,你照着来:
| 包名 | 用途 | 备注 |
|---|---|---|
| git | 版本管理 | 必须 |
| cmake | 构建系统 | 版本≥3.10 |
| ninja-build | 加速编译 | 比make快3倍 |
| python3-pip | Python依赖 | 用于后续工具链 |
| gcc-arm-none-eabi | 交叉编译链 | 编译固件用 |
sudo apt install -y \
git cmake ninja-build \
python3-pip python3-venv \
gcc-arm-none-eabi \
libeigen3-dev libopencv-dev \
libgstreamer1.0-dev \
libgstreamer-plugins-base1.0-dev
2.2 PX4源码编译——从GitHub拉下来
源码编译是SITL的核心。你想想看,仿真器本质上就是在你的电脑上跑一个虚拟的飞控,所以必须把PX4固件编译成能在x86架构上运行的版本。
先找个干净的目录,我习惯放在~/workspace下:
mkdir -p ~/workspace
cd ~/workspace
git clone https://github.com/PX4/PX4-Autopilot.git --recursive
cd PX4-Autopilot
这里有个关键点:--recursive参数不能省。PX4依赖了很多子模块,比如mavlink、uavcan等。如果不加这个参数,你编译到一半就会报错,然后还得手动git submodule update --init --recursive,麻烦得很。
拉完代码后,运行自动安装脚本:
bash ./Tools/setup/ubuntu.sh
这个脚本会帮你装好所有依赖,包括Gazebo。但注意——它装的是Gazebo 9,而我们现在推荐用Gazebo 11。所以脚本跑完后,手动升级一下:
sudo apt install -y gazebo11 libgazebo11-dev
然后开始编译SITL目标:
make px4_sitl_default gazebo
第一次编译大概需要20-30分钟,取决于你的CPU。这时候你可以去泡杯咖啡。编译过程中如果报错,90%的情况是依赖没装全。别慌,看报错信息最后几行,它会告诉你缺什么包,装上再重新make就行。
px4_sitl_default是编译目标,告诉编译器生成SITL版本而非真实硬件版本。gazebo是仿真器后端,表示编译时包含Gazebo的接口。这两个参数缺一不可。
2.3 Gazebo与jMAVSim仿真器选择——什么时候用哪个?
PX4支持两个仿真器:Gazebo和jMAVSim。很多新手会问:到底选哪个?我直接给你结论:
- jMAVSim:轻量级,启动快,适合快速测试飞控逻辑、调参。但它只有四旋翼模型,没有传感器噪声模拟。
- Gazebo:重量级,功能全,支持多旋翼、固定翼、VTOL、无人车、无人船。有物理引擎、传感器仿真、光照环境。但启动慢,吃资源。
我个人的工作流是这样的:
- 写代码阶段 → 用jMAVSim快速验证逻辑
- 调参阶段 → 用Gazebo跑完整仿真
- 硬件在环测试 → 用Gazebo + 真实飞控
下面这个图帮你理清选择逻辑:
2.4 首次启动SITL——见证奇迹的时刻
好,一切准备就绪。我们来启动第一个SITL实例。打开终端,进入PX4目录:
cd ~/workspace/PX4-Autopilot
make px4_sitl_default gazebo
如果之前已经编译过,这次会很快,只编译改动过的文件。编译完成后,Gazebo会自动启动,你会看到一个四旋翼模型出现在草地上。
但等等——这里有个细节。Gazebo启动后,PX4 shell也会在终端里出现。这个shell就是你的虚拟飞控控制台。你可以在这里输入命令:
pxh> commander takeoff
pxh> commander land
看到无人机起飞和降落了吗?嗯,这就是SITL的魅力——你不需要任何硬件,就能跑通整个飞控逻辑。
export GAZEBO_MODEL_PATH=$GAZEBO_MODEL_PATH:~/workspace/PX4-Autopilot/Tools/sitl_gazebo/models然后重新启动。我建议把这个export加到
~/.bashrc里,一劳永逸。
另外,如果你想用jMAVSim启动,命令是:
make px4_sitl_default jmavsim
你会看到一个更简洁的3D界面,启动速度比Gazebo快得多。适合快速验证代码逻辑。
mavlink-router或者mavproxy.py连接仿真器的UDP端口(默认14550)。这样我可以在第二个终端里发指令、看日志,不影响仿真器的运行。
首次启动成功后,你可以试试用QGroundControl地面站连接。打开QGC,它会自动发现SITL实例。你可以在QGC里看到姿态数据、GPS信息、电池电压等——和连接真实飞控一模一样。