SLAM笔记-ORB-SLAM2中几种追踪方式的概述

在Tracking线程中,有几种追踪的方法

跟踪模式应用场景使用频率匹配方法
TrackWithMotionModel()可以利用上一帧求出速度估计出初始位姿时经常使用SearchByProjection()候选点来自GetFeatureInArea(),实现前后帧特征点的匹配。BA优化仅优化位姿
TrackReferenceKeyFrame()没有速度信息/刚完成重定位/恒速模型跟踪失败后较少用到SearchByBow()匹配当前帧和关键帧在同一节点下的特征点,不需要投影,速度快,BA优化仅优化位姿
Relocalization()跟踪丢失时使用很少使用使用了BoW找到与该帧相似的候选关键帧;遍历候选关键帧用SearchByBoW进行快速匹配;匹配点足够时用EPnP计算位姿并取出内点做BA优化来优化位姿;如果优化完内点较少则通过关键帧投影生成新的匹配SearchByProjection(),对匹配结果再做BA优化位姿。
TrackLocalMap()前面三选一之后再用此进行后处理每一次跟踪都使用先找到局部关键帧,取出这些帧中的所有地图点作为局部地图点;使用SearchByProjection()将局部地图点和当前帧特征点进行匹配,对匹配结果做BA优化,仅优化位姿

在完成了上述这些追踪过程之后,还要做一些善后工作:

  • 清除观测不到的地图点;
  • 清除恒速模型跟踪中,UpdateLastFrame()为当前帧添加的临时地图点(双目和RGBD情况)
  • 检测并插入关键帧,对于双目和RGBD还会产生新的地图点
  • 删除在BA中被检测为外点的地图点
  • 如果初始化后不久就跟踪失败(即状态为LOST且前面关键帧个数<=5个),重定位也不起作用,就Reset整个系统
  • 记录位姿结果

粗估计:相机位姿初始值

1.根据上一帧和运动模型估计:

运动模型是匀速运动模型,也就是说,当前帧与上一帧之间的相对位姿变化量 = 上一帧和上上帧之间的相对位姿变化量。通过这个可以估计出当前帧的位姿初始值,根据这个值,把上一帧的MApPoints和当前帧的FeaturePoints匹配,之后根据匹配进行优化(?)。如果匹配的点对太少,就要使用关键帧进行估计了。

2.重定位:

如果上一帧跟踪失败了,也就是说根本就没有上一帧的位姿(此时,匀速运动假设也回天无力),所以就要进行重定位。也就是说,要从关键帧数据库中寻找有没有哪个关键帧和当前帧很相似,有的话可能当前帧就在这个关键帧附近,从而可以定位当前帧。
那么怎么去找到这个关键帧呢?步骤如下:

  • 首先,根据当前帧的特征点计算出对应的词袋模型,
  • 然后把当前帧的词袋模型和数据库中各个关键帧的词袋模型进行匹配,从而筛选出一批候选的关键帧KeyFrameDatabase::DetectRelocalization()
  • 把当前帧的特征点和候选关键帧的MapPoints匹配。
  • 只有在重定位时,才使用了EPnP为了对这些候选关键帧们进一步进行筛选,就要每一个关键帧都用RANSAC迭代计算出一个当前帧的位姿(PnP算法),直到找到一个关键帧和对应位姿,让他和当前帧之间有足够多的inliers。然后再对其进行进一步优化,进行更多的特征点和MapPoints的匹配。如果优化之后的位姿还是很棒(inliers数量多),那么就可以确定当前的位姿了。

精求解当前帧位姿

局部地图跟踪:

Tracking::TrackLocalMap()
已知:前面可以获得的当前帧的位姿初值,当前帧的地图点。 (不那么准确也ok)特征点和MapPoints有了初步的匹配后
思路:利用两级共视关键帧
就会进入这个更精细的求解当前帧位姿的步骤。
步骤如下:

  1. 根据前面的到的当前帧的地图点来找到能观测到当前帧的一级共视关键帧, 并将这些一级共视关键帧的二级共视关键帧,子关键帧,父关键帧一起作为局部关键帧
  2. 取出上述局部关键帧中所有的地图点作为局部地图点(这里更新了局部关键帧和局部地图点)
  3. 在函数Tracking::SearchLocalPoints(),将局部地图点投影到当前帧,去掉不再视野内的无效地图点,用剩下的局部地图点和当前帧的特征点进行匹配,匹配见SearchByProjection()。这里相当于是补充了更多的匹配关系,用之前的地图点和新增的地图点对位姿再次优化。在更新当前帧地图点的被观测程度时,注意:这里被单目观测到一次+1,被双目或者RGBD观测到1次加2。
  4. 对匹配结果进行BA优化,只优化位姿。

局部地图中有:

  • 和当前帧有共视的MapPoints的关键帧
  • 一些特殊的MapPoints,这些地图点可以投影到当前的画幅内,他们的平均可视方向与当前帧的方向夹角不大于60度,他们和当前帧光心的距离在一定范围之内(如果距离太远,ORB特征的尺度不变性在有金字塔的情况下也很难保证,匹配出错的概率大)

在计算得到局部地图的同时,还要尽可能进一步将局部地图的地图点和当前帧未匹配的特征点相匹配,最终对这个局部地图进行BA优化

什么时候把一个帧选为关键帧KF

如果当前帧比较重要,则会将其作为 KF 插入 Map 并送入 LocalMapping 线程。ORB-SLAM 的一个特点就是,其插入 KF 的条件很宽松,所以就可以插入很多 KF,而 ORB-SLAM 会在 LocalMapping 线程中再对冗余的KF进行剔除。目的是:不放过可能有用的帧,增强系统的鲁棒性,以应对纯旋转等很难处理的相机运动。

具体的条件是:

  • 距离上一次重定位已过去了超过20帧
  • LocalMapping 线程正闲置,但如果已经有连续20帧内没有插入过 KF 了,那么 LocalMapping 线程不管忙不忙,都要插入 KF 了
  • 当前帧至少追踪了 50 个点(当前帧质量不能太差)
  • 当前帧追踪的点中不能有90%以上和其 Reference KF 相同(当前帧不能太冗余)
  • 0
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: Vi-ORB-SLAM2是一种视觉惯性(VI)同时定位与地图构建(SLAM)系统,用于无人机和移动机器人的自主导航。它融合了惯性测量单元(IMU)和摄像头信息,通过实时跟踪相机的位置和姿态来构建地图和定位机器人。 Vi-ORB-SLAM2采用了ORB特征描述子和FAST角点特征,以实时地提取和匹配特征点。它利用相机的运动估计来排除误匹配的特征点,从而提高了对动态环境的鲁棒性。 Vi-ORB-SLAM2使用基于滤波器的方法来融合IMU和视觉数据。通过IMU的角速度和加速度数据,可以估计相机的运动和姿态,并根据视觉测量来校准IMU的漂移。这种融合可以提高系统的鲁棒性和精确性,特别是在存在相机运动模糊或视觉信息缺失的情况下。 Vi-ORB-SLAM2还具有回环检测和优化的能力,可以在长时间的导航自动修正漂移误差。它采用词袋模型来建立地图和检测回环,通过优化相机和地图的位姿关系来实现全局一致性。 Vi-ORB-SLAM2已经在无人机和移动机器人的多个实验平台上进行了验证,并取得了令人满意的性能。它在实时性和精确性方面都有不错的表现,并且相对于传统的视觉SLAM系统更具鲁棒性。 综上所述,Vi-ORB-SLAM2是一种基于视觉惯性融合的SLAM系统,具有鲁棒性、精确性和实时性的优势,适用于无人机和移动机器人的自主导航。 ### 回答2: vi-orb-slam2是一种基于视觉的实时单目SLAM(Simultaneous Localization and Mapping)系统。SLAM是一种能够同时估计相机位姿和环境的三维地图的技术。vi-orb-slam2采用单个摄像头进行定位和地图构建。 vi-orb-slam2使用了一种双目VO(Visual Odometry)和ORB特征的融合方法。VO方法通过连续帧之间的图像匹配和运动估计来计算相机的运动轨迹。ORB特征是一种高效的特征提取算法,它可以在快速实时的情况下提取和匹配特征点。 vi-orb-slam2通过在VO方法引入ORB特征,进一步提高了系统的鲁棒性和准确性。ORB特征具有自适应的尺度和旋转不变性,可以应对不同尺度和姿态变化的场景。此外,ORB特征的计算效率也很高,可以实现实时的图像处理和跟踪。 vi-orb-slam2在实际应用具有广泛的应用前景。它可以用于室内导航、增强现实、机器人自主导航等领域。通过实时地建立环境地图和同时估计相机的位姿,vi-orb-slam2可以帮助机器人或者无人机在未知环境进行自主导航和定位。同时,vi-orb-slam2的实时性和高效性也使得它可以应用于实时监控、虚拟现实等实时场景。 总的来说,vi-orb-slam2是一种高效、鲁棒和实时的单目SLAM系统,具有广泛的应用前景,可以在多个领域实现定位和地图构建的任务。 ### 回答3: vi-orb-slam2 是一种基于视觉和惯性传感器数据的实时单目SLAM(Simultaneous Localization and Mapping)系统。SLAM是一种同时利用感知和定位能力,实时构建环境地图并实现自我定位的技术。 vi-orb-slam2利用摄像头和惯性测量单元(IMU)融合数据,可以在没有GPS信号的情况下,实时地建立并更新环境地图,并估计自身相对于地图的位置和姿态信息。 其ORB指的是Oriented FAST and Rotated BRIEF,是一种特征检测和描述子提取算法,可以快速地检测和描述图像的特征点。SLAM系统通过ORB算法提取图像关键点,并利用这些特征点进行特征匹配,从而实现环境地图的构建和定位过程。 vi-orb-slam2还利用IMU的数据,并将其与视觉数据进行融合,从而提高系统的稳定性和鲁棒性。IMU可以提供姿态和加速度信息,用于补偿视觉数据的相机运动误差,进一步提高SLAM系统的定位精度和鲁棒性。 vi-orb-slam2具有实时性能,可以在实时视频流上运行,并实时地估计相机的位姿。这使得vi-orb-slam2在许多应用具有广泛的应用前景,例如机器人导航、增强现实和虚拟现实等领域。 总之,vi-orb-slam2是一种基于视觉和惯性传感器的实时单目SLAM系统,通过视觉特征匹配和IMU数据融合,实现了环境地图的构建和自我定位。它具有实时性能和鲁棒性,适用于多种应用场景。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值