第一章:Gazebo与ROS2环境搭建
做机器人开发这么多年,我始终觉得环境搭建是最磨人的一步。明明代码逻辑没问题,结果卡在装包上,一折腾就是半天。所以这一章,咱们把基础打牢,后面才能跑得顺畅。
说白了,这套环境就是三件套:Ubuntu系统 + ROS2 Humble + Gazebo Fortress。我习惯把它们比作「操作系统 + 大脑 + 身体」。Ubuntu是地基,ROS2负责调度和通信,Gazebo则提供仿真世界。缺一个,你的机器人就动不起来。
核心版本对应关系:ROS2 Humble 官方推荐搭配 Ubuntu 22.04,而 Gazebo Fortress 是 Gazebo 的第九个版本,与 ROS2 Humble 有良好的集成支持。千万别混搭,我见过有人用 Ubuntu 20.04 硬装 Humble,结果一堆依赖冲突。
1.1 Ubuntu 22.04 系统安装
我个人习惯用双系统,但如果你刚入门,虚拟机也行。不过要注意,Gazebo 仿真对显卡有要求,虚拟机里跑 3D 场景会卡。我建议直接装双系统,或者用一台闲置的电脑。
安装步骤其实很简单:
- 去 Ubuntu 官网下载 22.04 LTS 桌面版镜像
- 用 Rufus(Windows)或 balenaEtcher(macOS)制作启动 U 盘
- 重启电脑,进 BIOS 设置 U 盘启动
- 按提示分区,建议至少给 Ubuntu 分配 80GB 空间
我的小技巧:分区时把 /home 单独分出来。这样以后重装系统,你的配置文件、下载的模型都还在,不用重新下载。我曾经因为没这么做,重装后所有 Gazebo 模型都得重新拉,等了一下午。
1.2 ROS2 Humble 安装
ROS2 Humble 是 2022 年发布的长期支持版本,支持到 2027 年。选它做课程,就是图一个稳定。
安装命令我直接贴出来,你照着敲就行:
# 1. 设置编码
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
export LANG=en_US.UTF-8
# 2. 添加 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 $(lsb_release -cs) main" | sudo tee /etc/apt/sources.list.d/ros2.list > /dev/null
# 3. 安装 ROS2 Humble 桌面版(包含 rviz、demo 等)
sudo apt update
sudo apt install ros-humble-desktop
# 4. 设置环境变量
echo "source /opt/ros/humble/setup.bash" >> ~/.bashrc
source ~/.bashrc
嗯,这里要注意:安装过程大概要 10-20 分钟,取决于你的网速。如果中间报错,多半是网络问题,换个源或者挂个代理试试。
避坑指南:我曾经在安装时漏掉了第 2 步的 curl 命令,结果密钥没下载成功,后面 apt update 一直报错。如果你遇到「NO_PUBKEY」类似的错误,手动导入密钥就行。
1.3 Gazebo Fortress 安装
Gazebo Fortress 是 Gazebo 的 Ignition 系列版本,跟 ROS2 Humble 配合得最好。为什么不用 Gazebo Classic?因为官方已经停止维护了,新功能都在 Fortress 上。
安装命令:
# 安装 Gazebo Fortress
sudo apt install ros-humble-ros-gz
sudo apt install ignition-fortress
# 验证安装
ign gazebo --version
如果看到版本号输出,说明装好了。我第一次装完,激动地直接跑了个差速小车模型,结果 Gazebo 界面一片黑——后来发现是显卡驱动没装。所以如果你也遇到黑屏,先检查驱动:
# 查看显卡驱动
nvidia-smi
# 如果没有输出,安装 NVIDIA 驱动
sudo ubuntu-drivers autoinstall
sudo reboot
1.4 工作空间创建与环境验证
工作空间是 ROS2 项目的组织方式。我习惯用 ros2_ws 这个名字,简单明了。
# 创建工作空间
mkdir -p ~/ros2_ws/src
cd ~/ros2_ws
colcon build
# 设置工作空间环境变量
echo "source ~/ros2_ws/install/setup.bash" >> ~/.bashrc
source ~/.bashrc
验证环境是否正常,我一般跑两个小测试:
测试 1:ROS2 通信
# 终端1:启动 talker
ros2 run demo_nodes_cpp talker
# 终端2:启动 listener
ros2 run demo_nodes_py listener
如果能看到「I heard: Hello World」之类的输出,说明 ROS2 通信正常。
测试 2:Gazebo 启动
# 启动 Gazebo Fortress
ign gazebo empty.sdf
应该会弹出一个 3D 仿真窗口,里面有一个空白的世界。你可以用鼠标拖拽视角,看看是否流畅。
我的经验:如果 Gazebo 启动很慢,或者加载模型时卡住,多半是网络问题。Gazebo 启动时会从在线数据库拉取模型。你可以设置离线模式,或者提前下载常用模型包。
1.5 本章知识体系
下面这张图,是我梳理的本章核心逻辑。你看一眼,就能明白这三者之间的关系:
1.6 常见问题与解决
| 问题现象 | 可能原因 | 解决方法 |
|---|---|---|
| Gazebo 启动黑屏 | 显卡驱动未安装或版本不对 | 运行 nvidia-smi 检查,安装对应驱动 |
| colcon build 报错 | 缺少依赖包 | 运行 rosdep install --from-paths src --ignore-src -r -y |
| ROS2 命令找不到 | 环境变量未 source | 检查 ~/.bashrc 中是否有 source 语句 |
| Gazebo 加载模型慢 | 在线拉取模型网络慢 | 设置 export IGNITION_MODEL_PATH=~/models 使用本地模型 |
好了,环境搭完,你可以试着跑一下 ign gazebo,看看那个空荡荡的仿真世界。别嫌它简单——下一章我们就要往里面放机器人了。