3. 多机系统组成
说实话,多机开发最怕什么?不是算法难,而是环境配了三天,一跑就崩。我见过太多同学卡在依赖冲突上,最后连个仿真都起不来。
这一章,咱们就把地基打牢。我会带你一步步装好 Ubuntu、ROS2、PX4-Autopilot、Gazebo 和 QGroundControl。每一步我都会告诉你「为什么这么装」,以及「我踩过的坑在哪」。
核心原则:所有组件必须版本匹配。乱装版本,后面全是泪。
3.1 整体架构:这些组件怎么配合的?
先看一张图,你就明白今天要装的东西各自扮演什么角色了。
你看,Ubuntu 在最底层,上面跑 ROS2。PX4 和 Gazebo 是平级的——一个管飞控逻辑,一个管物理仿真。QGC 则独立连接 PX4,方便你实时看数据。
3.2 安装 Ubuntu 22.04 LTS
我个人习惯用 Ubuntu 22.04。为什么?因为 ROS2 Humble 官方支持的就是它。你非要用 20.04 也行,但后面很多包要自己编译,麻烦。
小提示:如果你用 Windows,建议装双系统或直接用 VMware Workstation。WSL2 也能跑,但 Gazebo 的 GUI 会有点卡,我不推荐。
安装步骤很简单,我提几个关键点:
- 分区建议:至少给 Ubuntu 80GB 空间。多机仿真跑起来,模型文件、日志都很占地方。
- 换源:装完系统第一件事,把 apt 源换成国内镜像(清华、阿里都行)。不然下载 ROS2 能等到你怀疑人生。
- 显卡驱动:如果你有 NVIDIA 显卡,记得装驱动。Gazebo 渲染需要 GPU 加速。
# 换源示例(清华源)
sudo sed -i 's@//.*archive.ubuntu.com@//mirrors.tuna.tsinghua.edu.cn@g' /etc/apt/sources.list
sudo apt update && sudo apt upgrade -y
3.3 安装 ROS2 Humble
ROS2 是多机通信的骨架。我们选 Humble 版本,因为它和 PX4 的兼容性最好。
安装命令我直接贴出来,你照着敲就行:
# 设置 locale
sudo apt update && sudo apt install locales
sudo locale-gen en_US en_US.UTF-8
sudo update-locale LC_ALL=en_US.UTF-8 LANG=en_US.UTF-8
# 添加 ROS2 源
sudo apt install software-properties-common
sudo add-apt-repository universe
sudo apt update && sudo apt install curl -y
sudo curl -sSL https://raw.githubusercontent.com/ros/rosdistro/master/ros.key -o /usr/share/keyrings/ros-archive-keyring.gpg
echo "deb [arch=$(dpkg --print-architecture) signed-by=/usr/share/keyrings/ros-archive-keyring.gpg] http://packages.ros.org/ros2/ubuntu $(. /etc/os-release && echo $UBUNTU_CODENAME) main" | sudo tee /etc/apt/sources.list.d/ros2.list > /dev/null
# 安装 ROS2 Humble 桌面版(包含 rviz2、demo 等)
sudo apt update
sudo apt install ros-humble-desktop -y
# 安装开发工具
sudo apt install python3-colcon-common-extensions -y
注意:安装过程如果报错「无法定位软件包」,八成是源没配好。检查一下 /etc/apt/sources.list.d/ros2.list 里的内容是否正确。
装完后,记得把 ROS2 加到 bashrc 里,不然每次都要 source:
echo "source /opt/ros/humble/setup.bash" >> ~/.bashrc
source ~/.bashrc
验证一下:
ros2 run demo_nodes_cpp talker
如果能看到「Hello World」在刷屏,说明 ROS2 装好了。
3.4 安装 PX4-Autopilot
PX4 固件我们直接拉源码编译。为什么不用预编译包?因为后面你要改参数、加模块,源码在手才方便。
# 创建工作目录
mkdir -p ~/PX4_ws
cd ~/PX4_ws
# 克隆 PX4 源码(推荐用 v1.14 稳定版)
git clone https://github.com/PX4/PX4-Autopilot.git --branch v1.14.3
cd PX4-Autopilot
# 安装依赖
git submodule update --init --recursive
make px4_sitl
第一次编译会比较久,大概 20-30 分钟。你可以去泡杯咖啡。
我的经验:编译时如果报错缺少某个 Python 包,别慌。看报错信息,用 pip 装一下就行。我遇到过缺 numpy 和 empy,装完就好了。
编译成功后,你会看到类似这样的输出:
[100%] Built target px4
PX4 SITL started. Press Ctrl+C to exit.
这说明 PX4 仿真固件已经就绪了。
3.5 安装 Gazebo
Gazebo 是仿真环境。PX4 官方推荐用 Gazebo Classic,但新版本也在推 Ignition。我这里两个都讲一下。
3.5.1 安装 Gazebo Classic(推荐)
# 安装 Gazebo 11
sudo apt install gazebo11 libgazebo11-dev -y
# 验证
gazebo --version
如果能看到版本号,就装好了。
3.5.2 安装 Ignition Gazebo(可选)
Ignition 是新一代仿真器,渲染效果更好。但注意,PX4 对 Ignition 的支持还在完善中。
sudo apt install ignition-fortress -y
避坑:不要同时装两个版本,容易冲突。我建议你先用 Classic,等熟悉了再尝试 Ignition。
3.6 安装 QGroundControl
QGC 是地面站,用来监控飞机状态、调参、看日志。安装很简单:
# 下载 AppImage
wget https://d176tv9ibo4jno.cloudfront.net/latest/QGroundControl.AppImage
# 赋予执行权限
chmod +x QGroundControl.AppImage
# 运行
./QGroundControl.AppImage
第一次启动可能会提示安装一些依赖,按提示装就行。
小技巧:把 QGC 加到 PATH 里,以后直接在终端敲 qgc 就能启动。
echo "alias qgc='~/QGroundControl.AppImage &'" >> ~/.bashrc
source ~/.bashrc
3.7 环境验证:跑一个单机仿真
所有东西都装好了,我们来验证一下能不能跑起来。
# 打开终端1:启动 PX4 SITL + Gazebo
cd ~/PX4_ws/PX4-Autopilot
make px4_sitl gazebo-classic
# 等待几秒,你会看到 Gazebo 窗口弹出,一架 Iris 四旋翼出现在草坪上
然后打开 QGC,你应该能看到飞机已经连接上了,姿态、GPS 数据都在刷新。
再打开一个终端,用 ROS2 看看话题:
ros2 topic list
你会看到类似 /fmu/out/vehicle_attitude 这样的话题。这说明 PX4 和 ROS2 已经打通了。
验证清单:
- ☐ Gazebo 窗口正常显示,飞机模型可见
- ☐ QGC 显示「Connected」,数据在刷新
- ☐
ros2 topic list能列出 PX4 话题
三项都通过,恭喜你,环境搭建成功了!
3.8 常见问题与避坑
我整理了几个我遇到过的问题,你大概率也会碰到:
| 问题 | 原因 | 解决办法 |
|---|---|---|
| Gazebo 启动后黑屏 | 显卡驱动没装或 OpenGL 版本太低 | 安装 NVIDIA 驱动,或设置 export SVGA_VGPU10=0 |
| QGC 连不上飞机 | UDP 端口被占用或防火墙拦截 | 检查 14550 端口,关闭防火墙测试 |
| 编译 PX4 报错 | 依赖没装全或 Python 版本不对 | 运行 make px4_sitl 前先 git submodule update |
| ROS2 话题收不到数据 | PX4 的 ROS2 桥接没启动 | 运行 micrortps_agent 或检查 px4_ros_com 是否编译 |
曾经我踩过的坑:有一次我装完所有东西,Gazebo 死活打不开。折腾了两小时,最后发现是虚拟机内存只给了 2GB。Gazebo 至少需要 4GB 内存,你想想看,2GB 连系统都快跑不动了。所以,虚拟机配置别省,内存给够,CPU 给 4 核以上。
3.9 小结
到这一步,你的开发环境已经全部就绪了。Ubuntu 22.04 打底,ROS2 Humble 负责通信,PX4-Autopilot 提供飞控逻辑,Gazebo 模拟物理世界,QGC 让你看得见摸得着。
这套环境,我用了两年多,带过好几个项目,从来没出过兼容性问题。你只要按步骤来,别跳步,肯定能一次过。
接下来,你就可以开始写第一个多机任务脚本了。不过在那之前,我建议你先用单机仿真飞一飞,熟悉一下基本操作。磨刀不误砍柴工嘛。