首页 > 编程知识 正文

plm系统使用教程(slam中文)

时间:2023-05-04 17:44:05 阅读:72989 作者:2737

可以参考: ORB-SLAM3源代码阅读笔记本1

论文翻译; 论文解读

跟踪部分Tracking.cc部分与ORB-SLAM3的区别:

对于TrackWithMotionModel,默认初始值使用IMU预集成的值。

TrackReferenceKeyFrame与orb2相同。

如果以上两种方法无效且定位尚未成功,则如果存在IMU,则当前帧自上次重新定位成功以来小于1s,表示丢失; 无,如果当前地图中的关键帧数较多(大于10 ),请将其设置为recently-lost。 对于recently-lost,请使用IMU预积分的值。 如果连续5秒不回来,则设置为LOST。 对于纯视觉,对于recently-lost,用EPNP重新定位。 在LOST状态(指示真的帮不上忙)下,在当前地图的关键帧数小于10的情况下,ATLAS映射集重置当前地图,而在大于10的情况下,ATLAS映射集创建新地图并将其添加到ATLAS。

跟踪TrackLocalMap基于local map进行跟踪,在IMU模式且累积很多IMU数据时,利用视觉IMU的误差函数进行优化(poseinertialoptimizationlastframe )。

跟踪localmap失败,但如果之前成功,则在IMU模式下设置为recently-lost,否则设置为lost。 重定位采用MLPNP算法,考虑图像平面特征点像素的不确定度,在正切空间内,最小化特征点在正切空间的投影,获得摄像机姿态。

如果跟踪成功或recently-lost,请更新速度,清除无效的映射点,并根据需要创建关键帧。 对于lost,如果在IMU模式下尚未执行IMU初始化,请重置当前地图并结束当前跟踪。 如果地图中的关键帧超过5,且处于可视模式或IMU模式,但IMU初始化完成,请创建新地图。

在Optimizer.cc中优化时,IMU优化的节点包括当前帧的姿态速度、陀螺仪偏移和加速度计偏移。 第一条边(视觉再投影约束); 第二个边(IMU预积分约束)两个帧之间的姿态变化量与IMU预积分值之间的偏差尽可能小; 第三个边缘(陀螺随机游走约束)陀螺随机游走值在相近帧之间差异不大residual=VG-VGk; 第四条边(加速度随机行走约束)加速度的随机行走值在相邻帧之间差异不大;residual=VA-VAk; 第五边缘(预约束)前一帧信息优化的变化量尽量减小IMU当前帧和关键帧的误差函数,用于后一当前帧和前一非关键帧的优化函数

优化在当前帧中跟踪的贴图点的数量,以确定跟踪是否成功。

IMU预积分:首先用中值积分进行计算,进行两个相邻图像帧之间的预积分,然后传递考虑陀螺仪和加速度计的偏移而计算出的预积分后使用。

局部BA IMU初始化

33558 www.Sina.com/detectnbestcandidates。 在所有关键帧上计算到与当前关键帧相同的单词数(max_n ),然后在相同的单词数上找到大于0.8*max_n的关键帧序列lScoreAndMatch。 在该序列中,计算当前关键帧与lScoreAndMatch中每个关联关键帧的相似度分数之和,同时找出共视点中得分最高的关键帧。 然后,将团队得分和分数最高的关键帧保存在lAccScoreAndMatch中。 最后,根据分数从大到小对lAccScoreAndMatch进行排序。 最后,根据当前帧和候选的关键帧是否在相同的map中,将其分类成环回帧或融合候选帧。

在得到几个候选帧后,对当前帧和闭环候选帧及其共视帧进行特征点匹配、求解和优化,如果成功,则表示当前帧和闭环候选帧为回环检测和融合说明了在很快就要与当前帧的3个共视帧进行匹配的闭环帧的当前帧的共视帧和闭环帧也可以生成闭环关系,如果3个共视帧可以生成闭环关系,则返回为真,返回为循环作者萝莉还说明了这是他们算法的创新之处。 也就是说,在检测时间连续性时,不必等待几个帧,直接获得当前帧的共视帧,可以加速检测,避免忽略循环,并且可以提高再现效率。

如果在上一步中找到了可以与当前帧和当前帧建立共视帧环回关系的闭环帧,但连续性检测未达到三个帧,则将执行当前步骤。 mnLoopNumCoincidences或mnMergeNumCoincidences不会为0。 变成1或2。 在这种情况下,在下一帧中进入NewDetectCommonRegions (() ) ) ) ) )函数后继续连续性检查。 具体而言,通过投影来寻找闭环帧及其附近的地图点与当前帧的匹配,如果匹配数足够,则进行当前帧与闭环帧之间的sim3优化,如果优化的内部点数足够,则接受该帧,并当mnLoopNumCoincidences=3时,mbLoopDetected为true,当mnMergeNumCoincidences=3时,mbMergeDetected为true。 如果其中一个为true,则返回true,表示检测到环回。

p>然后在候选闭环帧中选出符合要求的一帧作为闭环帧,vpLoopBowCand和vpMergeBowCand分别各选出一帧。在DetectCommonRegionsFromBoW函数里,会对当前帧和闭环候选帧及其共视帧进行特征点匹配、求解和优化sim3,如果成功,说明当前帧和该闭环候选帧是可以建立闭环关系的。然后紧接着会进行连续性检测,即将当前帧的3个共视帧与匹配上的闭环帧进行投影匹配,如果匹配数足够,说明当前帧的共视帧与闭环帧也可以建立闭环关系,如果有三个共视帧可以建立闭环关系则返回true,检测到回环!作者潇洒的萝莉也说明了这是他们算法的一个创新点,即检测时间连续性时不用等好几帧,直接拿当前帧的共视帧来做,这样使得检测更快,避免错过回环,即提高了召回率。

如果在上一步中找到了可以和当前帧及当前帧共视帧建立回环关系的闭环帧,但是连续性检测没有达到3帧,那么会执行现在这步。mnLoopNumCoincidences或者mnMergeNumCoincidences就不会为0(可能为1或2),这时下一帧进入NewDetectCommonRegions( )函数时就会继续进行连续性检验。具体做法为:通过投影寻找闭环帧及其邻居的地图点与当前帧的匹配,如果匹配数足够,进行当前帧与闭环帧之间的sim3优化,如果优化后的内点数足够,则接受该帧,mnLoopNumCoincidences或mnMergeNumCoincidences加1。当mnLoopNumCoincidences>=3,mbLoopDetected就为true,当mnMergeNumCoincidences>=3,mbMergeDetected就为true。只要其中一个为true,就返回true,表示检测到了回环。

版权声明:该文观点仅代表作者本人。处理文章:请发送邮件至 三1五14八八95#扣扣.com 举报,一经查实,本站将立刻删除。