四元數對於SO3具有double cover的理解

2021-09-24 09:12:57 字數 2119 閱讀 3452

本文是在學習《quaternion kinematics for the error-state kalman filter》時,對於書中四元數double cover特性的個人理解。

作者在文中也有說明,該現象仍未有乙個完美的解釋,本文的內容包含很多猜想的成分,並不嚴謹,僅提供乙個理解的思路

我們知道:三維空間中的歐氏變換r∈so3定義為:

rrt = i3

det( r ) = 1

而對於四元數q,我們發現他的乘積矩陣[q]l和[q]r滿足:

[q][q]t = i4

det( [q] ) = 1

其中,用[q]統一表示[q]l和[q]r

因此,我們可以認為q的乘積矩陣是四維空間中對應於三維歐氏變換的某種變換,稱之為isoclinic rotation

首先來看三維空間中,由旋轉向量θu表達的旋轉對乙個向量x做了些什麼:

如圖所示,向量x繞旋轉軸u轉了 角度θ,其中x與u平行的分量不發生變化,而與u垂直的分量可以看作是在旋轉平面π中旋轉了角度θ。

再來看一下在四維空間中isoclinic rotation對乙個向量做了什麼:

由於四維空間比三維多了乙個維度,三維空間中的旋轉軸u 在四維空間中變成了乙個類似於圖1中旋轉平面π的旋轉平面,我們把這個到了四維空間中才有的旋轉平面稱之為π2,原來就有的與u垂直的旋轉平面π稱之為π1.

π1和π2的位置關係如圖3所示, π1和π2相互垂直,u在 π2內,旋轉中心重合。既然出現了乙個新的旋轉平面,必然亦會出現乙個新的旋轉軸和旋轉角,也就是說用乙個單位四元數表達了在四維空間中繞兩個互相垂直的旋轉軸u,v分別旋轉角φ_u,φ_v

以上關於旋轉平面的說法時為了和《quaternion kinematics for the error-state kalman filter》銜接,下面將拋棄旋轉平面,直接用向量u,v來描述,如圖4所示。

之前我們提到[q]l和[q]r為均為四維空間中的isoclinic rotation,其區別就在於φ_v的方向不同。

更進一步,圖4也給出了[q*]l 和 [q*]r 在四維空間中所對應的旋轉軸和旋轉角。[q]和[q*]的區別在於[q]的旋轉軸u、v正好和[q*]的旋轉軸v*、u*對應。

在此簡單介紹一下四維空間中isoclinic rotation的性質:以[q]l為例,兩個旋轉軸u,v各對與其垂直的分量進行旋轉,對平行與自身的分量不產生影響.且u,v互相垂直。

我們繼續沿用上面的符號,

如果單位四元數q是由三維空間旋轉向量θu生成的,

那麼[q]l 和 [q*]r的u,v*軸正好與三維空間中旋轉向量θu的旋轉軸u重合,圖4中的旋轉角φ_u

和φ_v恰好等於θ/2.

一方面,在四維空間的角度 三維空間歐氏變換so3(或者說上面提到的旋轉向量θu)構成四維空間中的乙個三維超平面,而四維空間中的旋轉軸u([q]的u,亦即 [q*]的v*)恰好位於這個超平面中,因此u造成的旋轉使得位於這個三位超平面中的向量被旋轉之後仍位於這個超平面中。而旋轉軸v與這個三維超平面垂直,經過v的旋轉,三維超平面中的向量就跑到三維超平面在四維空間中的補集中去了。因此經過[q]的旋轉,位於三位超平面,也就是三維空間中的向量就跑到四維空間中了,而這不並是我們想要的。

另一方面,[q]在u上的轉角只有θ/2,因此必須保證在u上轉兩次在能夠實現與旋轉向量θu相同的效果

綜合以上兩點與圖4,

我們發現對待旋轉向量先後進行[q]l和[q*]r兩次旋轉,一方面可以將v軸(u軸)上的旋轉抵消掉,保證旋轉後的向量仍處於三維空間,另一方面可以保證在u軸(v)上進行了兩次θ/2的旋轉,由此達到了和三位旋轉向量一致的效果。

因此四元數旋轉公式是這樣的:

x』 = q@x@q* = [q]l[q*]rx = [q*]r[q]lx

其中@代表四元數乘法

3D數學四元數

向量的叉乘 外積 叉積 a ax,ay,az b bx,by,bz a x b c aybz azby,axbz azbx,axby aybx 兩個向量叉乘的幾何意義 得到乙個新的向量,c向量,c向量同時垂直於a向量和b向量。垂直於a向量和b向量所組成的平面,我們也把c向量叫做那個平面的法向量。向量...

轉 D3D中的四元數

在3d程式中,通常用quaternion來計算3d物體的旋轉角度,與matrix相比,quaternion更加高效,占用的儲存空間更小,此外也更便於插值。在數學上,quaternion表示複數w xi yj zk,其中i,j,k都是虛數單位 i i j j k k 1 i j k,j i k 可以把...

3D變換中的四元數

在3d程式中,通常用quaternion來計算3d物體的旋轉角度,與matrix相比,quaternion更加高效,占用的儲存空間更小,此外也更便於插值。在數學上,quaternion表示複數w xi yj zk,其中i,j,k都是虛數單位 i i j j k k 1 i j k,j i k 可以把...