丁亮
(杭州电子科技大学 计算机学院,浙江 杭州 310018)
摘要:传统的传感器在移动机器人障碍物检测领域都有其各自的局限性。文章提出基于Kinect的障碍物检测方法:利用Kinect传感器获取环境深度图像;通过Kinect标定配准之后获取校准参数;通过该参数获得图像像素点与空间三维坐标的对应关系;通过空间三维坐标确定地平面与障碍物区域,并将障碍物区域作为感兴趣区域;通过三维坐标在x轴和z轴的连续性对感兴趣区域进行处理,分割出各个障碍物。实验结果表明,文中算法可以有效且实时地检测到障碍物信息。
关键词:Kinect;障碍物检测;实时
中图分类号:TP311文献标识码:ADOI: 10.19358/j.issn.1674-7720.2017.07.006
引用格式:丁亮.基于Kinect的实时障碍物检测[J].微型机与应用,2017,36(7):1921,25.
0引言
移动机器人是机器人学中的一个重要分支,指通过自身的传感器获取周围的环境信息和自身状态,实现在有障碍物的环境中自主向目标移动,最终完成任务的机器人。
关于获取环境信息,众多科研工作者目前的尝试可以概括为以下五方面:基于超声波的检测方法[12]、基于激光雷达的检测方法[3]、基于红外的检测方法[4]、基于视觉的检测方法[56]以及基于传感器组合的检测方法[7]。
这些方法都可以有效地感知周围环境信息,但也都有其局限性。本文使用微软的Kinect传感器,其不同于一般的视觉传感器,Kinect除了具有RGB彩色摄像头可提供二维视觉图像外,还具有深度传感器可以获取距离信息。Kinect属于主动探测,其探测深度信息使用“光编码”技术[8]。Kienct价格低廉,获取信息丰富,非常适用于移动机器人实时障碍物检测。
1Kinect障碍物检测
1.1Kinect标定
使用 Kinect 传感器进行深度信息测量前,需要先对Kinect 传感器进行标定[9]。标定之后所获取的校准参数是从原始深度图像坐标计算3D坐标所必需的。其深度测量的三角测量原理如图1所示,图中显示了待测量物体的点k相对于参考平面的距离与测量的视差d之间的关系。为了表示对象点的3D坐标,本文采用深度坐标系,其原点在左下角红外摄像机的透视原点。z轴正交于朝向物体的像平面;x轴在基线b的方向上并垂直于z轴,y轴与x轴正交。
图1相对深度和测量差异之间的关系假设物体在距离传感器距离为Z0的参考平面上,并且在红外相机的图像平面上捕获物体的斑点,如果物体移动得离传感器更近或者更远,则在图像平面上的斑点位置将在x方向上移位。这在图像空间中被测量为对应对象空间中点k的视差d。从三角形相似性可知:
其中Zk表示物体空间中点k的距离(深度),b是基本长度表示两个相机之间的距离,f是红外相机的焦距,D是点k在物体空间中的位移,且d是在图像空间观察到的视差。将D从式(2)代入式(1),并根据其他变量,得到:
其中(xk,yk)是点的图像坐标,(x0,y0)是图像坐标的原点,(δx,δy)是透镜畸变的校正参数。
综上所述,用于从原始图像坐标测量计算3D坐标的数学模型中涉及的校准参数包括:焦距(f)、主点偏移(x0,y0)、透镜畸变系数(δx,δy)、基底长度(b)、参考图案的距离(Z0)。这些校准参数完全限定了图像测量(x,y,d)与每一个点空间坐标(X,Y,Z)之间的关系。
在标定完成之后,可以把深度图像的像素点坐标与投影到Kinect三维空间的点坐标进行转换。转换后,该Kinect三维空间坐标系,即是以Kinect传感器为坐标原点,x轴沿水平方向,y轴与x轴垂直,且平行于像素点成像平面,z轴垂直于xy平面。
1.2深度图像和RGB图像的配准
由图2可以看到,Kinect的彩色摄像头和红外摄像头并不在同一个位置且视角不同,所以Kinect的彩色图像和深度图像的每一帧的数据空间坐标系是不同的,前者的原点是RGB摄像头,后者的原点是红外摄像头,因此两者之间会有相应的误差。
可以在代码处理时把深度生成器的视角设定为彩色生成器的视角,让它们的视角保持一致。最主要的处理过程是实现两个映射函数:DepthToWorld从深度相机(x,y,d)映射到世界坐标,WorldToColor将世界坐标中的点映射到彩色摄像机中的像素索引。经过深度图像与彩色图像对准之后,彩色图像的每一个像素点都能在深度图像中找到对应点的深度信息。
2基于深度信息障碍物获取
在经过1.1节和1.2节的步骤之后,相当于在每一帧RGB图像的每一个像素上又包含了高度信息。以此为基础,就可以进一步获取每一帧图像中的障碍物与地平面区域。其处理过程如图3所示。
(1)在图像上提取地平线。因为本文认为阻碍移动机器人运动轨迹的障碍物为在地面上的凸障碍物,所以可以认为障碍物与地面之间的交界线就是地平线。场景中高于地平线的距离超过一个阈值的即可以认为是障碍物。所以,可以计算各行像素在移动机器人坐标系的高度平均值:
Hi=∑N-1j=0yi,jN(4)
式中,N表示列的数目。
(2)识别地平面。通常像素如果处在同一个平面上,其高度变化的趋势是缓慢的,当出现障碍物时,高度会出现阶跃性的变化。可以从图像由下至上遍历每一行像素的高度值,如果某一行的高度的平均值大于其下面区域的高度平均值时,该行就被认为是地平线,而地平线以下的区域即被认为是地平面,如:
式中,l1、ln分别表示起始行和结束行。
(3)标记远景和地面。如果像素的高度值与G的差的绝对值小于阈值GA,即可以认为是地面,则将该点的像素值灰度值置为0。
C(i,j)=0, If |yi,j-G| 式中,C(i,j)表示像素点(i,j)的灰度值,yi,j表示该像素点的高度。 同时,由于深度相机随距离增加的随机误差,需要使用类似的方式标记出2.5 m以外的远景区域,即如果深度值大于阈值DA,则将该点的像素灰度值置为0。 C(i,j)=0, If zi,j>DA(7) 式中,zi,j表示该像素点的高度。 (4)障碍物检测。经过步骤(3)标记之后,即非感兴趣的区域的灰度值已经被置为0,余下的就是感兴趣的区域。接下来就需要对感兴趣区域做进一步处理,以检测障碍物。文中使用一个3×3结构对二进制感兴趣区域进行扩张(腐蚀)操作,以闭合障碍物像素之间的间隙,这样就初步得到了障碍物的区域。不过还不能区分不同深度的障碍物与同一深度不相连的障碍物。还需要在初步得到的障碍物区域的基础上,查看其点的x轴和z轴坐标,在z轴与x轴不连续的位置进行分割,将不同深度与同一深度不相连的障碍物分离出来,这样就获得了障碍物个体。 为了进一步说明该障碍物检测算法的流程,下面将在一个场景中应用这个算法来说明,场景选择为实验室楼梯口,如图4所示。其中(a)为场景图,包括贴近地面的障碍物、普通障碍物和贴有反光带具有反射干扰的障碍物;(b)为1.1小节Kinect标定后,深度图像各点对应空间的三维坐标,为了易于查看,使用AntTweakBar将结果渲染出来;(c)为预处理之后的深度图;(d)中实线部分为提取的地平线;(e)显示了标记远景和地面的结果,因为该场景为室内场景,所以没有远景,只是标记了地平面区域;(f)为经过x轴、z轴不连续区域的分割,得到分离后的障碍物。 从图4可以看到,本文算法可以基于Kinect有效检测到障碍物。 3结论 本文研究了基于Kinect传感器的障碍物检测方法。首先经过Kinect标定与配准之后,可以获得RGB图像像素点的三维空间坐标;第二,根据每一行像素点高度的平均值确定地平面;第三,以地平线为基础,确定地平面和障碍物区域,把障碍物区域作为感兴趣区域;最后,在感兴趣区域中,根据像素的空间坐标的x、z值的连续性进行切分,分割出障碍物。通过实验验证了本文算法的有效性。 参考文献 [1] SANTANA P,GUEDES M, CORREIA L, et al. Stereobased allterrain obstacle detection using visual saliency[J]. Journal of Field Robotics, 2011, 28(2):241-263. [2] MANSO L J, BUSTOS P, BURGOS P B, et al. Multicue visual obstacle detection for mobile robots[J]. Journal of Physical Agents, 2010, 4(1): 3-10. [3] CRISTINA D, LVARO H, ANA J, et al. Ultrasonic array for obstacle detection based on CDMA with Kasami codes[J]. Sensors, 2011, 11(12):11464-11475.