基于视觉伺服的工业机器人系统研究

服务机器人 2022-02-25 20:13www.robotxin.com女性服务机器人
portant;">常见的机器人视觉伺服中要实现像素坐标与实际坐标的转换,就要进行标定,对于实现视觉伺服控制,这里的标定不仅包括摄像机标定,也包括机器人系统的手眼标定。以常见的焊接机器人系统为例,有两种构型,如下
portant;">
portant;">即摄像机固定于机器手和摄像机固定于外部场景;
portant;">本文针对前一种构型摄像机固定于机器手。
portant;">1、摄像机标定技术
portant;">(1)理论部分
portant;">以张正友的棋盘标定法为摄像机标定方式,由于摄像机标定结果要用到后面的手眼标定中,所以此处进行不同方位的棋盘图片拍摄时需要遵守标定板固定位置不动,手眼组合体变换姿态拍摄图片。
portant;">摄像机标定的目的得到两组坐标系的两两转化矩阵T1和T2;
portant;">1)得到图片像素坐标系P与摄像机坐标系C之间的转换矩阵T1,准确说应该是摄像机坐标系转化为图片像素坐标系的转换矩阵。可表示为
portant;">P=T1C;
portant;">解释T1在摄像机标定结果中就是内参矩阵3x3;
portant;">2)得到摄像相机坐标系C与棋盘上建立的世界坐标系G之间的转换矩阵T2,准确说应该是坐标系G转化为摄像机坐标系的转换矩阵。可表示为
portant;">C=T2G;
portant;">解释T2在摄像机标定结果中就是外参矩阵4x4,由旋转矩阵r和平移向量t构成[ t r; 0 0 0 1];
portant;">(2)方法
portant;">摄像机标定方法有两种可选openCV或者Matlab标定工具箱;
portant;">建议选择MATLAB应用程序——图像处理与计算机视觉——Camera Calibrator,直接导入拍摄好的图片即可。要注意,使用matlab标定工具箱所得到的内参矩阵、外参旋转矩阵、外参平移向量都要经过转置才是正确的结果。
portant;">如下图,MATLAB标定得到的红框中依次是外参平移向量、内参矩阵、外参旋转矩阵,它们都需要做转置后才能应用于本文的公式计算
portant;">
portant;">2、手眼标定技术
portant;">(1)理论部分
portant;">手眼标定目的得到摄像机坐标系C与机器手(或工具)坐标系H之间的转换矩阵T3,准确说应该是机器手坐标系转化为摄像机坐标系的转化矩阵。可表示为
portant;">C=T3H;
portant;">解释T3需要根据公式CX=XD得到;实际中,分别知道C、D求出来的X有无穷多个解。所以为了实现唯一解,我们至少需要两组C和D,即至少需要3个位置的摄像机标定结果。
portant;">其中C的求法如下
portant;">C是两个摄像机坐标系之间的变换矩阵。可以根据上述任一两张标定图片所得的两个摄像机标定外参A、B按公式C=Ainv(B)计算得到的。假设上述摄像机标定中有3张标定图片的外参标定结果分别是T21、T22、T23,那么可以得到两个C矩阵
portant;">C1=T21inv(T22);
portant;">C2=T22inv(T23);
portant;">D的求法如下
portant;">D是两个机器手坐标系之间的变换矩阵。假设上述摄像机标定中的3张标定图片所一一对应的机器手坐标系在基坐标系(也可以是工件坐标系或者其他固定的参考坐标系)中的描述矩阵结果分别是H1、H2、H3(H需要从机器人控制器或示教器中读取),那么可以得到两个D矩阵
portant;">D1=inv(H1)H2;
portant;">D2=inv(H2)H3;
portant;">由以上两组C和D,代入CX=XD就可以得到唯一解X,从而T3=X;
portant;">注上述H1、H2、H3是每张标定图片对应的机器手坐标系描述矩阵,正好说明了摄像机标定中所谓的“标定板固定,手眼运动”的正确性。如果手眼不动,改变标定板姿态进行拍摄,那么H的值都是一样的。
portant;">(2)方法
portant;">1)根据摄像机标定已知摄像机外参矩阵T21、T22、T23,还要从机器人控制器中读取T21、T22、T23分别对应的机器手(或工具)坐标系H1、H2、H3。控制器中的坐标系描述矩阵不是直接读取的,它是以平移向量和欧拉角(或四元数)模式存在的,如下
portant;">平移向量+欧拉角模式
portant;">
portant;">平移向量+四元数模式
portant;">
portant;">选取其中任一模式即可,然后将其转化为描述矩阵。
portant;">上述工作完成后,就已经获取了3个外参矩阵(提醒,摄像机标定使用MATLAB标定工具箱的话,所得到的外参旋转矩阵和平移向量先要转置,即R=r',T=t',然后外参矩阵EX=[R T;0 0 0 1])和 3个机械手坐标系矩阵,可以分别将3个二维矩阵合为一个三维矩阵,matlab命令如下
portant;">C_ext=cat(3, C_ext1, C_ext2, C_ext3);
portant;">H=cat(3, H1, H2 ,H3)
portant;">将C_ext和H作为参数代入到如下MATLAB函数中
function Tch = GetCamera2HandMatrix(C_ext,H)%   以下变量%   C_ext是3个位置的摄像机外参矩阵3x4x4%   H1、H2、H3分别是3个位置的机械手坐标系的姿态矩阵3x4x4%   Tcg--机器手坐标系(或工具坐标系)在摄像机坐标系中的姿态和位置变换矩阵%   C1、D1、C2、D2、R、、q、kc1、kc2、kc3、kd1、kd2、kd3、a、b、c、d、h、y均为临时变量    C1=C_ext(:,:,1)inv(C_ext(:,:,2))    C2=C_ext(:,:,2)inv(C_ext(:,:,3))    D1=inv(H(:,:,1))H(:,:,2)    D2=inv(H(:,:,2))H(:,:,3)        R=C1(1:3,1:3);    q=acos((trace(R)-1)/2);    (1,1)=q/(2sin(q))(R(3,2)-R(2,3));    (2,1)=q/(2sin(q))(R(1,3)-R(3,1));    (3,1)=q/(2sin(q))(R(2,1)-R(1,2));    kc1=;        R=C2(1:3,1:3);    q=acos((trace(R)-1)/2);    (1,1)=q/(2sin(q))(R(3,2)-R(2,3));    (2,1)=q/(2sin(q))(R(1,3)-R(3,1));    (3,1)=q/(2sin(q))(R(2,1)-R(1,2));    kc2=;        R=D1(1:3,1:3);    q=acos((trace(R)-1)/2);    (1,1)=q/(2sin(q))(R(3,2)-R(2,3));    (2,1)=q/(2sin(q))(R(1,3)-R(3,1));    (3,1)=q/(2sin(q))(R(2,1)-R(1,2));    kd1=;        R=D2(1:3,1:3);    q=acos((trace(R)-1)/2);    (1,1)=q/(2sin(q))(R(3,2)-R(2,3));    (2,1)=q/(2sin(q))(R(1,3)-R(3,1));    (3,1)=q/(2sin(q))(R(2,1)-R(1,2));    kd2=;        kc3=cross(kc1,kc2);    kd3=cross(kd1,kd2);    a=[kc1 kc2 kc3];    b=[kd1 kd2 kd3];    R=ainv(b);  %得到旋转关系矩阵        tc1=C1(1:3,4);    tc2=C2(1:3,4);    td1=D1(1:3,4);    td2=D2(1:3,4);    c=Rtd1-tc1;    d=Rtd2-tc2;    a=C1(1:3,1:3)-[1 0 0;0 1 0;0 0 1];    b=C2(1:3,1:3)-[1 0 0;0 1 0;0 0 1];    h=[a;b];    y=[c;d];    t=inv(h'h)h'y;   %得到平移关系矩阵        Tch=[R t;0 0 0 1];   %得到最终结果end
 

Copyright © 2016-2025 www.robotxin.com 人工智能机器人网 版权所有 Power by