ORB-SLAM(九)LocalMapping
LocalMapping作用是将Tracking中送来的关键帧放在mlNewKeyFrame列表中;处理新关键帧,地图点检查剔除,生成新地图点,Local BA,关键帧剔除。主要工作在于维护局部地图,也就是SLAM中的Mapping。
1. 处理新关键帧:ProcessNewKeyFrame()
做了三件事:
a. 计算当前关键帧Bow,便于后面三角化恢复新地图点;
b. 将TrackLocalMap中跟踪局部地图匹配上的地图点绑定到当前关键帧(在Tracking线程中只是通过匹配进行局部地图跟踪,优化当前关键帧姿态),也就是在graph中加入当前关键帧作为node,并更新edge。而CreateNewMapPoint()中则通过当前关键帧,在局部地图中添加与新的地图点;
c. 更新加入当前关键帧之后关键帧之间的连接关系,包括更新Covisibility图和Essential图(最小生成树spanning tree,共视关系好的边subset of edges from covisibility graph with high covisibility (θ=100), 闭环边)。
2. 对于ProcessNewKeyFrame和CreateNewMapPoints中最近添加的MapPoints进行检查剔除:MapPointCulling()
候选待检查地图点存放在mlpRecentAddedMapPoints,满足两个条件之一就被剔除:
1. 跟踪(匹配上)到该地图点的普通帧帧数(IncreaseFound)<应该观测到该地图点的普通帧数量(25%*IncreaseVisible):该地图点虽在视野范围内,但很少被普通帧检测到。
2. 从添加该地图点的关键帧算起的初始三个关键帧,第一帧不算,后面两帧看到该地图点的帧数,对于单目<=2,对于双目和RGBD<=3;因此在地图点刚建立的阶段,要求比较严格,很容易被剔除;而且单目的要求更严格,需要三帧都看到。若从添加该地图点的关键帧算起,一共有了大于三个关键帧,还存在列表中,则说明该地图点是高质量的,从检查列表中去掉。
一旦经过了这样比较严格的筛选,地图点只有在观测到它的关键帧<3时才会被剔除,这主要发生在关键帧被剔除(90%以上匹配点可以被其他帧观察到);或者局部捆集优化时,将地图点归为外点从观测中剔除了的情况。因此地图点中的外点是比较少的,所以整套ORB-SLAM中除了重定位和闭环很少去使用RANSAC。
ORB-SLAM中关键帧和地图点的加入和删除秉承的是送入严出的标准,因此在提高了定位建图准确性的前提下又很好地限制了计算量,可以用于large scale的场景。
3. 根据当前关键帧恢复出一些新的地图点,不包括和当前关键帧匹配的局部地图点(已经在ProcessNewKeyFrame中处理),注意理解与前面两步的先后关系,先处理新关键帧与局部地图点之间的关系,然后对局部地图点进行检查,最后再通过新关键帧恢复心的局部地图点:CreateNewMapPoints()
--- 对Tracking中送来的每一帧关键帧执行上述过程,直到mlNewKeyFrame为空。
3'. SearchInNeighbors()
更新并融合当前关键帧以及两级相连(共视关键帧及其共视关键帧)的关键帧的地图点。
4. LocalBundleAdjustment()
5. KeyFrameCulling
局部关键帧剔除
void LocalMapping::KeyFrameCulling();
候选的pKF是LocalMapping中当前处理的关键帧的共视关键帧,不包括第一帧关键帧与当前关键帧。遍历pKF中的地图点的观测:
const map<KeyFrame*, size_t> observations = pMP->GetObservations();
若有不少于3帧被观测到(需要满足观测尺度不大于或近似于在pKF中的尺度),则记录下。若pKF中90%以上的地图点能够被其他关键帧观测到,也就是说,该关键帧的存在提供的地图点观测信息有限,则将其删除!
ORB-SLAM(九)LocalMapping的更多相关文章
- [SLAM] 01 "Simultaneous Localization and Mapping" basic knowledge
发信人: leecty (Terry), 信区: ParttimeJobPost标 题: 创业公司招SLAM 算法工程师发信站: 水木社区 (Thu Jun 16 19:18:24 2016), 站内 ...
- [SLAM] 01. "Simultaneous Localization and Mapping"
本篇带你认识SLAM,形成客观的认识和体系 一.通过行业招聘初步了解SLAM 发信人: leecty (Terry), 信区: ParttimeJobPost标 题: 创业公司招SLAM 算法工程师发 ...
- 常用的SLAM解决方案
ORB SLAM 可以去Github上自己搜索现成的SLAM程序包 在此基础上做优化 视觉SLAM的分类方法:按摄像头的多少分为单目和双目,按是否使用概率方法分为概率法和图法 链接 学习SLAM重要的 ...
- 关于ORB SLAM2资源整理(持续更新)
ORB SLAM2源码讲解(吴博) https://www.youtube.com/watch?v=2GVE7FTW7AU 泡泡机器人视频整理: http://space.bilibili.com/3 ...
- 快看,那个学SLAM 的崩溃了!
点"计算机视觉life"关注,置顶更快接收消息! 本文列举了当前优秀SLAM方案,点出了SLAM学习者的困境,最后打算搞点大事 请把此文转发给你认识的SLAM大神,愿你头发浓密,心 ...
- ORB-SLAM2(一)----使用Eclipse进行开发
1.导入项目 准备工作 1, first we should make sure the compile with build.sh under ORB_SLAM2-master is OK. 2, ...
- 2017~ROS暑期学校~分享
http://www.robotics.sei.ecnu.edu.cn/ROS2017/ ---- 往年暑期学校活动:2015年,2016年 报名开始时间7月2日晚10点:暑期学校报名,机器人挑战赛报 ...
- SLAM+语音机器人DIY系列:(三)感知与大脑——2.带自校准九轴数据融合IMU惯性传感器
摘要 在我的想象中机器人首先应该能自由的走来走去,然后应该能流利的与主人对话.朝着这个理想,我准备设计一个能自由行走,并且可以与人语音对话的机器人.实现的关键是让机器人能通过传感器感知周围环境,并通过 ...
- Learning ROS for Robotics Programming Second Edition学习笔记(九) indigo Gazebo rviz slam navigation
中文译著已经出版,详情请参考:http://blog.csdn.net/ZhangRelay/article/category/6506865 书中三维环境gazebo,slam的仿真例子 --$ r ...
随机推荐
- 【模板】Splay总结
rentenglong大佬写的splay的梳理使我受益颇丰,特此做出一定的总结. 数据结构 定义了一个struct结构体. 为了在splay操作下储存根节点,我们宏定义了root 为 tree[0]. ...
- 【[ZJOI2005]午餐】
首先我们得贪心一下,让吃饭时间较长的人排在队首 去抄一段贪心的证明吧 现在研究在一个队伍里的人有什么性质 可以发现道题里也有一个不变量,就是对于队伍里的前\(i\)个人,不管他们排队的顺序如何,\(a ...
- PHP-----文件-----目录操作
目录操作 [1]创建目录(文件夹) mkdir("路径"); 例子: mkdir("./test"); 显示的结果: [2]删除目录(文件夹)只能删除空的文 ...
- thinkPHP输出sql语句(3.2和5.0通用)
//5.0$qwe = db::table('think_user')->where('id',1)->fetchsql()->column('name'); dump($qwe); ...
- tp3.2上一篇下一篇功能
1. 后台 //上一页 $map1['a_id'] = array('gt',$a_id); $map1['cate_id'] = array('eq',$cate_id); $front=$arc- ...
- 快速了解jquery
jQuery的基本设计思想和主要用法,就是"选择某个网页元素,然后对其进行某种操作".这是它区别于其他Javascript库的根本特点. 所以jquery的基础语法是: $(sel ...
- Java之生成Pdf并对Pdf内容操作
虽说网上有很多可以在线导出Pdf或者word或者转成png等格式的工具,但是我觉得还是得了解知道是怎么实现的.一来,在线免费转换工具,是有容量限制的,达到一定的容量时,是不能成功导出的;二来,业务需求 ...
- 【题解】洛谷P2023 [AHOI2009] 维护序列(线段树)
洛谷P2023:https://www.luogu.org/problemnew/show/P2023 思路 需要2个Lazy-Tag 一个表示加的 一个表示乘的 需要先计算乘法 再计算加法 来自你谷 ...
- HDU 2079 选课时间(普通型 数量有限 母函数)
传送门: http://acm.hdu.edu.cn/showproblem.php?pid=2079 选课时间(题目已修改,注意读题) Time Limit:1000MS Memory Li ...
- OC - 时间日期类NSDate
OC - 时间日期类NSDate //NSDate 时间日期类 NSDate 二进制数据流 { //1.获取当前时间 零时区的时间 //显示的是格林尼治的时间: 年-月-日 时:分:秒:+时区 NSD ...