论文名称:Vins-mono: A robust and versatile monocular visual-inertial state estimator
开源项目地址:github.com/HKUST-Aeria…(PC版本), github.com/HKUST-Aeria…(ios版本)
期刊:IEEE transactions on robotics
时间:2018
VINS-Mono 提出了一套完整的 单目视觉-惯性 紧耦合状态估计系统,支持实时定位、回环检测、重定位与全局图优化
数据集
EuRoC-MAV数据集,单目+IMU,第三方开源,projects.asl.ethz.ch/datasets/do…
自采数据(HKUST校园),单目+IMU,作者团队采集,未开源
Google Tango对比实验,单目+IMU,Google设备,未开源
主要工作
任务类型为单目视觉+惯性里程计(Monocular Visual-Inertial Odometry, VIO)+回环检测+全局优化
没有使用深度学习,完全是基于非线性优化和传统几何方法(如PnP、BA、图优化)
系统模块包含 视觉前端(特征提取+跟踪)、IMU积分、初始化、滑窗BA、回环检测、重定位、4-DOF全局图优化
输出图像频率为10-30Hz,IMU频率为100-200Hz,支持IMU-rate输出(高频插值)
单目视觉
单目视觉只用一个普通摄像头(比如手机相机),没有深度传感器、没有双目、没有雷达
单张图像无法直接测距离 → 尺度未知(不知道1像素对应现实几米)
论文通过*连续图像帧 + IMU(惯性测量单元) *联合估计,恢复真实尺度(比如“向前走2米”而不是“向前走100像素”)
回环检测
回环检测可以简单理解为 你绕了一圈回到原点,系统发现“这个地方我来过”,从而消除累计误差(比如走着走着发现“咦,我怎么漂移了5米?”)
相关技术实现:
- 用DBoW2(一种“图像字典”)快速比对当前帧和历史帧是否相似。
- 通过BRIEF特征匹配+ RANSAC几何验证,剔除误匹配。
在长走廊或重复纹理场景中,成功识别回环,把漂移从“米级”降到“厘米级”。
全局优化
全局优化可以简单理解为 回环检测后,系统发现“我之前以为A点在这里,现在发现其实是那里”,于是全局调整整条轨迹,像“拉橡皮筋”一样把所有位姿拉整齐。
相关技术细节:
- 4-DOF优化:只优化位置(x,y,z)和朝向(yaw角) ,因为roll/pitch角由IMU重力方向已确定。
- 图优化:把每帧相机位姿看作“节点”,回环和连续轨迹看作“边”,用非线性最小二乘最小化所有边的误差。
论文在5.6公里校园数据集中,最终漂移仅0.07米(相对轨迹长度0.0012%)
非线性优化
非线性优化可以理解为 把“相机位姿、速度、IMU零偏”等所有未知量揉在一起,构造一个误差函数,通过迭代调整这些量,让误差最小(类似“调参”)
论文中的具体作用:
- 滑窗BA(Bundle Adjustment) :只优化最近10-20帧的位姿和特征点,实时性高。
- IMU预积分:把高频IMU数据“打包”成帧间约束,避免重复积分,提速10倍以上。
- 鲁棒核函数(Huber Loss) :防止特征误匹配或IMU噪声“带偏”优化。
效果表现为 在EuRoC数据集上,位置误差0.1-0.3米,比传统滤波方法(如MSCKF)更准。
传统几何方法
传统几何方法不依赖神经网络,纯粹用几何关系(如三角测量、PnP、对极几何)+概率滤波/优化
论文中的应用:
- 特征提取,Shi-Tomasi角点+KLT光流,找到图像中稳定跟踪的点
- 初始化,5点法求相对位姿+IMU对齐,解决“尺度未知”问题
- 特征三角化,多帧观测同一特征点,计算3D坐标
- PnP,已知3D+2D观测,求相机位姿,新帧定位
- BA优化,最小化重投影误差,联合优化位姿和3D点
无需训练数据,直接部署;可解释性强(每一步误差来源清晰);CPU实时(i7-5500U上50ms/帧)
在极端纹理缺失/光照突变时可能跟踪失败(论文用主动失效检测+重初始化解决)
特征提取
角点是指图像里像“十字路口”一样容易被认出来的点(比如桌角、门框)
光流像“追踪一个小蚂蚁在连续照片上的移动”,知道它从哪儿移动到哪儿
-
Shi-Tomasi角点检测: 计算图像每个像素周围灰度变化剧烈程度(用矩阵特征值判断),选出 “最像角”的点
-
KLT光流
假设一个小窗口内所有像素一起平移,通过最小化灰度差异,求解窗口的平移向量 (u,v)
操作流程:
- 第1帧,用Shi-Tomasi检测100-300个角点
- 第2帧开始,对每个角点,用KLT光流追踪它在下一帧的未知
- 剔除丢失/错误的点,用RANSAC+基础矩阵剔除“跟丢”的点
- 补新点,如果追踪点数太少,再检测新角点
5点法求相对位姿
(5-Point Algorithm)
你用手机拍了两张照片,想知道“手机从哪儿移动到哪儿”。
但手机没有尺子,只能用两张照片的像素点关系反推移动。
数学原理:
- 输入:两张图像的5对匹配点(最少5对)。
- 输出:相机之间的相对旋转 R 和 相对平移 t(比例未知)。
核心为利用对极几何(Epipolar Geometry),求解本质矩阵 E(5点法可解出最多10个解,再用3D几何验证选1个)
操作流程:
- 用前面“特征提取”得到两帧的匹配点
- 用5点法求解本质矩阵 E
- 从 E 中分解出 R,t(注意:平移 t 是单位向量,真实尺度未知)
- 后续通过 IMU 或三角化恢复尺度
特征三角化
人用两只眼睛看物体,可以判断远近(立体视觉)。
单目相机用 “移动的眼睛” (连续帧)也能“测距”。
数学原理:
- 已知两帧相机的相对位姿 (R, t),同一个特征点在两帧图像的像素坐标 (u_{1}, u_{1}) 和 (u_{2}, u_{2})
- 目标为求这个特征点的3D坐标 (X,Y,Z)
- 方法为解线性方程组( DLT方法)或最小化重投影误差(SVD分解)
操作流程:
- 用5点法得到两帧的 R,t
- 对每个匹配点,用三角化求3D坐标
- 得到稀疏的3D点云(就是SLAM里的“地图点”)
这里的地图点需做简要说明:
- 地图点(Map Point)指在SLAM/VIO中,被相机多次观测到的3D空间点,也叫路标点(landmark)
- 通过三角化(Triangulation)把同一特征点在多帧图像上的 2D 观测恢复成 3D 坐标
- 在BA优化中为优化变量之一,BA会同时调整
地图点就像你在城市里反复看到的”显眼建筑“,BA就像不断微调这些建筑的位置和你拍照时的展位,让所有照片里的建筑都对的上
地图点是 SLAM 中由三角化得到的 3D 路标,是 BA 优化的关键变量之一
PnP
你拿着一张地图(已知3D点),站在某个位置拍了一张照片(2D观测),想知道“我站在地图的哪个位置”。
PnP就是 “已知3D地图点 + 2D像素点 → 求相机位姿”
数学原理:
- 输入n个3D点的世界坐标 (X_{i}, Y_{i}, Z_{i}) ,这些点在图像中的像素坐标 (u_{i}, v_{i})
- 输出相机的位姿 (位置 t + 朝向 R)
使用P3P(3点法)或EPnP(高效解法),再用RANSAC剔除误匹配
操作流程:
- 用三角化得到的3D点作为“地图”
- 新来一帧图像,用特征匹配找到这些3D点在图像的2D位置
- 用P3P/EPnP求解新帧的相机位姿
- 重复这个过程,实现”连续定位“
BA优化
(Bundle Adjustment)
你拍了很多张照片,每张照片都有“地图点”的观测
BA就像”调整所有照片的位置和地图点的位置“,让所有照片上的投影点都尽量对齐实际观测
数学原理:
- 目标函数:最小化重投影误差(3D点投影到图像的坐标 vs 实际检测的像素坐标)
- 优化变量:所有相机的位姿 (R_{i}, t_{i}) ,所有3D点的坐标 (X_{j}, Y_{j}, Z_{j})
用非线性最小二乘(如Levenberg-Marquardt),在Ceres Solver里实现
操作流程:
- 收集所有帧的观测数据(3D点+2D像素)
- 构造重投影误差函数
- 用优化器迭代调整位姿和3D点坐标,直到误差最小
- 得到全局一致、漂移最小的轨迹和地图
补充:RANSAC
目的:在存在大量误匹配(outliers) 的数据中,鲁棒地估计模型参数(例如直线、平面、基础矩阵、单应矩阵等)
用尽量少的随机采样点先猜一个模型,再让数据自己投票
算法步骤:
-
随机采样:从 N 个数据点中随机抽取 最小所需点数(直线需 2 点,基础矩阵需 8 点,5 点法需 5 点)
-
模型拟合:用这 k 个点计算一条直线(或基础矩阵 F)
-
投票/筛选:把其余 N-k 个点拿来测试
若某点到直线的距离 < 阈值 ε,则记为 内点 (inlier),统计内点数量
-
迭代:重复上述步骤 T 次,保留 内点最多 的那一次模型
-
再优化:用所有内点重新拟合一次更精确的模型
迭代次数 T:
T=\frac{\log(1-p)}{\log(1-w^k)}
其中,p 为期望置信度(通常为0.99),w 为内点比例估计值,k 为拟合模型所需的最小点数
在 SLMA/VIO 中的用途:
- 特征匹配验证任务中,使用 RANSAC 估计基础矩阵 F,剔除误匹配点对
- 在 PnP 任务中,使用 RNASAC 估计相机位姿 (R,t),剔除错误 2D-3D 对应
- 在单应矩阵H中,使用 RNASAC 估计平面场景下的位姿,进行 AR/平面跟踪
- 三角化中,使用 RNASAC 估计 3D 点,剔除深度异常点
总的来说,RANSAC 就是在噪声数据里“以少胜多”的鲁棒估计算法,通过随机采样+投票机制剔除误匹配,保证 SLAM 每一步的可靠性。
总结:单目视觉提供”眼睛“,IMU提供”内耳“,回环检测发现”走错路“,全局优化”重新画地图“,非线性优化把这一切“拧成一股绳”——最终让一个摄像头+IMU的组合,实现了厘米级精度的实时定位
性能对比
| 对比方法 | 类型 | 结果 |
|---|---|---|
| OKVIS | 滑窗优化VIO | VINS-Mono在系统完整性(初始化+回环)上优于OKVIS;精度相当 |
| Google Tango | 商业AR系统 | VINS-Mobile在长期漂移控制上优于Tango,局部精度略逊 |
| ORB-SLAM | 视觉SLAM | 无IMU,无法恢复尺度,VINS-Mono在尺度估计和鲁棒性上更强 |
未使用深度学习模型
特征提取使用传统方法(Shi-Tomasi角点 + KLT光流),回环检测使用 DBoW2(BRIEF特征 + 词袋模型) ,优化使用Ceres Solver进行非线性优化(非神经网络)
VINS-Mono 是一个完全基于传统几何优化方法的单目视觉-惯性系统,支持初始化、回环、重定位和全局图优化,开源、实时、鲁棒,适用于无人机、AR、手机等场景。