Visual SLAM 与视觉里程计
概念速览
- Visual SLAM (vSLAM):仅用摄像头估计相机位姿并构建环境地图
- Visual Odometry (VO):仅估计位姿,不维护全局地图
- Visual-Inertial Odometry (VIO):摄像头 + IMU 紧耦合
主流方案
| 方案 | 类型 | 传感器 | 前端 | 后端 | 适用 |
|---|---|---|---|---|---|
| ORB-SLAM3 | 特征点法 | 单/双目/RGB-D + IMU | ORB | DBoW2 + G2o | 研究基准 |
| VINS-Fusion | 紧耦合 VIO | 单/双目 + IMU | Harris + LK | 滑动窗口 + 回环 | 无人机 |
| DSO | 直接法 | 单目 | 梯度 | 滑动窗口 | 纹理丰富 |
| SVO | 半直接 | 单目 | FAST + LK | 滑动窗口 | 嵌入式 |
| OpenVSLAM | 特征点法 | 单/双目/RGB-D | ORB | DBoW2 | 嵌入式 |
| RTAB-Map | 特征点 + RGB-D | RGB-D + LiDAR | SURF/FREAK | 全局回环 | 大场景 |
| NVIDIA Isaac ROS Visual SLAM | 特征点 + GPU | 双目 + IMU | NV 自研 | cuVSLAM | Jetson |
关键模块
前端 (Front-End)
- 特征点法:ORB / SIFT / SuperPoint → 描述子匹配 → 2D-2D / 2D-3D 对应
- 直接法:最小化光度误差 (photometric error)
- 混合法:跟踪特征点 + 优化光度
后端 (Back-End)
- 滤波器:EKF / UKF / MSCKF
- 图优化:Bundle Adjustment (BA) + 位姿图
- 滑动窗口:保留最近 N 帧的局部地图
回环检测 (Loop Closure)
- 词袋模型 (BoW):DBoW2 / DBoW3
- NetVLAD:深度学习全局描述子
- 检测 + 验证:DBoW 检索 + RANSAC PnP 验证
选型建议
- 室内移动底盘:RealSense + RTAB-Map (RGB-D + 回环)
- 室内无人机:VINS-Fusion (单目 + IMU)
- Jetson 嵌入式:Isaac ROS cuVSLAM (GPU 加速)
- 大场景户外:ORB-SLAM3 + RTK GPS 融合
📋 复现条件
| 类别 | 必备 | 可选 / 备注 |
|---|---|---|
| 硬件 | USB 摄像头 / RealSense D435i / ZED 2i · 树莓派 5 / Jetson Orin | 多目 (双目 SLAM) |
| 操作系统 | Ubuntu 22.04 / 24.04 · ROS 2 Humble / Jazzy | macOS 14 (开发) |
| 软件版本 | ORB-SLAM3 (latest) / VINS-Fusion · OpenCV 4.8+ · Eigen 3.4+ | CUDA (GPU 加速) |
| 网络 | 摄像头驱动支持 (UVC) | — |
| 时间 | 编译 30 min · 跑通单目 1 h · 跑通双目 2 h | 调参 +1 天 |
| 难度 | ⭐⭐⭐ 进阶 | 标定需要耐心 |
| 前置知识 | ROS 2 基础 · C++ · 相机模型 | 李群 / 李代数 |
⛔ 别这么做 (Anti-patterns)
经验证的坑 —— 跳过 = 至少浪费半天,严重的烧板 / 锁机。
| ❌ 错误做法 | 💥 后果 | ⚠️ 风险 | 范围 |
|---|---|---|---|
| 不要在没装 NVIDIA 驱动 555+ 的情况下跑 Isaac Sim 4.2+ | 驱动不匹配 = 启动黑屏。nvidia-smi 查驱动版本。 | 🔴 | Isaac Sim / Isaac Lab |
| 不要把 OpenVLA / Octo / Pi-0 在没 4-bit 量化的状态下塞进 24GB 4090 | 7B 模型 fp16 = 14GB+KV cache → OOM。先 bitsandbytes 4-bit 加载再 fine-tune。 | 🟡 | OpenVLA / Octo / Pi-0 |
不要在 Isaac Sim 训练 RL 时不设 num_envs 上限 | 贪心 8192 envs = 24GB 显存瞬间爆。RTX 4090 实测 4096 envs 是甜点。 | 🟡 | Isaac Lab / RSL-RL / SkyRL |
| 不要在真机部署 VLA 之前跳过仿真域随机化 | sim-to-real gap 不收敛 = 99% 仿真成功率 + 0% 真机。先 DR 20% (质量 / 摩擦 / 视觉)。 | 🔴 | 任何 VLA 真机部署 |
| 不要把 3DGS 训练数据直接用手机 4K 视频 | 4K 60fps 1 小时 ≈ 100GB,且相机畸变 = 训练出来模糊。先 ffmpeg 1080p + 标定。 | 🟡 | 3D Gaussian Splatting |
| 不要在没 GPU 的 Linux 容器里跑 VLA 微调 | CPU 跑 7B = 1 步 5 分钟,1 epoch = 3 天。最低 1×RTX 4090 或租云。 | 🔴 | OpenVLA / VLA 微调 |
| 不要用 MuJoCo 默认 simulator 跑 Mobile ALOHA 仿真 | 默认 scene 没有双臂 + 移动底盘。要用 aloha_sim 官方 scene 文件。 | 🟡 | MuJoCo / ALOHA |
🚨 风险总览 (Risk Matrix)
| 风险等级 | 含义 | 例子 |
|---|---|---|
| 🟢 低 | 改错可回滚 / 几分钟恢复 | pip 全局装包、DHCP IP 写死 |
| 🟡 中 | 需要重新刷机 / 重装 / 1-2 小时恢复 | 装错 ROS 2 版本、没 OTA 升级看版本 |
| 🔴 高 | 不可逆 / 烧板 / 安全风险 | 电池反接、micro-ROS 没看门狗、刷机中途断电 |