說到逆運動學(IK),其中最重要的一部分就是利用雅克比矩陣表示目標狀態和變量組之間的關系。具體文獻參考“Introduction to Inverse Kinematics with Jacobian Transpose, Pseudoinverse and Damped Least Squares methods”。我們今天主要介紹雅克比矩陣在正運動學中的推導和應用。可能會用到一些我以前寫的一篇關於坐標變換的相關知識,有興趣的可以翻閱一下。
現在先假設我們已經知道一些先驗知識,比如機械臂是由一些關節(Joint)連接的,一直從基座(base)連接到末端執行器(End-Effector),關節一般只有一個自由度(要么是旋轉,要么是平移),末端執行器有六個自由度。如圖1所示,我們已經將機械臂的結構描述的很清楚了。我們現在就是要解決,如何通過每一個關節的自由度求出末端執行器的角速度和線速度。這里在引入一個瞬時動力學的概念,就是任意關節運動,末端執行器也會跟着運動,如果時間足夠小的話,我們可以看作關節和末端執行器都是瞬時變化的。現在我們問題也就轉變成找ΔQ(關節的變化)和ΔX(末端執行器的變化)之間的關系。
圖1
我們先確定一些變量,我們對於旋轉關節(revolute)一般討論的是角度的變化,對於平移關節(prismatic)一般討論的是距離的變化。這里為了統一表示,我們將角度和距離統稱為通道量,記為q。同時,我們將目標狀態(就是指末端執行器的角速度和線速度)記為向量組X={x1,x2,x3,x4,x5,x6}。好了,准備工作差不多了,現在我們來推導公式了。我們假設X中的每一項都是由q求出來的(事實上也是如此),記為x=f(q)。這樣我們可以得到一組等式:
圖2
根據上面等式,我們可以進行擴展。我們對X中的每一項進行全微分,等式的右邊對所有的q進行偏導。具體展開式如下 , 另外我們可以將圖3左邊的展開式轉化成右邊的矩陣形式:
圖3
可以發現一些結論,比如矩陣的行等於X中的項數m,也就是末端執行器的自由度個數,而矩陣的列等於Q中的項目數,也就是關節的個數。我們現在很自然的將上文中提到的ΔQ和ΔX聯系起來了。這里得到的這個矩陣我們一般稱為雅克比矩陣(Jacobian Matrix),記為J。上面的等式可以簡寫成:
圖4
這里,雅克比矩陣的推導就完成了。雅克比主要聯系的是ΔQ和ΔX,是瞬時運動學的重要組成部分。在機器人學中,雅克比矩陣主要是用來求末端執行器的角速度和線速度,ΔQ和ΔX在時間片很小的情況下是可以用來表示速度的。在逆運動學中,我們通常利用末端執行器的自由度反算每個節點的自由度,這是我們只要將ΔX乘以雅克比矩陣的逆就可以得到Q的變化了。
以前我也說過,人體運動主要計算的主要是位置信息和速度信息的變化。所以對於機械臂來說,我們最終想得到的也就是末端執行器的位置和速度。這里重點說一下怎么利用正運動學求末端執行器的線速度和角速度。我們知道關節分為旋轉關節和平移關節,那么這兩種關節分別對線速度和角速度的影響如圖5所示。
圖5
我們逐項分析一下。平移關節對末端執行器的角速度是沒有影響的;平移關節沿自身的Z軸移動,對末端執行器的線速度提供一個Z軸方向的分速度。旋轉關節對末端執行器的角速度也是提供一個分量,角速度分量的方向也是沿Z軸的。旋轉關節對末端執行器的線速度影響比較復雜,我們想象一下圓盤,現在圓盤隨着圓心旋轉,越遠離圓心,P點的速度越快。我們結合圖5和圖6,Ωi和Pin的叉乘的結果等於vp。這也就是旋轉關節對於末端執行器線速度的影響。下面進行公式推導。
圖6
首先,我們來看一下Vi和Ωi的表示,其實這兩個量就是通道量乘上其方向向量,所以可以得到圖7的兩個公式:
圖7
根據Vi和Ωi,我們可以寫出末端執行器的角速度和線速度的公式:
圖8
這里,ε有兩個值0和1,當ε表示的是平移矩陣的時候值為1,表示的是旋轉矩陣的時候值為0。這樣就得到線速度和角速度的公式,我們擴展一下公式:
圖9
這里,我們就得到了線速度v和角速度ω跟各關節通道q之間的關系。另外,可以發現,在這兩個公式是蘊含了雅克比矩陣的,我已經用紅線標出來了。這就可以得到整個的雅克比矩陣:
圖10
我們再對雅克比矩陣進一步分析。對於線速度而言,當前的公式比較難以計算,我們換一種思路。我們一般可以比較容易的得到末端執行器的位置變化xp,所以我們可以根據對xp的微分求出線速度。改進的公式如下:
圖11
寫到這里,我們就完完全全的得到了通道q和線速度v以及角速度ω之間的關系。這也是機器人學中求解機械臂的最常用方法。
下面舉個例子,加深一下對雅可比矩陣的認識。如圖12所示,這是一個二維的機械臂,各個關節的通道已經給出了,機械臂的長度也已經給出,下面就是如何求解末端執行器的角速度和線速度。
圖12
我們先來看線速度。P1的速度肯定是為0的,后面節點的速度其實就是一個累加過程,各個節點的線速度如下:
圖12
s1表示的是sinθ1,c1表示的是cosθ1,s2表示的是sinθ2,c2表示的是cosθ2,s12表示的是sin(θ1+θ2),c12表示的是cos(θ1+θ2)。這里牽扯到一些向量叉乘的計算,可以翻閱相關的數學書籍,就不在詳述了。我們下面接着看角速度的求解, 這個就比較簡單了,具體公式如下:
圖13
接下來,我們根據VP3和ω3的公式就可以得到雅克比矩陣,如下所示:
圖14