手眼標定是指標定機器人座標系統和相機座標系之間的外參數關係。一般分爲相機固定和相機安裝在機器人末端兩種固定方式,分爲Eye-to-hand和Eye-in-hand方式。不論哪種方式其理論基礎都是一樣的。下面以對2D相機和3D相機的外參數進行闡述。
1 2D相機手眼標定
其實不止是2D相機,如果3D相機有圖像輸出,也可以用下面方法進行標定。
不論哪種安裝方式,最終都可以轉化爲下面兩種矩陣方程,分別對應兩種求解方法。
(1)AX = XB
方程的含義如下:
具體推導:
方程一:wMe(i) * eMc = wMo * oMc(i);
方程二:wMe(i +1) * eMc = wMo * oMc(i +1);
由兩個方程可得:
[inv(wMe(i+1)) * wMe(i)] * eMc = eMc * [inv(oMc(i +1)) *oMc(i)]
其中:
wMe: 機器人末端位姿
eMc: 相機座標系相對於末端位姿,即要求的手眼關係。
oMc: 相機座標系在標定板座標系的位姿;
wMo;標定板座標系在機器人基座標系下的位姿。
(2)AX = ZB
方程的含義如下:
具體推導:
wMe * eMc = wMo * oMc;
其中:
wMe: 機器人末端位姿
eMc: 相機座標系相對於末端位姿,即要求的手眼關係。
oMc: 相機座標系在標定板座標系的位姿;
wMo;標定板座標系在機器人基座標系下的位姿。
上述兩種方程,目前網上都有開源庫進行求解,這裏推薦一下CamOdoCal開源庫, Ros裏面好像也是用的它。
我對比了TSAI方法和CamOdoCal的四元數求解方法,最後精度效果都差不多。當然由AX = ZB方程還能直接求解出機器人和標定板系的關係,也就是Z。
上面舉例都是以Eye-in-hand進行舉例,Eye-to-hand理論都是一樣的。
在Eye-in-hand標定過程中, 標定板固定, 機器人末端帶動相機改變不同的位姿去拍標定板,獲得不同的末端位姿參數和標定板位姿參數;在Eye-to-hand過程中,相機固定,標定板固定在機器人末端,變換不同的位姿在相機下面進行成像。獲得不同的末端位姿參數和標定板位姿參數。位姿的變換儘可能的大,次數儘量多。
另外, 在實際機器人工業應用現場,爲了快速簡單調試,點到點的標定方法還是比較常見的,尤其是相機固定的時候,利用mark點的圖像座標和世界座標,直接求home矩陣或者外參數。opencv都有相應的函數,這裏不再贅述。
2 3D相機手眼標定
由於3D相機中,可能沒有圖像只有點雲,這樣就不太方便檢測標定板的位姿。可以通過標定球等進行標定。原理如下:
實施過程中就是對同一個標誌物進行多次3D成像,獲取標誌物中心的相機3D座標和此時對應的機器人位姿,然後用最小二乘法進行求解。
在點雲檢測過程中,球的檢測一般比較容易。所以在標定過程中,一般用標定球進行標定。
經過一些項目上的應用測試,此種3D手眼標定方法精度一般在0.5mm之內。