(九)ORBSLAM回环检测之几何验证


 ORBSLAM2回环检测之几何验证简介

  回环检测的目的是找到当前场景在历史中是否出现过,如果出现过,那会给我们提供一个非常强的约束条件,把我们偏离很多的轨迹一下子修正到正确的位置上。当然,这么好的东西,有利自然就有弊。万一我们检测出来的回环不是真正的回环,也就是说我们认错了地方,这种时候提供的回环约束会导致轨迹被错误地“修正”了,结果就是估计的轨迹跟真实的轨迹相差十万八千里,这显然是不可接受的。

  因此,回环检测的正确性就显得非常重要。我们会宁愿不要回环约束,也不要一个错误的回环约束。所以ORBSLAM2中对回环帧的要求非常高,在外观验证/位置识别阶段的筛选就有好几轮,这我们在上一讲列的提纲里介绍过。而完成外观验证后,还要进一步进行几何验证,才能最终确定是否要回环帧。这很像一个公司里面要找一个领导,找到对的人能让公司发展步入正确的轨道,万一遇到不合适的人可能公司就会直接崩溃掉。

  几何验证很直白的意思,就是用几何约束来判断候选帧是否满足条件,这一讲,我们主要分为以下几个部分来介绍它:

  1. RANSAC方法;

  2. 双向优化确定内点;

  3. ORBSLAM2几何验证方法提纲;

  4. 重定位;


 RANSAC方法

  ORBSLAM2中采用的RANSAC方法中,求解相对位姿的方法是Berthold K. P. Horn在1987年发表的文章”Closed-form solution of absolute orientation using unit quaternions“中所提出的。这是一篇非常厉害的文章,笔者在读这篇文章的时候都感叹作者的水平是如此之高。Horn通过三维匹配点构建优化方程,但是却不需要用迭代优化的方法,直接使用闭解的方法求出了相对旋转、相对位移和尺度因子。接下来,笔者将详细介绍一下这篇文章的主要方法。

  假设我们当前有 $n$ 对已匹配的三维点,记为 $P_{l} = \{ p_{l,1}, p_{l,2}, \dots, p_{l,n}\}$ 和 $P_{r} = \{ p_{r,1}, p_{r,2}, \dots, p_{r,n}\}$。

  我们需要求解质心,这里我们用左相机和右相机表示两个位置,SLAM问题中通常表示一个相机在两个位置:

  左相机三维点:$\bar{P}_{l} = \frac{1}{n}\sum\limits_{i=1}^{n}p_{l,i}$ 并对左相机每个三维点构建新坐标:$p_{l,i}^{'} = p_{l,i} - \bar{p}_{l}$

  右相机三维点:$\bar{P}_{r} = \frac{1}{n}\sum\limits_{i=1}^{n}p_{r,i}$ 并对右相机每个三维点构建新坐标:$p_{r,i}^{'} = p_{r,i} - \bar{p}_{r}$

  则误差项可以写成:

  \begin{equation}
    e_{i} = p_{r,i}^{'} - sR_{rl}p_{l,i}^{'} - t_{rl}^{'} 
  \end{equation}

  其中 $t_{rl}^{'} = t_{rl} - \bar{P}_{r} + sR_{rl}\bar{P}_{l}$

  则代价函数则可以写成:

  \begin{equation}
    J = \sum\limits_{i=1}^{n} \|p_{r,i}^{'} - sR_{rl}p_{l,i}^{'} - t_{rl}^{'}\|^{2}     
  \end{equation}

   将代价函数展开,我们得到:

  \begin{equation}
    J = \sum\limits_{i=1}^{n} \| p_{r,i}^{'} - sR_{rl}p_{l,i}^{'} \|^{2

### ORB-SLAM回环检测实现及其面临的问题 ORB-SLAM 是一种广泛使用的视觉 SLAM 系统,其回环检测模块对于减少累计误差至关重要。该系统的回环检测通过识别先前访问过的位置来纠正姿态估计中的漂移。 #### 回环检测机制 在 ORB-SLAM 中,回环检测依赖于词袋模型 (BoW) 来匹配当前帧与数据库中存储的关键帧之间的描述子[^3]。当找到潜在的候选者时,会进一步执行几何验证以确认这些匹配的有效性,并计算必要的修正变换矩阵。此过程有助于保持全局一致性并防止长时间运行期间的地图退化。 #### 常见问题及解决方案 然而,在实际部署过程中可能会遇到一些挑战: - **光照变化影响**:不同时间拍摄同一场景可能导致显著外观差异,使得基于特征点的匹配变得困难。 解决方案之一是在构建 BoW 数据库时采用多尺度不变特性描述符,如 SIFT 或 SURF,它们对亮度和对比度的变化具有更好的容忍度[^1]。 - **动态物体干扰**:移动的对象可能被误认为静态结构的一部分,进而破坏了正确的匹配关系。 排除此类异常情况的一种方法是对每一组匹配进行额外的空间连贯性检验,只保留那些符合预期相对位置分布模式的对应关系[^2]。 - **重复纹理区域误导**:某些环境中存在大量相似图案(例如走廊墙壁上的瓷砖),这增加了错误闭环的概率。 面对此类难题,可以通过增加局部地图更新频率或者引入辅助传感器数据(比如激光雷达)来进行补充感知,从而获得更加可靠的定位依据。 ```cpp // C++ code snippet demonstrating how to perform geometric verification during loop closure. void verifyGeometricConsistency(const std::vector<cv::KeyPoint>& keypoints_curr, const std::vector<int> matches_idx, cv::Mat& pose_estimated){ // Implement RANSAC or another robust estimation technique here... } ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值