HALCON高級篇:3D位姿

3D位姿

齊次轉換矩陣是一種描述轉換的簡潔方法,但是它們的內容,例如矩陣的元素,通常是讀起來比較困難,尤其是旋轉部分。這個問題可以通過使用所謂的3D位姿來解決。

3D位姿其本質就是一個剛性轉換的很容易理解的表述:不是齊次轉換矩陣的12個元素,一個位姿用6個參數來描述這種剛性轉換,3個是旋轉,3個是平移:(TransX,TransY, TransZ, RotX, RotY, RotZ)。位姿背後的原理就是,即使繞任意軸的旋轉也總可以用繞座標系統軸的3個旋轉序列來描述。

在HALCON中,你可以用create_pose來創建一個3D位姿;在位姿和齊次矩陣之間的轉換,你可以用hom_mat3d_to_pose和pose_to_hom_mat3d。


旋轉序列

但是,這不僅是一種方法通過3個參數去描述任意的旋轉。可以通過HALCON算子create_pose反映出來,其可以通過參數OrderOfRotation來在不同的位姿類型之間進行選擇。如果你傳入值‘gba’,旋轉可以通過下面的旋轉鏈來描述:

HALCON高級篇:3D位姿


你可以通過傳入值‘abg’來選擇相反的順序:

HALCON高級篇:3D位姿


例如,前面討論的轉換可以通過齊次轉換矩陣來描述:

HALCON高級篇:3D位姿


相對應的位姿,用旋轉順序‘gba’則更容易被讀取:

HALCON高級篇:3D位姿


HALCON算子

下面有關處理3D位姿的相關算子被簡要的描述:

  • Create_pose創建一個位姿
  • Hom_mat3d_to_pose將齊次轉換矩陣轉化為位姿
  • Pose_to_hom_mat3d將一個位姿轉化為齊次轉換矩陣
  • Convert_pose_type改變位姿的類型
  • Write_pose將位姿寫入到文件中
  • Read_pose從文件中讀取位姿
  • Set_origin_pose沿著其新軸平移位姿
  • Pose_invert反轉位姿
  • Pose_compose將兩個位姿相乘,例如,它順序地應用兩個轉換(位姿)

怎麼確定座標系統的位姿

前面部分我們講解了如果用平移向量,旋轉矩陣,齊次轉換矩陣,或者位姿去描述已知的轉換。但是,有時這有另外的任務:怎麼用一個位姿去描述座標系統的位置和方向。

HALCON高級篇:3D位姿

圖:用相機座標來確定世界座標系統的位姿

上圖展示了一個更加簡單的實例。其目標是去確定相對於相機座標系統,世界座標系統的位姿。

在這樣的情況下,我們建議建立一個從單獨的平移和旋轉,從左到右的剛性轉換。這樣,相機座標系統首先被平移,這樣其原點就和世界座標系統的一致啦。現在,兩個座標系統的y軸是一致的;在繞著(新)y軸旋轉(被平移)的相機座標系統,它具有了正確的方向。


分享到:


相關文章: