一种基于深度摄像头的障碍物检测方法与流程

文档序号:16742560发布日期:2019-01-28 13:09阅读:1742来源:国知局
一种基于深度摄像头的障碍物检测方法与流程

本发明属于机器人导航与控制技术领域,具体涉及一种基于深度摄像头的障碍物检测方法。



背景技术:

在机器人导航和运动过程中,检测和规避障碍物是实现机器人自主运动和智能化的重要环节。现有技术中一般采用传感器进行避障检测。避障传感器包括红外,超声波和激光等。其中,红外传感器不受可见光影响,角度灵敏度高,价格低廉,但只能检测单线障碍物信息;超声波一般具有一定的波束角,可用于面检测,但角度精度相应降低。此外,超声波易受环境影响,不可检测吸声材料。激光与红外类似,技术成熟,有更高的精度,但一般价格较高。因此,利用避障传感器进行障碍物检测,检测面小,容易造成障碍物信息的漏检,特别是对不同高度或者凳脚等较细的障碍物,难以检测到,从而导致了避障决策的失效。

近年来,深度摄像头的发展和普及为障碍物的检测和规避带来的新的思路。深度摄像头可以检测到物体的深度,即物体与相机之间的距离。基于测距原理的不同,其实现形式也多种多样。目前深度摄像头常用的测距原理包括:双目匹配,一般结构光编码和激光散斑编码(lightcoding)。kinect,xtion等主流rgbd摄像头即采用的激光散斑编码技术。

虽然实现的原理和方式有所不同,但深度摄像头最终处理得到的图像均为深度图像,即以相机视角得到了所摄物体距离相机的深度。因此,不同深度摄像头均可等效的看做一种特殊的图像摄像头,并按照摄像机模型进行分析处理。基于这一模型,结合深度信息,即可得到物体在相机坐标系中的实际坐标,从而使得全面检测障碍物信息成为可能。



技术实现要素:

本发明的目的在于提供一种基于深度摄像头的障碍物检测方法,检测面大,并降低了漏检率,从而提高了检测障碍物的可靠性和准确性,同时通过降维和离散处理,可以便捷地使用障碍物信息。

为了解决上述技术问题,本发明提供一种基于深度摄像头的障碍物检测方法,包括以下步骤:

步骤1、采集深度图像,根据相机内参和深度数据,获得三维点云,即计算获得深度图像中所有像素点在相机坐标系中的实际位置(xc,yc,zc);其中,xc表示像素点对应实际物体点到相机中心的横向距离,yc表示像素点对应实际物体点到相机中心的纵向距离,zc表示像素点对应实际物体点到相机中心的深度距离;

步骤2、设定最大避障阈值th,即当物体与相机之间的距离大于最大避障阈值th,则认为该物体不是障碍物;遍历所有的三维点云,对于每一个像素点,如果其xc在避障视野(vl,vr)内,且其深度zc小于最大避障阈值th,则认为该像素点属于障碍物。

进一步,使用张正友标定法,对深度摄像头进行标定,使用的棋盘为深度棋盘。

进一步,获取三维点云的方法如下式所示,

(fx,fy,u0,v0)为相机内参,,fx,fy分别为相机焦距f除以x向单像素点对应距离dx所得值和y向单像素点对应距离dy所得值;u0,v0分别为理想图像坐标系原点和真实图像坐标系原点在x向的像素偏差和在y向的像素偏差;(u,v)为像素坐标,zc,为像素(u,v)的深度。

进一步,构建障碍物信息一维数组,其每一个元素依次表示(vl,vl+nr)距离范围内的障碍物信息,即该距离范围内是否存在障碍物以及存在时障碍物深度的最小值,一个距离范围可能有多个不同高度的障碍物,且其深度不同,取深度最小的那个表示该元素,即距离范围内的障碍物信息;(vl,vr)为避障视野,r为视野分辨率,n为正整数;在遍历所有的三维点云过程中,当认为存在障碍物时,更新一维数组。

本发明与现有技术相比,其显著优点在于:

1、利用深度摄像头,能够获取全面的障碍物信息,包括不同高度和较宽的视野,避免了障碍物的漏检,提高了障碍物检测的可靠性和准确性;

2、如果用点云描述障碍物信息,数据量大,使用困难,通过降维和离散处理,使用一维障碍物信息数组表征障碍物信息,可以方便的查询和处理大量的障碍物信息,保证了使用避障信息的便捷性。

附图说明

图1为本发明基于深度摄像头的障碍物检测方法流程图。

具体实施方式

容易理解,依据本发明的技术方案,在不变更本发明的实质精神的情况下,本领域的一般技术人员可以想象出本发明基于深度摄像头的障碍物检测方法的多种实施方式。因此,以下具体实施方式和附图仅是对本发明的技术方案的示例性说明,而不应当视为本发明的全部或者视为对本发明技术方案的限制或限定。

结合附图,本发明基于深度摄像头的障碍物检测方法包括以下步骤:

步骤1、利用张正友标定法,对深度摄像头进行标定,得到相机内参(fx,fy,u0,v0),其中,fx,fy分别为相机焦距f除以x向单像素点对应距离dx所得值和y向单像素点对应距离dy所得值;u0,v0分别为理想图像坐标系原点和真实图像坐标系原点在x向的像素偏差和在y向的像素偏差;

步骤2、用深度摄像头采集图像,并对采集的深度图像采用高斯滤波,消除图像噪声;

步骤3、遍历深度图像,根据相机内参(fx,fy,u0,v0)和深度信息zc,计算三维点云信息,即深度图像中所有像素在相机坐标系中的实际位置(xc,yc,zc),其中,xc表示像素点对应实际物体点到相机中心的横向距离,yc表示像素点对应实际物体点到相机中心的纵向距离,zc表示像素点对应实际物体点到相机中心的深度距离。

步骤4、根据需要的避障视野(vl,vr)(即只考虑摄像头左侧vl距离到右侧vr距离之内的障碍物)和视野分辨率r。构建障碍物信息一维数组,其每一个元素表示不同距离范围内的障碍物信息,数组第一个元素表征(vl,vl+r)范围内的障碍物信息,第二个元素表征(vl+r,vl+2r)范围内的障碍物信息,依次类推。

障碍物信息可以包括深度(即距离)、是否存在障碍物等。数组类型不做特别限制,如char,int,只要是数值均可。数值包含的元素数即数组长度,为(vr-vl)/r。数组元素描述障碍物信息,可以是障碍物深度如1表示距离为1m,-1表示无障碍物,也可以是简单的存在不存在如1表示存在,-1表示不存在,根据需求自己规定好即可。

本步骤中,对一维数组的初始化,长度为(vr-vl)/r,每个元素数值为-1,数值-1表示默认该范围内没有障碍物。当然深度信息等也可初始化为-1。

步骤5、设定最大避障阈值th,即当物体与相机之间的距离大于避障阈值th时,认为该物体不是障碍物;遍历步骤3中所得的三维点云,如果其xc在避障视野(vl,vr)内,且其深度zc小于最大避障阈值th,则根据其深度zc和障碍物信息数组中的数值,更新障碍物信息数组,最终的障碍物信息数组用于表征检测到的障碍物信息,重复步骤2~5直到避障结束。

进一步的,所述步骤1中使用张正友标定法对相机进行标定时,使用的棋盘应为深度棋盘,即常规棋盘中某种颜色的位置凸出较高高度。

进一步的,所述步骤3中,已知相机内参(fx,fy,u0,v0)和像素(u,v)的深度信息zc,可由下式计算其对应的相机坐标系中的实际位置(xc,yc,zc),其中fx,fy分别为相机焦距f除以x向单像素点对应距离dx和y向单像素点对应距离dy;u0,v0分别为理想图像坐标系原点和真实图像坐标系原点在x向上像素偏差和在y向上像素偏差:

进一步的,所述步骤5中更新方法为:如果某点的xc在避障视野(vl,vr)内,深度zc小于最大避障阈值th,则比较深度zc与障碍物信息数组中对应位置所表征的深度,若zc较小,即存在比先前距离更近的障碍物,则用zc按规则代替对应位置的值。

对于横坐标为xc的点,若xc∈(vl,vr),则其在障碍物信息数组中对应的位数n,即对应障碍物信息数组中的第n个元素,可由下式求得:

其中xc为点云对应的相机坐标系中的横坐标,(vl,vr)为避障视野,r为分辨率,即一个元素代表的宽度范围,[]表示对括号内的数向下取整。

所述由深度zc产生填入数组的实际值的规则v,包含但不限于v=zc。可根据实际避障需求和从测量选择合适的规则。

具体的,使用xtionrgbd深度摄像头,使用张正友标定法对相机进行标定时,制作一幅8*8的深度棋盘,每个方格的高度间隔着依次为2cm和10cm。通过深度摄像头采集10幅不同角度的棋盘图像,对图像做二值化等处理,以使得棋盘中不同高度的方格在图像中区分鲜明,存在可用于标定的角点,并将其提取出来后亚像素化并压入角点集合。使用opencv中的calibratecamera(objectpoints,imagepoints,imagesize,cameramatrix,distcoeffs,rvecs,tvecs,flag)函数,cameramatrix即为标定得到的相机内参。

对采集到的图像,使用opencv中voidgaussianblur(inputarraysrc,outputarraydst,sizeksize,doublesigmax,doublesigmay=0,intbordertype=border_default)函数进行高斯滤波。滤波窗口选5*5。

遍历深度图像,根据相机内参(fx,fy,u0,v0)和深度信息zc,计算三维点云信息,即深度图像中所有像素对应相机坐标系中的实际位置(xc,yc,zc)。构建一个存放点云信息的结构体pointf3,成员包括x,y,z。对于每个像素点计算得到的实际位置,存入一个pointf3对象,并压入存放pointf3类型的队列pcloud,pcloud包含了所有三维点云的信息。

选取(-20cm,20cm)为避障视野,即只考虑相机位置左右侧各20cm内的障碍物。设定分辨率为2cm,则构建一个长度为20的char型数组,obs作为障碍物信息数组。其中,第一个元素表征-20cm~-18cm处的障碍物信息,第二个元素表征-18cm~-16cm处的障碍物信息,依次类推。

设定两个避障阈值,分别为10cm和30cm。当障碍物距离小于30cm,大于10cm时进行避障动作,当障碍物距离小于10cm时,紧急制动。制定规则,在obs数组中,数值1表示深度在10cm~30cm,数值0表示深度小于10cm。数值-1表示深度大于30cm。遍历pcloud数组,不妨设前三个元素为a(10,22,13),b(-12,2,34),c(11,12,8)。对于元素a,可由公式计算得到其位于障碍物信息数组obs中的位数为[(10-(-20))/2]+1=16。obs[16]默认值为-1,a元素的深度13大于10,小于30,故填入1表示需要进行避障动作。b元素的深度34>30,故不对obs数组进行更新。c元素同样对应obs数组中的第16位。此时,obs[16]的值为1,表明之前该位置的最小深度应该在10cm~30cm之间。而c点对应的深度为8<10。故将obs[16]更新为0。依次类推,遍历完pcloud,完成对obs数组的更新。

因为在实际避障中,不同高度的最小深度会起到实际的限制作用,因此本发明种基于x坐标,对y轴数据进行统一降维的做法是合理且高效的。而点云数据中所有的x坐标分布是不均匀的,通过统一标准的分辨率对实际连续的距离进行离散化表示,在实际应用中更有意义也更为方便。在进行避障时,只需检查obs数组中的20个元素,即可可靠而便捷的得知全面的障碍物信息。

当前第1页1 2 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1