转载请注明出处 https://blog.csdn.net/wanggao_1990/article/details/81435660
机器人视觉系统中要实现像素坐标与实际坐标的转换,首先要进行标定。这里标定不仅包括摄像头标定,也包括机器人系统的手眼标定。这里的构型为Eye-in-hand。
1、摄像机标定
(1)理论
张正友棋盘标定法对摄像机进行标定。
由于摄像机标定结果要用到后面的手眼标定中,棋盘图片拍摄时需要遵守:标定板固定位置不动,手眼组合体变换姿态拍摄图片。
目的:两组坐标系的两两转化矩阵: T 1 T_1 T1和 T 2 T_2 T2
1) 摄像机坐标系C转化为图片像素坐标系P的转换矩阵T1
P = T 1 ∗ C P=T_1*C P=T1∗C
T1在摄像机标定中内参矩阵3*3
2) 棋盘世界坐标系G转化为摄像机坐标系C的转换矩阵T2
C = T 2 ∗ G C=T_2*G C=T2∗G
T2在摄像机标定中外参矩阵4*4,由旋转矩阵r33和平移向量t31构成[ t r; 0 0 0 1]
(2) 方法
OpenCv 或者 Matlab
2、手眼标定
(1)理论部分
手眼标定目的:得到机器手坐标系H转化为摄像机坐标系 C C C的转化矩阵 T 3 T_3 T3。可表示为:
C = T 3 ∗ H C=T_3*H C=T3∗H
T3需要根据公式 A X = X B AX=XB AX=XB得到;实际中,分别知道 A A A、 B B B求出来的X有无穷多个解。所以为了实现唯一解至少需要两组 A A A和 B B B,即至少需要3个位置的摄像机标定结果。
下图为 A X = X B AX=XB AX=XB图解,棋盘相对机器人基坐标系固定,因此有
B 1 ∗ X − 1 ∗ A 1 = B 2 ∗ X − 1 ∗ A 2 B_1*X^{-1}*A_1 = B_2*X^{-1}*A_2 B1∗X−1∗A1=B2∗X−1∗A2
转换 A 2 ∗ A 1 − 1 ∗ X = X ∗ B 2 − 1 ∗ B 1 A_2*A_1^{-1}*X = X*B_2^{-1}*B_1 A2∗A1−1∗X=X∗B2−1∗B1
可令 A = A 2 ∗ A 1 − 1 A= A_2*A_1^{-1} A=A2∗A1−1, B = B 2 − 1 ∗ B 1 B=B_2^{-1}*B_1 B=B2−1∗B1。
1) A A A的求法
A A A是两个摄像机坐标系之间的变换矩阵。假设上述摄像机标定中有3张标定图片的外参标定结果分别是 H c 1 H_{c1} Hc1、 H c 2 H_{c2} Hc2、 H c 3 H_{c3} Hc3,那么可以得到两个 A A A矩阵:
A 1 = H c 2 ∗ H c 1 − 1 A_1=H_{c2}*H_{c1}^{-1} A1=Hc2∗Hc1−1
A 2 = H c 3 ∗ H c 2 − 1 A_2=H_{c3}*H_{c2}^{-1} A2=Hc3∗Hc2−1
2) B B B的求法
B是两个机器手坐标系之间的变换矩阵。假设上述摄像机标定中的3张标定图片所一一对应的机器手坐标系在基坐标系(也可以是工件坐标系或者其他固定的参考坐标系)中的坐标系描述矩阵结果分别是 H g 1 H_{g1} Hg1、 H g 2 H_{g2} Hg2、 H g 3 H_{g3} Hg3(需要从机器人控制器或示教器中读取或转换),那么可以得到两个 B B B矩阵:
B 1 = H c 2 − 1 ∗ H c 1 B_1=H_{c2}^{-1}*H_{c1} B1=Hc2−1∗Hc1
B 2 = H c 3 − 1 ∗ H c 2 B_2=H_{c3}^{-1}*H_{c2} B2=Hc3−1∗Hc2
由以上两组 A A A和 B B B,代入 A X = X B AX=XB AX=XB就可以得到唯一解X,从而 T 3 = X T_3=X T3=X。
至少2组数据,可以进行求解,参考Navy_HandEye或Tsai_HandEye等方法。
(2)计算过程
-
获取摄像机标定已知摄像机外参矩阵 H c 1 H_{c1} Hc1、 H c 2 H_{c2} Hc2、 H c 3 H_{c3} Hc3(摄像机标定时已有)
-
从机器人控制器中读取对应的机械手坐标末端姿态描述数据
机器人系统的坐标系描述数据可能有2种形式:
– 平移向量+欧拉角: x , y , z , r z , r y , r z x, y, z, r_z, r_y, r_z x,y,z,rz,ry,rz , 需要知道转换关系.
– 平移向量+四元数模式: x , y , z , q w , q x , q y , q z x, y, z, q_w, q_x, q_y, q_z x,y,z,qw,qx,qy,qz,唯一转换。
推荐选择四元数模式,转换成旋转矩阵方式唯一,如下R = [ 2 ( q w 2 + q x 2 ) − 1 2 ( q x q y − q w q z ) 2 ( q x q z + q w q x ) 2 ( q x q y + q w q z ) 2 ( q w 2 + q y 2 ) − 1 2 ( q y q z − q w q x ) 2 ( q x q z + q w q x ) 2 ( q y q z + q w q x ) 2 ( q w 2 + q z 2 ) − 1 ] R = \begin{bmatrix} 2(q_w^2+q_x^2)-1 & 2(q_xq_y – q_wq_z) & 2(q_xq_z+q_wq_x) \\ 2(q_xq_y+q_wq_z) & 2(q_w^2 + q_y^2)-1 & 2(q_yq_z-q_wq_x) \\ 2(q_xq_z+q_wq_x) & 2(q_yq_z + q_wq_x) & 2(q_w^2 + q_z^2)-1\\ \end{bmatrix} R=⎣⎡2(qw2+qx2)−12(qxqy+qwqz)2(qxqz+qwqx)2(qxqy−qwqz)2(qw2+qy2)−12(qyqz+qwqx)2(qxqz+qwqx)2(qyqz−qwqx)2(qw2+qz2)−1⎦⎤
-
求解摄像机坐标系到机械手坐标系的变换矩阵X
例如采集图像25幅,进行相机标定,可得到25个外参矩阵,同时对应可以从控制器界面读取或者转换得到25个姿态矩阵。接着可以利用 1) 2)得到 C 25 2 C_{25}^2 C252组 A A A、 B B B,再利用 A X = X B AX=XB AX=XB计算得到 X X X。
标题3、根据标定结果对目标定位
##(1)理论部分
由上述1、2标定得到:
矩阵 | 含义 | 说明 |
---|---|---|
H p c H_{pc} Hpc | 内参矩阵 | 摄像机坐标系C -> 像素坐标系P |
H c g H_{cg} Hcg | 手眼矩阵 | 机械手坐标系H -> 摄像机坐标系C |
H g H_g Hg | 从控制器读取的末端姿态矩阵 | 机械手坐标系H -> 基坐标系B |
基坐标系转化为像素坐标系的变换矩阵,可由下面两式求解(注意使用齐次坐标系)。
z c ∗ [ u , v , 1 ] T = H p c ∗ [ x c , y c , z c ] T z_c* [u,v,1]^{T} = H_{pc} * [x_c,y_c,z_c]^{T} zc∗[u,v,1]T=Hpc∗[xc,yc,zc]T
[ x , y , z ] T = H g ∗ H c g − 1 ∗ [ x c , y c , z c ] T [x,y,z]^{T} = H_g * H_{cg}^{-1}*[x_c,y_c,z_c]^{T} [x,y,z]T=Hg∗Hcg−1∗[xc,yc,zc]T
未完 …
win10,vs2015。 linux下使用有几个小错误或警告地方,根据编译器输出略作修改。源码 https://github.com/wanggao1990/HandEyeCalibration, 有用烦请star一下。
新浪演示视频地址 http://t.cn/RDW1sAf?m=4271991789966178&u=2335487824,CSDN视频 https://live.csdn.net/v/177543
opencv4.1 也加入了手眼标定,可以尝试。
今天的文章手眼标定_机器人手眼标定详细步骤分享到此就结束了,感谢您的阅读。
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。
如需转载请保留出处:https://bianchenghao.cn/71475.html