1. 程式人生 > >[SLAM](3-4):尤拉角

[SLAM](3-4):尤拉角

結合 高翔老師的著作《視覺SLAM十四講:從理論到實踐》,加上小白的工程經驗共同完成。建議購買紙製書籍搭配使用。    


1.尤拉角的定義

       無論是旋轉向量還是旋轉矩陣,雖然它們能描述旋轉,但對我們人類來說是非常不直觀的。當我們看到它們時,很難想象出這個旋轉究竟是什麼樣的。  而尤拉角則提供了一種非常直觀的方式來描述旋轉——它使用了三個分離的轉角,把一個旋轉分解成三次繞不同軸的旋轉。

       由於分解方式有很多種,所以尤拉角也存在著不同的定義方法。比如說,當我們先繞 X 軸旋轉,再繞 Y 軸旋轉,最後繞 Z 軸旋轉,就得到了一個 XYZ 軸的旋轉。如果討論更細一些,還需要區分每次旋轉是繞固定軸旋轉的,還是繞旋轉之後的軸旋轉的。

2."偏航-俯仰-滾轉"

   尤拉角當中比較常用的一種,便是用“偏航-俯仰-滾轉”(yaw-pitch-roll)三個角度來描述一個旋轉的。由於它等價於 ZYX 軸的旋轉,我們就可以以 ZYX 為例。假設一個剛體的前方(朝向我們的方向)為X軸,右側為Y軸,上方為Z軸,那麼,ZYX 轉角相當於把任意旋轉分解成以下三個軸上的轉角:

  1. 繞物體的 Z 軸旋轉,得到偏航角 yaw;
  2. 繞旋轉之後的Y軸旋轉,得到俯仰角 pitch;
  3. 繞旋轉之後的Z軸旋轉,得到滾轉角 roll;

  此時,我們可以使用\begin{Bmatrix} r\\ p\\ y \end{Bmatrix} 這樣一個三維的向量描述任意旋轉。這個向量十分的直觀,我們可以從這個向量想象出旋轉的過程。 rpy角的旋轉順序是ZYX。

3.尤拉角的缺點

       尤拉角的一個重大缺點是會碰到著名的萬向鎖問題(Gimbal Lock):在俯仰角為\pm 90°時,第一次旋轉與第三次旋轉將使用同一個軸,使得系統丟失了一個自由度(由三次旋轉變成了兩次旋轉)。理論上可以證明,只要我們想用三個實數來表達三維旋轉時,都會不可避免地碰到奇異性的問題。由於這種原因,尤拉角適於插值迭代,往往只用在人機互動中。

       我們也很少在SLAM程式中直接使用尤拉角表示姿態,同樣會在濾波優化中使用尤拉角表示旋轉(因為它具有奇異性)。不過,若你想驗證自己的演算法是否有錯時,轉換成尤拉角能夠快速辨認結果的正確與否。


《視覺SLAM十四講:從理論到實踐》 PDF資源

下載連結:https://download.csdn.net/user/robot_starscream/uploads

此資源僅供各位研究員試讀,請購買紙質書籍。