2. 开发环境搭建:Ubuntu、ROS2、Gazebo、MAVSDK

说实话,做无人机仿真最怕什么?最怕环境装到一半卡住,然后各种依赖冲突,最后心态崩了。我这些年带过不少新人,十个里有八个倒在环境搭建这一步。所以这一章,咱们稳扎稳打,把四个核心组件装好。

先看整体架构,心里有个谱:

SITL 全栈仿真环境依赖关系 Ubuntu 22.04 LTS ROS2 Humble Gazebo Classic 11 MAVSDK PX4 SITL 仿真 说明:Ubuntu 是底座,ROS2 和 Gazebo 并行依赖,MAVSDK 桥接上层,最终驱动 PX4 SITL

2.1 安装 Ubuntu 22.04 LTS

为什么选 22.04?因为 ROS2 Humble 官方只支持这个版本。我见过有人硬装 20.04 然后折腾半天,最后还得重装系统。别走弯路。

安装要点:

  • 分区建议:/ 分区至少 50GB,/home 留 100GB 以上。仿真跑起来日志和模型文件很占空间。
  • 网络配置:安装时连上网络,勾选「安装第三方驱动」和「下载更新」。省得后面补驱动。
  • 双系统注意:如果你用 Windows + Ubuntu 双系统,记得进 BIOS 关掉 Secure Boot。我之前被这个坑过,装完显卡驱动黑屏,折腾了两小时才发现是 Secure Boot 在作怪。
我的习惯:装完系统第一件事,换国内源。用清华或中科大的镜像,apt update 速度快十倍。

2.2 安装 ROS2 Humble

ROS2 是整个仿真系统的「神经中枢」。话题、服务、动作,全靠它来调度。

安装步骤:

  1. 设置 locale(确保 UTF-8 支持)
  2. 添加 ROS2 软件源
  3. 安装 ros-humble-desktop(完整版,包含 rviz2、tf2 等工具)
  4. 安装 ros-dev-tools(编译工具链)
  5. 配置环境变量(加到 ~/.bashrc 里)
# 设置 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
sudo apt update
sudo apt install ros-humble-desktop python3-colcon-common-extensions

# 配置环境
echo "source /opt/ros/humble/setup.bash" >> ~/.bashrc
source ~/.bashrc
注意:不要用 pip 安装 ROS2 包!我见过有人 pip install rclpy,结果和系统包冲突,ros2 topic list 都跑不了。ROS2 的 Python 包必须通过 apt 安装。

验证安装:

ros2 run demo_nodes_cpp talker
# 新开终端
ros2 run demo_nodes_py listener

能看到 talker 和 listener 互相收发消息,说明 ROS2 装好了。

2.3 安装 Gazebo Classic 11

Gazebo 是仿真世界的「物理引擎」。无人机在虚拟环境里飞,靠它模拟重力、空气阻力、碰撞。

为什么选 Classic 11 而不是 Gazebo Ignition?因为 PX4 官方对 Classic 的支持最成熟。Ignition 虽然新,但很多插件还没迁移完。咱们做项目求稳,不追新。

# 安装 Gazebo Classic
sudo apt install gazebo11 libgazebo11-dev

# 安装 ROS2-Gazebo 桥接包
sudo apt install ros-humble-gazebo-ros-pkgs

测试一下:

gazebo --version
# 应该输出 Gazebo multi-robot simulator, version 11.x.x

然后跑个空世界看看:

gazebo worlds/empty.world

能弹出 GUI 窗口,里面有个灰色地面,就对了。

避坑:如果你在虚拟机里跑 Gazebo,记得开启 3D 加速。否则帧率只有个位数,无人机动起来像幻灯片。我早期用 VirtualBox 默认设置,Gazebo 卡到怀疑人生。

2.4 安装 MAVSDK

MAVSDK 是咱们写控制程序的「遥控器」。它把复杂的 MAVLink 协议封装成简单的 C++/Python API。说白了,你调用 takeoff() 就能让无人机起飞,不用自己拼 MAVLink 报文。

安装方式有两种:

方式 适用场景 安装命令
apt 安装(推荐) 快速集成,系统级安装 sudo apt install libmavsdk-dev
源码编译 需要定制或调试底层 git clone + cmake 编译

我个人推荐用 apt 安装。省时间,而且版本稳定。除非你要改 MAVSDK 内部逻辑,否则没必要源码编译。

# apt 安装
sudo apt update
sudo apt install libmavsdk-dev

# 验证
pkg-config --modversion mavsdk
# 输出类似 1.4.0

写个简单的 C++ 程序测试:

#include <iostream>
#include <mavsdk/mavsdk.h>

int main() {
    mavsdk::Mavsdk mavsdk;
    std::cout << "MAVSDK version: " << mavsdk.version() << std::endl;
    return 0;
}
g++ test_mavsdk.cpp -o test_mavsdk `pkg-config --cflags --libs mavsdk`
./test_mavsdk

能打印出版本号,说明 MAVSDK 装好了。

曾经踩过的坑:MAVSDK 依赖的 libcurl 版本如果不对,编译时会报 undefined reference。解决办法是 sudo apt install libcurl4-openssl-dev。别问我怎么知道的,那次排查了半小时。

2.5 环境验证清单

装完别急着往下走。花五分钟跑一遍验证,确保每个组件都活着:

组件 验证命令 预期结果
Ubuntu lsb_release -a 22.04.x LTS
ROS2 ros2 run demo_nodes_cpp talker 周期性输出 "Hello, world!"
Gazebo gazebo --version 11.x.x
MAVSDK pkg-config --modversion mavsdk 1.4.0 或更高

到这步,你的开发环境就齐活了。后面咱们开始搭 PX4 SITL 仿真,让无人机在 Gazebo 里飞起来。嗯,那才是真正好玩的部分。