1. Gazebo与ROS2环境搭建:系统要求与依赖安装、ROS2 Humble安装与配置、Gazebo Fortress安装、ros_gz_bridge编译与验证、环境变量与网络配置

大家好,我是你们的老朋友。今天咱们来聊聊Gazebo仿真联调的第一步——环境搭建。

说实话,这一步看着简单,但坑是真不少。我见过太多人卡在环境配置上,一卡就是好几天。嗯,咱们今天就把这些坑一个一个填平。

核心思路:ROS2 Humble + Gazebo Fortress + ros_gz_bridge,这三者必须版本匹配,缺一不可。

1.1 系统要求与依赖安装

先说说系统。我个人习惯用Ubuntu 22.04 LTS,这是目前最稳的选择。为什么?因为ROS2 Humble官方就是基于22.04的,你换个版本,后面各种依赖冲突能让你怀疑人生。

系统要求其实不高:

  • 操作系统:Ubuntu 22.04 LTS(推荐)或20.04 LTS
  • CPU:至少4核,建议8核以上(仿真很吃CPU)
  • 内存:8GB起步,16GB更舒服
  • 显卡:NVIDIA独显最好,集成显卡也能跑,但别开太多模型
  • 硬盘:至少50GB空闲空间

我在项目中遇到过有人用虚拟机跑Gazebo,结果卡成PPT。说白了,Gazebo Fortress对GPU有要求,虚拟机共享显存的方式效率很低。建议直接双系统或物理机安装。

依赖安装很简单,一条命令搞定:

sudo apt update
sudo apt install -y \
  build-essential \
  cmake \
  git \
  python3-pip \
  python3-colcon-common-extensions \
  python3-rosdep \
  wget \
  curl

这里有个小细节——python3-colcon-common-extensions很多人会漏掉。没有它,后面编译ros_gz_bridge时会报错。我曾经因为这个折腾了半小时,后来发现就是少装了这个包。

1.2 ROS2 Humble安装与配置

ROS2 Humble的安装,官方文档写得很清楚,但我还是想说说我的做法。

第一步,设置源:

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
sudo apt update

第二步,安装桌面版(推荐):

sudo apt install ros-humble-desktop

为什么推荐桌面版?因为包含了RViz2、rqt等可视化工具,调试时非常有用。如果你硬盘空间紧张,可以装ros-humble-ros-base,但后面调试会麻烦一些。

第三步,配置环境变量:

echo "source /opt/ros/humble/setup.bash" >> ~/.bashrc
source ~/.bashrc

你想想看,每次打开终端都要手动source,多麻烦。直接写进.bashrc一劳永逸。

小技巧:我习惯在.bashrc里再加一行export ROS_DOMAIN_ID=30。为什么是30?随便设的,只要不和别人冲突就行。默认是0,但如果你在实验室里多人同时用ROS2,可能会互相干扰。

1.3 Gazebo Fortress安装

Gazebo Fortress,也叫Gazebo Ignition Fortress。名字有点绕,但记住一点——它是和ROS2 Humble配对的版本。

安装命令:

sudo apt install ignition-fortress

就这么简单?对,就这么简单。但安装完后,我建议你验证一下:

ign gazebo --version

如果输出类似Ignition Fortress 6.x.x,那就对了。

这里有个坑——有些人会同时装Gazebo Classic和Gazebo Fortress,然后发现命令冲突。Gazebo Classic用的是gazebo命令,Fortress用的是ign gazebo。别搞混了。

注意:不要用sudo apt install gazebo,那是Gazebo Classic,和ROS2 Humble不兼容。我刚开始学的时候也踩过这个坑,装完才发现版本不对。

1.4 ros_gz_bridge编译与验证

ros_gz_bridge是连接ROS2和Gazebo的桥梁。没有它,ROS2和Gazebo就是两个孤岛。

编译步骤:

mkdir -p ~/ros2_gz_ws/src
cd ~/ros2_gz_ws/src
git clone https://github.com/gazebosim/ros_gz.git -b humble
cd ~/ros2_gz_ws
rosdep install --from-paths src --ignore-src -r -y
colcon build --symlink-install

编译完成后,别忘了source:

echo "source ~/ros2_gz_ws/install/setup.bash" >> ~/.bashrc
source ~/.bashrc

验证方法很简单——启动Gazebo和ROS2,看看能不能通信:

终端1:

ign gazebo empty.sdf

终端2:

ros2 topic list

如果能看到/clock、/world/empty/model/...等话题,说明桥接成功了。

常见问题:如果colcon build报错,多半是依赖没装全。运行rosdep install时,确保网络畅通。我在公司内网遇到过rosdep超时的问题,后来换了手机热点才搞定。

1.5 环境变量与网络配置

环境变量这块,说简单也简单,说复杂也复杂。我总结一下必须配的几个:

环境变量 说明 建议值
ROS_DOMAIN_ID ROS2通信域ID,避免多机干扰 0-255之间的整数,建议30
ROS_LOCALHOST_ONLY 是否只在本机通信 单机调试设为1
IGN_PARTITION Gazebo通信分区,类似ROS_DOMAIN_ID 建议和ROS_DOMAIN_ID一致
GZ_SIM_RESOURCE_PATH Gazebo模型资源路径 指向你的模型文件夹

网络配置方面,如果你只是单机调试,基本不用管。但如果你要搞多机仿真(比如一台跑Gazebo,一台跑ROS2控制),那就得注意了:

  • 确保两台机器在同一个网段
  • 关闭防火墙或开放必要端口
  • ROS_DOMAIN_ID必须一致
  • IGN_PARTITION也必须一致

我曾经在实验室里搞多机联调,两台电脑明明ping得通,但ROS2就是发现不了对方。后来发现是防火墙把DDS的端口给拦了。嗯,关掉防火墙就好了。

避坑指南:如果你用虚拟机,网络模式要选「桥接模式」,别选「NAT模式」。NAT模式下,虚拟机相当于躲在主机后面,ROS2的DDS通信会出问题。

本章小结

好了,环境搭建这部分就讲完了。说白了就是三步:装ROS2、装Gazebo、装桥接。每一步都有坑,但按我说的来,基本不会出问题。

最后送大家一句话——环境搭好了,后面的事就顺了。别急着跑仿真,先把基础打牢。

Gazebo与ROS2环境搭建 · 知识体系图 环境搭建总览 系统要求与依赖 ROS2 Humble安装 Gazebo Fortress ros_gz_bridge 环境变量与网络 Ubuntu 22.04 LTS 4核CPU / 8GB内存 NVIDIA显卡推荐 ros-humble-desktop 配置.bashrc 设置ROS_DOMAIN_ID ignition-fortress ign gazebo命令 版本验证 colcon编译 rosdep安装依赖 话题通信验证 IGN_PARTITION配置 防火墙设置 多机通信配置 五个核心模块,环环相扣,缺一不可
可可精品资料库