目錄
1. 引言
上一篇文章我們講到了齊次變換矩陣,表面上看我們得到了一個十分簡潔的表達式。如果你認爲到這裏關於齊次變換的問題已經十分明瞭那就大錯特錯了。相反,我認爲這恰恰是混亂的開始。
舉個例子,首先一個座標系{A}繞其軸旋轉得到座標系{B},根據前面講過的知識你很容易明白座標系{A}和{B}之間的關係爲。可是如果座標系{B}再繞自身的軸旋轉得到座標系{C},那麼座標系{A}和座標系{C}之間是什麼關係呢?還有如果座標系{B}繞座標系{A}的軸旋轉得到座標系{D},那麼座標系{A}和座標系{D}之間是什麼關係呢?
你可能沒有答案。課堂上這個問題也總是被匆匆略過,而我認爲這裏纔是應該花大量的精力去講解的地方。只告訴我當繞原座標系旋轉時變換矩陣要倒着乘,當繞新座標系旋轉時變換矩陣要正着乘我是無法接受的。
例子中的問題其實涉及到了齊次變換矩陣的幾種解讀,從這幾種解讀方式出發,我們很容易理解矩陣相乘的順序到底是怎樣的以及爲什麼是這樣的。
2. 齊次變換矩陣的三種解讀
斯坦福大學公開課---機器人學,這門課對這三種解讀給出了很恰當的總結:座標系表示(coordinate representation)、座標系變換(coordinate transformation)、點的操作算子(point operator)。接下來我們分別對它們進行解釋。
2.1 座標系表示
所謂座標系表示指的是,齊次變換矩陣可以用來表示一個座標系。我們來看如下圖兩個座標系{A}和{B}。通過上一篇文章機器人正運動學---齊次變換矩陣的介紹我們知道座標系{A}和座標系{B}之間的關係爲:
在文章機器人正運動學---理解變換矩陣中我們介紹了旋轉矩陣({A}和{B}的姿態關係)代表的是座標系{B}三個軸的單位矢量在座標系{A}中的投影(即在座標系{A}中座標系{B}的三軸單位矢量的座標),在文章機器人正運動學---齊次變換矩陣中我們也看到({A}和{B}的位置關係)代表的是座標系{B}的原點在座標系{A}中的座標。
我們知道,要想唯一確定一個座標系需要兩個要素,一個是原點,一個是軸矢量。這兩個要素在上面的齊次變換矩陣中已經全部包含了,因此我們說齊次變換矩陣可以用來表示一個座標系,而就是座標系{B}在座標系{A}中的表示
2.2 座標系變換
所謂座標系變換指的是,齊次變換矩陣可以用來描述一個座標系經過怎樣的平移和旋轉能夠變換到另一個座標系。舉個例子,兩個座標系{A}和{B}之間的齊次變換矩陣可以表示爲:
其中代表繞軸旋轉對應的旋轉矩陣,,代表在方向上平移1,2,3。這個時候我們就可以通過對座標系{A}進行一些平移和旋轉最終與座標系{B}重合。這個操作過程對應於下面這張圖。
我們把這個操作過程分爲兩個步驟。
第一步將座標系{A}沿着橘色的向量平移至與座標系{C}重合,我們很容易知道這個平移量是;
第二步將座標系{C}繞它的軸旋轉至與座標系{B}重合,同樣容易知道這個旋轉量是。因此我們說齊次變換矩陣可以用來描述座標系的變換關係,而就是座標系{A}經過平移和旋轉可以得到座標系{B}。我們可以形象地描述(不一定恰當)這個變換爲:
2.3 點的操作算子
所謂點的操作算子指的是,齊次變換矩陣可以用來對同一個座標系內的點進行平移和旋轉操作。注意這種理解和前面兩種大不一樣。前兩種都是在描述兩個座標系之間的關係。在討論齊次變換矩陣對點的操作時我們的討論僅限於一個座標系。
舉個例子在座標系{A}中有一個點,我們希望這個點繞座標系{A}的軸旋轉得到一個新的點。這個時候應該怎麼做呢?很簡單,我們寫出如下的變換矩陣:
用這個變換矩陣去乘點就可以得到點啦。
如果你覺得理解這個有點困難,可以倒回到第一種理解來解釋對點的操作問題。這個時候我們假設有一個座標系{B}開始時與座標系{A}完全重合,而點又固定在座標系{B}中,這樣在把點繞座標系{A}的軸旋轉時,座標系{B}同樣是繞座標系{A}的軸旋轉。此時兩個座標系之間的變換矩陣即爲。由於點固定在座標系{B}中,因此其在座標系{B}中的座標不變,因此經過旋轉之後點在座標系{A}中的座標即爲。我們可以看出這個點就是前面提到的在座標系{A}中的點。
光用文字來描述似乎有些凌亂,下面我們用圖把上面一段話再重新捋一遍,首先我們假設空間中一點在座標系{A}中的座標爲,爲了便於看圖,座標系我們只畫出y,z兩個軸,所有點的x座標均爲0。與點固連的座標系稱爲{B}。座標系{B}最開始與座標系{A}重合,如下圖所示就是問題的初始狀態。
接下來開始旋轉操作。我們是希望點沿座標系{A}的軸旋轉,注意因爲座標系{B}和點是固連在一起的,所以座標系{B}也會繞着座標系{A}的軸旋轉,經過旋轉之後就得到如下的圖的狀態。點就是點旋轉之後對應的點。這裏有一點需要特別注意,由於座標系{B}與點固連,那麼經過旋轉後得到的點在座標系{B}中的座標數值實際上沒有發生任何變化(和最開始的時候點在座標系{A}中的座標值是一樣的),請仔細體會這句話。
下面我們把變換前後的兩種狀態合併起來得到下面的圖
至此我們可以得出這樣一個結論,點在座標系{A}中的座標值與點在{B}中的座標值是一致的。那麼如何求解點在座標系{A}中的座標值呢?仔細思考一下是不是這樣一種表達:
解釋一下這個公式,代表點在座標系{A}下的座標。代表在座標系{B}下的座標。還記得我們之前說的嗎,在座標系{B}下的座標數值上與在座標系{A}中的座標數值一致!以上公式可以改寫爲
至此我們看到實現了將點旋轉到點。你也可以清晰的看到上一個公式點的上標都是A,和我們之前說的同一個空間點在不同座標系下的表達還是有區別的。
3. 解決問題
3.1 齊次變換矩陣的逆
上一篇文章機器人正運動學---齊次變換矩陣中我們遺留了一個問題就是齊次變換矩陣的逆。通常而言求任意矩陣的逆是比較困難的。但是由於齊次變換矩陣的良好性質以及很強的幾何特徵,我們很容易直接寫出它的逆。
已知如下的齊次變換矩陣:
首先看旋轉部分,在文章機器人正運動學---理解變換矩陣中我們提到過的列代表座標系{B}的三軸矢量在座標系{A}中的投影,行代表座標系{A}的三軸矢量在座標系{B}中的投影,因此,的轉置就是其逆。
其次來看平移部分,代表座標系{B}的原點在座標系{A}中的座標,而我們需要的是座標系{A}的原點在座標系{B}中的座標,即,從幾何的角度看,這兩個向量恰好是相反向量,因此我們首先把向量取反得到。到這一步還沒有完,因爲目前爲止這個向量是在座標系{A}中描述的,因此我們要將它變換到座標系{B}中的描述,即爲,其中代表的轉置。
至此我們得到了座標系{A}相對於座標系{B}的姿態,以及座標系{B}中描述的座標系{A}原點座標。因此變換矩陣的逆即爲:
3.2 多重變換時的順序
在此我們解決文章開頭提出的多重變換時如何排列變換矩陣。其實就是兩種情況,第一種情況是所有的變換都相對於最開始的座標系;第二種情況是所有變換都相對於新得到的座標系。我們分情況討論。
首先來看第一種情況,座標系{A}繞其軸旋轉得到座標系{B},之後座標系{B}又繞座標系{A}的軸旋轉得到座標系{C}。此時我們用對齊次變換矩陣的第三種理解來求得座標系{C}和座標系{A}之間的關係。我們假設在座標系{A}中有一個點,在第一次變換時我們假設有一個座標系{T1}與座標系{A}重合,同時點固定在座標系{T1}中,經過第一次變換後得到在{A}中新的點的座標爲(注意這是點在座標系{A}中的座標)。在第二次變換時我們假設又有一個座標系{T2}與座標系{A}重合,同時點又固定在座標系{T2}中,經過第二次變換後得到在{A}中新的點的座標爲,因此我們可以最終確定座標系{A}和{C}之間的變換關係爲:
再來看第二種情況,座標系{A}繞其軸旋轉得到座標系{B},之後座標系{B}又繞其軸旋轉(注意這裏是繞座標系{B}的軸)。此時我們用齊次變換矩陣的第二種理解來求座標系{C}和座標系{A}之間的關係。設空間中有一個點,它在座標系{C}中的座標爲,我們首先看座標系{B}和座標系{C}之間的關係,由於{B}繞自身的軸旋轉就可以得到{C},因此,同一個空間點在座標系{B}中的座標爲。我們又知道座標系{A}繞其軸旋轉得到座標系{B},因此,同一個空間點在座標系{A}中的座標爲,因此我們可以最終確定座標系{A}和{C}之間的變換關係爲:
這也驗證了文章開頭提出的結論,那就是繞着原座標系旋轉就倒着乘,繞着新座標系旋轉就正着乘。
4. 總結
這篇文章主要介紹了齊次變換矩陣的三種理解以及解決了一個比較容易造成混亂的多重變換時變換矩陣的順序問題。由於個人能力有限,所述內容難免存在疏漏,歡迎指出,歡迎討論。