本发明涉及传感器标定方法领域,特别是一种单次拍摄的lidar与全景相机的外参数标定方法。
背景技术:
近些年来,随着机器人技术的发展成熟,广泛应用于资源勘探开发、救灾排险、家庭娱乐、定位导航等各类领域。为了使机器人在环境中感测更多可用信息,一般需要配备多类传感器。最常见的是lidar与全景相机的组合,全景相机能够获取丰富的颜色、形状、纹理等环境信息,但无法获得环境目标的距离信息;而lidar正好相反,它能够获取广泛范围的环境目标的位置信息与距离信息,但是无法得到颜色、形状、纹理等信息。因此,基于lidar与全景相机传感器的互补特性,将两类传感器数据融合,可以获得更为精确可用的目标信息。所以说,融合来自lidar和全景相机数据信息的关键步骤是准确、快捷的外部校准。
在移动机器人上搭载lidar和全景相机,lidar与全景相机传感器通过外部校准以便在公共坐标系中表示感测信息。为了确定3dlidar和全景相机两者之间的位置关系,通过建立lidar和全景相机各自采集目标特征之间的几何约束关系来求解。因此,外部校准方法可以分为基于点云特征线与图像特征线或者特征面、基于点云特征点与基于图像特征线或者特征面以及基于点云特征点与图像特征点的三种几何对应约束关系的方法。一般来说,基于点云特征点与图像特征点对应的几何约束关系的方法,比基于点云特征线与图像特征线或者特征面、基于点云特征点与基于图像特征线或者特征面的方法精度更高,但是在点云中,特征点相比于特征线与特征面更加难以捕捉。在大多数的激光校准工作中,经常需要手动干预校准过程,比如手动的选择点、线或者面,除此之外,实验中需要多次使用相机采集图像,激光采集点云数据,因此,实验过程繁琐。
技术实现要素:
有鉴于此,本发明的目的是提供一种单次拍摄的lidar与全景相机的外参数标定方法,克服大多数技术需要手动干预,多次采集数据,以及校准过程繁琐不足的问题。
本发明采用以下方案实现:一种单次拍摄的lidar与全景相机的外参数标定方法,提供一robotnik移动机器人,其特征在于:包括以下步骤:
步骤s1:将lidar(velodyne-hdl-64e)与全景相机(ladybug5)固定在robotnik移动机器人上;然后将m个棋盘放置于lidar与全景相机的共同视场下,一次拍摄收集单帧的全景图像与该帧全景图像对应的点云数据;
步骤s2:利用生长的棋盘角点检测算法,检测出全景图像的棋盘角点ic;
步骤s3:对点云数据进行预处理,分割去除点云地面,分割点云平面、提取棋盘点云;
步骤s4:基于点云的反射强度,估计出点云棋盘角点pl;
步骤s5:通过定义从棋盘左下侧开始的角点共同计数顺序,建立全景图像的棋盘角点ic与点云的棋盘角点pl的几何约束方程,求解出外参数r*,t*。
进一步地,所述步骤s1具体包括以下步骤:
步骤s11:通过螺栓连接将lidar(velodyne-hdl-64e)与全景相机(ladybug5)固定在robotnik移动机器人上;
步骤s12:构建一个室外场景,在场景中放置m块标定棋盘,每块棋盘的大小为600mm×450mm,棋盘中每个正方形的大小为75mm×75mm,并且满足多个棋盘在lidar与全景相机共同视场下的要求,其中,m取值为3、4、...11、12,m为整数;
步骤s13:利用步骤s11固定在移动机器人上的lidar与全景相机,使用全景相机收集一帧步骤s12构建场景的全景图像,lidar收集这帧全景图像对应的点云数据。
进一步地,步骤s2中所述检测出全景图像的棋盘角点ic的具体内容为:
步骤s21:粗定位棋盘格角点的位置:首先定义两种不同类型的角点原型,原型1是一种和坐标轴平行的角点,原型2是一种与坐标轴成45°的角点;每个原型分别由4个卷积核组成,令原型1由四个卷积核k1,k2,k3,k4组成,原型2由四个卷积核k5,k6,k7,k8组成,分别用于与全景图像进行卷积操作;
通过两个角点原型来定义全景图像中每个像素点与角点的相似程度;
其中
步骤s22:令c是理想的角点位置,p是c局部邻域的一个像素点,gp是p点的图像梯度向量,此时满足如下式子:
由于实际图像中不止一个局部领域的像素点,因此在候选角点cp的邻域n(cp)内满足下列公式条件的就是所需要的棋盘角点ic;
进一步地,所述步骤s3具体包括以下步骤:
步骤s31:估计点云棋盘角点之前,对点云数据进行预处理;通过pcl中的直通滤波器模块,将点云pcl={(x,y,z)}中x,y方向超过8m远的点剔除;
其中,pi=(x,y,z)是点云pcl中的一点;
步骤s32:根据步骤s31将点云远点剔除后,基于形态学算法将点云地面分离,用以减小在点云平面分割时,地面点的干扰;
其中,将点云测量点p(x,y,z),x,y处的高度z定义为膨胀因子dp,腐蚀因子ep与膨胀因子相对应;w是测量点p的邻近窗口大小;
wj=2jb 1(13)
对于w窗口大小根据上述公式,线性增加窗口大小;其中j=1,2,3,...,360,j为整数,b是初始窗口大小;
定义一个因子s来判断切除深度阈值dh;令物体坡度恒定,则最大坡度差为dhmax(t),k,因子s与窗口大小wk存在关系:
其中,dht,j表示第j窗口切除深度阈值,将点云中的点依次带入公式(11)-(15),计算出切除深度阈值dht,j,若腐蚀因子大于切除深度阈值,则将该点移除,否则该点保存,其中t表示阈值,j表示第j个窗口大小;
步骤s33:根据步骤s32将点云地面移除后,剩余的点云集合为prl;利用区域增长算法对点云平面进行分割;首先将剩余点云中每个点的曲率值
若小于曲率阈值cth,则将该点加入种子点,生长每个区域直到它收敛,并从prl移除,如此循环,直到prl中没有剩余的点;
最后使用棋盘平面度、形状大小条件,提取出棋盘点云
其中,提取棋盘点云
由提取的点云平面rl组成矩阵mn×3,沿着三个基矢量mb=(ux,uy,uz)t的方向分解,每个基矢量上的分量比为λ1,λ2,λ3;当最小比率λ3小于0.05并且单个棋盘的宽度dw和高度和dh满足公式(17)的点云片段被认为是棋盘点云;
其中w,h是单个棋盘的宽度和高度。
进一步地,所述步骤s4具体包括以下步骤:
步骤s41:将第k块棋盘点云
步骤s42:第k块棋盘点云转化为与lidar坐标系一致的棋盘平面坐标系后,利用黑白棋盘格图案反射强度的对应关系,设置阈值[λl,λh],小于λl表示从黑色图案反射的低强度,而大于λh表示从白色图案反射的高强度;
反射强度值在[λl,λh]为点云棋盘角点所在区域;通过黑白棋盘格反射强度的对应关系来制定成本函数,如公式(21)所示,从而估计出点云棋盘角点pl;
步骤s43:其余(m-1)块棋盘点云角点仍然根据步骤s41,步骤s42得到。
进一步地,所述步骤s5具体包括以下步骤:
步骤s51:从棋盘左下侧开始共同计数顺序,检测到的图像棋盘角点ic与点云棋盘角点pl的角点对应;
步骤s52:利用公式(26)计算图像棋盘角点与点云棋盘角点的迭代次数,,然后选择4个不共面的控制点;通过公式(27),将成像平面坐标系下的棋盘角点ic转化到相机坐标系,得到了相机坐标系下的棋盘角点pc;
其中,(fx,fy)为相机焦距,(u0,v0)为相机主点,s为畸变系数;
步骤s53:如公式(28)所示,计算出pc,pl的中心,通过
步骤s54:将求解出来的r,t带入下式误差函数,计算出角点误差;选择最小的角点误差所对应的外部参数,为最终的外部参数r*,t*。
与现有技术相比,本发明具有以下有益效果:
(1)本发明仅需将多个棋盘放置于lidar和全景相机的共同视场下,只需要一次拍摄,即只需要一张全景图像与对应的点云数据,与以往激光相机校准方法相比,数据采集更加简单快捷。
(2)本发明通过公式(26)-(30)构建出点云特征点与图像特征点的几何约束方程,比通过点云特征线与图像特征线,或者点云特征面与图像特征面建立的几何约束方程进行外部校准的误差更小,更加准确。
(3)本发明外部校准过程,全程计算机计算,无需手动选择对应的棋盘角点。
附图说明
图1为本发明实施例的流程图。
图2为本发明实施例的安装lidar与全景相机的移动机器人图。
图3为本发明实施例的一个实验场景图。
图4为本发明实施例的图像棋盘角点相似程度的两种可能图,其中图4(a)为左对角线为黑,右对角线为白图,图4(b)为左对角线为白,右对角线为黑图。
图5为本发明实施例的云数据处理的实际效果图,其中图5(a)为去除x,y方向远距离点图,图5(b)为去除地面点云图,图5(c)为分割点云平面图,图5(d)为棋盘点云平面提取图。
图6为本发明实施例的棋盘点云平面估计出棋盘角点的实际效果图。
图7为本发明实施例的棋盘点云的降维过程图。
图8为本发明实施例的2d-3d棋盘角点建立过程图。
图9为本发明实施例的外部校准结果的实际投影效果图。
具体实施方式
下面结合附图及实施例对本发明做进一步说明。
应该指出,以下详细说明都是例示性的,旨在对本申请提供进一步的说明。除非另有指明,本文使用的所有技术和科学术语具有与本申请所属技术领域的普通技术人员通常理解的相同含义。
需要注意的是,这里所使用的术语仅是为了描述具体实施方式,而非意图限制根据本申请的示例性实施方式。如在这里所使用的,除非上下文另外明确指出,否则单数形式也意图包括复数形式,此外,还应当理解的是,当在本说明书中使用术语“包含”和/或“包括”时,其指明存在特征、步骤、操作、器件、组件和/或它们的组合。
如图1所示,本实施例提供一种单次拍摄的lidar与全景相机的外参数标定方法,提供一robotnik移动机器人,包括以下步骤:
步骤s1:将lidar(velodyne-hdl-64e)与全景相机(ladybug5)固定在robotnik移动机器人上;然后将m个棋盘放置于lidar与全景相机的共同视场下,一次拍摄收集单帧的全景图像与该帧全景图像对应的点云数据;(本实例采用的是五个棋盘)
步骤s2:利用生长的棋盘角点检测算法,检测出全景图像的棋盘角点ic;
步骤s3:对点云数据进行预处理,分割去除点云地面,分割点云平面、提取棋盘点云;
步骤s4:基于点云的反射强度,估计出点云棋盘角点pl;
步骤s5:通过定义从棋盘左下侧开始的角点共同计数顺序,建立全景图像的棋盘角点ic与点云的棋盘角点pl的几何约束方程,求解出外参数r*,t*。
上述步骤s1是将lidar与全景相机安装在robotnik移动机器人上,安装完成效果如图2所示。图3所示的是一个lidar与全景相机外部校准的实验场景,通过装载lidar与全景相机的移动机器人获取单帧的全景图像与此帧图像对应的点云数据。
在本实施例中,所述步骤s1具体包括以下步骤:
步骤s11:通过螺栓连接将lidar(velodyne-hdl-64e)与全景相机(ladybug5)固定在robotnik移动机器人上;
步骤s12:构建一个室外场景,在场景中放置m块标定棋盘,每块棋盘的大小为600mm×450mm,棋盘中每个正方形的大小为75mm×75mm,并且满足多个棋盘在lidar与全景相机共同视场下的要求,其中,m取值为3、4、...11、12,m为整数;
步骤s13:利用步骤s11固定在移动机器人上的lidar与全景相机,使用全景相机收集一帧步骤s12构建场景的全景图像,lidar收集这帧全景图像对应的点云数据。
在本实施例中,步骤s2中所述检测出全景图像的棋盘角点ic的具体内容为:
一般可以将生长的图像棋盘角点检测算法分为两个步骤:粗定位棋盘角点位置与进一步确定棋盘角点位置。
步骤s21:粗定位棋盘格角点的位置:首先定义两种不同类型的角点原型,原型1是一种和坐标轴平行的角点,原型2是一种与坐标轴成45°的角点;每个原型分别由4个卷积核组成,令原型1由四个卷积核k1,k2,k3,k4组成,原型2由四个卷积核k5,k6,k7,k8组成,分别用于与全景图像进行卷积操作;
通过两个角点原型来定义全景图像中每个像素点与角点的相似程度;
其中,如图4所示,
步骤s22:由于步骤s21得到的候选角点不是很精确,需要进一步确定角点的位置;令c是理想的角点位置,p是c局部邻域的一个像素点,gp是p点的图像梯度向量,此时满足如下式子:
由于实际图像中不止一个局部领域的像素点,因此在候选角点cp的邻域n(cp)内满足下列公式条件的就是所需要的棋盘角点ic;
在本实施例中,对点云数据进行预处理,包括去除x,y方向远距离点云,分割去除点云地面,分割点云平面,提取棋盘点云,图5展示的是点云数据处理的具体效果。
所述步骤s3具体包括以下步骤:
步骤s31:估计点云棋盘角点之前,对点云数据进行预处理;通过pcl中的直通滤波器模块,将点云pcl={(x,y,z)}中x,y方向超过8m远的点剔除;
其中,pi=(x,y,z)是点云pcl中的一点;
步骤s32:根据步骤s31将点云远点剔除后,基于形态学算法将点云地面分离,用以减小在点云平面分割时,地面点的干扰;形态学算法是根据设计出的膨胀因子和腐蚀因子,经过系列组合处理分割出地面点云。
其中,将点云测量点p(x,y,z),x,y处的高度z定义为膨胀因子dp,腐蚀因子ep与膨胀因子相对应;w是测量点p的邻近窗口大小;
wj=2jb 1(13)
对于w窗口大小根据上述公式,线性增加窗口大小;其中j=1,2,3,...,360,j为整数,b是初始窗口大小;
定义一个因子s来判断切除深度阈值dh;令物体坡度恒定,则最大坡度差为dhmax(t),j,因子s与窗口大小wj存在关系:
其中,dht,j表示第j窗口切除深度阈值,将点云中的点依次带入公式(11)-(15),计算出切除深度阈值dht,j,若腐蚀因子大于切除深度阈值,则将该点移除,否则该点保存,其中t表示阈值,j表示第j个窗口大小;
步骤s33:根据步骤s32将点云地面移除后,剩余的点云集合为prl;利用区域增长算法对点云平面进行分割;首先将剩余点云中每个点的曲率值
若小于曲率阈值cth,令cth=1.0,则将该点加入种子点,生长每个区域直到它收敛,并从prl移除,如此循环,直到prl中没有剩余的点;
最后使用棋盘平面度、形状大小条件,提取出棋盘点云
其中,提取棋盘点云
由提取的点云平面rl组成矩阵mn×3,沿着三个基矢量mb=(ux,uy,uz)t的方向分解,每个基矢量上的分量比为λ1,λ2,λ3;当最小比率λ3小于0.05并且单个棋盘的宽度dw和高度和dh满足公式(17)的点云片段被认为是棋盘点云;
其中w,h是单个棋盘的宽度和高度。
在本实施例中单个棋盘的宽度和高度为(600mm×450mm)。
在本实施例中,基于点云的反射强度,估计出棋盘点云角点pl,
图6展示的是估计出的棋盘角点。所述步骤s4具体包括以下步骤:
步骤s41:图7所示的是棋盘点云的降维过程,其中黑色表示低强度点云,白色表示高强度点云。将第k块棋盘点云
步骤s42:第k块棋盘点云转化为与lidar坐标系一致的棋盘平面坐标系后,利用黑白棋盘格图案反射强度的对应关系,设置阈值[λl,λh],设为[2.5,59],小于λl表示从黑色图案反射的低强度,而大于λh表示从白色图案反射的高强度;
反射强度值在[λl,λh]为点云棋盘角点所在区域;通过黑白棋盘格反射强度的对应关系来制定成本函数,如公式(21)所示,从而估计出点云棋盘角点pl;
步骤s43:其余(m-1)块棋盘点云角点仍然根据步骤s41,步骤s42得到。
如图8所示,在本实施例中,建立全景图像的棋盘角点ic与点云的棋盘角点pl的几何约束方程,求解出外参数r*,t*。所述步骤s5具体包括以下步骤:
步骤s51:从棋盘左下侧开始共同计数顺序,检测到的图像棋盘角点ic与点云棋盘角点pl的角点对应;
步骤s52:利用公式(26)计算图像棋盘角点与点云棋盘角点的迭代次数,,然后选择4个不共面的控制点;通过公式(27),将成像平面坐标系下的棋盘角点ic转化到相机坐标系,得到了相机坐标系下的棋盘角点pc;
其中,(fx,fy)为相机焦距,(u0,v0)为相机主点,s为畸变系数;
步骤s53:如公式(28)所示,计算出pc,pl的中心,通过
步骤s54:将求解出来的r,t带入下式误差函数,计算出角点误差;选择最小的角点误差所对应的外部参数,为最终的外部参数r*,t*。
在本实施例中,r是一个3*3矩阵,rx是绕x轴的矩阵,ry是绕y轴的矩阵,rz是绕z轴的矩阵,旋转角度θ=(θx,θy,θz)分别对应x,y,z轴的旋转角度,t=(tx,ty,tz)分别为x,y,z轴的平移矢量。
r(θ)=rz(θz)ry(θy)rx(θx)
所以求解出来的r*,t*,是包括六个外参数rx,ry,rz;tx,ty,tz。
较佳的,如图9所示,本实施例是通过构建点云特征点与图像特征点的几何约束关系来进行外部校准,更加准确。本实施例基于生长的图像棋盘角点检测算法与基于点云反射强度估计出棋盘角点,将外参数标定问题转换成2d-3d棋盘角点匹配的几何约束问题,只需要一次拍摄,就能实现lidar和全景相机的外参数标定。并且仅需将多个棋盘放置于lidar和全景相机的共同视场下,只进行一次拍摄,就能够基于生长的图像棋盘角点检测方法获取图像棋盘角点,根据点云反射强度估计出点云棋盘角点,然后建立2d-3d图像棋盘角点与点云棋盘角点的几何约束方程,自动计算出外部校准参数,实现单次lidar与全景相机传感器的外部校准。
以上所述仅为本发明的较佳实施例,凡依本发明申请专利范围所做的均等变化与修饰,皆应属本发明的涵盖范围。
1.一种单次拍摄的lidar与全景相机的外参数标定方法,提供一robotnik移动机器人,其特征在于:包括以下步骤:
步骤s1:将lidar与全景相机固定在所述robotnik移动机器人上;然后将m个棋盘放置于lidar与全景相机的共同视场下,一次拍摄收集单帧的全景图像与该帧全景图像对应的点云数据;
步骤s2:利用生长的棋盘角点检测算法,检测出全景图像的棋盘角点ic;
步骤s3:对点云数据进行预处理,分割去除点云地面,分割点云平面、提取棋盘点云;
步骤s4:基于点云的反射强度,估计出点云棋盘角点pl;
步骤s5:通过定义从棋盘左下侧开始的角点共同计数顺序,建立全景图像的棋盘角点ic与点云的棋盘角点pl的几何约束方程,求解出外参数r*,t*。
2.根据权利要求1所述的一种单次拍摄的lidar与全景相机的外参数标定方法,其特征在于:所述步骤s1具体包括以下步骤:
步骤s11:通过螺栓连接将lidar与全景相机固定在robotnik移动机器人上;
步骤s12:构建一个室外场景,在场景中放置m块标定棋盘,每块棋盘的大小为600mm×450mm,棋盘中每个正方形的大小为75mm×75mm,并且满足多个棋盘在lidar与全景相机共同视场下的要求,其中,m取值为3、4、...11、12,m为整数;
步骤s13:利用步骤s11固定在移动机器人上的lidar与全景相机,使用全景相机收集一帧步骤s12构建场景的全景图像,lidar收集这帧全景图像对应的点云数据。
3.根据权利要求1所述的一种单次拍摄的lidar与全景相机的外参数标定方法,其特征在于:步骤s2中所述检测出全景图像的棋盘角点ic的具体内容为:
步骤s21:粗定位棋盘格角点的位置:首先定义两种不同类型的角点原型,原型1是一种和坐标轴平行的角点,原型2是一种与坐标轴成45°的角点;每个原型分别由4个卷积核组成,令原型1由四个卷积核k1,k2,k3,k4组成,原型2由四个卷积核k5,k6,k7,k8组成,分别用于与全景图像进行卷积操作;
通过两个角点原型来定义全景图像中每个像素点与角点的相似程度;
其中
步骤s22:令c是理想的角点位置,p是c局部邻域的一个像素点,gp是p点的图像梯度向量,此时满足如下式子:
由于实际图像中不止一个局部领域的像素点,因此在候选角点cp的邻域n(cp)内满足下列公式条件的就是所需要的棋盘角点ic;
4.根据权利要求1所述的一种单次拍摄的lidar与全景相机的外参数标定方法,其特征在于:所述步骤s3具体包括以下步骤:
步骤s31:估计点云棋盘角点之前,对点云数据进行预处理;通过pcl中的直通滤波器模块,将点云pcl={(x,y,z)}中x,y方向超过8m远的点剔除;
其中,pi=(x,y,z)是点云pcl中的一点;
步骤s32:根据步骤s31将点云远点剔除后,基于形态学算法将点云地面分离,用以减小在点云平面分割时,地面点的干扰;
其中,将点云测量点p(x,y,z),x,y处的高度z定义为膨胀因子dp,腐蚀因子ep与膨胀因子相对应;w是测量点p的邻近窗口大小;
wj=2jb 1(13)
对于w窗口大小根据上述公式,线性增加窗口大小;其中j=1,2,3,...,360,j为整数,b是初始窗口大小;
定义一个因子s来判断切除深度阈值dh;令物体坡度恒定,则最大坡度差为dhmax(t),j,因子s与窗口大小wj存在关系:
其中,dht,j表示第j窗口切除深度阈值,将点云中的点依次带入公式(11)-(15),计算出切除深度阈值dht,j,若腐蚀因子大于切除深度阈值,则将该点移除,否则该点保存,其中t表示阈值,j表示第j个窗口大小;
步骤s33:根据步骤s32将点云地面移除后,剩余的点云集合为prl;利用区域增长算法对点云平面进行分割;首先将剩余点云中每个点的曲率值
若小于曲率阈值cth,则将该点加入种子点,生长每个区域直到它收敛,并从prl移除,如此循环,直到prl中没有剩余的点;
最后使用棋盘平面度、形状大小条件,提取出棋盘点云
其中,提取棋盘点云
由提取的点云平面rl组成矩阵mn×3,沿着三个基矢量mb=(ux,uy,uz)t的方向分解,每个基矢量上的分量比为λ1,λ2,λ3;当最小比率λ3小于0.05并且单个棋盘的宽度dw和高度和dh满足公式(17)的点云片段被认为是棋盘点云;
其中w,h是单个棋盘的宽度和高度。
5.根据权利要求1所述的一种单次拍摄的lidar与全景相机的外参数标定方法,其特征在于:所述步骤s4具体包括以下步骤:
步骤s41:将第k块棋盘点云
步骤s42:第k块棋盘点云转化为与lidar坐标系一致的棋盘平面坐标系后,利用黑白棋盘格图案反射强度的对应关系,设置阈值[λl,λh],小于λl表示从黑色图案反射的低强度,而大于λh表示从白色图案反射的高强度;
反射强度值在[λl,λh]为点云棋盘角点所在区域;通过黑白棋盘格反射强度的对应关系来制定成本函数,如公式(21)所示,从而估计出点云棋盘角点pl;
步骤s43:其余(m-1)块棋盘点云角点仍然根据步骤s41,步骤s42得到。
6.根据权利要求1所述的一种单次拍摄的lidar与全景相机的外参数标定方法,其特征在于:所述步骤s5具体包括以下步骤:
步骤s51:从棋盘左下侧开始共同计数顺序,检测到的图像棋盘角点ic与点云棋盘角点pl的角点对应;
步骤s52:利用公式(26)计算图像棋盘角点与点云棋盘角点的迭代次数,,然后选择4个不共面的控制点;通过公式(27),将成像平面坐标系下的棋盘角点ic转化到相机坐标系,得到了相机坐标系下的棋盘角点pc;
其中,(fx,fy)为相机焦距,(u0,v0)为相机主点,s为畸变系数;
步骤s53:如公式(28)所示,计算出pc,pl的中心,通过
步骤s54:将求解出来的r,t带入下式误差函数,计算出角点误差;选择最小的角点误差所对应的外部参数,为最终的外部参数r*,t*。