2. 开发环境搭建:Ubuntu系统安装、ROS2 Humble安装、PX4 Autopilot源码编译、基础依赖包配置

说实话,搭建开发环境这件事,看着简单,但坑是真不少。我带过不少新人,十有八九第一周都卡在环境上。不是依赖冲突,就是编译报错,搞得很打击信心。

这一章,我就把整个流程拆开揉碎了讲。你跟着我的步骤走,基本能一次过。

2.1 Ubuntu 系统安装:选对版本很重要

PX4 官方推荐的是 Ubuntu 22.04 LTS。为什么是这个版本?因为 ROS2 Humble 就是基于 22.04 的。你如果用 20.04,后面装 Humble 会非常折腾。

我个人习惯是装双系统,虚拟机跑仿真性能损失太大。如果你电脑配置一般(内存小于 16G),建议直接双系统。

⚠ 注意: 不要用 Ubuntu 24.04 或更老的 18.04。前者很多包还没适配,后者已经 EOL 了。老老实实 22.04,最稳。

安装要点

  • 下载镜像时选 Ubuntu 22.04.3 LTS(桌面版)
  • 分区时建议:/ 根目录 50G,/home 给 100G+,swap 给 8G
  • 安装过程中断网,可以跳过账号注册,装完再联网更新

2.2 ROS2 Humble 安装:别用一键脚本

ROS2 的安装,网上有很多一键脚本。但我建议你 手动按官方步骤来。为什么?因为一键脚本经常把源搞乱,后面装其他包时会出各种奇怪问题。

我记得有一次,一个同事用了一键脚本,结果 apt update 一直报 GPG 错误,查了半天才发现是脚本把密钥写错了位置。

安装步骤

  1. 设置 locale(确保 UTF-8)
  2. 添加 ROS2 源和密钥
  3. 安装 ros-humble-desktop(完整版,包含 rviz2 等工具)
  4. 安装 python3-colcon-common-extensions(编译工具)
  5. 配置环境变量(加到 ~/.bashrc)
# 添加 ROS2 源
sudo apt update && sudo apt install curl gnupg lsb-release
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 $(lsb_release -cs) main" | sudo tee /etc/apt/sources.list.d/ros2.list > /dev/null

# 安装 ROS2 Humble
sudo apt update
sudo apt install ros-humble-desktop python3-colcon-common-extensions

# 配置环境变量
echo "source /opt/ros/humble/setup.bash" >> ~/.bashrc
source ~/.bashrc
💡 小技巧: 装完后运行 ros2 run demo_nodes_cpp talker 测试一下。如果能看到 "Hello World" 在刷屏,说明 ROS2 装好了。

2.3 PX4 Autopilot 源码编译:从 GitHub 到可执行文件

这是整个环境搭建的核心。PX4 源码编译,说白了就是把 C++ 代码变成能在电脑上跑的仿真程序。

我刚开始接触 PX4 时,直接 git clone 就编译,结果报了一堆错。后来才发现,子模块没拉全。PX4 依赖很多第三方库,比如 uavcan、eigen 等,这些都在子模块里。

编译流程

  1. 克隆主仓库(带 --recursive 参数)
  2. 安装 PX4 工具链(主要是交叉编译器和 Python 依赖)
  3. 编译固件(选择 px4_sitl 目标)
# 克隆源码(带子模块)
git clone --recursive https://github.com/PX4/PX4-Autopilot.git
cd PX4-Autopilot

# 安装 PX4 工具链
bash ./Tools/setup/ubuntu.sh

# 编译 SITL 仿真固件
make px4_sitl

编译第一次会比较慢,大概 15-30 分钟,取决于你的 CPU。如果中途报错,多半是网络问题导致子模块没拉下来。可以试试:

git submodule update --init --recursive
🔑 关键点: 编译成功后,终端会显示 "PX4 ready."。这时候你可以输入 commander takeoff 测试一下,飞机会自动起飞。如果能看到这个,说明 PX4 环境已经跑通了。

2.4 基础依赖包配置:缺什么补什么

除了 ROS2 和 PX4 本身,还有一些基础依赖需要装。这些包就像螺丝钉,少了哪个都不行。

包名 用途 安装命令
gazebo 3D 仿真环境 sudo apt install gazebo
python3-pip Python 包管理 sudo apt install python3-pip
pyulog 解析 PX4 日志 pip3 install pyulog
numpy 数值计算 pip3 install numpy
colcon ROS2 工作空间编译 sudo apt install python3-colcon-common-extensions

我曾经遇到过一个问题:Gazebo 启动后黑屏,什么模型都不显示。查了半天,发现是显卡驱动没装。如果你也遇到类似情况,先检查一下 nvidia-smi 能不能正常输出。

⚠ 注意: 如果你用的是 NVIDIA 显卡,一定要装官方驱动。Ubuntu 自带的 nouveau 开源驱动跑 Gazebo 会非常卡,甚至直接崩溃。

2.5 环境验证:跑一个完整的仿真

所有东西装完后,我们来验证一下整个链路是否通。

# 启动 PX4 + Gazebo 仿真
cd ~/PX4-Autopilot
make px4_sitl gazebo

# 在另一个终端启动 ROS2 桥接
ros2 launch px4_ros_com px4_ros_com_launch.py

如果一切正常,你会看到 Gazebo 窗口里有一架四旋翼,ROS2 终端里不断输出 vehicle_attitude 等话题。这时候,你的开发环境就算彻底搭好了。

💡 小技巧: 每次编译前,建议先 make clean 一下,避免缓存导致奇怪的问题。我吃过这个亏,改了代码但编译没生效,排查了半天才发现是缓存没清。

2.6 整体架构图

下面这张图,展示了我们搭建的整个环境结构。你可以把它当作一张地图,后面学起来会更有方向感。

PX4 仿真联调环境架构 Ubuntu 22.04 LTS 操作系统层:驱动、网络、文件系统 ROS2 Humble 通信中间件 话题/服务/动作 colcon 编译系统 PX4 Autopilot 飞控固件 (SITL) uORB 消息总线 EKF/姿态控制 Gazebo 仿真器 3D 物理引擎、传感器模拟 四旋翼/固定翼/车模型 仿真可视化层 软件功能层 系统支撑层

从这张图可以看得很清楚:Ubuntu 在最底层,提供基础运行环境;ROS2 和 PX4 在中间层,一个管通信,一个管飞控逻辑;Gazebo 在最顶层,负责把仿真结果可视化出来。三层之间通过 px4_ros_com 桥接通信。

嗯,到这里,你的开发环境就全部搭好了。后面我们会基于这个环境,一步步做仿真联调。别急,先把基础打牢,后面才能飞得稳。