02軌跡規劃基礎 四元數的位姿表示

2021-10-16 03:22:51 字數 2316 閱讀 3337

因為我個人是做六軸機械臂軌跡規劃,所以大部分學習和部落格重點與此有關。本篇文章主要講述四元數的定義數學基礎(沒有推導只有公式結果)、四元數是如何表示旋轉位姿,四元數表示位姿在軌跡規劃過程中的插值方法、四元數的優缺點(主要是優點)。

1.1四元數作用

從複數的定義是w = a+bj,我們發現其實給乙個複數w1乘上另外乙個複數w2,實際上可以實現對w1的旋轉和縮放,如果我們將w2單位化,那麼我們就可以將w1旋轉,但是這個變化是平面上的,我們可以用w = a + bi +cj+dk,來實現三維空間的位姿旋轉表示,這就是四元數在位姿表述上的使用。

1.2四元數的定義

其中

有時我們也這樣表示四元數

其中s是實數部分,v是虛數部分

1.2四元數計算

關於四元數數學基礎

加減、點乘、叉乘、係數縮放

純四元數和實四元數

單位四元數

共軛四元數、四元數的逆

參見blog

1.3旋轉四元數

前面我們定義了乙個特殊的複數:旋轉數。它是用來旋轉2d複數平面的點的

根據四元數和複數的相似性,應該有可能設計乙個可以旋轉3d空間的點的四元數:

由於種種數學原因

我們最終採取的旋轉四元數的一般形式為

slerp可以在2個朝向之間平滑地插值。

第乙個朝向設為q1,第二個朝向設為q2

(請記住,這2個指示朝向的四元數是單位四元數,不然閱讀下文會混亂)。被插值前的點設為p,插值後的點設為p′。而插值引數t,當t=0時會把p轉到q1,當t=1時會轉到q2。

標準的線性插值公式是(譯註:這個公式是笛卡爾座標系下的,不是指四元數):

應用這個等式的一般步驟是:

計算p1、p2之間的差。

根據引數t,計算兩個點的差的小數值(因為0<=t<=1)

把第二步的值加上原始點的值,算出結果

2.2squad

正如乙個slerp可以被用來計算四元數之間的插值,乙個squad (spherical and quadrangle)可以被用來對旋轉路徑進行平滑插值。

如果我們有四元數序列:

q1,q2,q3,qn−2,qn−1,qn

然後我們再定義乙個"輔助"四元數(si),它是乙個中間控制點:

所以,沿著子曲線的朝向可以定義為:

在t時刻的朝向就是:

然後我們再定義乙個"輔助"四元數(si),它是乙個中間控制點:

3.1旋轉四元數和尤拉,rpy、以及旋轉矩陣之間的換算

尤拉角:

r矩陣

參考blog

3.2旋轉四元數的優缺點優點計算量偏小,計算時間短

可以避免萬向節鎖現象

可以提供平滑插值

缺點

捨入誤差會引起四元數無效,需要重新單元化

理解難度更大,還是需要自己進行案例的數學計算才有助於對旋轉的理解

拓展

glm(opengl math library)是乙個優秀的數學庫,它的四元數的實現極其不錯。如果你對在你的程式中使用四元數感興趣,那麼我會推薦你使用這個數學庫。

下篇部落格會對旋轉矩陣的插值做具體案例演示

下下篇預計寫到四元數其中對於四元數的旋轉效果也會做**演示

四元數基礎

以下內容摘自 3d數學基礎 圖形與遊戲開發 清華大學出版社 四元數 繞軸n旋轉 角 n是乙個向量,根據左手或右手法則定義旋轉的正方向,角表示旋轉的量。那麼表示這個旋轉的四元數為 幾何上存在兩個單位四元數,它們代表沒有角位移 任意四元數乘以乙個幾何單位四元數得到的角位移相同 雖然乘以兩種形式得到q和 ...

四元數基礎(二)

有了一些四元數的基礎後,我們再繼續挖點東西出來。這一節,我們來討論一下四元數的指數對映,對數對映,球面插值等內容。首先,我們定義一般四元數的指數對映為 e sum mathbf k 其中,mathbf k 表示 k 個相同四元數 mathbf 的 otimes 累乘。不難發現,乙個四元數的指數對映仍...

四元數乘法 剛體旋轉中的四元數

四元數博大精深,用途之一圖形學中的三維旋轉。單純從應用角度考慮,四元數可以以如下方式應用於旋轉。旋轉示意圖 假定我們有乙個經過原點的旋轉軸 其中 則,3d旋轉可以通過四元數乘法來表示 1 其中,為單位四元數,等價於 和 分別為 的共軛和逆。對於單位四元數而言 根據式 1 結合四元數的乘法,可以完成一...