我知道我的手臂在哪裡嗎?那我的眼睛呢?

是的,這個問題讓我想到的並不是機器人,而是科學怪人,或者是任何死屍殭屍之類的,剛從土裡面爬出來,然後在地上到處爬,找自己的身體部位裝回自己身上。不過,機器人不也是一塊一塊模組拼起來的嗎?一個完整,有四肢軀幹頭部的機器人,必須知道怎麼操縱各部位協動,才能順利將東西拿起來,並從一點移到另一點,再放下。

機器人各個坐標系的管理

我們人腦經過千萬年的演化,已經可以很輕易且快速的知道身體各部位在哪裡,甚至可以很即時的知道自己相對空間中的位置。但機器人學中,相關的部位在空間中的關係,必須以座標系定位,每一個部位相對其他部位的連結,便可以看作是座標系和座標系之間的距離與角度關係。所以,我們來看一下以下圖片:

TF_範例

請問:

  • 圖中的球體,相對於相機多遠?
  • 相機相對於桌面的關係?
  • 相機以什麼角度面對球體?

這幾個問題,是機器人學家每天都要問的問題之三,上述三個問題,都是某個部位,相對於其他部位在空間中的關係。機器人學中,有個好用的模型來定義,稱作 Denavit-Hartenberg (DH) 模型。簡言之,這個模型把各部位,拆分為連結(link)和關節/軸(joint),並把每個坐標系的起點,放在關節上,關節與關節之間的距離與角度,便是連結的部分,座標採用右手定則,z 軸平行於連結。照這個道理,我們可以把上面那張圖,想像成這樣:

擷取

如此,每個部位,就用一個座標系定義,因此,假設我們知道相機座標相對於橫槓的角度與距離,以及支撐桿的距離、支架底座和桌面左下角的距離,且也知道左下角的座標系,相當於球體的坐標系關係,那這樣,我們可以用下面的關聯法,找出相機和球體之間的關係:

T_obj 相對於 T_cam = T_obj → T1 → T2 → T3 → T_cam

那為什麼我們不直接拿一條尺來量從相機到球體的距離就好了?唉!您不要這麼專業好不好?如果可以,我早就量了,這只是打個比方嘛!不過真實世界中,可以拿 RGBD TOF 攝像機這樣做。但偏偏很多時候,我們沒辦法這麼直接得知兩者之間的關係,所以必須用上述的方法,迂迴得出距離角度。

既然我們都說座標系了,所以位處於哪個座標系就變得相當重要,真是所謂吃這碗看那碗啊(大誤!)。假如換個角度問,支架關節(T3)相對於球體之間的座標關係是?那我們可以用以下轉換求得:

T3 T_obj中的位置 = T3 → T2 → T1 → T_obj

如果 T2 → T_obj 之間的關係也知道,那便可以省掉 T2 → T1 → T_obj 的關係,但假設我們並不知道,也無從求得。再繼續延伸。假設支架底座會動,試問相機與球體之間五秒鐘內的位置變化?讀者應該會想到以我們前面寫的轉換公式,但這時候,我們必須將每個時間內的變化也納入考量,所以,例如,球體在相機座標系的關係,可能就變成

T_obj 相當於 T_cam(t) = T_obj → T1 → T2(t) → T3(t) → T_cam(t)

您是否注意到,有坐標系是靜止的,但有座標系的狀態是會隨著時間改變的。這些座標系由於是位於三次元當中(是的,就跟您的愛人一樣,真實地存在於三次元當中),所以,位置的座標,適用 (x, y, z, roll, pitch, yaw) 這六個變數紀錄,座標轉換上,也都是用矩陣計算。如果每一秒都要靠手動或刻意寫程式計算,那事情就不用做了。所以,ROS 的框架中,已經有一大套相當完善的 TF函式庫,供使用者應用,自動計算及追蹤每個坐標系每個時間點的轉換與位置。

位置與方位

這邊,我們介紹一些觀念。我平時都是用英文字彙,如果以下中文術語有誤,請不吝指教。

  • 姿態(Pose)是一個紀錄卡氏座標的陣列 [x, y, z]^T
  • 方位(Orientation)是一個三圍陣列,裡面的元素分別為x 軸、y軸、z軸上的旋轉角度 [roll, pitch, yaw],其實這個術語,應該是承襲自航空學中的各種轉動角度。下方圖片中,向前為x軸並對應 roll,向右為 y 軸並對應 pitch、向上為 z軸且對應 yaw

Yaw_Axis_Corrected.svg

  • 位置(Position)結合了姿態與方位,變成一個有六個元素的陣列,在機率機器人學中,也稱之為狀態(state),或組態(Configuration)。這六個變數,機器人學中,便稱其為六個自由度。所以,下次,看到有四旋翼的廣告文案上說,這台四旋翼有五個自由度,或者,一個視覺里程計(visual odometry)標榜即時的六個自由度定位,我們便能輕易知道在說什麼。
  • 平移(translation)就是原本位置p(x,y, z)再加上某個定量,也就是說,p+v = [x, y, z]^T + [v1, v2, v3]。這邊,我們僅以p 陣列表示平移量。
  • 旋轉矩陣(rotation matrix,簡言之,就是一個向量大小不變,直接轉向的矩陣。在二維的狀況下,旋轉矩陣為:

Rotation

  • 以z軸為中心的三維旋轉矩陣便寫成

3D_rotation_matrixPNG

  • 轉換矩陣(Transformation Matrix )便結合了旋轉與平移的關係,和寫成一個矩陣,將一個座標中的狀態以另一個坐標系來表示:

transformation matrix

回顧選轉矩陣中,x-y平面上都沒有轉任何角度,二維旋轉矩陣便成為單位矩陣。因此,轉換矩陣便成為:

translation_matrix

還記得上面提到從相機到球體的轉換關係嗎?實際上在作的運算,就是將相機座標的中心點,用上面的轉換矩陣藉由矩陣乘法,以球體坐標系表示。如果要倒過來,求出球體座標中心點,在相機座標中的位置時,便以逆轉換矩陣,作矩陣程法後,得出。這邊,我盡量不寫數學式,因為這篇只是在聊觀念。有興趣看更多實際公式和算法的話,建議讀者可以參考 John Craig所著之Introduction to Robotics,便會有更詳盡的解釋。

 

更多精采文章,請回到目錄瀏覽!

廣告

發表迴響

在下方填入你的資料或按右方圖示以社群網站登入:

WordPress.com 標誌

您的留言將使用 WordPress.com 帳號。 登出 /  變更 )

Google+ photo

您的留言將使用 Google+ 帳號。 登出 /  變更 )

Twitter picture

您的留言將使用 Twitter 帳號。 登出 /  變更 )

Facebook照片

您的留言將使用 Facebook 帳號。 登出 /  變更 )

連結到 %s