標定技術(shù)
常見的機器人視覺伺服中要實現(xiàn)像素坐標與實際坐標的轉(zhuǎn)換,首先就要進行標定,對于實現(xiàn)視覺伺服控制,這里的標定不僅包括攝像機標定,也包括機器人系統(tǒng)的手眼標定。以常見的焊接機器人系統(tǒng)為例,有兩種構(gòu)型,如下:
即:攝像機固定于機器手和攝像機固定于外部場景;
本文針對前一種構(gòu)型:攝像機固定于機器手。
1、攝像機標定技術(shù)
(1)理論部分:
以張正友的棋盤標定法為攝像機標定方式,由于攝像機標定結(jié)果要用到后面的手眼標定中,所以此處進行不同方位的棋盤圖片拍攝時需要遵守:標定板固定位置不動,手眼組合體變換姿態(tài)拍攝圖片。
攝像機標定的目的:得到兩組坐標系的兩兩轉(zhuǎn)化矩陣:T1和T2;
1)得到圖片像素坐標系P與攝像機坐標系C之間的轉(zhuǎn)換矩陣T1,準確說應該是攝像機坐標系轉(zhuǎn)化為圖片像素坐標系的轉(zhuǎn)換矩陣。可表示為:
P=T1*C;
解釋:T1在攝像機標定結(jié)果中就是內(nèi)參矩陣3x3;
2)得到攝像相機坐標系C與棋盤上建立的世界坐標系G之間的轉(zhuǎn)換矩陣T2,準確說應該是坐標系G轉(zhuǎn)化為攝像機坐標系的轉(zhuǎn)換矩陣??杀硎緸椋?/p>
C=T2*G;
解釋:T2在攝像機標定結(jié)果中就是外參矩陣4x4,由旋轉(zhuǎn)矩陣r和平移向量t構(gòu)成[ t r; 0 0 0 1];
?。?)方法:
攝像機標定方法有兩種可選:openCV或者Matlab標定工具箱;
建議選擇MATLAB應用程序——圖像處理與計算機視覺——Camera Calibrator,直接導入拍攝好的圖片即可。但是要注意,使用matlab標定工具箱所得到的內(nèi)參矩陣、外參旋轉(zhuǎn)矩陣、外參平移向量都要經(jīng)過轉(zhuǎn)置才是正確的結(jié)果。
如下圖,MATLAB標定得到的紅框中依次是外參平移向量、內(nèi)參矩陣、外參旋轉(zhuǎn)矩陣,它們都需要做轉(zhuǎn)置后才能應用于本文的公式計算:
2、手眼標定技術(shù)
?。?)理論部分:
手眼標定目的:得到攝像機坐標系C與機器手(或工具)坐標系H之間的轉(zhuǎn)換矩陣T3,準確說應該是機器手坐標系轉(zhuǎn)化為攝像機坐標系的轉(zhuǎn)化矩陣??杀硎緸椋?/p>
C=T3*H;
解釋:T3需要根據(jù)公式CX=XD得到;實際中,分別知道C、D求出來的X有無窮多個解。所以為了實現(xiàn)唯一解,我們至少需要兩組C和D,即至少需要3個位置的攝像機標定結(jié)果。
其中C的求法如下:
C是兩個攝像機坐標系之間的變換矩陣??梢愿鶕?jù)上述任一兩張標定圖片所得的兩個攝像機標定外參A、B按公式C=A*inv(B)計算得到的。假設上述攝像機標定中有3張標定圖片的外參標定結(jié)果分別是T21、T22、T23,那么可以得到兩個C矩陣:
C1=T21*inv(T22);
C2=T22*inv(T23);
D的求法如下:
D是兩個機器手坐標系之間的變換矩陣。假設上述攝像機標定中的3張標定圖片所一一對應的機器手坐標系在基坐標系(也可以是工件坐標系或者其他固定的參考坐標系)中的描述矩陣結(jié)果分別是H1、H2、H3(H需要從機器人控制器或示教器中讀?。?,那么可以得到兩個D矩陣:
D1=inv(H1)*H2;
D2=inv(H2)*H3;
由以上兩組C和D,代入CX=XD就可以得到唯一解X,從而T3=X;
注:上述H1、H2、H3是每張標定圖片對應的機器手坐標系描述矩陣,正好說明了攝像機標定中所謂的“標定板固定,手眼運動”的正確性。如果手眼不動,改變標定板姿態(tài)進行拍攝,那么H的值都是一樣的。
(2)方法:
1)根據(jù)攝像機標定已知攝像機外參矩陣T21、T22、T23,還要從機器人控制器中讀取T21、T22、T23分別對應的機器手(或工具)坐標系H1、H2、H3??刂破髦械淖鴺讼得枋鼍仃嚥皇侵苯幼x取的,它是以平移向量和歐拉角(或四元數(shù))模式存在的,如下:
平移向量+歐拉角模式:
平移向量+四元數(shù)模式:
選取其中任一模式即可,然后將其轉(zhuǎn)化為描述矩陣。
上述工作完成后,就已經(jīng)獲取了3個外參矩陣(再次提醒,攝像機標定使用MATLAB標定工具箱的話,所得到的外參旋轉(zhuǎn)矩陣和平移向量先要轉(zhuǎn)置,即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作為參數(shù)代入到如下MATLAB函數(shù)中: