
室内导航系统 05:视觉 SLAM 的三条路线,别把位姿、地图和避障混为一谈
视觉 SLAM 能否替代 LiDAR,不能只看轨迹误差。室内导航需要至少三种产物:
- 连续、低延迟的里程计;
- 可重定位、可回环的全局位姿;
- 能被规划器消费的占据或距离地图。
许多 VSLAM 库主要解决前两项,并不直接提供可靠的导航障碍地图。
视觉前端在做什么
典型视觉 SLAM 包含:
- 特征或直接法前端;
- 帧间跟踪与关键帧选择;
- IMU 预积分或视觉惯性融合;
- 局部 bundle adjustment;
- 地点识别与回环;
- 位姿图或全局优化;
- 地图点、关键帧或稠密重建。
单目系统存在尺度不可观问题;双目和 RGB-D 提供尺度;IMU 能改善快速运动和短时纹理丢失,但需要准确时空标定。
ORB-SLAM3:强位姿库,不是完整导航产品
ORB-SLAM3 支持单目、双目、RGB-D、视觉惯性、鱼眼和多地图。它适合:
- 研究视觉与视觉惯性 SLAM;
- 需要高质量稀疏位姿和回环;
- 跨会话多地图;
- 有能力维护 C++ 集成、相机模型和 ROS 2 封装。
需要注意:
- 官方 ROS 示例仍偏旧环境,ROS 2 产品化通常依赖第三方 wrapper;
- 输出的稀疏地图不能直接作为完整碰撞地图;
- GPLv3 对闭源产品有许可证影响;
- 低纹理、强动态、模糊和曝光突变仍会退化。
合理用法是让 ORB-SLAM3 提供 pose,再由深度、点云或独立感知构建 Nav2 costmap。
RTAB-Map:多传感器图优化与地图工程
RTAB-Map 以外观回环和图优化为核心,ROS 2 包支持 RGB-D、双目、2D/3D LiDAR,并提供 TurtleBot、Nav2 等集成示例。
它的优势是“产品面”更完整:
- 多种视觉里程计和 ICP 里程计;
- 长期图优化与回环;
- 2D 占据、3D 点云和 OctoMap 等输出;
- 数据库、回放、可视化与参数工具;
- ROS 2 Humble、Jazzy、Rolling 二进制包。
成本是参数多、同步链复杂、CPU/内存和 DDS 配置需要调优。RGB、深度、相机信息、里程计和扫描不同步时,表现会迅速下降。
如果团队要快速把 RGB-D/双目接到 ROS 2 导航,RTAB-Map通常比自行拼接多个研究库更现实。
cuVSLAM / Isaac ROS:硬件绑定换工程性能
cuVSLAM 面向 NVIDIA Jetson/Nova 和 Isaac ROS,使用双目与 IMU 提供视觉里程计和建图。配合 Isaac Perceptor,可以形成无 LiDAR 的 Nav2 路线。
优势:
- GPU 加速;
- NITROS 降低图像在 ROS 图中的拷贝;
- 与 nvblox、深度感知和 Nav2 集成;
- 有完整的硬件参考与视觉巡检示例。
代价:
- 依赖 NVIDIA 硬件和软件版本矩阵;
- 容器、驱动、CUDA 与传感器兼容需要维护;
- 地图制作可能采用离线数据采集;
- 商业系统仍要设计独立安全感知。
选型矩阵
| 需求 | ORB-SLAM3 | RTAB-Map | cuVSLAM |
|---|---|---|---|
| 视觉/视觉惯性研究 | 强 | 中 | 中 |
| ROS 2 导航集成 | 需封装 | 强 | 强 |
| RGB-D/双目建图 | 以位姿和稀疏图为主 | 强 | 配合 nvblox |
| 3D LiDAR 融合 | 弱 | 强 | 另接组件 |
| 跨会话/长期图 | 多地图 | 数据库与图优化 | 依方案 |
| GPU 加速 | 非核心 | 非核心 | 强 |
| 许可证/产品化 | GPLv3 需评估 | BSD-3 | 按组件评估 |
接入 Nav2 的正确边界
无论使用哪套 VSLAM,都要提供:
连续 odom → base_link
全局 map → odom
规划可用的地图或 costmap layer
实时障碍 observations
状态质量与失效信号
特别注意:用于全局定位的地图可以是稀疏关键帧图,用于避障的地图必须表达机器人会撞到的空间。两者不必相同。
视觉系统必须做退化测试
至少覆盖:
- 白墙长廊与重复门;
- 夜间、背光和灯光开关;
- 相机被遮挡、污损和振动;
- 人群占据大部分视野;
- 镜面、玻璃和屏幕;
- 快速旋转与运动模糊;
- 静止初始化和被搬动后的重定位。
每种退化要定义速度限制、替代传感器和安全停车条件。
视觉路线的优势不是“省掉一个雷达”,而是获得语义、纹理和更丰富的三维信息。只有同时设计位姿、地图、避障和失效链,它才是一套导航系统。