ORBSLAM总结.pptx
《ORBSLAM总结.pptx》由会员分享,可在线阅读,更多相关《ORBSLAM总结.pptx(33页珍藏版)》请在冰豆网上搜索。
![ORBSLAM总结.pptx](https://file1.bdocx.com/fileroot1/2022-10/7/39a15261-a502-4d96-a981-d6896aac9075/39a15261-a502-4d96-a981-d6896aac90751.gif)
ORBSLAM,杨肖寒,01,02,目录,PartOne,ORB-SLAM介绍,01,介绍,ORB-SLAM是由RaulMur-Artal,J.M.M.Montiel和JuanD.Tardos于2015年发表在IEEETransactionsonRobotics。
项目主页网址为:
http:
/webdiis.unizar.es/raulmur/orbslam/。
ORB-SLAM是一款适用于单目,立体和RGB-D摄像机的多功能精确SLAM解决方案。
在大小场景、室内室外环境下都可以实时操作的一种基于特征的单目SLAM系统。
SLAM系统对复杂的剧烈运动具有鲁棒性,支持宽基线的闭环检测和重定位,包括全自动初始化,它包括从平面和非平面场景进行自动且稳健的初始化。
它能够在各种环境中实时计算摄像机轨迹和场景的稀疏3D重建,范围从桌面的小型手持序列到围绕几个城市街区行驶的汽车。
ORB-SLAM包含了所有SLAM系统共有的模块:
跟踪(Tracking)、建图(Mapping)、闭环检测(Loopclosing)、重定位(Relocalization)。
ORB是属于特征点法的特征提取与匹配的算法之一。
贡献,1.使用ORB特征描述,不用GPU加速就可以实时,具有视点不变性和光照不变性(ORB(OrientedFASTandRotatedBRIEF)是一种快速提取特征点和描述子的算法。
其特征检测基于FAST,采用BRIEF描述子并加以改进。
)2.使用CovisibiltyGraph,使跟踪和建图聚焦在局部共视区域(CovisibilityGraph是一个无向有权图(graph),每个node就是关键帧,edge的权重就是两个关键帧找到足够多的相同的3d点的数目。
)3.使用theEssentialGraph来优化位姿实现回环检测(为了在优化阶段减小计算量,能够连接所有的node,但是edge会减少很多。
可以认为是CovisibityGraph的最小生成树(MST)。
)4.相机重定位,视点和光照改变都适用5.根据对平面和非平面选择不同模型,实现自动初始化6.舍弃多余的关键帧,提高跟踪鲁棒性,加强长时间操作,系统架构,系统架构,系统架构,
(1)跟踪(Tracking)前端位姿跟踪线程采用恒速模型,并通过优化重投影误差优化位姿。
这一部分主要工作是从图像中提取ORB特征,根据上一帧进行姿态估计,或者通过全局重定位初始化位姿,然后跟踪已经重建的局部地图,优化位姿,再根据一些规则确定新的关键帧。
(2)建图(LocalMapping)通过MapPoints维护关键帧之间的共视关系,通过局部BA优化共视关键帧位姿和MapPoints。
这一部分主要完成局部地图构建。
包括对关键帧的插入,验证最近生成的地图点并进行筛选,然后生成新的地图点,使用局部捆集调整(LocalBA),最后再对插入的关键帧进行筛选,去除多余的关键帧。
(3)闭环检测(LoopClosing)这一部分主要分为两个过程,分别是闭环探测和闭环校正。
闭环检测先通过bag-of-words模型加速闭环匹配帧的筛选、探测,然后通过Sim3算法计算相似变换。
闭环校正,主要是闭环融合和EssentialGraph的图优化。
(4)使用bag-of-words加速匹配帧的筛选,并使用EPnP算法完成重定位中的位姿估计。
ORB_SLAM节点的topic,Publishedtopics:
*/ORB_SLAM/Mapvisualization_msgs/Marker1publisher*/ORB_SLAM/Framesensor_msgs/Image1publisher*/rosoutrosgraph_msgs/Log1publisher*/tftf2_msgs/TFMessage1publisher*/rosout_aggrosgraph_msgs/Log1publisherSubscribedtopics:
*/camera/image_rawsensor_msgs/Image1subscriber*/rosoutrosgraph_msgs/Log1subscriberrosrunimage_viewimage_viewimage:
=/ORB_SLAM/Frame_autosize:
=true订阅/camera/image_raw这个topic,然后被ORB_SLALM节点处理后的图像帧被发布到话题ORB_SLAM/Frame中,可以通过使用image_view功能包来查看rosrunrvizrviz-dData/rviz.rvizORB_SLAM节点处理得到的地图被发布到话题/ORB_SLAM/Map中,摄像机当前位姿和地图全局坐标原点通过/tf功能包分别发布到话题/ORB_SLAM/Camera和话题/ORB_SLAM/World中,通过运行rviz功能包来查看地图,入口,Tracking线程,LocalMapping线程,Tracking线程,Tracking线程,Tracking线程,Tracking线程,PartTwo,相机标定,02,相机标定,相机标定的目的:
获取摄像机的内参和外参矩阵(同时也会得到每一幅标定图像的选择和平移矩阵),内参和外参系数可以对之后相机拍摄的图像就进行矫正,得到畸变相对很小的图像。
相机标定的输入:
标定图像上所有内角点的图像坐标,标定板图像上所有内角点的空间三维坐标(一般情况下假定图像位于Z=0平面上)。
相机标定的输出:
摄像机的内参、外参系数。
相机标定,过程:
1.准备标定图片2.对每一张标定图片,提取角点信息3.对每一张标定图片,进一步提取亚像素角点信息4.在棋盘标定图上绘制找到的内角点(非必须,仅为了显示)5.相机标定6.对标定结果进行评价7.查看标定效果利用标定结果对棋盘图进行矫正,相机标定,1.准备标定图片标定图片需要使用标定板在不同位置、不同角度、不同姿态下拍摄,最少需要3张,以1020张为宜。
标定板需要是黑白相间的矩形构成的棋盘图,制作精度要求较高,如下图所示:
相机标定,2.对每一张标定图片,提取角点信息需要使用findChessboardCorners函数提取角点,这里的角点专指的是标定板上的内角点,这些角点与标定板的边缘不接触。
第一个参数Image,传入拍摄的棋盘图Mat图像,必须是8位的灰度或者彩色图像;第二个参数patternSize,每个棋盘图上内角点的行列数,一般情况下,行列数不要相同,便于后续标定程序识别标定板的方向;第三个参数corners,用于存储检测到的内角点图像坐标位置,一般用元素是Point2f的向量来表示:
vectorimage_points_buf;第四个参数flage:
用于定义棋盘图上内角点查找的不同处理方式,有默认值。
CV_EXPORTS_WboolfindChessboardCorners(InputArrayimage,SizepatternSize,OutputArraycorners,intflags=CALIB_CB_ADAPTIVE_THRESH+CALIB_CB_NORMALIZE_IMAGE);,相机标定,3.对每一张标定图片,进一步提取亚像素角点信息为了提高标定精度,需要在初步提取的角点信息上进一步提取亚像素信息,降低相机标定偏差,常用的方法是cornerSubPix。
第一个参数image,输入的Mat矩阵,最好是8位灰度图像,检测效率更高;第二个参数corners,初始的角点坐标向量,同时作为亚像素坐标位置的输出,所以需要是浮点型数据,一般用元素是Pointf2f/Point2d的向量来表示:
vectoriamgePointsBuf;第三个参数winSize,大小为搜索窗口的一半;第四个参数zeroZone,死区的一半尺寸,死区为不对搜索区的中央位置做求和运算的区域。
它是用来避免自相关矩阵出现某些可能的奇异性。
当值为(-1,-1)时表示没有死区;第五个参数criteria,定义求角点的迭代过程的终止条件,可以为迭代次数和角点精度两者的组合;,CV_EXPORTS_WvoidcornerSubPix(InputArrayimage,InputOutputArraycorners,SizewinSize,SizezeroZone,TermCriteriacriteria);,相机标定,4.在棋盘标定图上绘制找到的内角点(非必须,仅为了显示)第一个参数image,8位灰度或者彩色图像;第二个参数patternSize,每张标定棋盘上内角点的行列数;第三个参数corners,初始的角点坐标向量,同时作为亚像素坐标位置的输出,所以需要是浮点型数据,一般用元素是Pointf2f/Point2d的向量来表示:
vectoriamgePointsBuf;第四个参数patternWasFound,标志位,用来指示定义的棋盘内角点是否被完整的探测到,true表示别完整的探测到,函数会用直线依次连接所有的内角点,作为一个整体,false表示有未被探测到的内角点,这时候函数会以(红色)圆圈标记处检测到的内角点;,CV_EXPORTS_WvoiddrawChessboardCorners(InputOutputArrayimage,SizepatternSize,InputArraycorners,boolpatternWasFound);,相机标定,5.相机标定获取到棋盘标定图的内角点图像坐标之后,就可以使用calibrateCamera函数进行标定,计算相机内参和外参系数。
第一个参数objectPoints,为世界坐标系中的三维点。
在使用时,应该输入一个三维坐标点的向量的向量,即vectorobject_points。
需要依据棋盘上单个黑白矩阵的大小,计算出(初始化)每一个内角点的世界坐标。
第二个参数imagePoints,为每一个内角点对应的图像坐标点。
和objectPoints一样,应该输入vectorimage_points_seq形式的变量;第三个参数imageSize,为图像的像素尺寸大小,在计算相机的内参和畸变矩阵时需要使用到该参数;第四个参数cameraMatrix为相机的内参矩阵。
输入一个MatcameraMatrix即可,如MatcameraMatrix=Mat(3,3,CV_32FC1,Scalar:
all(0);第五个参数distCoeffs为畸变矩阵。
输入一个MatdistCoeffs=Mat(1,5,CV_32FC1,Scalar:
all(0)即可;第六个参数rvecs为旋转向量;应该输入一个Mat类型的vector,即vectorrvecs;第七个参数tvecs为位移向量,和rvecs一样,应该为vectortvecs;第八个参数flags为标定时所采用的算法。
有如下几个参数:
CV_CALIB_USE_INTRINSIC_GUESS:
使用该参数时,在cameraMatrix矩阵中应该有fx,fy,u0,v0的估计值。
否则的话,将初始化(u0,v0)图像的中心点,使用最小二乘估算出fx,fy。
CV_CALIB_FIX_PRINCIPAL_POINT:
在进行优化时会固定光轴点。
当CV_CALIB_USE_INTRINSIC_GUESS参数被设置,光轴点将保持在中心或者某个输入的值。
CV_CALIB_FIX_ASPECT_RATIO:
固定fx/fy的比值,只将fy作为可变量,进行优化计算。
当CV_CALIB_USE_INTRINSIC_GUESS没有被设置,fx和fy将会被忽略。
只有fx/fy的比值在计算中会被用到。
CV_CALIB_ZERO_TANGENT_DIST:
设定切向畸变参数(p1,p2)为零。
CV_CALIB_FIX_K1,CV_CALIB_FIX_K6:
对应的径向畸变在优化中保持不变。
CV_CALIB_RATION