四元數(Quaternion)
定義
四元數(Quaternion)是由一個實部與三個虛部組成的數 。長度為 1 的單位四元數可以表示任意三維旋轉,是 ROS 2(geometry_msgs/Quaternion)、無人機飛控與遊戲引擎內部最常用的姿態表示法。
直覺理解
任何三維旋轉都可以看成「繞某一根軸轉某個角度」(軸角表示)。四元數就是把「軸」和「角度」巧妙地打包成四個數,使旋轉的合成變成簡單的乘法。
數學表示
繞單位軸 旋轉角度 :
旋轉向量 :;兩個旋轉的合成:(先 再 )。
使用情境
- 姿態估測:IMU 角速度積分、擴展卡爾曼濾波的姿態狀態,多以四元數表示。
- 姿態插值:球面線性插值(slerp)讓相機或機械手臂末端在兩個姿態間平滑轉動。
- ROS 2 tf2:座標轉換的旋轉部分預設用四元數儲存。
和其他表示法的比較
| 表示法 | 參數數量 | 萬向鎖 | 直覺性 |
|---|---|---|---|
| 尤拉角 | 3 | 有 | 高 |
| 旋轉矩陣 | 9 | 無 | 中 |
| 四元數 | 4 | 無 | 低 |
常見誤解
- 四元數不需要「正規化」嗎? 需要。數值積分會讓長度慢慢偏離 1,要定期除以長度重新正規化。
- 不同軟體的順序不一樣:有的寫 (w, x, y, z),ROS 與 Eigen 的建構子則有 (x, y, z, w) 的用法,混用是常見 bug。
延伸閱讀
常見問題
- 四元數的四個數字分別代表什麼?
- 單位四元數 q = (w, x, y, z) 中,w = cos(θ/2),(x, y, z) = sin(θ/2)·u,其中 u 是旋轉軸的單位向量、θ 是繞該軸旋轉的角度。
- 為什麼 q 和 -q 代表同一個旋轉?
- 把 θ 換成 θ+360° 會讓四個分量全部變號,但物理上是同一個姿態。這叫「雙重覆蓋」,實作插值時要先檢查內積符號,避免繞遠路。
faq_01.log
faq_02.log