框图
各个模块算法
| OV2SLAM | ORBSLAM2 | 对比 |
特征点提取与匹配 | Fast + LK光流 | Fast + ORB 描述子 | LK光流速度快 |
输出的实时pose | PnP | Motion-only BA | Motion-only BA精度高一点 |
初始化 | 单目:前两个关键帧E分解,并三角化,则初始化成功。 双目:第一帧双目计算3D点,即可完成初始化。 | 单目:前两个关键帧E分解,并三角化,则初始化成功。 双目:第一帧双目计算3D点,即可完成初始化。 | 一致 |
三角化 | 单目:关键帧特征点三角化 双目:光流匹配左帧,右目新检测的点可以进行Temporal三角化 | 单目:关键帧特征点三角化 双目:描述子匹配完之后,利于fb/d =z 计算深度 | ORBSLAM2需要双目矫正过的图像 |
localBA | 共视图包含的3D点和位姿一起优化 | 共视图包含的3D点和位姿一起优化 | 一致 |
回环检测 | iBowLCD 在线构建字典 | DBOW 离线训练字典 | |
posegraph | 作为优化的初始值 | 作为优化的初始值 | 一致 |
优化 | looselyBA 仅优化回环帧和当前帧相关联的3D点和关键帧位姿 | FullBA 优化全部关键帧的位姿和3D点 | FullBA更准一些 |
主要区别点:
精度:
- 实时位姿态输出:ORBSLAM2精度比OV2SLAM高,在输出实时pose时,ORBSLAM2的位姿是通过TrackLocalMap得到的,这里会进行motion-only的BA。而OV2SLAM输出的实时pose是通过PnP计算出来的,精度有限。虽然OV2SLAM也有TrackLocalMap,但是他这一步仅进行特征点的re-track, 没有进行位姿计算。另外,由于looselyBA比FullBA精度低一些,导致3D点有误差,从而PnP位姿计算也会有一定误差。
- 最终全局位姿输出: ORBSLAM2精度比OV2SLAM高,主要在于looselyBA仅优化与当前帧和回环帧关联的信息,在posegraph提供了全部关键帧的初值,这一步影响到的pose不仅仅包括looselyBA优化的信息,还影响到其余关键帧的pose和3D点。因此,全局优化精度会高一些。
速度:
- 实时位姿输出:OV2SLAM比ORBSLAM2快。OV2SLAM的特征点匹配采用光流,比描述子提取和匹配要快。且位姿计算PnP会比motion-only BA快。
- 地图构建: localBA 用于优化共视帧的位姿和3D点。两者算法基本一致,速度应该也差不多。
- 最终位姿态输出:OV2SLAM比ORBSLAM2快。looselyBA 优化变量明显小于FullBA。
综合选择:
OV2SLAM整体精度比ORBSLAM2略微下降,但是速度明显提升。而且OV2SLAM里面增加一些细节,例如异常点剔除策略,通过投影点比例判断初始估计位姿准确性等。
ORBSLAM3里面会判断远点和近点,远点只用于优化旋转,尺度信息只能依靠近点。
VSLAM的缺陷:
单目没有尺度。
双目尺度测距范围有限,当匹配视差在1.2-2以上时,深度估计才相对可靠。ORBSLAM3中建议40倍基线以内的距离才能用于尺度计算。因此,VSLAM仅适用于近距离定位与建图。
当图像模糊时,视觉当前帧会lost,如果仅连续几帧丢失,那么仅会短时间内降低输出的pose的帧率。如果对输出帧率有要求,则需要用VISLAM,IMU可以支撑3s. 如果视觉丢失时间过长,则VISLAM也不能处理。只能进行重定位或系统重启。
在转弯或者运动比较快且是新场景时,运动快,那么关键帧被选择的频率就比较大,从而三角化就比较滞后。如果当前帧没有被及时三角化成功,则当前帧的pose就没办法计算。需要及时三角化添加3D点,才能计算出来位姿。因此要求关键帧的创建和三角化线程也很快才能保证不丢失。 即使加上IMU,如果关键帧缓冲比较多,那么也会丢失。但是如果丢失了,在有IMU时,可作为初始位姿,光流跟踪新帧,再三角化得到新点,这样也可以处理。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)