1、Gazebo与ROS2环境搭建:安装Gazebo与ROS2 Humble、验证安装、创建工作空间与功能包
1.1 为什么先搭环境?
做机器人仿真,说白了就是先得把「锅」架好,才能炒菜。
Gazebo是那个「锅」——物理仿真引擎。ROS2是「锅铲」——通信调度系统。两者缺一不可。
我个人习惯,每次新项目第一件事就是重装一遍环境。为什么?因为版本依赖太容易出问题了。你想想看,一个包装错了版本,后面排查起来能让你怀疑人生。
1.2 安装ROS2 Humble
ROS2 Humble是目前最稳定的版本之一。我建议你用Ubuntu 22.04,这是官方推荐的搭配。
直接上命令:
# 设置编码
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
# 添加GPG密钥
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
# 安装ROS2 Humble桌面版
sudo apt update
sudo apt install ros-humble-desktop
1.3 安装Gazebo
Gazebo现在和ROS2的集成越来越好了。Humble版本默认搭配的是Gazebo Fortress(也就是Gazebo 11的升级版)。
# 安装Gazebo Fortress
sudo apt install ros-humble-ros-gz
# 验证安装
gz sim --version
嗯,这里要注意:如果你之前装过旧版Gazebo,可能会有冲突。我遇到过好几次,旧版和新版抢端口,导致仿真器打不开。解决办法很简单——把旧版彻底卸载干净。
1.4 验证安装是否成功
装完了别急着高兴,先跑个测试。这是我最喜欢的一步,因为能看到小机器人动起来,成就感满满。
# 打开终端1,启动ROS2节点
source /opt/ros/humble/setup.bash
ros2 run demo_nodes_cpp talker
# 打开终端2,启动监听节点
source /opt/ros/humble/setup.bash
ros2 run demo_nodes_py listener
如果你看到终端2里不断打印出「I heard: Hello World」之类的信息,恭喜你,ROS2通信正常。
再测试Gazebo:
# 启动一个空世界
gz sim empty.sdf
应该会弹出一个3D窗口,里面有个灰色的地面网格。这就对了。
echo "source /opt/ros/humble/setup.bash" >> ~/.bashrc
source ~/.bashrc
1.5 创建工作空间与功能包
工作空间,说白了就是你的项目文件夹。ROS2里叫「colcon工作空间」。
# 创建工作空间目录
mkdir -p ~/robot_ws/src
cd ~/robot_ws
# 编译空工作空间(验证环境)
colcon build
第一次编译可能会有点慢,因为要生成一些中间文件。别急,喝杯咖啡。
编译成功后,你会看到build、install、log三个文件夹。嗯,这里有个坑——很多人忘了source install/setup.bash,导致后面找不到自己写的节点。
# 创建功能包(C++版本)
cd ~/robot_ws/src
ros2 pkg create my_robot_bringup --build-type ament_cmake
# 或者Python版本
ros2 pkg create my_robot_bringup --build-type ament_python
我个人习惯用C++写底层驱动,Python写测试脚本。为什么?C++跑得快,Python改得快。你想想看,调试的时候改个参数还要重新编译,多痛苦。
1.6 知识体系总览
下面这张图,是我自己总结的本章核心逻辑。你看一遍,心里就有谱了:
1.7 常见问题与避坑
| 问题现象 | 原因 | 解决办法 |
|---|---|---|
| ros2命令找不到 | 没有source环境变量 | source /opt/ros/humble/setup.bash |
| Gazebo启动报错 | 旧版本冲突或显卡驱动问题 | 卸载旧版gz,更新显卡驱动 |
| colcon build失败 | 依赖缺失或Python版本不对 | 检查依赖包,确保Python3.8+ |
| 找不到自己创建的功能包 | 没有source工作空间 | source ~/robot_ws/install/setup.bash |
我的经验之谈: 曾经有一次,我花了一整个下午排查Gazebo启动闪退的问题。最后发现是NVIDIA驱动版本太新,和Gazebo的OpenGL渲染不兼容。降级驱动后一切正常。所以,遇到奇怪的问题,先检查驱动和依赖版本。
好了,环境搭好了,工作空间也建好了。接下来你就可以开始写自己的机器人模型和控制器了。记住,基础打牢,后面才跑得快。