第一讲:Gazebo与ROS2环境搭建
各位同学好,我是你们的讲师。今天咱们来搞定机器人仿真最基础的一步——把Gazebo和ROS2 Humble这对搭档请进你的电脑里。
说实话,我见过太多人在环境搭建这一步就卡住了。有的装了三天装不上,有的装上了跑不起来。其实说白了,只要把版本对应关系搞清楚,整个过程也就十几分钟的事。
1.1 为什么选ROS2 Humble + Gazebo Fortress?
先说说版本选择。ROS2 Humble是2022年的长期支持版本,稳定到2027年。Gazebo这边,我推荐用Gazebo Fortress(也就是Gazebo Ignition的第六个版本)。
为什么这么配?
- 官方支持:ROS2 Humble官方推荐的就是Gazebo Fortress
- 接口统一:ros_gz_bridge这个包就是专门给它们俩搭桥的
- 社区成熟:遇到问题,网上随便一搜就有答案
1.2 安装ROS2 Humble
我的习惯是,先装ROS2,再装Gazebo。顺序别搞反了。
打开终端,一行一行来:
# 设置语言环境
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 $(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
# 安装开发工具
sudo apt install ros-dev-tools
装完之后,记得把环境变量加到.bashrc里:
echo "source /opt/ros/humble/setup.bash" >> ~/.bashrc
source ~/.bashrc
验证一下:
ros2 run demo_nodes_cpp talker
如果看到"Hello World"在刷屏,恭喜你,ROS2装好了。
1.3 安装Gazebo Fortress
Gazebo Fortress的安装就简单多了:
sudo apt-get update
sudo apt-get install ignition-fortress
装完跑一下:
ign gazebo
如果看到一个空荡荡的仿真窗口弹出来,说明Gazebo也到位了。
export IGN_GPU_CONFIG=0 这个环境变量。
1.4 安装ros_gz_bridge——让它们俩说上话
ROS2和Gazebo是两个独立的系统。要让它们通信,需要一个桥梁——ros_gz_bridge。
sudo apt install ros-humble-ros-gz-bridge
装完之后,我们来验证一下连通性。
打开第一个终端,启动Gazebo:
ign gazebo empty.sdf
打开第二个终端,启动桥接节点:
ros2 run ros_gz_bridge parameter_bridge /clock@rosgraph_msgs/msg/Clock[ignition.msgs.Clock
打开第三个终端,看看话题:
ros2 topic list
你应该能看到 /clock 这个话题。这说明ROS2成功接收到了Gazebo发出的时钟信号。
1.5 理解节点与话题——别被术语吓到
很多新手一听到"节点"、"话题"就头大。其实没那么复杂。
节点,你可以理解成一个独立运行的小程序。比如一个节点负责控制机器人运动,另一个节点负责处理激光雷达数据。
话题,就是节点之间传递数据的通道。一个节点往话题里发数据,另一个节点从话题里读数据。
我画了一张图,帮你理清关系:
你看,ROS2节点发布速度指令到 /cmd_vel 话题,Gazebo节点订阅这个话题,然后驱动仿真机器人运动。就这么简单。
1.6 实战小练习:跑通第一个仿真
光说不练假把式。我们来跑一个完整的例子。
第一步,启动一个带小车的Gazebo世界:
ign gazebo -v 4 -r shapes.sdf
第二步,启动桥接,把Gazebo的 /model/vehicle_blue/cmd_vel 话题映射到ROS2:
ros2 run ros_gz_bridge parameter_bridge /model/vehicle_blue/cmd_vel@geometry_msgs/msg/Twist]ignition.msgs.Twist
第三步,发布一个速度指令:
ros2 topic pub /model/vehicle_blue/cmd_vel geometry_msgs/msg/Twist "{linear: {x: 1.0}, angular: {z: 0.5}}"
你应该能看到Gazebo里的小车开始转圈了。
ros2 topic list能看到Gazebo的话题ros2 topic echo /话题名能看到数据在流动- Gazebo里的物体能响应ROS2发出的指令
1.7 避坑指南
这些年我踩过的坑,今天一次性告诉你:
- 环境变量没生效:每次打开新终端,记得
source /opt/ros/humble/setup.bash。或者像我一样,直接写进.bashrc里。 - Gazebo启动报错:多半是显卡驱动问题。试试
export IGN_GPU_CONFIG=0,或者更新一下显卡驱动。 - 桥接话题对不上:ROS2和Gazebo的话题类型必须一致。用
ros2 topic info /话题名查看类型,用ign topic -i /话题名查看Gazebo侧的类型。 - 权限问题:如果遇到
Permission denied,检查一下用户组。把当前用户加到dialout组里:sudo usermod -aG dialout $USER
嗯,环境搭建这部分就到这里。记住,仿真环境是你的试验田,在这里犯错成本最低。把基础打牢了,后面调参、做算法才能得心应手。
可可精品资料库