标定技术
常见的机器人视觉伺服中要实现像素坐标与实际坐标的转换,首先就要进行标定,对于实现视觉伺服控制,这里的标定不仅包括摄像机标定,也包括机器人系统的手眼标定。以常见的焊接机器人系统为例,有两种构型,如下:
即:摄像机固定于机器手和摄像机固定于外部场景;
本文针对前一种构型:摄像机固定于机器手。
1、摄像机标定技术
(1)理论部分:
以张正友的棋盘标定法为摄像机标定方式,由于摄像机标定结果要用到后面的手眼标定中,所以此处进行不同方位的棋盘图片拍摄时需要遵守:标定板固定位置不动,手眼组合体变换姿态拍摄图片。
摄像机标定的目的:得到两组坐标系的两两转化矩阵:t1和t2;
1)得到图片像素坐标系p与摄像机坐标系c之间的转换矩阵t1,准确说应该是摄像机坐标系转化为图片像素坐标系的转换矩阵。可表示为:
p=t1*c;
解释:t1在摄像机标定结果中就是内参矩阵3x3;
2)得到摄像相机坐标系c与棋盘上建立的世界坐标系g之间的转换矩阵t2,准确说应该是坐标系g转化为摄像机坐标系的转换矩阵。可表示为:
c=t2*g;
解释:t2在摄像机标定结果中就是外参矩阵4x4,由旋转矩阵r和平移向量t构成[ t r; 0 0 0 1];
(2)方法:
摄像机标定方法有两种可选:opencv或者matlab标定工具箱;
建议选择matlab应用程序——图像处理与计算机视觉——camera calibrator,直接导入拍摄好的图片即可。但是要注意,使用matlab标定工具箱所得到的内参矩阵、外参旋转矩阵、外参平移向量都要经过转置才是正确的结果。
如下图,matlab标定得到的红框中依次是外参平移向量、内参矩阵、外参旋转矩阵,它们都需要做转置后才能应用于本文的公式计算:
2、手眼标定技术
(1)理论部分:
手眼标定目的:得到摄像机坐标系c与机器手(或工具)坐标系h之间的转换矩阵t3,准确说应该是机器手坐标系转化为摄像机坐标系的转化矩阵。可表示为:
c=t3*h;
解释:t3需要根据公式cx=xd得到;实际中,分别知道c、d求出来的x有无穷多个解。所以为了实现唯一解,我们至少需要两组c和d,即至少需要3个位置的摄像机标定结果。
其中c的求法如下:
c是两个摄像机坐标系之间的变换矩阵。可以根据上述任一两张标定图片所得的两个摄像机标定外参a、b按公式c=a*inv(b)计算得到的。假设上述摄像机标定中有3张标定图片的外参标定结果分别是t21、t22、t23,那么可以得到两个c矩阵:
c1=t21*inv(t22);
c2=t22*inv(t23);
d的求法如下:
d是两个机器手坐标系之间的变换矩阵。假设上述摄像机标定中的3张标定图片所一一对应的机器手坐标系在基坐标系(也可以是工件坐标系或者其他固定的参考坐标系)中的描述矩阵结果分别是h1、h2、h3(h需要从机器人控制器或示教器中读取),那么可以得到两个d矩阵:
d1=inv(h1)*h2;
d2=inv(h2)*h3;
由以上两组c和d,代入cx=xd就可以得到唯一解x,从而t3=x;
注:上述h1、h2、h3是每张标定图片对应的机器手坐标系描述矩阵,正好说明了摄像机标定中所谓的“标定板固定,手眼运动”的正确性。如果手眼不动,改变标定板姿态进行拍摄,那么h的值都是一样的。
(2)方法:
1)根据摄像机标定已知摄像机外参矩阵t21、t22、t23,还要从机器人控制器中读取t21、t22、t23分别对应的机器手(或工具)坐标系h1、h2、h3。控制器中的坐标系描述矩阵不是直接读取的,它是以平移向量和欧拉角(或四元数)模式存在的,如下:
平移向量+欧拉角模式:
平移向量+四元数模式:
选取其中任一模式即可,然后将其转化为描述矩阵。
上述工作完成后,就已经获取了3个外参矩阵(再次提醒,摄像机标定使用matlab标定工具箱的话,所得到的外参旋转矩阵和平移向量先要转置,即r=r',t=t',然后外参矩阵ex=[r t;0 0 0 1])和 3个机械手坐标系矩阵,因此可以分别将3个二维矩阵合为一个三维矩阵,matlab命令如下:
c_ext=cat(3, c_ext1, c_ext2, c_ext3);
h=cat(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均为临时变量 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); 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)); kc1=w; r=c2(1:3,1:3); q=acos((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)); kc2=w; r=d1(1:3,1:3); q=acos((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)); kd1=w; r=d2(1:3,1:3); q=acos((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)); kd2=w; kc3=cross(kc1,kc2); kd3=cross(kd1,kd2); a=[kc1 kc2 kc3]; b=[kd1 kd2 kd3]; r=a*inv(b); %得到旋转关系矩阵 tc1=c1(1:3,4); tc2=c2(1:3,4); td1=d1(1:3,4); td2=d2(1:3,4); c=r*td1-tc1; d=r*td2-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 3、根据标定结果对固定高度目标实现单目定位
(1)理论部分:
由上述1、2两个标定已经得到:
摄像机坐标系c->像素坐标系p的转换矩阵tpc(即内参矩阵,matlab标定得到的要转置);
机械手(或工具)坐标系h->摄像机坐标系c的转化矩阵tch;
从控制器读取的机械手(或工具)坐标系h->基坐标系b(这个根据情况自己在控制器设定是基坐标还是工件坐标系,本文用基坐标系)的转化矩阵tbh;
已知目标高度固定,为z;
那么基坐标系转化为像素坐标系的变换矩阵就是:gpb=tpc*tch*inv(tbh);
根据gpb和z可以得到如下图所示的变换过程,分解后可根据像素坐标(u,v)求得实际坐标(x,y,z):
其中,tpc需要注意,应在内参矩阵最后添加一个全零列,变为3x4矩阵,如下:
(2)代码实现:
什么是上网本? 什么是3G上网本?
电源管理在LED领域遇挑战
比特大陆在该领域已经一骑绝尘
Intel最新爆料 Haswell全方位揭秘
注射针自毁推力测试仪
常见的机器人视觉伺服中的标定技术有哪些
晶振的常用封装
工控机能当一般电脑使用么
芯易荟发布首款领域专用处理器生成工具FARMStudio
简单分析:为什么商用洗碗机电机需求增大
数字IC验证之基本的TLM通信
光纤温度传感器分类_光纤温度传感器发展前景
9个优秀的开源工单系统,你知道几个
ADI宣布推出LT8491降压-升压电池充电控制器
无人机拍照的7个技巧
硅片引起了灵活交流输电技术的迅速发展
VOC在线监测系统在包装印刷业中的应用
SPI-MRAM如何替换SPI-FRAM
注射器密合性正压测试仪
影响无线网络稳定性原因分析