关于位姿变换的一点体会
關于位姿變換的一點體會
- 1.題外話
- 2.剛體的位姿變換
- 2.1 位姿變換的定義
- 2.2 旋轉矩陣的具體形式
- 2.2.1 二維情況
- 2.2.2 三維情況
- 3.旋轉方向
- 4.平移方向
1.題外話
對于剛體的位姿變換問題,以前總覺得很簡單,不就是個旋轉平移嘛。可是幾天手動做了的坐標變換卻做了很久才做好。究其原因,還是有些問題沒弄清楚。所以,今天在此寫篇博客,徹底把這個過程捋一捋。
2.剛體的位姿變換
2.1 位姿變換的定義
確實,剛體的姿態變換就兩部分:旋轉和平移。先來看看書上是怎么介紹旋轉和平移的。在《視覺slam十四講》中,對于這部分內容是這樣將的:
我們設某個單位正交基(e1,e2,e3)(e_{1},e_{2},e_{3})(e1?,e2?,e3?)經過一次旋轉,變成了 (e1′,e2′,e3′)(e'_{1},e'_{2},e'_{3})(e1′?,e2′?,e3′?)。那么,對于同一個向量 aaa(注意該向量并沒有隨著坐標系的旋轉而發生運動),它在兩個坐標系下的坐標為[a1;a2;a3]T[a_{1}; a_{2}; a_{3}]^T[a1?;a2?;a3?]T 和 [a′1;a′2;a′3]T[a′_{ 1}; a′_{ 2}; a′ _{3}]^T[a′1?;a′2?;a′3?]T。根據坐標的定義,有:
為了描述兩個坐標之間的關系,我們對上面等式左右同時左乘[e1T,e2T,e3T]T[e^T_{1},e^T_{2},e^T_{3}]^T[e1T?,e2T?,e3T?]T,那么左邊的系數變成了單位矩陣,所以
我們把中間的陣拿出來,定義成一個矩陣 RRR。這個矩陣由兩組基之間的內積組成,刻畫了旋轉前后同一個向量的坐標變換關系。只要旋轉是一樣的,那么這個矩陣也是一樣的。可以說,矩陣 RRR 描述了旋轉本身。因此它又稱為旋轉矩陣。
在歐氏變換中,除了旋轉之外還有一個平移。考慮世界坐標系中的向量 aaa,經過一次旋轉(用RRR 描述)和一次平移 ttt 后,得到了 a′a′a′,那么把旋轉和平移合到一起,有:
a′=Ra+ta′= Ra + ta′=Ra+t
其中, ttt 稱為平移向量。相比于旋轉,平移部分只需把這個平移量加到旋轉之后的坐標上,顯得非常簡潔。
以上內容摘自《視覺slam十四講》第三章中的內容。
2.2 旋轉矩陣的具體形式
從上面的內容可以看到,旋轉矩陣是由兩組基向量的內積組成。接下來再看看沿各個坐標軸進行旋轉的旋轉矩陣怎樣寫。
2.2.1 二維情況
對于二維的情況,比較簡單。旋轉矩陣(旋轉方向為逆時針)為:
R=[cos(θ)?sin(θ)sin(θ)cos(θ)]R= \left[ \begin{matrix} cos(\theta) & -sin(\theta)\\ sin(\theta) & cos(\theta) \end{matrix} \right] R=[cos(θ)sin(θ)??sin(θ)cos(θ)?]
2.2.2 三維情況
繞x軸進行旋轉(在yz平面逆時針旋轉)
R=[1000cos(θ)?sin(θ)0sin(θ)cos(θ)]R= \left[ \begin{matrix} 1& 0& 0\\ 0&cos(\theta) & -sin(\theta)\\ 0&sin(\theta) & cos(\theta) \end{matrix} \right] R=???100?0cos(θ)sin(θ)?0?sin(θ)cos(θ)????
繞y軸進行旋轉(在xz平面逆時針旋轉)
R=[cos(θ)0?sin(θ)010sin(θ)0cos(θ)]R= \left[ \begin{matrix} cos(\theta) & 0& -sin(\theta)\\ 0&1&0 \\ sin(\theta)& 0& cos(\theta) \end{matrix} \right] R=???cos(θ)0sin(θ)?010??sin(θ)0cos(θ)????
繞z軸進行旋轉(在xy平面逆時針旋轉)
R=[cos(θ)?sin(θ)0sin(θ)cos(θ)0001]R= \left[ \begin{matrix} cos(\theta) & -sin(\theta)& 0\\ sin(\theta)& cos(\theta)& 0\\ 0&0&1 \\ \end{matrix} \right] R=???cos(θ)sin(θ)0??sin(θ)cos(θ)0?001????
3.旋轉方向
下面來考慮一個簡單的問題。
問題:將點p=(1,0)p =(1,0)p=(1,0),按照旋轉矩陣RRR進行旋轉,旋轉后的坐標為多少?
R=[cos(θ)?sin(θ)sin(θ)cos(θ)],θ=π/2R = \left[ \begin{matrix} cos(\theta) & -sin(\theta)\\ sin(\theta) & cos(\theta) \end{matrix} \right] ,\theta=\pi/2 R=[cos(θ)sin(θ)??sin(θ)cos(θ)?],θ=π/2
這個問題很簡單,口算都可以算出答案是p′=(0,1)p'=(0,1)p′=(0,1)。
但這里面有些問題需要搞清楚。按照旋轉矩陣RRR進行旋轉,我們將點p=(0,1)p =(0,1)p=(0,1)變換為了p′=(1,0)p'=(1,0)p′=(1,0)。相當于把點ppp逆時針旋轉了π/2\pi/2π/2。這并沒有什么問題。在上一節的旋轉矩陣的定義中,我們也說了這種形式的旋轉矩陣是進行逆時針旋轉。
但是問題在于,很多情況下點的位置是固定的,它并不會發生變化。旋轉之后發生變化的是坐標系。也就是說,旋轉過后,點ppp的實際位置并沒有變,它還是在那個位置。但是它的坐標變了(p′=(0,1)p'=(0,1)p′=(0,1)),也就是所在的坐標系變了。那坐標系是怎么旋轉的呢?剛好與坐標旋轉的方向相反——順時針旋轉。
這個道理同時適用于三維的情況。
我覺得,能把這個問題想清楚很重要。
4.平移方向
進行平移變換的時候,同樣存在上面的問題。
我們可以考慮一下。將點p=(1,1)p = (1,1)p=(1,1)按向量(1,2)(1,2)(1,2)進行平移,很顯然平移后的坐標為p′=(2,3)p'=(2,3)p′=(2,3)。如下圖所示:
同樣,很多情況下點的位置是固定的,變化的是坐標。所以,如果點的位置不變,在進行平移之后點的坐標變為了p′=(2,3)p'=(2,3)p′=(2,3),那只能是坐標系進行了平移。那坐標系是怎么平移的呢?——與坐標平移方向相反,按向量(?1,?2)(-1,-2)(?1,?2)進行平移。如下圖所示
總結一下:關于旋轉和平移,必須要想清楚是對點(或向量)進行旋轉平移還是對坐標系進行旋轉平移。
總結
以上是生活随笔為你收集整理的关于位姿变换的一点体会的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: C++:Lambda函数学习
- 下一篇: 最小二乘问题总结