3. 开发环境搭建:Ubuntu + ROS2 + PX4-Autopilot + Gazebo 安装与验证、QGroundControl 地面站配置

说实话,多机开发最怕什么?不是算法难,而是环境配了三天,一跑就崩。我见过太多同学卡在依赖冲突上,最后连个仿真都起不来。

这一章,咱们就把地基打牢。我会带你一步步装好 Ubuntu、ROS2、PX4-Autopilot、Gazebo 和 QGroundControl。每一步我都会告诉你「为什么这么装」,以及「我踩过的坑在哪」。

核心原则:所有组件必须版本匹配。乱装版本,后面全是泪。

3.1 整体架构:这些组件怎么配合的?

先看一张图,你就明白今天要装的东西各自扮演什么角色了。

PX4多机仿真开发环境架构图 PX4 多机仿真开发环境架构 Ubuntu 22.04 LTS(操作系统 / 硬件驱动层) ROS2 Humble(通信中间件 / 节点管理) PX4-Autopilot(飞控固件) Gazebo Classic / Ignition(物理仿真) QGroundControl(地面站 / 监控与调试) 说明: PX4 通过 MAVSDK 与 ROS2 通信;Gazebo 提供物理环境;QGC 通过 MAVLink 连接 PX4 进行监控。

你看,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 让你看得见摸得着。

这套环境,我用了两年多,带过好几个项目,从来没出过兼容性问题。你只要按步骤来,别跳步,肯定能一次过。

接下来,你就可以开始写第一个多机任务脚本了。不过在那之前,我建议你先用单机仿真飞一飞,熟悉一下基本操作。磨刀不误砍柴工嘛。