四元數(Quaternion)

定義

四元數(Quaternion)是由一個實部與三個虛部組成的數 q=w+xi+yj+zkq = w + xi + yj + zk。長度為 1 的單位四元數可以表示任意三維旋轉,是 ROS 2(geometry_msgs/Quaternion)、無人機飛控與遊戲引擎內部最常用的姿態表示法。

直覺理解

任何三維旋轉都可以看成「繞某一根軸轉某個角度」(軸角表示)。四元數就是把「軸」和「角度」巧妙地打包成四個數,使旋轉的合成變成簡單的乘法。

數學表示

繞單位軸 u\mathbf{u} 旋轉角度 θ\theta:

q=(cos⁡θ2,  usin⁡θ2)q = \left(\cos\tfrac{\theta}{2},\; \mathbf{u}\sin\tfrac{\theta}{2}\right)

旋轉向量 v\mathbf{v}:v′=q v q∗\mathbf{v}' = q\,\mathbf{v}\,q^{*};兩個旋轉的合成:qtotal=q2 q1q_{total} = q_2\,q_1(先 q1q_1 再 q2q_2)。

使用情境

  • 姿態估測:IMU 角速度積分、擴展卡爾曼濾波的姿態狀態,多以四元數表示。
  • 姿態插值:球面線性插值(slerp)讓相機或機械手臂末端在兩個姿態間平滑轉動。
  • ROS 2 tf2:座標轉換的旋轉部分預設用四元數儲存。

和其他表示法的比較

表示法參數數量萬向鎖直覺性
尤拉角3有高
旋轉矩陣9無中
四元數4無低

常見誤解

  • 四元數不需要「正規化」嗎? 需要。數值積分會讓長度慢慢偏離 1,要定期除以長度重新正規化。
  • 不同軟體的順序不一樣:有的寫 (w, x, y, z),ROS 與 Eigen 的建構子則有 (x, y, z, w) 的用法,混用是常見 bug。

延伸閱讀

常見問題

faq_01.log
四元數的四個數字分別代表什麼?
單位四元數 q = (w, x, y, z) 中,w = cos(θ/2),(x, y, z) = sin(θ/2)·u,其中 u 是旋轉軸的單位向量、θ 是繞該軸旋轉的角度。
faq_02.log
為什麼 q 和 -q 代表同一個旋轉?
把 θ 換成 θ+360° 會讓四個分量全部變號,但物理上是同一個姿態。這叫「雙重覆蓋」,實作插值時要先檢查內積符號,避免繞遠路。

相關文章

相關術語