一、系统概述
这篇文章是一个十分完整的物体级SLAM框架,偏重于建图及高层应用,在前端的部分使用了ORBSLAM作为基础框架,用于提供点云以及相机的位姿,需要注意的是,这篇文章使用的是相机,虽然用的是点云这个词,但其形容的实际上是三角化之后的ORB特征点。除此之外,论文使用YOLO作为目标检测的基础框架,提供目标的包围框以及语义类别。
在地图构建的部分,论文选择将物体添加到地图中形成物体地图,并且利用物体之间的相互关系,构建了基于物体的拓扑地图,在拓扑地图的基础上又构建出了后续物体抓取、增强现实等丰富的应用。
二、物体级的信息关联
信息关联,即data association,强调的是建立2d-3d或者2d-2d之间的联系,即观测到的物体之间的匹配关系,这一问题在一般的SLAM问题中主要是通过描述子匹配的方法来解决的,但是上升到物体之后,这一方法就不是那么好用了。
文章将物体分为了两类:
①局部物体 local object
在当前时刻当前视角下观测到的物体,物体在一开始提取时本身是一帧图像特征点三角化的结果,一帧图像中物体的包围框,对包围框内部的点进行三角化,作为这一物体一开始的点云,物体的中心用点云的均值来表示。
②全局物体 global object
连续几帧都可以对某一物体进行观测,则认为局部物体是确实存在于地图中的,此时物体就变为全局物体,此时物体中心利用多视角下增量构建的点云来计算。
对于这两类物体,论文使用了一系列的方法来对解决信息关联的问题,主要是利用了四个步骤来实现:
IoU模型
IoU模型针对的是连续几帧都可以观测到物体的情况,其方法简单来说就是对包围框进行投影,将前两帧的包围框投影到当前帧,计算包围框与当前帧包围框的交并比,如果重叠足够大则认为通过了IoU模型的检验。
NP检验模型
但是在实际运行代码的过程中,考虑到物体提取的不稳定性以及遮挡等不可抗拒因素,并不是所有物体都可以实现连续观测,因此对于任意两帧,我们采用NP检验模型进行检测。该检测主要是基于一个假设:如果两组点来自同一个物体,其特征点分布应该相同。论文使用了威尔克科森秩和检验来验证这一模型,用的是概率论里面假设检验的知识,如果假设检验认为属于同一物体,那么就可以建立物体之间的联系。
单采样和双采样T检验模型
为了更加准确的检验,论文在NP检验模型之后,又补充了单采样T检验,由于物体中心在不同视角下的观测,分布一般满足高斯分布,基于这一假设,作者通过曼-惠特尼U检验来验证这一假设,依然是使用假设检验的内容进行验证。
前面使用了三种方法进行检验,保证了准确率的同时,也让一些不稳定的匹配关系没能成功保留,所以论文在单采样T检验之后,又补充了一个双采样T检验,通过对历史中心点的检验,来判断观测结果是否属于同一个物体。
可以说论文作者在物体关联这一块,属实是把概率论整的很明白。首先通过投影包围框计算交并比来计算一个连续帧下的物体关联关系,之后用NP检验来扩展到非连续帧下的观测结果,同时用单采样T检验对物体中心也进行一次筛选,最后利用双采样T检验对误筛除的关联进行补充,后面三步其实都是根据假设检验来进行的检测。
三、物体参数化
物体的表示
不同于前面物体级SLAM的物体表示方法,这篇文章用了三种物体对场景中的物体进行描述,对于具有标准形状的物体,使用立方体来表示,并使用顶点对立方体进行描述;对于形状不容易标准化的物体,则使用圆柱体或椭球体进行表示,在使用椭球体时用半轴长进行描述。两种物体的投影关系可以表示为:
在这里作者对物体的朝向进行了假设,无论是椭球体还是立方体,都认为这些物体处于一个与地面平行的角度上,也就是说对于立方体而言,朝向角仅剩下一个,其余两个都是零,而对于椭球体,连这剩下的一个偏航角都不予考虑。基于这个假设,立方体需要考虑偏航角、位置和尺度,而椭球体则只需要考虑位置和尺度。
位置和尺度的估计
由于椭球体采用的是半轴表示,所以可以采用外接立方体的方式代为计算,也就是说用立方体就这一种方式来估计。针对于立方体,论文提出了一种对外点足够鲁棒的尺度估计方法。
首先使用改进的孤立森林算法进行离群点的剔除,传统的孤立森林算法对离群点的判断是依赖于数据在树上的高度,一旦高度小于阈值就认为是离群点,在论文改进的方法中,作者用打分机制来代替孤立森林的层高:
对于标记为同一个物体的点云,首先利用改进的孤立森林算法进行离群点的剔除,如果得分值大于0.6则认为是离群点,只利用保留的点去计算尺度和位置,这两个量计算并不麻烦,尺度取所有保留点中坐标最值,而位置则使用坐标均值。完整的估计算法如下:
偏航角估计
偏航角的估计包括两部分:初值计算和优化。作者认为一个好的初值能够大幅度减小优化的开销,采用了基于线段投影的偏航角计算方法。具体来说,落入2d包围框的线段就被认为是该物体的线段,由于线段一般会与物体边缘存在平行关系,所以可以用这个平行关系来进行检测。
算法首先在-π/2到π/2之间均匀取样30个角度值,对于每个角度,计算LSD提取的2d线段与立方体在该角度下边缘投影结果的夹角:
对于提取的线段,统计夹角不太大的线段的数量并计算该角度的分值:
对于所有的分值,选取最大者作为该物体的初始角度。
最终的偏航角将和位姿进行一次联合优化,得到最后的物体位置:
对于论文提出的方法,在看的时候有些疑问,前面提到过论文中用的点云一词,实际上是三角化后的特征点组成的几何,相较于激光雷达或者RGBD相机扫描出来的点云,数量上明显不是一个量级,那么在这么一个规模的点云基础上进行的纯几何的物体提取,有可能存在开始几帧的准确性不太稳定的问题,这一方面会对物体参数化产生影响,另一方面在后续的联合优化中,也会对位姿产生负影响。一种理解是有可能这一章叙述的物体提取是在几帧之后才进行的,这时三角化的特征点数量较多了,提取的准确性才能上来,也就不会在联合优化中出现负优化,但这必然会导致实时性的下降。此外还有一点,公式15个人总感觉写的不合适,文章说了进行的是物体和相机位姿的联合优化,那么公式的优化量是不是应该写在一起,再者说,前项物体的优化过程本身也是和相机位姿有关的,公式15的写法在保证和最小的同时,未必保证各自是最小的,这与联合优化是冲突的。
四、局部建图中的物体描述子
这一章所述的描述子,并不是物体的描述子,而说的是场景的描述子,论文采用了一种和SA-LOAM很像的语义拓扑图的方法来构建场景描述方法。对于每个提取的物体,通过其语义属性和物体几何属性,转换为拓扑图中的一个节点,物体之间通过无向边相连,并用物体之间的距离和夹角作为边的参数:
在将场景的物体信息转换为拓扑图之后,就可以构建场景的语义描述子,这里采用的是类似于随机游走描述子的方法进行的场景描述,文章在传统的随机游走算法的基础上,为各个节点增加了更加丰富的语义描述信息,所以描述的效果会更好。对于拓扑图内的每个物体,利用随机游走算法计算计算描述子,完成计算后利用描述子进行物体匹配对的寻找,对于所有成功匹配的物体对,通过SVD进行位姿的计算,如果能够计算出合法值,就认为场景是匹配的。
不难看出,在这里的场景匹配中,其实内部也存在了一个物体的匹配,相当于通过物体之间的拓扑关系对其中的一个物体进行描述,有点像之前做的仿射不变性的线段匹配,通过临近的其他几何元素来描述中心的某个元素,以此来进行几何的匹配。
五、物体的深层应用探索
最后论文还进行了物体的高层应用的探索,作者选取了机械臂抓取物体这一场景来举例。为了让机械臂能够更好地感知桌面环境,需要有方向地来移动机械臂,让环境的感知更加高效。
论文提出的方法首先对每个物体做了内部的投影,每个点向前后左右上五个面做投影,每个面都划分了网格,由此补充为五个面的栅格地图,每个栅格有三种状态:
之后对于每个面计算信息熵:
基于信息熵,我们可以尽可能地向着信息丰富的视角进行移动,对每个视角,可以计算一致性得分来衡量该角度下能够观测到的信息的量:
通过选择f最大的视角作为移动的目标,从而实现更加快速高效的环境感知。
文章评论