1. 课程导入
在机器人、自动驾驶、增强现实与三维重建等应用中,系统不仅要回答“我在哪里、周围长什么样”,还要回答“我看到的是什么、它属于哪一类、我该如何与它交互”。这正是RGB-D语义SLAM与场景理解要解决的核心问题:把视觉里程计/同步定位与建图(SLAM)提供的几何位姿与地图,与深度学习和语义分割提供的类别信息融合起来,形成既有空间结构又有语义标签的环境模型。
1. 几何主线:掌握RGB-D相机模型、帧间配准、位姿估计、回环检测与全局优化,理解SLAM的“定位+建图”闭环。
2. 语义主线:掌握2D/3D语义分割、实例分割、语义标签融合与地图语义化方法,理解“像素→体素/点→对象”的映射。
3. 系统主线:能够把几何与语义在统一框架中联合优化,并在真实场景中完成建图、查询、导航与交互任务。
核心概念:几何、语义与不确定性
RGB-D数据由彩色图像I_rgb与深度图像I_depth组成。深度图给出每个像素到相机的距离,经相机内参K反投影后可得到三维点云。SLAM前端通过特征匹配或直接法估计相邻帧之间的相对位姿T_{t,t-1},后端通过位姿图或因子图优化全局一致性。语义SLAM在此基础上,为每个地图元素附加类别概率分布,例如“这是椅子,置信度0.92”。
关键难点在于:几何估计会漂移,语义预测会误分类,二者都带有不确定性。因此,现代语义SLAM通常采用概率融合:把语义观测作为地图元素的观测值,用贝叶斯更新或联合优化同时修正位姿与标签。一个典型的地图表示是语义体素地图或语义点云地图,每个体素/点保存TSDF值、颜色、类别概率与观测次数。
方法流程:从一帧图像到语义地图
一个完整的RGB-D语义SLAM系统通常按以下流程运行:
- 数据采集与预处理:对齐彩色与深度图,去除无效深度,进行去畸变与时间同步。
- 前端位姿估计:提取ORB/SIFT特征或使用直接法,计算相邻帧相对位姿,构建局部地图。
- 语义预测:将彩色图输入语义分割网络(如DeepLab、Mask R-CNN或实时分割网络),得到逐像素类别或实例掩码。
- 语义-几何关联:利用位姿把2D语义标签投影到3D地图中,对同一地图元素进行多帧概率融合。
- 后端联合优化:在因子图中同时加入几何约束与语义约束,优化相机位姿和地图标签。
- 回环与全局一致:检测回环后校正累积漂移,并重新融合语义标签,输出全局语义地图。
- 场景理解与应用:在语义地图上执行查询、导航、抓取或交互任务。
下面给出一个简化的配置示例,说明语义SLAM中常见的参数组织方式:
sensor:
type: rgbd
color_topic: /camera/color/image_raw
depth_topic: /camera/depth/image_raw
intrinsics: [fx, fy, cx, cy]
slam:
frontend: orb
backend: g2o
loop_closure: true
keyframe_interval: 10
semantic:
model: deeplabv3
num_classes: 21
fusion: bayesian
min_observations: 3
map:
type: semantic_voxel
voxel_size: 0.05
tsdf_trunc: 0.15
案例与场景:语义地图能做什么
假设一台室内服务机器人使用RGB-D相机在办公室中建图。传统SLAM只能输出一张点云或栅格地图,机器人知道“前方0.8米有障碍物”,但不知道那是“椅子”还是“墙”。引入语义SLAM后,地图中每个体素带有类别标签,机器人可以执行“去沙发旁边”“把桌上的杯子拿过来”这类指令。
在自动驾驶中,RGB-D语义SLAM可用于近距离泊车场景:深度提供精确尺度,语义分割识别车位、行人、路沿,二者结合可提升低速环境下的定位与避障能力。在AR/VR中,语义地图让虚拟物体能够“理解”真实场景,例如把虚拟球放在真实桌面上而不是悬空。
| 应用场景 | 几何需求 | 语义需求 | 典型输出 |
|---|---|---|---|
| 室内服务机器人 | 厘米级定位与避障 | 家具、门、人 | 语义栅格/体素地图 |
| 自动驾驶泊车 | 低速高精度位姿 | 车位、路沿、行人 | 局部语义BEV地图 |
| AR/VR交互 | 实时6DoF跟踪 | 平面、物体类别 | 语义锚点与平面 |
| 三维数字孪生 | 全局一致点云 | 建筑构件、设备 | 语义BIM/点云模型 |
常见误区与学习建议
误区二:忽视不确定性。 深度图在透明、反光、远距离处噪声大,语义网络在遮挡和小物体上易出错。若不建模不确定性,错误标签会污染全局地图。
误区三:只追求精度,忽视实时性。 机器人系统通常要求10–30Hz运行,语义网络与后端优化必须做工程折中。