兒童節特刊 | 如何練好手眼協調能力(手眼標定詳解,附源碼)

當嬰幼兒看到物體時,首先經過眼睛獲取信息,傳輸到大腦進行理解,最終經過手來操做完成玩具的抓取、放置。手、眼、腦協同是人類和少數動物的一項特殊技能,經過常常玩一些簡單的益智玩具,能夠逐漸鍛鍊加強孩子的手眼協調能力,同時能夠做用到大腦,促進孩子的智力發育。git

商家們也看到了這塊領域,設計出不少益智玩具和遊戲,如圖1中所示。孩子須要把玩具抓起並放入車裏。孩子的空間思惟能力、協調能力在遊戲中獲得了鍛鍊。
github


圖1
圖1

在智能機器人領域,機器人須要完成高效、複雜的工做,不然沒法稱之爲「智能」。然而,機器人要想得到同人類同樣的協調能力並不容易。如何才能實現像人同樣的手眼協同能力呢?算法

再回到這個遊戲。孩子在玩玩具時,大腦中有一個座標系,可看作是基礎座標系;靈活的手在運動中造成一個軌跡,稱之爲手的座標系;玩具要放置的點又有一個目標座標系。三個座標系協同,遊戲才能順利地玩下去。若是爲此遊戲場景加入座標,會是這個樣子,如圖2所示。
spa



圖2

智能機器人領域,四軸、六軸、並聯等機械臂可認爲是機器人的手臂(雖然自由度較高、速度快,但相比人手的靈活性還遠遠不如)。機器人的眼睛,通常指攝像機(包括2D和3D)。目前智能機器人的主流是使用3D視覺相機。機器人的大腦通常指進行核心控制和計算的工控機或嵌入式芯片。
通常而言,機器人的「手眼協調」須要一個「手眼標定」(Hand-eye calibration)的過程。手眼標定是機器人領域的一個經典的問題,其核心是計算出相機座標系在機器人座標系下的轉移矩陣。轉移矩陣是4×4的矩陣,通常用齊次座標表示。其中最重要的兩個份量是旋轉矩陣\(R\)和平移矢量\(t\),分別表示旋轉份量和平移份量。獲得轉移矩陣後,可將相機下的座標轉換到機械臂座標系下,從而完成工做。如圖3所示。
設計



圖3

兩個座標系,如何創建關係?這是手眼標定要解決的核心問題。
手眼標定和核心是解決一個\(AX=XB\)的矩陣。解此矩陣的算法就是手眼標定算法。
小藍( 杭州藍芯科技有限公司簡稱)公司依賴Eigen庫實現了經典Tsai的方法而且開源,不想進行理論推導的讀者可直接用此代碼:https://github.com/zjulion/handeyecatcode

如何進行手眼標定

注意:如下涉及公式推導,不想推數學公式的可跳過。
理解手眼標定的核心是如何將機器人的手眼關係代入\(AX=XB\)的公式中。
首先要理解\(A\)\(B\)\(X\)分別表明什麼含義。
\(X\),表示未知量,即手眼標定的轉移矩陣。
\(A\)\(B\)呢?
先看機器人手眼分離的示意圖。
blog



圖 4

圖4中,機器人底座通常認爲是世界座標系的原點。攝像機(眼睛)識別的位置經過轉移矩陣,能夠轉換到機器人座標系(同時也是世界座標系)下。在手眼標定的過程當中,須要連續移動機械臂終端,採集一組末端執行器的位姿;與此同時,相機採集掛在末端執行器的標記(例如,棋盤格)的位姿,組成另外一組數據。
預警:下面是一些真正的數學推導。
假設採集的數據有\(N\)對,根據圖中的幾何關係,未知量有兩個,分別是標記在末端執行器下的位姿\(H_{grid}\)和相機在世界座標系下的座標\(H_{camera}\)
其中\(H_{camera}\)是咱們手眼標定的目標,\(H_{grid}\)是多少咱們並不關心。
根據標記是空間中的位姿,咱們能夠獲得(兩邊都是標記的位姿)
\[ H_{camera}\ \ast\ H_{grid\_in\_c}=H_{end}\ \ast\ H_{grid} \]
觀察上面公式,遊戲

  • \(H_{camera}\)未知,是目標矩陣,不變量;
  • \(H_{grid\_in\_c}\)已知,是能夠經過相機讀到的數據,變量;
  • \(H_{end}\)已知,是機械臂末端讀數,變量;
  • \(H_{grid}\)未知,咱們很不喜歡它,不變量。
    故此方程有兩個已知量,兩個未知量,一組數據不可解!
    一組數據不行,那就多來幾組吧!
    假設咱們有兩組數據,分別是第\(i\)組合第\(j\)組,兩組座標在公式裏的括號內表示。
    回想初中代數,咱們能夠經過相似方程組的解法,消去咱們不喜歡的\(H_{grid}\)
    有以下兩組方程,
    \[ {H_{camera}\ \ast\ H}_{grid\_in\_c(i)}=H_{end(i)}\ \ast\ H_{grid},\\ {H_{camera}\ \ast\ H}_{grid\_in\_c(j)}=H_{end(j)}\ \ast\ H_{grid} \]
    聯立方程,消去\(H_{grid}\),最終咱們獲得,
    \[ H_{end(j)}\ast H_{end(i)}^{-1}*H_{camera}=H_{camera}\ast H_{grid\_in\_c(j)}\ast H_{grid\_in\_c(i)}^{-1} \]
    至此,回想矩陣乘法的結合律,咱們驚喜的發現,方程的形式正是AX=XB!
    其中\(A\)\(B\)分別已知,\(X=H_{camera}\)。什麼?\(A\)\(B\)是什麼?本身觀察一下!
    數學推導結束。

小朋友們,不對,工程師們,能夠用此數據帶入標準算法計算了!
通常來講,採集的數據越多,標定的結果越準確。採集時,爲防止陷入局部陷阱,需儘量多的採集機器人姿態,同時,要保證標記在機械臂末端位姿固定,相機和機械臂的相對位姿也要保持固定。
有人說,不對,我用的相機不是這樣裝的。我把相機裝在了機械臂上,同其一塊兒移動,能夠用這種方法嗎?
答案固然是能夠。
這涉及到手眼協同機器人的兩種模式,分別是eye-in-handeye-to-hand。剛剛咱們一直研究的是eye-to-hand的模式。對於eye-in-hand模式,能夠採用相似方法,消去咱們不喜歡的中間變量,最終歸結到\(AX=XB\)的形式,就能夠解了。
兩種模式在公開的源碼中均可以找到。get

總結

一、孩子的手眼協調能力會在遊戲中獲得鍛鍊,只要給玩具讓她/他玩,基因會逐漸教會她/他靈活的手眼協同能力。
二、智能機器人的手眼協調,須要工程師們的認真調教!通常來講,數據越多,偏差越小。手眼協調能力,是機器人完成分揀、抓取、放貨工做的前提。
源碼



手眼協同做業

源碼地址

相關文章
相關標籤/搜索