张 然, 郭海平, 谢静远, 周文鑫
(上海船舶工艺研究所, 上海 200032)
随着工业机器人的快速发展,在船舶制造业、汽车制造业、铸造业等重型制造业内,对零部件、工件的打磨处理作业已经由传统的人工作业模式转变为以工业机器人为主导、视觉检测为辅助的智能作业模式。智能打磨装备在这些领域已经得到广泛应用[1]。视觉系统作为智能打磨装备的重要组成部分,承担着对打磨对象的检测与识别功能,视觉检测与识别算法的精度与速度直接影响打磨作业的完成质量与效率。目前,智能打磨装备的视觉系统主要基于2D图像进行视觉识别,即利用电荷耦合器件(Charge-coupled Device, CCD)或互补金属氧化物半导体(Complementary Metal Oxide Semiconductor, CMOS)相机,获取打磨对象的图像信息,利用灰度分析或图像边缘分析算法,对打磨对象进行特征检测与识别[2-3]。这类视觉系统的检测精度主要依赖图像质量,对相机的分辨率、现场光源环境等都有较高要求。还有一部分智能打磨装备视觉系统采用线激光型传感器,对打磨对象进行在线扫描和三维重构,为了保证扫描重构的质量,线激光型传感器的扫描速度一般较慢,打磨装备的工作效率被限制[4]。
随着双目视觉和结构光技术的发展,深度相机已经成为传统图像传感器、激光类传感器后的又一种视觉传感器。深度相机因其较高的检测精度与快速的数据处理速度,在无人驾驶、定位建图领域已经受到广泛应用[5-6]。基于工业深度相机,针对船舶小构件智能打磨装备,对其视觉系统进行算法设计,并完成视觉系统各算法模块的功能实现,为整套船舶小构件智能打磨装备的高效高质量提供可靠的视觉数据支撑。
船舶小构件自由边智能打磨装备是针对肘板、补板等小型船舶结构件设计的整套物料搬运、打磨作业的机器人工作站,构成高产能、高精度、高质量的自动化生产单元,以满足船厂的自动化打磨作业。智能打磨装置的视觉系统主要承担工件搬运及打磨前的视觉识别功能,基于深度相机完成对待搬运及待打磨工件的三维扫描、关键信息提取等作业,为后续自动搬运与自动打磨提供准确全面的视觉信息。
智能打磨装备的视觉识别系统按照算法功能主要分为3个算法模块,分别为位姿估计及坐标变换模块、工件搬运视觉模块和工件打磨视觉模块。视觉识别系统算法模块框架设计如图1所示。
图1 视觉识别系统算法模块框架
(1) 位姿估计及坐标变换模块。该算法模块主要用于实现视觉系统内部的坐标建立及各坐标系间的坐标变换,包括建立标记坐标系,计算传感器坐标系与标记坐标系间的变换矩阵,储存运算得出的变换矩阵结果,为后续模块提供计算依据。
(2) 工件搬运视觉模块。该算法模块主要承担装备搬运环节的视觉识别工作,包括对上料平台上的工件进行扫描,获取点云信息,将工件点云进行分割,对每个工件点云进行质心计算与质心坐标提取,并将质心坐标上传至上位机,为机器人执行搬运作业提供视觉数据。
(3) 工件打磨视觉模块。该算法模块主要承担装备打磨环节的视觉识别工作,包括对打磨平台上的工件进行扫描,获取点云信息,将工件点云进行分割,对工件点云进行边缘识别,提取工件边缘点云,将边缘点坐标上传至上位机,为机器人执行打磨作业提供视觉数据。
深度相机通常由普通的RGB彩色摄像头、双目红外摄像头和脉冲或光线发射、接收器等部件构成,因此深度相机又名RGB-D相机或主动双目视觉相机,即在获取普通彩色图像的同时,可以获得图像中每个像素的深度信息,且相对于仅依靠双目视差(被动双目视觉)获取深度信息的普通双目视觉相机,深度相机依靠红外结构光(Structured Light, SL)或飞行时间(Time-of-Flight,TOF)法原理,主动进行深度测量。其原理如图2所示。
图2 深度相机原理示例
SL型深度相机向探测目标发射一束光线,并根据返回的SL图案,计算物体与自身之间的距离;TOF深度相机则向目标发射脉冲光,根据发送与返回之间的TOF,确定探测物体的距离。从原理上看,TOF型深度相机与传统的激光型传感器相似,但传统的激光型传感器通过逐点扫描获取距离,而TOF型深度相机则可一次性获取整个图像中每个像素点的距离信息,大幅缩短扫描时间,提高视觉识别效率。
同时,在测量深度之后,深度相机会按照生产时各摄像头的摆放位置自动完成深度信息与彩色图像间的匹配,输出一一对应的深度图像与彩色图像,同时计算像素点的3D坐标,生成3D点云。对深度相机采集的数据,既可在图像层面进行图像处理,又可在点云层面进行点云处理,显著丰富了信息的完整度。
智能打磨设备的视觉识别算法,基于图漾PM801工业TOF深度相机进行设计,其结构如图3所示,该深度相机采用主动双目技术,包括双目红外摄像头、RGB彩色摄像头和光学增强系统,可输出RGB彩色图像、深度图像、三维点云等多种数据结构。为验证视觉识别算法,基于新松SR210D机械手,搭建算法试验平台,如图4所示,深度相机安装于机械手端部,机械手下方放置工件:当放置多块工件时,模拟上料平台;当放置单个工件时,模拟打磨平台。
图3 图漾PM801工业TOF深度相机
图4 算法试验平台
智能打磨装置视觉识别系统的位姿估计与坐标变换主要作用:使用Aruco_marker标记,在上料平台与打磨平台上分别设置坐标系,定义为标记坐标系Cmarker,通过Aruco_marker检测算法进行相机位姿估计,获取从标记坐标系Cmarker至图像坐标系Crgb之间的转换矩阵Tmarker,rgb;深度相机获取的工件点云位于点云坐标系Cpcl中,从点云坐标系至图像坐标系之间的转换矩阵Tpcl,rgb为传感器参数中的已知信息,结合相机位姿估计所得Tmarker,rgb,可将工件点云从点云坐标系转换至上料平台或打磨平台上的标记坐标系Cmarker,进行下一步点云处理流程。位姿估计与坐标变换示例如图5所示。
图5 位姿估计与坐标变换示例
在一般情况下,点云数据在原始传感器坐标系中处理,由于深度相机安装于机械手的机械臂上,为了方便进行数据处理,例如点云分割等操作,需要保证深度相机与平台水平,同时需要估算深度相机距离平台的高度,算法条件相对苛刻。在进行坐标变换之后,点云数据可在作业区域坐标系内处理,由于Aruco_marker标记贴附于作业区域表面,因此依据标记生成的坐标系xy轴平面与作业区域水平,近似贴合于作业区域表面,z轴垂直于作业区域表面竖直向上,方便后续对点云数据进行处理,同时对机器人及传感器无特殊位置要求,只需保证重复定位精度即可。
3.2.1 Aruco_marker介绍
Aruco_marker是一种类似二维码的简易识别标记,广泛应用于机器人导航、增强现实场景的相机位姿估计中。相机位姿估计主要任务在于找到点在真实3D环境中的坐标与2D图像中的真实坐标并求出转换关系,这一步骤通常比较复杂,而Aruco_marker标记可以被相机快速识别,并提供足够计算相机位姿的对应信息。同时,标记内部的二进制编码使标记在错误检查与修正方面保持一定的稳定性。
一个Aruco_marker标记外围均有一组黑色边框,同时内部有用于确定标记ID的二维矩阵。黑色边框可加速标记在图像中的检测速度,内部二维编码能唯一识别该标记,同时进行错误检测和错误修复。图6为该视觉识别系统所用的Aruco_marker标记,ID号为582。Aruco_marker可用C++代码直接生成,打印后即可用于相机位姿估计。
图6 视觉系统所用Aruco_marker标记
3.2.2 相机位姿估计算法
Aruco_marker的检测与位姿估计算法是基于OpenCV库中的detectMarkers()函数与estimatePoseSingleMarkers()函数进行设计的。
首先,默认深度相机RGB摄像头的内部参数已知,RGB摄像头的内部参数一般在出厂时已经计算完成,如果没有也可利用传统相机标定方法人工完成RGB摄像头内部参数标定。确定RGB摄像头的内部参数后,即可获得去畸变之后的RGB图像。以包含Aruco_marker标记的RGB图像作为输入,利用detectMarkers()对图像进行检测,确定图像中的Aruco_marker标记、输出标记角点(corner)及其他参数,后续位姿估计均依赖于检测输出的结果。
获取Aruco_marker的识别结果后,利用estimatePoseSingleMarkers()函数进行相机位姿估计,输入参数为标记角点(corner)检测结果、RGB摄像头内部参数(cameraMatrix)和RGB摄像头畸变参数(distCoeffs),输出结果为从标记坐标系至RGB相机坐标系的姿态,该姿态通过1个旋转向量(rvecs)和1个平移向量(tvecs)描述。
3.2.3 坐标变换计算
该算法所涉及的坐标系共3个,分别为深度相机中的点云坐标系Cpcl、深度相机中的图像坐标系Crgb和上料平台与打磨平台上根据Aruco_marker生成的标记坐标系Cmarker。由深度相机采集到的原始点云位于点云坐标系Cpcl中,为了将原始点云转换至标记坐标系Cmarker中进行下一步处理,需要计算得出从Cpcl至Cmarker的坐标转换矩阵Tpcl,marker。假设现实环境中的某个点在点云坐标系、图像坐标系、标记坐标系下的坐标分别为Ppcl、Prgb、Pmarker,则易知:
Prgb=Tpcl,rgbPpcl
(1)
式中:Tpcl,rgb为从点云坐标系至图像坐标系的转换矩阵,该矩阵可以通过查阅深度相机的参数表得到。
通过相机位姿估计算法,可以得到从标记坐标系Cmarker至图像坐标系Crgb的转换矩阵Tmarker,rgb,则从图像坐标系Crgb至标记坐标系Cmarker的转换矩阵为
(2)
同时可知:
Pmarker=Trgb,markerPrgb
(3)
将式(1)~式(3)整合可得
(4)
则可得出从Cpcl至Cmarker的坐标转换矩阵为
(5)
C++的Eigen库是一个开源的线性代数库,可提供有关矩阵的线性代数运算,因此上述算法可基于Eigen库进行开发实现。
由深度相机获取的原始点云数据包含了工件点云、背景点云及无关点点云,为了对工件点云进行进一步的数据处理,需要将工件点云从原始点云中分割出来。原始点云数据的背景主要为上料平台或打磨平台,无关点主要为视场内的少量辅助设备形成的干扰点。因此,工件点云分割工作分为背景点云分割与无关点滤除。
3.3.1 背景点云分割
背景点云由上料平台或打磨平台点云构成,这类背景点云为大面积平面类点云,且由于地面及打磨平台都较为平整,几乎没有高度变化。工件放置于上料平台或者打磨平台上,同时在坐标变换时,已经在上料平台或打磨平台上设置了标记坐标系,且原始点云已经转换至标记坐标系下,标记坐标系与平台近乎贴合,z轴竖直向上。针对这类背景点云的特点及标记坐标系的特点,可以以工件厚度作为辨别工件与背景的判别条件,在z轴方向上设定合适的阈值,滤除大面积的背景点云。
3.3.2 工件点云提取
对于抓取环节的视觉识别,由于上料平台上会放置多块待抓取工件,仅对背景点云进行去除,已经无法对每块工件点云进行单独处理。同时,由于上料平台的尺寸较大,相机位姿估计的误差会随着尺寸增加而放大,导致背景无法完全过滤,残余部分平面背景点云,这类点云也无法用离群点滤除进行过滤。由于工件点云亦为平面点云,因此可对去除背景后的点云数据采用随机抽样一致性(RANdom SAmple Consensus, RANSAC)算法进行工件点云的提取。
RANSAC算法是从1组含有“外点”的数据中正确估计出数学模型参数的迭代算法。该算法假设所有数据均由“内点”与“外点”构成,“内点”即组成模型参数的数据,“外点”即模型以外不适合模型的数据。该算法通过反复选择数据进行模型估计,一直迭代直至估计出较好的模型。该算法大多应用于直线特征提取,而RANSAC平面拟合提取的原理与直线拟合类似:首先在原始点云数据中随机选出3点,按照平面方程构建平面模型,拟合出初始平面;然后将原始点云中所有点代入这个模型,计算出“内点”数目(累加在一定误差范围内的适合当前平面模型的数据),比较当前模型与之前拟合出的最好的模型的“内点”数量,记录包含最多“内点”的模型参数;最终直至迭代结束或达到设置的“内点”上限,即完成平面拟合与提取。
RANSAC在点云中进行平面提取的算法可用点云库中的SACSegmentation类进行实现,算法的输入为进行背景过滤后的点云数据,并选择RANSAC算法模型进行分割。SACSegmentation类中控制迭代次数的参数为segDistanceThreshold,即点至拟合平面的距离,若数据点至当前拟合平面的距离超过该阈值,则判断该数据点不在平面模型内。RANSAC算法是一种不稳定算法,其拟合精度主要依靠迭代次数,迭代次数越多,拟合越精准,但耗时也越多。应用于智能打磨装备视觉识别系统中点云分割模块内的segDistanceThreshold参数设置为0.1 mm,其迭代次数即可保证工件平面可被准确分割,同时也兼顾算法实时性。
3.3.3 无关点滤除
对于打磨环节的视觉识别,由于打磨平台尺寸较小,且每次只有1个工件放置于打磨平台上,因此仅依靠设置阈值即可将绝大部分由打磨平台构成的背景点云滤除。但由于打磨平台周围存在较多的辅助设备,例如点激光开关阀等,这些设备的一部分可能被深度相机捕捉到,形成无关点。这类无关点一般与工件点云距离较大,可按照离群点处理。离群点处理算法可基于K邻近点(K-Nearest Neighbor, KNN)原理实现,即设定邻近点个数K与标准方差阈值Threshold,先求出某点附近K个邻近点之间距离的标准方差dev,再计算该点到这些点的距离d,如果距离d大于该点附近K个邻近点之间距离的标准方差与标准方差阈值的乘积,则该点判断为离群点并进行滤除。无关点滤除算法基于C++与点云库实现。
3.3.4 点云分割算法结果
如图7所示,原始点云包含工件点云、背景点云及干扰点,经过背景分割、工作点云提取及无关点滤除,可得到清晰的工件点云。
图7 点云分割算法结果
工件质心提取是搬运环节的主要算法功能。对分割出的工件点云进行质心提取,得到质心的三维坐标,并发送给上位机。机械臂移动至质心坐标处,利用电磁铁完成工件抓取。
通常物体的质心计算公式为
(6)
式中:ri=(xi,yi,zi),i=1,2,…,n,为各质点的坐标;mi为质点的对应质量。
利用C++进行工件质心提取算法设计时,令式(6)中mi=1,质心提取算法的公式为
(7)
利用C++程序与式(7)即可完成工件点云的质心坐标计算,当质心提取完成后,将质心坐标保存,并发送至上位机,为机器人执行搬运作业提供数据支撑。工件质心提取结果如图8所示。
图8 工件质心提取结果
工件点云的边缘提取是打磨环节的核心算法。对打磨平台上的待打磨工件进行分割之后,需要提取工件的边缘点云,由于船舶小构件的几何形状存在非规则形状,例如弧形边缘等,仅提取少量边缘特征点无法满足打磨机器人的工作需求,需要对工件的边缘进行完整的点云提取,并发送给机器人上位机,为机器人执行打磨程序提供数据支撑。为了在三维点云中准确提取边缘点云,选择基于点云法线进行边缘提取,即首先从原始点云上计算出法线,然后由法线结合数据估计出边界,最后提取出边缘点云。
平面的法线是与其垂直的单位向量。在点云表面,法线定义为垂直于与点云表面相切的平面向量,可提供关于平面的曲率信息。对于点云数据集的每个点的法线估计,可看做对表面法线的近似推断,因此确定表面一点法线的问题可近似于估计表面的一个相切面法线的问题,转换之后就成为最小二乘法平面拟合估计问题。 通过计算推导可将求解最佳拟合平面问题转换为求解矩阵特征值与特征向量问题,所求得的最小特征值对应的特征向量即为最佳拟合平面的法向量。
完成工件点云中每个点的法线估计后,再利用各个法线方向之间的夹角即可判断出工件点云的边缘点,最终生成工件点云的边缘点云信息。整个工件点云边缘提取算法可基于C++与点云库完成算法设计,算法输入为完成点云分割后的单个工件点云和算法的约束参数,参数reform用于法线估计算法中设定拟合平面的拟合半径,一般设定为点云分辨率的10倍,而参数re用于边缘判别算法中的法线夹角阈值,一般设置为π/2或π/4。算法输出为识别提取出的工件边缘点云。
完成工件边缘点云提取后,将边缘点的坐标保存,上传至上位机,为机器人执行打磨作业提供数据支撑。工件边缘点云提取结果如图9所示。
图9 工件边缘点云提取结果
针对船舶小构件打磨装备,提出利用深度相机进行视觉识别系统算法设计,确定视觉识别系统的模块框架与模块功能。同时搭建算法试验平台,基于OpenCV库与点云库,利用C++程序语言完成各模块的算法实现。与使用图像传感器和线激光型传感器相比,基于深度相机设计的船舶小构件智能打磨装备视觉识别算法在保证精度的同时,不再依赖现场光源和图像分辨率,不需要移动传感器进行在线扫描,提高了视觉识别的效率,为智能打磨装备提供了准确全面的视觉数据,保证了船舶小构件智能打磨装备高质量、高效率运行。