ORB-SLAM3 使用方式与典型场景
四、使用方式与典型场景
ORB-SLAM3 有两种使用形态:直接跑可执行文件读数据集,以及在 ROS 里订阅话题跑实机。前者适合验证算法与调参,后者才是产品化路径。
示例一,用 EuRoC 数据集跑单目惯性,确认数据格式与时间戳文件都对得上。注意时间戳文件是纯文本,每行一个以秒为单位的浮点数,行数必须与图像数量严格一致,多一行少一行都会导致读取错位或直接崩溃:
./Examples/Monocular-Inertial/mono_inertial_euroc \
./Vocabulary/ORBvoc.txt \
./Examples/Monocular-Inertial/EuRoC.yaml \
/data/EuRoC/MH_02_easy \
./Examples/Monocular-Inertial/EuRoC_TimeStamps/MH02.txt \
dataset-MH02
示例二,在 ROS 里跑实时双目惯性。先启动相机节点发布图像与 IMU,再启动 ORB-SLAM3 的 ROS 节点。ROS 包装节点会订阅 /camera/image_raw 之类的图像话题与 /imu 话题,通过 message_filters 做时间同步。若相机与 IMU 时间戳来源不同步,会出现"等不到同步帧"而长时间无输出的现象:
rosrun ORB_SLAM3 Stereo_Inertial \
Vocabulary/ORBvoc.txt \
Examples/Stereo-Inertial/EuRoC.yaml \
true \
/camera/left/image_raw:=/camera/image_raw \
/camera/right/image_raw:=/camera/image_raw
下面这张表说明什么场景该选哪种模式,这是上手时最容易选错的地方。
| 场景 | 推荐模式 | 理由 |
|---|---|---|
| 无人机室内外飞行 | 单目惯性 / 双目惯性 | 重量敏感,IMU 必备,单目即可满足 |
| 地面移动机器人、AGV | 双目惯性 | 双目提供真实尺度,地面纹理足够 |
| 手持设备快速扫描 | RGB-D | 深度直接给出尺度,无需 IMU 也能用 |
| 纯旋转的云台相机 | 不推荐 | 纯旋转无法三角化,尺度与深度都解不出来 |
| 长走廊、白墙、大面积玻璃 | 不推荐或需辅助 | 特征点数量不足,跟踪频繁丢失 |
| 快速运动 + 强烈光照变化 | 谨慎 | 特征匹配失败率高,需降速或补光 |
| 需要稠密地图给导航用 | 需外接其他建图模块 | ORB-SLAM3 本身只输出稀疏点 |
关于"不适合",有三个典型失败模式要在项目立项时就评估。第一是纯旋转运动,例如固定位置的云台环视,单目和双目都会因为视差不足而无法初始化,只有 RGB-D 或加 IMU 能缓解。第二是动态场景,画面里大量行人车辆移动时,ORB-SLAM3 没有语义分割,会把移动物体上的特征点当成静态路标,导致轨迹被"拖走",需要在前面加一层动态点剔除。第三是光照剧变,例如从室内走到强逆光的室外,ORB 描述子对光照变化有一定鲁棒性但有限,可以在曝光上做自动增益锁定来改善。
