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、装桥接。每一步都有坑,但按我说的来,基本不会出问题。
最后送大家一句话——环境搭好了,后面的事就顺了。别急着跑仿真,先把基础打牢。