結合高翔老師的著作《視覺slam十四講:從理論到實踐》,加上小白的工程經驗共同完成。建議作為筆記功能反覆使用。
無論是旋轉向量還是旋轉矩陣,雖然它們能描述旋轉,但對我們人類來說是非常不直觀的。當我們看到它們時,很難想象出這個旋轉究竟是什麼樣的。 而尤拉角則提供了一種非常直觀的方式來描述旋轉——它使用了三個分離的轉角,把乙個旋轉分解成三次繞不同軸的旋轉。
由於分解方式有很多種,所以尤拉角也存在著不同的定義方法。比如說,當我們先繞 x 軸旋轉,再繞 y 軸旋轉,最後繞 z 軸旋轉,就得到了乙個 xyz 軸的旋轉。如果討論更細一些,還需要區分每次旋轉是繞固定軸旋轉的,還是繞旋轉之後的軸旋轉的。
尤拉角當中比較常用的一種,便是用「偏航-俯仰-滾轉」(yaw-pitch-roll)三個角度來描述乙個旋轉的。由於它等價於 zyx 軸的旋轉,我們就可以以 zyx 為例。假設乙個剛體的前方(朝向我們的方向)為x軸,右側為y軸,上方為z軸,那麼,zyx 轉角相當於把任意旋轉分解成以下三個軸上的轉角:
繞物體的 z 軸旋轉,得到偏航角 yaw;
繞旋轉之後的y軸旋轉,得到俯仰角 pitch;
繞旋轉之後的z軸旋轉,得到滾轉角 roll;
此時,我們可以使用
尤拉角的乙個重大缺點是會碰到著名的萬向鎖問題(gimbal lock):在俯仰角為不適於插值和迭代,往往只用在人機互動中。
我們也很少在slam程式中直接使用尤拉角表示姿態,同樣不會在濾波或優化中使用尤拉角表示旋轉(因為它具有奇異性)。不過,若你想驗證自己的演算法是否有錯時,轉換成尤拉角能夠快速辨認結果的正確與否。
《視覺slam十四講:從理論到實踐》pdf資源