
ORB-SLAM2
文章平均质量分 95
算法导航
这个作者很懒,什么都没留下…
展开
-
09 闭环线程 LoopClosing
由于累计误差的存在,检测到回环后,当前关键帧和闭环关键帧的位姿并不是相等的,这时就需要计算二者之间的相似变换矩阵,用于后续优化。若当前关键帧组在之前的连续关键帧组中找到连续关系,则当前的连续关键帧组的连续长度加1;若当前关键帧组在之前的连续关键帧组中没能找到连续关系,则当前关键帧组的连续长度为0。若某关键帧组的连续长度达到3,则认为该关键帧实现闭环。② 将闭环候选关键帧和其共视关键帧组合成为关键帧组。③ 在当前关键组和前一帧的连续关键组间寻找连续关系,,闭环候选关键帧取自于。类型,表示关键帧组,原创 2024-03-02 16:57:02 · 974 阅读 · 0 评论 -
08 局部建图线程 LocalMapping
如果一个关键帧的地图点 90% 都能被超过 3 个其他关键帧观测到,则该帧冗余。(具体来说,就是遍历该关键帧的地图点,若某一地图点被超过3个其他关键帧观测到,则该地图点冗余,最终冗余地图点超过 90 %,则该关键帧冗余。局部建图线程接收跟踪线程输入的关键帧,利用关键帧的共视关系生成新的地图点,搜索融合相邻关键帧的地图点,然后进行局部地图优化、删除冗余关键帧等操作,最后将处理后的关键帧发送给闭环线程。若地图点反投影对应位置上不存在地图点,则直接添加观测;将地图点与帧中图像的特征点匹配,实现地图点融合。原创 2024-02-28 11:13:31 · 656 阅读 · 0 评论 -
07 跟踪线程 Tracking
第二个阶段是局部地图跟踪,将当前帧的局部关键帧对应的局部地图点投影到该帧,得到更多的特征点匹配关系,对第一阶段的位姿再次优化得到相对准确的位姿。用局部地图点进行投影匹配,得到更多匹配关系,已经是当前帧地图点的不需要再投影,除此之外的点如果在当前帧的视野范围内,就进行投影匹配。函数,更新局部关键帧:遍历当前帧的地图点,记录所有能观测到当前帧地图点的关键帧;这是跟踪线程的第二阶段,将当前帧的局部关键帧对应的局部地图点投影到该帧,得到更多的特征点匹配关系,从而对第一阶段的位姿再次优化得到相对准确的位姿。原创 2024-02-27 21:36:18 · 692 阅读 · 0 评论 -
06 单目初始化器 Initializer
用 current frame,也就是用 SLAM 逻辑上的第二帧来初始化整个 SLAM,得到最开始两帧之间的。计算重投影误差,也就是计算投影点与对应匹配点的像素距离的平方(计算值与真实值),作为卡方值。④ 三维点和两帧图像光心夹角需满足一定条件,夹角越大,视差越大,误差越小,三角化结果越准确;用均值和一阶距绝对值将关键点归一化,归一化可以使特征点分布均匀,增强计算稳定性。将帧 1 特征点左乘单应矩阵,得到帧 2 中对应特征点的计算值。,但由于误差存在,左式并不会恒等于零,于是,我们将它的值作为误差。原创 2024-01-31 09:44:20 · 925 阅读 · 0 评论 -
05 关键帧 KeyFrame
在 ORB-SLAM2 中,保存所有关键帧构成的最小生成树(优先选择权重大的边作为生成树的边),在回环闭合时只需对最小生成树做 BA 优化就能以最小代价优化所有关键帧和地图点的位姿,相比于优化共视图大大减少了计算量。当一个关键帧被删除时,其父关键帧和所有子关键帧的生成树信息也会受到影响,需要为其所有子关键帧寻找新的父关键帧,如果父关键帧找的不好的话,就会产生回环,导致生成树就断开。新关键帧的父关键帧会被设为其共视程度最高的共视关键帧。进行初始化和维护,基于当前关键帧看到的地图点信息重新生成共视关键帧。原创 2024-01-23 20:20:21 · 1042 阅读 · 0 评论 -
04 帧 Frame
(1)粗匹配:根据特征点描述子距离和金字塔层级判断匹配.粗匹配关系是按行寻找的,对于左目图像中每个特征点,在右目图像对应行上寻找匹配特征点。通过这种预处理,在后面 SLAM 系统的其他部分中不用再区分双目特征点和 RGBD 特征点,它们都会以双目特征点的形式被处理(仅通过判断。双目相机分别提取到左右目特征点后对特征点进行双目匹配,并通过双目视差估计特征点深度。对于单目特征点(单目相机输入的特征点或没有找到右目匹配的左目图像特征点),其。双目/RGBD 相机可以得到特征点的立体信息,包括右目特征点信息(原创 2024-01-06 10:43:48 · 1145 阅读 · 0 评论 -
03 地图点 MapPoint
删除地图点对关键帧的观测,若地图点对关键帧的观测少于 2,则地图点无法被三角化,就删除该地图点。)时当前关键帧和闭环关键帧上的地图点发生冲突时,会使用闭环关键帧的地图点替换当前关键帧的地图点。将闭环关键帧的共视关键帧组中所有地图点投影到当前关键帧的共视关键帧组中,发生冲突时就会替换。若当前地图点对参考关键帧的观测被删除,则取第一个观测到当前地图点的关键帧做参考关键帧。中所有观测到本地图的关键帧取平均得到,平均观测距离是根据参考关键帧得到的。地图点的平均观测距离是根据其参考关键帧计算的,那么参考关键帧。原创 2023-12-30 21:40:49 · 1113 阅读 · 0 评论 -
02 特征点提取器 ORBextractor
ORBextractor 类用于 tracking 线程中第一步预处理。主要流程为。原创 2023-12-22 21:34:14 · 927 阅读 · 0 评论 -
01 整体代码运行流程
并且,Tracking 线程产生关键帧的频率和时机是不固定的,因此需要三个线程同时进行,LocalMapping 和 LoopClosing 不断循环查询 Tracking 是否产生了关键帧。但实际编程中,我们将 Tracking 线程视为主线程,LocalMapping 和 LoopClosing 为子线程,Tracking 通过持有两个子线程的指针实现对其控制。即为加锁,锁的有效性仅限于大括号内,也就是说,到大括号外,锁就会自动释放。开头的变量表示为某类的成员变量;原创 2023-12-17 11:32:12 · 1037 阅读 · 0 评论