1、Gazebo与SLAM概述:课程介绍、环境搭建、SLAM技术简介、地图构建基础概念
1.1 这门课到底讲什么?
大家好,我是你们的讲师。在机器人行业摸爬滚打了十来年,我踩过的坑,比你们吃过的盐还多(开个玩笑)。这门课,说白了就是带大家亲手把机器人「眼睛」和「大脑」装起来。
我们聚焦在 Gazebo 这个仿真环境里,让机器人自己探索未知空间,同时构建出地图。这就是SLAM的核心——同步定位与地图构建。
我个人习惯把SLAM比作「盲人摸象」。机器人一开始不知道自己在哪里,也不知道周围长啥样。它一边走,一边摸,一边猜。最后,它得知道自己走到了哪,还得把摸到的「大象」画出来。
嗯,这里要注意:我们用的是 Ubuntu 20.04 + ROS Noetic + Gazebo 11 这套组合。为什么选这个?因为稳定。我在项目里吃过版本不兼容的亏,那叫一个惨。所以,咱们老老实实用这套经过验证的黄金搭档。
课程核心目标:
- 掌握Gazebo仿真环境搭建
- 理解SLAM算法原理(Gmapping、Cartographer等)
- 能独立完成从仿真到建图的完整流程
- 学会分析建图质量,解决常见问题
1.2 环境搭建:别让工具卡住你
说实话,很多同学学不下去,不是因为SLAM难,而是环境装到一半就崩了。我曾经在一台新电脑上折腾了整整两天,就为了把ROS和Gazebo的依赖关系理清楚。
所以,我给大家整理了一个「避坑清单」:
⚠️ 重要警告: 请确保你的Ubuntu是20.04.xx LTS版本,不要用21.xx或22.xx。ROS Noetic只原生支持20.04。
第一步:安装ROS Noetic
# 设置sources.list
sudo sh -c 'echo "deb http://packages.ros.org/ros/ubuntu $(lsb_release -sc) main" > /etc/apt/sources.list.d/ros-latest.list'
# 设置密钥
sudo apt-key adv --keyserver 'hkp://keyserver.ubuntu.com:80' --recv-key C1CF6E31E6BADE8868B172B4F42ED6FBAB17C654
# 更新并安装完整桌面版
sudo apt update
sudo apt install ros-noetic-desktop-full
# 初始化rosdep
sudo rosdep init
rosdep update
# 设置环境变量
echo "source /opt/ros/noetic/setup.bash" >> ~/.bashrc
source ~/.bashrc
第二步:验证Gazebo 11
ROS Noetic自带Gazebo 11,但你最好确认一下:
gazebo --version
# 应该输出 Gazebo multi-robot simulator, version 11.x.x
如果版本不对,别慌。我遇到过有人装了ROS Melodic,结果Gazebo是9.0。你想想看,那后面很多功能包都跑不起来。所以,一定要用Noetic。
💡 我的小技巧: 装完ROS后,先跑一下 roscore 和 gazebo 两个命令。如果都能正常启动,说明环境基本OK。别急着往下走,先确认地基稳不稳。
1.3 SLAM技术简介:它到底在干什么?
SLAM,全称是 Simultaneous Localization and Mapping。说白了,就是让机器人在一个完全陌生的环境里,一边走路,一边画地图,同时还得知道自己画到哪了。
你可能会问:「这不就是GPS吗?」不一样。GPS是告诉你「你在哪」,但SLAM是告诉你「你在哪」+「周围长啥样」。而且,很多室内场景根本没GPS信号。
我在做仓储机器人项目时,就遇到过这种情况。仓库里全是金属货架,GPS信号完全屏蔽。机器人只能靠激光雷达和SLAM算法,自己摸索着走。那段时间,我天天盯着建图效果,眼睛都快瞎了。
目前主流的SLAM方法分为两类:
| 类型 | 代表算法 | 传感器 | 特点 |
|---|---|---|---|
| 激光SLAM | Gmapping、Hector、Cartographer | 激光雷达(2D/3D) | 精度高、成熟、适合室内 |
| 视觉SLAM | ORB-SLAM、VINS、LSD-SLAM | 单目/双目/深度相机 | 成本低、信息丰富、受光照影响大 |
咱们这门课,主要讲激光SLAM。为什么?因为Gazebo里模拟激光雷达非常方便,而且2D激光SLAM是入门最友好的路径。你先把2D玩明白了,再去看3D和视觉SLAM,会轻松很多。
1.4 地图构建基础概念
地图构建,听起来高大上,其实核心就三个问题:
- 用什么表示地图? —— 栅格地图(Occupancy Grid Map)
- 怎么更新地图? —— 贝叶斯概率更新
- 地图长什么样? —— 黑色是障碍物,白色是自由空间,灰色是未知区域
栅格地图,你可以想象成一张围棋棋盘。每个格子要么是「有东西」(黑色),要么是「空的」(白色),要么是「不知道」(灰色)。机器人每扫一次激光,就会更新这些格子的状态。
举个例子:激光打到一个点,那个格子就变成黑色(障碍物)。激光穿过的路径上的格子,就变成白色(自由空间)。没被激光扫到的地方,保持灰色(未知)。
嗯,这里有个坑。我曾经遇到过建图时地图边缘全是锯齿状,后来发现是激光雷达的安装角度偏了一点点。你想想看,角度偏差1度,在10米外就是17厘米的误差。所以,标定很重要。
核心概念总结:
- 占用概率:每个格子被障碍物占据的概率,0~1之间
- 对数几率:把概率映射到(-∞, +∞),方便加减运算
- 地图分辨率:每个格子代表实际多少米(比如0.05m/格)
分辨率越高,地图越精细,但计算量也越大。我在做大型工厂项目时,地图分辨率设成了0.01m,结果机器人跑一圈,地图文件几百兆,处理起来卡得要死。后来改成0.05m,效果差不多,但速度快了10倍。
所以,我的建议是:先粗后细。先用0.1m分辨率跑通流程,再根据需求调高。
知识体系总览
下面这张图,是我自己画的。它把本章的核心知识点串在了一起。你看一眼,心里就有谱了。
这张图把本章的四个模块串起来了。你从左上角开始看,课程介绍告诉你「学什么」,环境搭建解决「用什么学」,SLAM技术讲「原理是什么」,地图构建说「结果长什么样」。最后,全部汇聚到「掌握SLAM仿真全流程」这个核心目标上。
好了,第一章就到这里。环境搭好之后,别急着关。下一章我们就要在Gazebo里创建第一个机器人模型了。到时候,你会看到自己亲手搭的机器人动起来,那种感觉,比看代码爽多了。
💡 课后小作业: 打开终端,输入 rosrun turtlesim turtlesim_node,看看能不能出现一只小乌龟。如果能,说明你的ROS环境没问题。这是我最喜欢的一个测试方法,简单又直观。
可可精品资料库