手眼标定
轉(zhuǎn)載請注明出處 https://blog.csdn.net/wanggao_1990/article/details/81435660
機(jī)器人視覺系統(tǒng)中要實(shí)現(xiàn)像素坐標(biāo)與實(shí)際坐標(biāo)的轉(zhuǎn)換,首先要進(jìn)行標(biāo)定。這里標(biāo)定不僅包括攝像頭標(biāo)定,也包括機(jī)器人系統(tǒng)的手眼標(biāo)定。這里的構(gòu)型為Eye-in-hand。
1、攝像機(jī)標(biāo)定
(1)理論
張正友棋盤標(biāo)定法對攝像機(jī)進(jìn)行標(biāo)定。
由于攝像機(jī)標(biāo)定結(jié)果要用到后面的手眼標(biāo)定中,棋盤圖片拍攝時(shí)需要遵守:標(biāo)定板固定位置不動(dòng),手眼組合體變換姿態(tài)拍攝圖片。
目的:兩組坐標(biāo)系的兩兩轉(zhuǎn)化矩陣:T1T_1T1?和T2T_2T2?
1) 攝像機(jī)坐標(biāo)系C轉(zhuǎn)化為圖片像素坐標(biāo)系P的轉(zhuǎn)換矩陣T1
P=T1?CP=T_1*CP=T1??C
T1在攝像機(jī)標(biāo)定中內(nèi)參矩陣3*3
2) 棋盤世界坐標(biāo)系G轉(zhuǎn)化為攝像機(jī)坐標(biāo)系C的轉(zhuǎn)換矩陣T2
C=T2?GC=T_2*GC=T2??G
T2在攝像機(jī)標(biāo)定中外參矩陣4*4,由旋轉(zhuǎn)矩陣r33和平移向量t31構(gòu)成[ t r; 0 0 0 1]
(2) 方法
OpenCv 或者 Matlab
2、手眼標(biāo)定
(1)理論部分
手眼標(biāo)定目的:得到機(jī)器手坐標(biāo)系H轉(zhuǎn)化為攝像機(jī)坐標(biāo)系CCC的轉(zhuǎn)化矩陣T3T_3T3???杀硎緸?#xff1a;
C=T3?HC=T_3*HC=T3??H
T3需要根據(jù)公式AX=XBAX=XBAX=XB得到;實(shí)際中,分別知道AAA、BBB求出來的X有無窮多個(gè)解。所以為了實(shí)現(xiàn)唯一解至少需要兩組AAA和BBB,即至少需要3個(gè)位置的攝像機(jī)標(biāo)定結(jié)果。
下圖為AX=XBAX=XBAX=XB圖解,棋盤相對機(jī)器人基坐標(biāo)系固定,因此有
B1?X?1?A1=B2?X?1?A2B_1*X^{-1}*A_1 = B_2*X^{-1}*A_2B1??X?1?A1?=B2??X?1?A2?
轉(zhuǎn)換A2?A1?1?X=X?B2?1?B1A_2*A_1^{-1}*X = X*B_2^{-1}*B_1A2??A1?1??X=X?B2?1??B1?
可令 A=A2?A1?1A= A_2*A_1^{-1}A=A2??A1?1?,B=B2?1?B1B=B_2^{-1}*B_1B=B2?1??B1?。
1) AAA的求法
AAA是兩個(gè)攝像機(jī)坐標(biāo)系之間的變換矩陣。假設(shè)上述攝像機(jī)標(biāo)定中有3張標(biāo)定圖片的外參標(biāo)定結(jié)果分別是Hc1H_{c1}Hc1?、Hc2H_{c2}Hc2?、Hc3H_{c3}Hc3?,那么可以得到兩個(gè)AAA矩陣:
A1=Hc2?Hc1?1A_1=H_{c2}*H_{c1}^{-1}A1?=Hc2??Hc1?1?
A2=Hc3?Hc2?1A_2=H_{c3}*H_{c2}^{-1}A2?=Hc3??Hc2?1?
2) BBB的求法
B是兩個(gè)機(jī)器手坐標(biāo)系之間的變換矩陣。假設(shè)上述攝像機(jī)標(biāo)定中的3張標(biāo)定圖片所一一對應(yīng)的機(jī)器手坐標(biāo)系在基坐標(biāo)系(也可以是工件坐標(biāo)系或者其他固定的參考坐標(biāo)系)中的坐標(biāo)系描述矩陣結(jié)果分別是Hg1H_{g1}Hg1?、Hg2H_{g2}Hg2?、Hg3H_{g3}Hg3?(需要從機(jī)器人控制器或示教器中讀取或轉(zhuǎn)換),那么可以得到兩個(gè)BBB矩陣:
B1=Hc2?1?Hc1B_1=H_{c2}^{-1}*H_{c1}B1?=Hc2?1??Hc1?
B2=Hc3?1?Hc2B_2=H_{c3}^{-1}*H_{c2}B2?=Hc3?1??Hc2?
由以上兩組AAA和BBB,代入AX=XBAX=XBAX=XB就可以得到唯一解X,從而T3=XT_3=XT3?=X。
至少2組數(shù)據(jù),可以進(jìn)行求解,參考Navy_HandEye或Tsai_HandEye等方法。
(2)計(jì)算過程
獲取攝像機(jī)標(biāo)定已知攝像機(jī)外參矩陣Hc1H_{c1}Hc1?、Hc2H_{c2}Hc2?、Hc3H_{c3}Hc3?(攝像機(jī)標(biāo)定時(shí)已有)
從機(jī)器人控制器中讀取對應(yīng)的機(jī)械手坐標(biāo)末端姿態(tài)描述數(shù)據(jù)
機(jī)器人系統(tǒng)的坐標(biāo)系描述數(shù)據(jù)可能有2種形式:
- 平移向量+歐拉角: x,y,z,rz,ry,rzx, y, z, r_z, r_y, r_zx,y,z,rz?,ry?,rz? , 需要知道轉(zhuǎn)換關(guān)系.
- 平移向量+四元數(shù)模式: x,y,z,qw,qx,qy,qzx, y, z, q_w, q_x, q_y, q_zx,y,z,qw?,qx?,qy?,qz?,唯一轉(zhuǎn)換。
推薦選擇四元數(shù)模式,轉(zhuǎn)換成旋轉(zhuǎn)矩陣方式唯一,如下
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]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(qx?qy?+qw?qz?)2(qx?qz?+qw?qx?)?2(qx?qy??qw?qz?)2(qw2?+qy2?)?12(qy?qz?+qw?qx?)?2(qx?qz?+qw?qx?)2(qy?qz??qw?qx?)2(qw2?+qz2?)?1????
求解攝像機(jī)坐標(biāo)系到機(jī)械手坐標(biāo)系的變換矩陣X
例如采集圖像25幅,進(jìn)行相機(jī)標(biāo)定,可得到25個(gè)外參矩陣,同時(shí)對應(yīng)可以從控制器界面讀取或者轉(zhuǎn)換得到25個(gè)姿態(tài)矩陣。接著可以利用 1) 2)得到C252C_{25}^2C252?組AAA、BBB,再利用AX=XBAX=XBAX=XB計(jì)算得到XXX。
標(biāo)題3、根據(jù)標(biāo)定結(jié)果對目標(biāo)定位
##(1)理論部分
由上述1、2標(biāo)定得到:
| HpcH_{pc}Hpc? | 內(nèi)參矩陣 | 攝像機(jī)坐標(biāo)系C -> 像素坐標(biāo)系P |
| HcgH_{cg}Hcg? | 手眼矩陣 | 機(jī)械手坐標(biāo)系H -> 攝像機(jī)坐標(biāo)系C |
| HgH_gHg? | 從控制器讀取的末端姿態(tài)矩陣 | 機(jī)械手坐標(biāo)系H -> 基坐標(biāo)系B |
基坐標(biāo)系轉(zhuǎn)化為像素坐標(biāo)系的變換矩陣,可由下面兩式求解(注意使用齊次坐標(biāo)系)。
zc?[u,v,1]T=Hpc?[xc,yc,zc]Tz_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=Hg?Hcg?1?[xc,yc,zc]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下使用有幾個(gè)小錯(cuò)誤或警告地方,根據(jù)編譯器輸出略作修改。源碼 https://github.com/wanggao1990/HandEyeCalibration, 有用煩請star一下。
新浪演示視頻地址 http://t.cn/RDW1sAf?m=4271991789966178&u=2335487824,CSDN視頻 https://live.csdn.net/v/177543
opencv4.1 也加入了手眼標(biāo)定,可以嘗試。
總結(jié)
- 上一篇: (三)手眼标定结果的应用
- 下一篇: MATPOWER 修改数据格式和应用