ORB-SLAM3 keyframe

发布时间:2026/6/27 1:58:15
ORB-SLAM3 keyframe 在ORB-SLAM3中关键帧KeyFrame是构建地图的核心骨架。它并非处理每一帧图像而是从连续的视频流中挑选出那些具有代表性和信息量的少数帧来构建和优化地图。这样做的好处是能大幅减少需要优化的帧数从而提高系统的计算效率。 关键帧的创建条件 (NeedNewKeyFrame)系统在Tracking线程中通过NeedNewKeyFrame()函数来判断是否插入新关键帧。其决策逻辑是一个多条件组合主要包含强制不插入、强制插入和条件判断三种情况。 强制不插入纯定位模式系统只定位不建图无需插入新关键帧。局部建图线程被占用例如被回环检测占用时为避免冲突不插入新关键帧。刚完成重定位如果刚完成重定位且地图中关键帧数量已较多会暂时不插入等待系统稳定。 强制插入IMU相关IMU未初始化在IMU初始化完成前系统认为视觉-惯性跟踪不稳定会采取保守策略至少每0.25秒强制插入一个关键帧。IMU模式下时间超限在IMU模式下如果当前帧与上一个关键帧的时间间隔超过0.5秒也会强制插入以防止跟踪丢失。 条件判断插入在不满足上述强制条件后系统会评估以下标准满足其一且跟踪质量达标才会插入距离上次关键帧的帧数过多防止因长时间不插入关键帧而导致跟踪丢失。满足最小帧数间隔且局部建图空闲在保证有一定时间间隔的基础上利用空闲的计算资源插入关键帧。当前跟踪质量较差当跟踪到的内点Inliers数量过少表明可能即将跟丢时会插入关键帧以尝试挽救。️ 关键帧的后续处理当一个帧被判定为关键帧后会触发以下流程插入地图 (LocalMapping线程)新关键帧被插入到当前活动地图中。更新数据结构计算词袋向量BoW将关键帧的图像描述子转换为词袋向量用于快速回环检测和重定位。更新共视图Covisibility Graph更新与其它关键帧的共视关系图。图中的节点是关键帧若两个关键帧有足够多的共同地图点则形成一条边边的权重是共视点的数量。生成新的地图点与共视关键帧进行特征匹配通过三角化生成新的3D地图点。局部优化执行局部BABundle Adjustment优化新关键帧、局部共视关键帧的位姿及地图点的3D位置。 关键帧的删除冗余判断为防止关键帧无限增长LocalMapping线程会剔除冗余的关键帧。判断标准通常是如果一个关键帧中90%以上的地图点都能被其它至少3个关键帧观察到则认为它是冗余的可以被安全删除以保证地图的紧凑性和优化效率。 关键数据结构KeyFrame类封装了关键帧的位姿、内参、特征点、所属地图、共视关系等所有信息。KeyFrameDatabase类一个数据库存储所有关键帧的词袋向量用于快速回环检测和重定位。Map类管理属于同一地图的所有关键帧和地图点。ORB-SLAM3支持多地图Atlas可以同时维护多个Map。 总结关键帧是ORB-SLAM3系统的核心。它通过一系列精心设计的创建与淘汰机制确保了系统在长期运行中能够高效、精准地构建和优化稀疏特征地图。这套机制是ORB-SLAM3在视觉SLAM领域表现出色的重要基石。