ORB | SVO | |
一、追踪
|
整个过程分为两个大模块:追踪与建图(与PTAM类似)。
|
|
初始化 | 1.选取足够多的特征点(这里当然是ORB特征了)(如果没有则重置),归一化所有特征点,分别同时(并行)计算特征点的H阵和F阵,计算每个点对的symmetric transfer errors,和卡方分布的对应值比较,由此判定该点是否为内点。累计内点的总得分。(这里的SM既可以是SH也可以是SF,TM也是如此。 2.然后就是模型的选择了,根据公式如果大于0.4选H,反之选F 3.根据模型恢复运动(即求R和T) 4.进行了全局BA。ORB中对初始化要求高,所以要有足够的视差。另外,由于坐标系会附着在初始化成功的那帧图像的位置,因此每次初始化不能保证在同一个位置。 疑问:全局BA是优化里面对所有关键帧(除了第一帧)和所有mappoint的全局优化? |
首先 SVO是混合使用了特征点法和直接法:它跟踪了一些关键点(角点,没有描述子,由FAST实现),然后像直接法那样,根据这些关键点周围的信息,估计相机运动以及它们的位置 。(不需要知道点与点的对应关系p1,p2,根据当前的位姿估计值 来寻找p2的位置,通过优化两点的光度误差来求得位姿的转化关系) 它假设前两个关键帧所拍到的特征点在一个平面上(四轴飞行棋对地面进行拍摄),然后估计单应性H矩阵,并通过三角化来估计初始特征点的深度值。从而获得第一帧的特征点位置及它们的深度。 SVO适用于摄像头垂直向下的情况(也就是无人机上,垂直向上也可以,朝着一面墙也可以),为什么呢?1.初始化的时候假设的是平面模型 2.KF的选择是个极大的限制(关键帧选取靠的 是 关于景深的一个阈值,当前帧和相邻关键帧之间任意轴向运动(x方向,y方向,z方向)超过场景平均深度的一个百分比,就会选为关键帧,和图像无关,和相机运动距离有关。),除了KF的选择原因外摄像头水平朝前运动的时候,SVO中的深度滤波做的不好。 |
T r a c k |
track主要做两件事:①确定每帧的位姿 ②确定关键帧提供给Local Mapping 具体模块: (1)将初始化的数据封装成帧,后续针对帧处理 ①Feature对特征封装(keypoint+descriptor) ②Feature是Frame与MapPoint之间的纽带 ③MapPoint对特征对应的3D点的封装 ④MapPoint对应最好的特征描述子 (2)帧间跟踪:Track Reference Key Frame, &nb |
经典SLAM学习
最新推荐文章于 2025-06-23 14:58:05 发布