根据摄像机与机器人的相互位置的不同,机器人视觉系统可分为Eye-in-Hand 系统和Eye-to-Hand 系统。Eye-in-Hand 系统的摄像机安装在机器人手部末端,在机器人工作过程中随机器人一起运动。Eye-to-Hand 系统的摄像机安装在机器人本体外的固定位置,在机器人工作过程中不随机器人一起运动[1]。
视觉处理项目中的关键技术是摄像机的手眼标定与图像处理。HALCON是德国MVtec 公司开发的图像处理软件,具有完善的综合标准软件库和机器视觉集成开发环境,并提供了丰富的函数库,包括blob 分析、形态学、模式匹配、测量、三维目标识别和立体视觉等。它支持Windows、Linux和Solaris 操 作环境,整个函数库可以用C,C++,C#,Visual Basic和Delphi等多种普通编程语言开发,有效提高了开发效率,并且执行速度快,具有良好的跨平台移植性[2]。因此,其中的算法可以很好地完成摄像机手眼标定与图像处理的任务。
运动控制器方面,选用GALIL公司推出的具有Ethernet/RS-232通信接口的独立型数字运动控制器DMC-21x3/DMC-21x2系列产品,特别适合于那些对价格及安装空间特别苛求的应用领域。所提供的通信驱动库支持当前所有Windows版本、DOS、Linux等操作系统,可以很方便地进行二次开发。 1 机械手工作原理
机器人本体采用本实验室自主研制的非线性机器人。该机器人的底座关节和手腕关节是由空心杯电机经减速器减速后带动关节运动,而另外的四个关节则采用了一种非线性驱动结构,也就是通过电机的旋转带动与之相连的丝杆产生直线运动,进而驱动作为支点的螺母以改变相应关节角度。
如果暂时不考虑电机关节驱动机构,根据D-H方法[3]可建立机器人手臂的各连杆的参考坐标系,如图 1所示。研制的六自由度工业机器人各关节的D-H参数见表 1。
![]() | 图 1 机械结构简图 Fig. 1 Mechanical structure |
|
|
表 1 机器人D-H参数表 Tab. 1 D-H parameter table of the robot |
对摄像机进行标定就是为了获取摄像机的内部参数[4],而参数的精确性直接影响后续的结果。HALCON软件内部已经封装了这类标定算子,只要调用camera_calibration(::NX,NY,NZ,NRow,NCol,StartCamParam,NStartPose,EstimateParams:CameraParam,NFinalPose,Errors)并输入所需的入口参数就能得到摄像机内部参数。其具体过程如下:
(1)采集一定数量图片,一般为8~15幅图片(图中需含有标定板)。
(2)输入标准标定板参数(200 mm边长49点阵),代码为:
CalTabFile:='caltab_200 mm.descr';caltab_points(CalTabFile,X,Y,Z)
标定板中各个黑点的位置是以标定板正中心为参考原点。
(3)输入初始相机内部参数(参数为不准确的预估值),代码为:
CameraParam:[Focus,Kappa,Sx,Sy,Cx,Cy,ImageWidth,ImageHeight]
(4)采集图片中的标定板位姿信息。
(5)进行相机标定算法,代码为:
camera_calibration(X,Y,Z,NRow,NCol,StartCamParam,StartPoses,'all',CamParam,NFinalPose,Errors)。
(6)输出标定后相机内部参数,代码为:
write_cam_par(CamParam,DataNameStart+'tu_campar.dat')。 2.2 机器人的手眼标定
使用HALCON软件进行机器人手眼标定目的是为了得到机器人基准坐标系相对于摄像头坐标系的位姿。该位姿参数的精确性也会直接影响到机械手对目标点的定位精度。
在HALCON中实现手眼标定的算子是hand_eye_calibration(NX,NY,NZ,NRow,NCol,NumPoints,RobotPoses,CamParam,'nonlinear','error_pose',CameraPose,CalibrationPose,PoseError),其输入输出参数有: X,Y,Z,Row,Col,NumPoints。在进行手眼系统的标定时,必须提供标定板中所有黑色圆点的三维坐标值及其对应的图像像素值。在每幅标定图像中,还必须提供黑色圆点的三维坐标值,对应的像素值以及三维点的个数。
RobotPoses:每幅图片中已知的机器人的位姿,在此为机器人末端在机器人坐标系中的位姿。
CameraParam:相机的内部参数。
Method:手眼系统标定所使用的方法,默认为nonlinear。
QualityType:所得结果的评价类型。
CameraPose:计算得出的机器人基准坐标系相对于相机坐标系的的位姿。
CalibrationPose:计算得出的标定物在机器人基准坐标系中的位姿。
Quality:输出结果的评价。 2.3 标定板特征信息的提取
在两个标定过程中,标定板特征信息的提取都是必不可少的。本课题采用HALCON提供的高精度标定板,其外观如图 2所示。标定板在一个黑色方框内包含7行7列共49个相同的圆靶,以每个圆心作为标定点,定义世界坐标系原点在正中央圆心处,z 轴垂直标定板向上,坐标系方向可由位于黑框左上角的三角块唯一确定[5]。
![]() | 图 2 HALCON标定板外观图 Fig. 2 Appearance of the HALCON calibration plate |
使用摄像机对放置在检测平面上不同位置的标定板拍照,且摄像机位置固定,在保证内部参数和相对位姿参数不变的前提下,继续拍照得到若干张图像。
具体标定算法流程如图 3所示,其步骤为:(1)读取由摄像机采集到的彩色图片;(2)将彩色图片转化为灰度图片;(3)通过find_caltab()函数找到标定板的区域;(4)find_marks_and_pose()函数可提取标定板中的标定点的坐标。标定过程中得到的结果如图 4所示。
![]() | 图 3 标定板标定点提取流程图 Fig. 3 Flow chart of calibration point extraction |
![]() | 图 4 标定点提取过程图 Fig. 4 Calibration point extraction |
在进行手眼标定时,对每幅标定图片都需要提供相对应的机器人的位姿,并且机器人位姿的精度对整个手眼系统的标定精度至关重要。
在测得各关节运动角度后,通过机器人运动学正解公式,得到机器人末端位姿,再使用HDevelop例程handeye_creat_robot_poses.hdev即可写出对应的机器人位姿文件。其具体实现是调用input_pose_type()确定机器人位姿的类型,如图 5所示;调用input_pose()输入末端的位姿,如图 6所示,则创建完成HALCON可直接读取的dat文件。
![]() | 图 5 位姿类型选择对话框 Fig. 5 Selection dialog of pose type |
![]() | 图 6 位姿输入对话框 Fig. 6 Input dialog of pose |
RobotPoses有很多种输入的形式,最常用的是xyz的输入形式,它表示机械手末端坐标系相对于世界坐标系(此即为机器人基准坐标系)的坐标点与三轴旋转角度。同时考虑以下几点:
(1)三轴旋转角度的参考系一直是世界坐标系,不是绕某个轴运动之后的坐标系,且旋转正方向以右手螺旋取得。
(2)相机的xyz轴是被默认规定的,即z轴方向延镜头向外,x轴方向为垂直z方向向图片的正右方,y轴方向以右手螺旋定则确定。
(3)机械手基坐标(即世界坐标系)的选取中x轴方向须与摄像头的x轴方向一致,否则结果会产生一定偏差,同时也不利于标定结果的验证。
然后按照此流程重复多遍,得到多组机器人的位姿文件。在HDevelop中对机器人位姿文件的读取可直接调用read_pose函数来实现。
3 HALCON图像处理程序
该程序是在HALCON软件中编译完成并测试通过后,再将其转化为MFC中的C++程序。这样相当于在HALCON中进行了预编程,不仅能简化C++的编程过程,还能直接对错误的结果进行改正,减轻了很大的工作量。以下是采集到目标工件图像后进行的图像处理过程。 3.1 读取标定数据
首先,标定数据可直接由文件中读取,其中相机的参数可通过read_cam_par函数读取相机参数文件,相机坐标系与机器人坐标系的关系可由read_pose函数来读取。另外,由于齐次矩阵更便于计算,在此还要把姿态转换为齐次矩阵,该变换在HALCON中可直接通过pose_to_hom_mat3d函数实现。读取和变换标定数据的代码如下:
read_cam_par(DataNameStart+'final_campar.dat',CamParam)
read_pose(DataNameStart+'final_pose_cam_base.dat',PoseCamBase)
pose_to_hom_mat3d(PoseCamBase,cam_H_base)。 3.2 确定参考坐标系
由于本实验只使用了单个相机,在未知目标工件三维模型的情况下,无法获取目标物体在相机光轴方向上的深度信息。这就需要在此引入参考坐标系,且让该参考坐标系与目标物体的坐标系是处在同一个平面上。这样就能通过标准的标定板信息引入所需的深度信息。
其实际的操作过程为:在放置目标物体的平面上放置一HALCON标定板,并获取一幅图像,通过调用define_reference_coord_system函数,将该标定板坐标系定义为参考坐标系,代码如下:
CalplateFile:='caltab_200 mm.descr' define_reference_coord_system(ImageNameStart+'2',CamParam,CalplateFile,WindowHandle,PoseRef) pose_to_hom_mat3d(PoseRef,cam_H_ref)。
标定板的中心位置为参考坐标系的原点,由于相机位置在实验过程中始终固定,故参考坐标系在视野中的位置也是固定的。 3.3 提取抓取区域与目标轮廓
对含有目标物体的图像,首先将其进行灰度化处理,然后选取可抓取的区域范围,再进行阈值化处理,最后进行区域填充与形状选择,从而得到目标物体(银白色长方形铁块)。得到目标物体后进行简单的blob分析,其边界就被转化为XLD轮廓,代码如下: rgb1_to_gray(Image,GrayImage);gen_rectangle1(ROI_0,40.5,53.5,408.5,411.5); reduce_domain(GrayImage,ROI_0,ImageReduced);threshold(ImageReduced,Regions,125,255); fill_up(Regions,NutFilled);connection(Regions,BrightRegions); select_shape(BrightRegions,SelectedRegions,'area','and',1527.3,1866.7); gen_contour_region_xld(BrightRegions,NutContours,'border')。
在提取出边界轮廓之后,寻找其中长直的平行边从而就可以得到四个端点,那么,抓取点就在各端点的中央位置。 3.4 抓取姿态的求取
有了抓取点的像素坐标值,并且已知了参考坐标系在图中的位置就可以用image_points_to_world_plane算子提取抓取点在参考坐标系中的三维坐标,代码如下:
image_points_to_world_plane(CamParam,PoseRef,CornersRow,CornersCol,'m',CornersX_ref,CornersY_ref)
CenterPointX_ref:=sum(CornersX_ref)*0.25; CenterPointY_ref:=sum(CornersY_ref)*0.25
由于抓取物体就放置在参考平面上,所以抓取点在参考坐标系中的姿态,就是要考虑物体绕参考坐标系中Z轴的旋转。在抓取时,机器人末端的抓爪收拢的方向应与工件的边缘垂直,那么两个抓取点的连线的倾斜角度就是抓爪应该旋转的角度。
GraspPointsX_ref:=[(CornersX_ref[0]+CornersX_ref[1])*0.5;(CornersX_ref[2]+CornersX_ref[3])*0.5]
GraspPointsY_ref:=[(CornersY_ref[0]+CornersY_ref[1])*0.5;(CornersY_ref[2]+CornersY_ref[3])*0.5]
GraspPhiZ_ref:=atan((GraspPointsY_ref[1]-GraspPointsY_ref[0])/(GraspPointsX_ref[1]-GraspPointsX_ref[0]))
得到了抓取点及抓取所需的旋转角度,那么抓爪的位姿首先在参考坐标系中被确定下来,记为抓取点相对参考坐标系位姿(ref_H_grasp),代码如下:
hom_mat3d_identity(HomMat3DIdentity)
hom_mat3d_rotate(HomMat3DIdentity,GraspPhiZ_ref,'z',0,0,0,HomMat3D_RZ_Phi)
hom_mat3d_translate(HomMat3D_RZ_Phi,CenterPointX_ref,CenterPointY_ref,0,ref_H_grasp)。
3.5 抓取位姿到机器人坐标系的转换
现在已知抓取点相对参考坐标系的位姿,而在确定参考坐标系时也知道了参考坐标系相对于摄像机的位姿,然后只要使用手眼标定的结果,就能转换得到抓取点在机器人坐标系中的抓取位姿,代码如下:
hom_mat3d_compose(cam_H_ref,ref_H_grasp,cam_H_grasp)
hom_mat3d_invert(cam_H_base,base_H_cam)
hom_mat3d_compose(base_H_cam,cam_H_grasp,base_H_grasp)。
此时,得到的抓取位姿为位姿矩阵,数据形式为有12个数据的数组,即运动学正解结果式,且数据顺序为从左往右,并省略位姿矩阵第4行的结果。 3.6 HALCON程序的C++形式导出与嵌入
如上所述,得到HALCON中的图像采集与处理程序之后,就要将HALCON中的程序导出,使其成为C++格式。在主界面中点击文件菜单,再从中选中导出按钮,如图 7所示,将HALCON程序导出为C++程序。
![]() | 图 7 HALCON程序导出对话框 Fig. 7 Export dialog of HALCON procedure |
得到C++形式的图像采集与处理程序之后,将其在VS2010中打开,可以看到整个程序分为三部分:第一部分是函数声明部分,第二部分为函数程序部分,第三部分为整体函数调用部分。从这个结构可以看出,在HALCON内部编程时所用到的算子在导出成为C++程序后都变成了一个个封装好的函数。
为了将此程序嵌入MFC对话框程序中,先将函数声明复制黏贴到对话框的头文件(DMCCPPDG.h)中,然后将第二部分黏贴到对话框程序文件(DMCCPPDG.cpp)中,最后将函数调用部分复制到Auto功能按键中。至此,只要按下Auto按键就能直接调用函数进行图像读取与处理工作了。导入HALCON程序之后再对GALIL卡在同一平台下进行二次开发后,就完成综合控制平台操作,如图 8所示。
![]() | 图 8 综合控制平台 Fig. 8 Integrated control platform |
为了得到更加精确的相机参数,本课题采集了差异度较大的23幅图片,在HALCON软件中得到测量结果如下:
镜头焦距foc:3.52 mm;径向畸变系数kappa:938.631;相机芯片每单元格的宽度Sx:5.490×10-6 m;相机芯片每单元格的高度Sy:5.500×10-6 m;图像中心的x坐标Cx:244.471;图像中心的y坐标Cy:327.320;图像宽度:480 pixel;图像高度:640 pixel。 4.2 系统手眼标定结果
为了得到较为精确的测量结果,本课 题采集了10幅机械手末端图片,并计算了每幅图片对应的机械手末端位姿。最后经过标定在HALCON软件中得出机械手基座标系相对于摄像机坐标系的位姿,标定结果如表 2所示。
|
|
表 2 系统手眼标定结果 Tab. 2 The results of hand-eye calibration |
按实验流程进行实验。首先,根据已获取的该手眼系统的标定信息和在工件平面上定义的参考坐标系,实时地采集图像,并逐步得出工件在参考坐标系中的位置,工件上的抓取点坐标,机器人的抓取位姿。该过程对应的图像处理结果如图 9所示,其中图 9(a)为所定义的参考坐标系,图 9(b)为显示了目标物体和参考坐标系,图 9(c)显示了目标物体上的抓取点,图 9(d)显示机器人抓取时工件所对应的位姿。在完成以上处理之后,就可得出工件目标相对于机器人基准坐标系位姿:
![]() | 图 9 综合平台调试结果 Fig. 9 The test results of integrated control platform |
(0.045 03 m,-0.670 38 m,0.287 66 m,115.377°,21.540°,348.155°)
本文将HALCON图像采集与处理程序、运动学逆解程序以及最后的当量判断与发送程序集成开发,得到了机器人综合控制平台应用软件。该软件在已知机器人目标位姿的情况下,按照运动学逆问题的求解过程依次得到各运动关节所对应的角度、各推杆在目标位姿时对应的杆长,将其与初始杆长之差乘以比例系数,即得出每个电机所需的运动当量。而后将运动当量以运动指令形式经以太网发送至运动控制卡中,则机器人获得运动指令,运动到目标位姿,并进行抓取。
本实验室研制的机器人是根据实时采集的图像信息来对目标工件进行抓取,机器人抓取实物图如图 10所示。
![]() | 图 10 机器人抓取实例 Fig. 10 The crawling experiment |
本实验系统根据采集到的视觉信息,经过图像处理得到机器人的目标位姿,并由此转化为机器人各关节的控制信号,完成机器人驱动,实现对目标工件的抓取。以上的实验流程切实可行,且实验结果达到了预期的要求。由此证明本课题所构建的基于单目视觉的机器人控制系统具有较强的实用价值。
| [1] | 徐 德.机器人视觉测量与控制[M].2版.北京:国防工业出版社,2011. |
| [2] | 闫 霞,牛建强.基于HALCON软件的摄像机标定[J].数字技术与应用.2010(11):112-113. |
| [3] | 蔡自兴.机器人学[M].北京:清华大学出版社,2000. |
| [4] | 李洪海,王敬东.摄像机标定技术研究[J].光学仪器,2007,29(4):7-12. |
| [5] | 刘源泂,孔建益,王兴东,等.双目立体视觉系统的非线性摄像机标定技术[J].计算机应用研究,2011,28(9):3398-3400. |
2014, Vol. 36
Issue (6): 492-498











