上海网站推,建网站 域名,电脑软件开发工具,wordpress浏览器跳转击上方“新机器视觉”#xff0c;选择加星标或“置顶”重磅干货#xff0c;第一时间送达标定技术常见的机器人视觉伺服中要实现像素坐标与实际坐标的转换#xff0c;首先就要进行标定#xff0c;对于实现视觉伺服控制#xff0c;这里的标定不仅包括摄像机标定… 击上方“新机器视觉”选择加星标或“置顶”重磅干货第一时间送达标定技术常见的机器人视觉伺服中要实现像素坐标与实际坐标的转换首先就要进行标定对于实现视觉伺服控制这里的标定不仅包括摄像机标定也包括机器人系统的手眼标定。以常见的焊接机器人系统为例有两种构型如下即摄像机固定于机器手和摄像机固定于外部场景本文针对前一种构型摄像机固定于机器手。1、摄像机标定技术(1)理论部分以张正友的棋盘标定法为摄像机标定方式由于摄像机标定结果要用到后面的手眼标定中所以此处进行不同方位的棋盘图片拍摄时需要遵守标定板固定位置不动手眼组合体变换姿态拍摄图片。摄像机标定的目的得到两组坐标系的两两转化矩阵T1和T21)得到图片像素坐标系P与摄像机坐标系C之间的转换矩阵T1准确说应该是摄像机坐标系转化为图片像素坐标系的转换矩阵。可表示为PT1*C;解释T1在摄像机标定结果中就是内参矩阵3x32)得到摄像相机坐标系C与棋盘上建立的世界坐标系G之间的转换矩阵T2准确说应该是坐标系G转化为摄像机坐标系的转换矩阵。可表示为CT2*G;解释T2在摄像机标定结果中就是外参矩阵4x4由旋转矩阵r和平移向量t构成[ t r; 0 0 0 1](2)方法摄像机标定方法有两种可选openCV或者Matlab标定工具箱建议选择MATLAB应用程序——图像处理与计算机视觉——Camera Calibrator直接导入拍摄好的图片即可。但是要注意使用matlab标定工具箱所得到的内参矩阵、外参旋转矩阵、外参平移向量都要经过转置才是正确的结果。如下图MATLAB标定得到的红框中依次是外参平移向量、内参矩阵、外参旋转矩阵它们都需要做转置后才能应用于本文的公式计算2、手眼标定技术(1)理论部分手眼标定目的得到摄像机坐标系C与机器手(或工具)坐标系H之间的转换矩阵T3准确说应该是机器手坐标系转化为摄像机坐标系的转化矩阵。可表示为CT3*H;解释T3需要根据公式CXXD得到实际中分别知道C、D求出来的X有无穷多个解。所以为了实现唯一解我们至少需要两组C和D即至少需要3个位置的摄像机标定结果。其中C的求法如下C是两个摄像机坐标系之间的变换矩阵。可以根据上述任一两张标定图片所得的两个摄像机标定外参A、B按公式CA*inv(B)计算得到的。假设上述摄像机标定中有3张标定图片的外参标定结果分别是T21、T22、T23那么可以得到两个C矩阵C1T21*inv(T22);C2T22*inv(T23);D的求法如下D是两个机器手坐标系之间的变换矩阵。假设上述摄像机标定中的3张标定图片所一一对应的机器手坐标系在基坐标系(也可以是工件坐标系或者其他固定的参考坐标系)中的描述矩阵结果分别是H1、H2、H3(H需要从机器人控制器或示教器中读取)那么可以得到两个D矩阵D1inv(H1)*H2;D2inv(H2)*H3;由以上两组C和D代入CXXD就可以得到唯一解X从而T3X注上述H1、H2、H3是每张标定图片对应的机器手坐标系描述矩阵正好说明了摄像机标定中所谓的“标定板固定手眼运动”的正确性。如果手眼不动改变标定板姿态进行拍摄那么H的值都是一样的。(2)方法1)根据摄像机标定已知摄像机外参矩阵T21、T22、T23还要从机器人控制器中读取T21、T22、T23分别对应的机器手(或工具)坐标系H1、H2、H3。控制器中的坐标系描述矩阵不是直接读取的它是以平移向量和欧拉角(或四元数)模式存在的如下平移向量欧拉角模式平移向量四元数模式选取其中任一模式即可然后将其转化为描述矩阵。上述工作完成后就已经获取了3个外参矩阵(再次提醒摄像机标定使用MATLAB标定工具箱的话所得到的外参旋转矩阵和平移向量先要转置即RrTt然后外参矩阵EX[R T0 0 0 1])和 3个机械手坐标系矩阵因此可以分别将3个二维矩阵合为一个三维矩阵matlab命令如下C_extcat(3, C_ext1, C_ext2, C_ext3);Hcat(3, H1, H2 ,H3)最后将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、w、q、kc1、kc2、kc3、kd1、kd2、kd3、a、b、c、d、h、y均为临时变量C1C_ext(:,:,1)*inv(C_ext(:,:,2))C2C_ext(:,:,2)*inv(C_ext(:,:,3))D1inv(H(:,:,1))*H(:,:,2)D2inv(H(:,:,2))*H(:,:,3)RC1(1:3,1:3);qacos((trace(R)-1)/2);w(1,1)q/(2*sin(q))*(R(3,2)-R(2,3));w(2,1)q/(2*sin(q))*(R(1,3)-R(3,1));w(3,1)q/(2*sin(q))*(R(2,1)-R(1,2));kc1w;RC2(1:3,1:3);qacos((trace(R)-1)/2);w(1,1)q/(2*sin(q))*(R(3,2)-R(2,3));w(2,1)q/(2*sin(q))*(R(1,3)-R(3,1));w(3,1)q/(2*sin(q))*(R(2,1)-R(1,2));kc2w;RD1(1:3,1:3);qacos((trace(R)-1)/2);w(1,1)q/(2*sin(q))*(R(3,2)-R(2,3));w(2,1)q/(2*sin(q))*(R(1,3)-R(3,1));w(3,1)q/(2*sin(q))*(R(2,1)-R(1,2));kd1w;RD2(1:3,1:3);qacos((trace(R)-1)/2);w(1,1)q/(2*sin(q))*(R(3,2)-R(2,3));w(2,1)q/(2*sin(q))*(R(1,3)-R(3,1));w(3,1)q/(2*sin(q))*(R(2,1)-R(1,2));kd2w;kc3cross(kc1,kc2);kd3cross(kd1,kd2);a[kc1 kc2 kc3];b[kd1 kd2 kd3];Ra*inv(b); %得到旋转关系矩阵tc1C1(1:3,4);tc2C2(1:3,4);td1D1(1:3,4);td2D2(1:3,4);cR*td1-tc1;dR*td2-tc2;aC1(1:3,1:3)-[1 0 0;0 1 0;0 0 1];bC2(1:3,1:3)-[1 0 0;0 1 0;0 0 1];h[a;b];y[c;d];tinv(h*h)*h*y; %得到平移关系矩阵Tch[R t;0 0 0 1]; %得到最终结果end3、根据标定结果对固定高度目标实现单目定位(1)理论部分由上述1、2两个标定已经得到摄像机坐标系C-像素坐标系P的转换矩阵Tpc(即内参矩阵MATLAB标定得到的要转置)机械手(或工具)坐标系H-摄像机坐标系C的转化矩阵Tch从控制器读取的机械手(或工具)坐标系H-基坐标系B(这个根据情况自己在控制器设定是基坐标还是工件坐标系本文用基坐标系)的转化矩阵Tbh已知目标高度固定为z那么基坐标系转化为像素坐标系的变换矩阵就是GpbTpc*Tch*inv(Tbh);根据Gpb和z可以得到如下图所示的变换过程分解后可根据像素坐标(u,v)求得实际坐标(x,y,z)其中Tpc需要注意应在内参矩阵最后添加一个全零列变为3x4矩阵如下(2)代码实现function P GetObjectLocation( u,v,Gtb)% 参数(u,v)为目标在图片中的像素坐标% 参数Gtb是工具在机器人基坐标中的描述矩阵(也就是工具坐标系-基坐标系的变换矩阵)%内参矩阵Kl[ 1851 9.7 550.5 0;0 1844.4 299.7 0;0 0 1.0 0];%摄像机与工具关系矩阵Gctl [-0.9620 -0.2974 0.0156 -2.6405;0.3266 -0.9552 0.0056 59.7141;0.0130 0.0003 1.0161 145.3381;0 0 0 1.0000];Ginv(Gtb);z10; %指定物体的高度MKl*Gctl*G;Ml[u*M(3,1)-M(1,1) u*M(3,2)-M(1,2) ; v*M(3,1)-M(2,1) v*M(3,2)-M(2,2)];Mr[M(1,4)-u*M(3,4)-(u*M(3,3)-M(1,3))*z; M(2,4)-v*M(3,4)-(v*M(3,3)-M(2,3))*z];Pinv(Ml)*Mr; %得到物体的位置end转自https://blog.csdn.net/Xiongchao99/article/details/52850990 End 声明部分内容来源于网络仅供读者学习、交流之目的。文章版权归原作者所有。如有不妥请联系删除。