发明内容
本发明针对现有技术存在的问题提出一种用于标定机器手坐标系的标定装置及标定方法,目的在于提高标定坐标系的方便性和精确度。
本发明是这样实现的:
一种用于标定机器手坐标系的标定装置,包括机器手,设置在所述机器手上用于捕捉和处理图像的视觉***,设置在机器手上用于控制机器手运动和视觉***工作的控制器,和所述视觉***相连用于显示图像的显示器,位于视觉***下方的平台,放置在所述平台上并具有均匀网格用于标定所述机器手位置的标定板。
上述的一种用于标定机器手坐标系的标定装置,其中,所述机器手包括基座、一端和所述基座相连接的短臂以及和所述短臂的另一端相连接的长臂,所述视觉***设置在所述长臂上。
上述的一种用于标定机器手坐标系的标定装置,其中,所述视觉***包括调整图像清晰度的光学镜头、捕捉图像并能够将光学图像转换为数字图像信号的摄像机和为图像的捕捉提供照明的光源。
上述的一种用于标定机器手坐标系的标定装置,其中,所述标定板为菲林胶板,标定板的规格为300*300mm,所述标定板上的网格规格为10*10mm。
一种用于标定机器手坐标系的标定方法,包括如下步骤:
A、将标定板放置在平台上;
B、通过控制器控制视觉***捕捉和处理标定板图像并将图像显示在显示器上;
C、根据标定板图像标定视觉***坐标系;
D、捕捉视觉***坐标系的标定点;
E、根据视觉***坐标系的标定点计算得出机器手视觉***坐标系与执行***坐标系之间转换关系的参数值。
上述的一种用于标定机器手坐标系的标定方法,其中,所述步骤B还包括:调整视觉***中光学镜头使标定板在显示器上有一个清晰的图像。
上述的一种用于标定机器手坐标系的标定方法,其中,所述视觉***通过摄像头捕捉标定板的图像,在捕捉过程中通过视觉***中的光源对标定板提供照明。
上述的一种用于标定机器手坐标系的标定方法,其中,所述步骤C具体包括:控制机器手运动,使标定板在显示器上有一个正像,通过观察或测量得到标定板图像的像素单元和标定板的长度单位的转换关系。
上述的一种用于标定机器手坐标系的标定方法,其中,所述步骤D具体包括:
D1、使标定板图像的某一网格点显示在显示器的中心处,记录该网格点的行列号作为第一标定点;
D2、使标定板图像的另一网格点显示在显示器的中心处,记录该网格点的行列号作为第二标定点。
上述的一种用于标定机器手坐标系的标定方法,其中,所述步骤D还包括:根据第一标定点、第二标定点和常数量计算得出机器手视觉***坐标系与执行***坐标系之间转换关系的参数值,所述常数量包括短臂的长度、长臂的长度、标定板图像的像素单元和标定板的长度单位的转换关系、摄像机像素宽度值、摄像机像素高度值和机器手的状态值。
本发明所提供的一种用于标定机器手坐标系的标定装置及标定方法,由于采用标定板来获取视觉***的标定点,并用该标定点来获取机器手视觉***坐标系与执行***坐标系之间转换关系的参数值,操作方便,精度高。
具体实施方式
以下便结合实施例附图,对本发明的具体实施方式作进一步的详述,以使本发明技术方案更易于理解、掌握。应当理解,此处所描述的具体实施例仅用以解释本发明,并不用于限定本发明。
本发明提供了一种用于标定机器手100坐标系的标定装置,参阅图1和图2,包括机器手100、视觉***200、控制器、显示器、平台和标定板300。其中控制器、显示器和平台图中未示出。
所述机器手100包括基座110、一端和所述基座110相连接的短臂120以及和所述短臂120的另一端相连接的长臂130,所述视觉***200设置在所述长臂130上,所述视觉***200优选设置在距离长臂130和短臂120相连接的一端3/4长臂130的长度处。
所述视觉***200主要用于捕捉和处理图像,其包括调整图像清晰度的光学镜头、捕捉图像并能够将光学图像转换为数字图像信号的摄像机和为图像的捕捉提供照明的光源。所述显示器和所述视觉***200相连并显示视觉***200捕捉的图像。
所述标定板300为菲林胶板,标定板300的规格为300*300mm,标定板300上均匀打印有阵列的网格,所述标定板300上的网格规格为10*10mm。所述平台设置在所述视觉***200的下方,所述标定板300水平放置并固定在所述平台上,其位置在机器手100的移动范围内。所述机器手100所在的空间有一个执行***坐标系,构成所述网格的线条分别和所述执行***坐标系中的X轴和Y轴平行。
所述控制器设置在所述机器手100上,用于控制机器手100运动和视觉***200相应的工作。
如图3所示,基于所述标定装置的具体标定方法包括如下步骤:
S001、将标定板300放置在平台上。
放置标定板300时需要保证标定板300处于水平状态,且标定板300上构成网格的线条要与执行***坐标系的X轴和Y轴平行。
S002、通过控制器控制视觉***200捕捉和处理标定板图像并将图像显示在显示器上,调整视觉***200中光学镜头使标定板300在显示器上有一个清晰的图像。该步骤还可以通过控制机器手100移动,以调整视觉***200的高度来使标定板300在显示器上有一个清晰的图像。
所述视觉***200通过摄像头捕捉标定板300的图像,在捕捉过程中通过视觉***200中的光源对标定板300提供照明。该照明可以避免使用其他光源,避免其他光源对图像的影响。
S003、根据标定板图像标定视觉***坐标系。
具体来说,控制机器手100运动,使标定板300在显示器上有一个正像,所谓正像就是标定板300的上表面在显示器上显示时是和显示屏的屏幕平行的,也就说当标定板300上的网格为正方形时,那么显示在显示屏上的标定板图像的网格也是正方形的。通过观察或测量得到标定板图像的像素坐标和标定板300的直角坐标的转换关系。视觉***坐标系中的坐标为像素坐标,将像素坐标用直角坐标表达,标定板图像为bmp格式图像,其中像素坐标的原点为标定板图像的左上角点,通过标定板300中的网格的规格(单位为毫米mm)计算标定板图像中网格的规格(单位为像素pixel),例如,1pixel=0.01mm。
S004、捕捉视觉***坐标系的标定点。
其具体包括一下两个步骤:
S041、使标定板图像的某一网格点显示在显示器的中心处,记录该网格点的行列号作为第一标定点;
S042、使标定板图像的另一网格点显示在显示器的中心处,记录该网格点的行列号作为第二标定点。
S005、根据视觉***坐标系的标定点计算得出机器手100视觉***坐标系与执行***坐标系之间转换关系的参数值。
参数值的计算方法具体如下:
需计算两个坐标系(视觉***坐标系与执行***坐标系)的转换关系的参数值:DX, DY。
第一步:设置、输入计算所需的常数量。
常数量:
ARM1:短臂120的长度。
ARM2:长臂130的长度。
KX:标定视觉***200坐标X方向K值。
KY:标定视觉***200坐标Y方向K值。(1pixel=Kmm)。
dWidth:摄像机像素宽度值。
dHeight:摄像机像素高度值。
BFastenLeft:机器臂状态值(1代表左臂状态值,0代表右臂状态值)。(所谓左臂状态值表示机器手100相对于原始位置处于左侧状态,所谓右臂状态值表示机器手100相对于原始位置处于右侧状态。)
第二步:在标定板图像上捕捉标定点。
捕捉标定点前需用到以下计算公式:
计算机器手100当前姿态角函数:
bool GetAnixAngle(int nAnix,double CurretX,double CurretY,bool bleft,double& angle)
{
if (ARM1<=0||ARM2<=0)
{
return FALSE;
}
double angl1,angl2,angl3;
double ang4;//
double dfL = sqrt(CurretX *CurretX + CurretY * CurretY);
double k=fabs(CurretY/CurretX);
ang4=atan(k);
ang4=ang4*180/PI;
double ang1,ang2,ang3,value1,value2,value3;
value1= (dfL * dfL + ARM1 * ARM1 - ARM2 * ARM2)/(2 * dfL * ARM1);
ang1 = acos(value1);
ang1=ang1*180/PI;
value2 = (dfL * dfL + ARM2 * ARM2 - ARM1 * ARM1)/(2 * dfL * ARM2);
ang2 = acos(value2);
ang2=ang2*180/PI;
value3 = ( ARM2 * ARM2 + ARM1 * ARM1-dfL * dfL)/(2 * ARM1 * ARM2);
ang3 = acos(value3);
ang3=ang3*180/PI;
if (nAnix==1)
{
if (bleft)
{
if (CurretX<0)
{
angle=180-ang4+ang1;
}
else
{
angle=ang4+ang1;
}
}
else
{
if (CurretX<0)
{
angle=180-ang4-ang1;
}
else
{
angle=ang4-ang1;
}
}
}
if (nAnix==2)
{
if (bleft)
{
angle=ang3-180;
}
else
{
angle=180-ang3;
}
}
return true;
}
获取两个坐标系的转换关系的参数值函数:
short GetCamDxDy(int nPoint,bool bLeftArm,double CurretX,double CurretY,double width,double height,double &DX,double&DY)
{
double Ang1=0.0,Ang2=0.0,Ang3=0.0;
if(!GetAnixAngle(1,CurretX,CurretY,bLeftArm,Ang1))
{
return FALSE;
}
if(!GetAnixAngle(2,CurretX,CurretY,bLeftArm,Ang2))
{
return FALSE;
}
if (nPoint==1)
{
Kx1=ARM1*cos(Ang1*PI/180);
Ky1=ARM1*sin(Ang1*PI/180);
n1=(Ang1+Ang2)*PI/180;
}
else
{
Kx2=ARM1*cos(Ang1*PI/180);
Ky2=ARM1*sin(Ang1*PI/180);
n2=(Ang1+Ang2)*PI/180;
}
if (nPoint==2)
{
KALL=(width-Kx2+Kx1)/(height-Ky2+Ky1);
double RS;
RS=(KALL*sin(n2)-KALL*sin(n1)-cos(n2)+cos(n1))/(sin(n2)-sin(n1)+KALL*cos(n2)-KALL*cos(n1));
angle=atan(RS);
dL=(width-Kx2+Kx1)/(cos(n2-angle)-cos(n1-angle));
DX=dL*sin(angle);
DY=dL*cos(angle);
}
return TRUE;
}
第三步:
控制机器手100运动,通过机器手100上视觉***200成像显示,让标定板图像中心在标定板300第一标定点上,从机器手100控制器捕捉该点机器手100坐标CurretX1,CurretY1,并将CurretX1,CurretY1代入获取两个坐标系的转换关系的参数值函数进行第一标定点计算:GetCamDxDy(1,true, CurretX1, CurretY1,1,1, DX, DY)。
控制机器手100运动,通过机器手100上视觉***200成像显示,让标定板图像中心在标定板300第二标定点上,从机器手100控制器捕捉该点机器手100坐标CurretX2,CurretY2,并将CurretX2,CurretY2代入获取两个坐标系的转换关系的参数值函数进行第一标定点计算:GetCamDxDy(2,true, CurretX2, CurretY2,1,1, DX, DY)。最终得到结果DX, DY。
两个坐标系的转换关系的参数值的在使用时,机器手100上摄像机视野内发现一个工作点,该工作点在视觉***坐标系中显示,通过参数值,计算出执行***坐标系的坐标,并命令机器手100跑至执行***坐标系的该坐标位置,执行相应操作。
应当理解的是,以上所述仅为本发明的较佳实施例而已,并不足以限制本发明的技术方案,对本领域普通技术人员来说,在本发明的精神和原则之内,可以根据上述说明加以增减、替换、变换或改进,而所有这些增减、替换、变换或改进后的技术方案,都应属于本发明所附权利要求的保护范围。