赞
踩
要让机器人的手抓住杯子,就必须知道杯子跟手的相对位置关系,而杯子的位置则是通过机器人的眼睛看见的,所以,我们只需要知道机器人的手和眼睛的转换关系,就可以随时抓取机器人眼睛所看到的物体了。
手眼标定的目的是确定两个未知量:
标定板相对于机器人基座的位姿(CalObjInBasePose)
机械手末端相对于相机的位姿(ToolInCamPose)
手眼标定的目的是确定两个未知量:
机器人基座相对于相机的位姿(BaseInSensorPose)
标定板相对于机械手末端的位姿(CalObjInToolPose)
对原理有兴趣的小伙伴请参看:手眼标定公式推导
主要是参考 hand_eye_movingcam_calibration.hdev
这一部分的工作中,需要完成对显示参数的初始化(主要包括2D图像的显示以及3D模型的显示),以及用于标定的模型的初始化(利用已获得的相机内参与标定板参数,同时还可以指定进行标定的方法)
一个是以机械手夹具中心点为原点的三维坐标系,另一个是机器人基座的三维坐标系。
初始化一个用于标定的模型 CalibDataID
。需要通过标定文件,相机初始内参以及用于进行标定的方法进行初始化。
这里的标定方法是用的非线性优化。
根据之前创建的标定模型CalibDataID
在图像中寻找相应的标定板图像,获取标定板的轮廓与其中的角点,并在其中心根据相机内参以及标定板位姿初始化一个标定板坐标系。
根据保存的机器人工具坐标系到机器人基座坐标系下的转换矩阵,将原有的机器人夹具坐标系转换至基座坐标系下,显示这两个坐标系并将转换关系保存在CalibDataID
所指向的模型对象中。
CalibDataID
中CalibDataID
中的数据坐标3D姿态中的7个参数代表的意义:[0,0,0,0,0,0,0]前六个代表平移和旋转量,最后一个代表OrderOfTransform, OrderOfRotform, ViewOfTransform的
组合类型。
窗口–打开算子窗口–gen_caltab
设置XNum,YNum—圆点个数,X和Y方向圆点个数
设置圆点直径,MarkDist × DiameterRatio
设置间距MarkDist(单位为米)
caltab.descry
是标定板描述文件,caltab.ps
为标定板生成文件,没有ps
用Adobe PDF
打开就能看到如下图1-2所示的标定板,可以直接打印。
助手–打开新的 Calibration
在描述文件地方插入刚刚生成的caltab.descry
点击标定
结果中摄像机参数需要记录下来,之后会用到,摄像机位姿需要点击“保存”保存成 .dat 格式的文件
标定板不动,移动机械臂,拍摄15+张图片,覆盖多个位姿,并记录每张图片拍摄时机械臂的位姿(包括 X , Y , Z , R X , R Y , R Z X,Y,Z,R_X,R_Y,R_Z X,Y,Z,RX,RY,RZ 六个)
初始化相应的参数:二维图像输出窗口,三维坐标系的坐标轴与窗口,用于进行手眼标定的对象CalibDataID
;
根据手眼标定的对象,在输入的图像中寻找相应的标定板,并建立坐标系;
创建base与tool的三维坐标系,并根据输入的转换关系信息进行显示;
进行手眼标定,输出并保存相关参数;
根据标定后的转换关系,创建base、tool、cam与obj的三维坐标系,并进行显示;
输出相应的转换关系
机械臂末端在机器人基座坐标系下的位姿,其实就是机器人学里面最基础的运动学正解。
用 DH 矩阵等方法来计算机器人运动学正解:只要知道机器人在当前状态下每个关节的角度,就可以得到tool—base之间的变换。
相机在标定板坐标系下的位姿,即相机的外参。
根据相机模型,先确定内参矩阵,然后根据不同时刻拍摄的标定板图片来求取外参矩阵:也即相机在世界坐标系下的变换关系。
文献3采用的是李群的理论,将AX=XB转化成最小二乘问题;
文献4采用的是对偶四元数的知识,用对偶四元数表达旋转和平移,从而进行统一计算;
四种方法精度接近,最后一种 Dual Quaternions 的方法会稍微比其他算法好一点。
机器人领域基本上所有用到的模型都只是「近似模型」。也就是说,上面说的每一步,都有改进空间。
1、直接使用的机器人运动学模型是认为机器人加工、装配、控制无误差的情况。
实际上这种假设是不成立的。也就是说,我们只拿到每个关节角度,计算的末端位姿是存在误差的。可以从机器人运动学参数辨识等方面入手提高最后的标定精度;
2、相机模型其实也不是标准的小孔模型,像素坐标与空间坐标之间其实是非线性的对应关系。
…
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。