摘要:
地图点可以通过关键帧来构造,也可以通过普通帧构造,但是最终,必须是和关键帧对应的,通过普通帧构造的地图点只是临时被Tracking用来追踪用的。 构造函数(地图点3D坐标及其参考帧): 地图点和关键帧之间的观测关系是最重要的,参考关键帧是哪一帧,该地图点被哪些关键帧观测到,对应的哪个(idx)特征点 阅读全文
摘要:
KeyFrame中维护了一个map,保存了与当前帧共视的KeyFrame*与权重(共视MapPonits数量)。对关键帧之间关系是用加权有向图来完成的,那么理解其spanning tree生成树的原理就很有必要了。 KeyFrame中比较难理解的是SetBagFlag()函数,真实删除当前关键帧之前 阅读全文
摘要:
KeyFrame类利用Frame类来构造。对于什么样的Frame可以认为是关键帧以及何时需要加入关键帧,是实现在tracking模块中的。 由于KeyFrame中一部分数据会被多个线程访问修改,因此需要在这些成员中加线程锁,保证同一时间只有一个线程有访问权。涉及线程安全的有: 关键帧位姿的设置(lo 阅读全文
摘要:
Frame类的成员变量主要包含从摄像头获取的图像的 1. 特征点信息(关键点+描述字) 2. 尺寸不变特征所用金字塔信息,这些都定义在ORBextractor对象中 3. 词袋模型参数,用于跟踪失败情况下重定位 4. 相机参数,深度阈值 5. 当前帧的id,时间戳,相对世界坐标系位姿,参考关键帧,特 阅读全文
摘要:
双目矫正 双目通常事先是通过畸变矫正标定的,而RGB-D和单目则并不一定完成了矫正。 因此,对于RGB-D和单目获取的图像,在提取特征点之后,需要矫正,而双目则可以省略这一过程。 词袋模型反向索引 DBow2中提供的正向索引(direct index)和反向索引(inverse index)分别表示 阅读全文
摘要:
初始化完成后,对于相机获取当前图像mCurrentFrame,通过跟踪匹配上一帧mLastFrame特征点的方式,可以获取一个相机位姿的初始值;为了兼顾计算量和跟踪鲁棒性,处理了三种模型: 1. TrackWithMotionModel 2. TrackReferenceKeyFrame 3. Re 阅读全文
摘要:
单目初始化以及通过三角化恢复出地图点 单目的初始化有专门的初始化器,只有连续的两帧特征点均>100个才能够成功构建初始化器。 若成功获取满足特征点匹配条件的连续两帧,并行计算分解基础矩阵和单应矩阵(获取的点恰好位于同一个平面),得到帧间运动(位姿),vbTriangulated标记一组特征点能否进行 阅读全文
摘要:
首先要清楚ORB-SLAM视觉跟踪的原理,然后对tracking.cc中的函数逐个讲解 代码的前面部分是从配置文件中读取校准好的相机参数(内参和畸变参数,以及双目的深度测量设定),并且加载ORB特征点提取的参数(特征点数,金字塔层数,变化尺度,以及提取Fast关键点的阈值);以及四个线程之间锁的代码 阅读全文
摘要:
ORB视觉里程计主体在tracking线程中 阅读全文
摘要:
ORB-SLAM中除了第三方库,基本没有看到使用c++11的新特性(例如别的SLAM框架中常用的智能指针,拷贝控制,泛型算法等,基本没有使用动态内存,栈内存读取速度较快),因此非常适合初学,代码很清晰。静下心来一个月之内是肯定可以看完的,目前的想法是在看完ORB之后,对其中的典型算法再做一个总结~慢 阅读全文
摘要:
主要有两篇论文 阅读全文
摘要:
ORB主要借鉴了PTAM的思想,借鉴的工作主要有Rubble的ORB特征点;DBow2的place recognition用于闭环检测;Strasdat的闭环矫正和covisibility graph思想;以及Kuemmerle和Grisetti的g2o用于优化。 首先需要了解ORB-SLAM中使用 阅读全文
摘要:
使用LUT(lookup table)检索表的方法,提高color reduce时对像素读取的速度。 实现对Mat对象中数据的读取,并计算color reduce的速度。 方法一:使用Mat的ptr()遍历行(row),效率较高,使用时需要小心细节 结果: 如果使用*p++的方法,结果不同: 这种方 阅读全文
摘要:
根据输入数据调整模型参数(阈值,权重。。。) 阅读全文
摘要:
// Lucas-Kanade method Optical Flow in OpenCV // BJTShang, 2016-12-13 #include #include #include const int MAX_CORNERS = 500; int main(int argc, char** argv){ IplImage* imgA = cvLoadImage("/h... 阅读全文
摘要:
依赖:指针是一个变量,指向本体;引用只是一个别名(本体的另一个名字),绑定在主体上 可变:引用只能在定义时被初始化一次,且“从一而终”;指针可以修改,“见异思迁”; 可空:引用不能为空;指针可以为空; 大小:sizeof 引用,得到的是所指向变量的大小;sizeof 指针,得到的是指针的大小; 自增 阅读全文
摘要:
切换g++版本 https://askubuntu.com/questions/372248/downloaded-g-4-8-from-the-ppa-but-cant-set-it-as-default 解压缩.7z sudo apt-get install p7zip-full 7z x PA 阅读全文
摘要:
all the nodes should be carectorized into three groups: (visited, front, unknown) we should pay special attention to front group. The Dijkstra Algorit 阅读全文
摘要:
若已知参考点(landmarks)的坐标,则状态向量中不必含有xL, 从而实现的仅为机器人在已知环境中的定位,求解大大减少(状态向量维度仅为运动状态)。若想实现完整SLAM,必须将xL加入状态向量中。 扩展卡尔曼滤波(EKF)相对于卡尔曼滤波,可以进一步求解非线性问题(通过在目标点附近做泰勒展开的一 阅读全文
摘要:
http://frc.ri.cmu.edu/~kaess/vslam_cvpr14/ 阅读全文
摘要:
一篇很好的文章: http://calculus.yuyumagic424.net/wp-content/uploads/2012/12/%E6%B3%B0%E5%8B%92%E5%B1%95%E9%96%8B.pdf 阅读全文
摘要:
ICP 算法是一种点云到点云的3D-3D配准方法。 在SLAM中通过空间点云的配准(可以通过相机或者3D激光雷达获取点云数据),可以估计相机运动(机器人运动,旋转矩阵R与平移向量t),累积配准,并不断回环检测,可以保证机器人定位的精度。 想象三维空间中两组点云PL(参考点云,固定不动) 以及 PR( 阅读全文