我們首先研究關節坐標的微小變化如何影響末端執行器的位姿。使用齊次坐標變換表示位姿,我們可以通過一個一階微分近似得到位姿相對於關節坐標的導數:
根據
的定義,可以得到
其中,
表示末端執行器的平移位移。下面我們舉個例子
>> mdl_puma560
>> T0 = p560.fkine(qn);
>> dq = 1e-6;
>> Tp = p560.fkine(qn + [dq 0 0 0 0 0]);
>> dTdq1 = (Tp - T0) / dq
dTdq1 =
0.0000 -1.0000 -0.0000 0.1500
-0.0000 -0.0000 1.0000 0.5963
0 0 0 0
0 0 0 0
得到的 矩陣顯然不是齊次變換矩陣,其左上角的 矩陣不是正交矩陣,右下角元素不為1。這說明了什么呢?
我們將dTdq1
中的第四列元素與方程
的矩陣中相應元素相等,得到
它代表了
的變化引起的末端執行器位置的變化。
從圖中我們能更容易地理解——腰關節(
)的一個微小的旋轉將使得末端執行器在世界坐標系水平的
平面內移動,但卻不產生垂直方向上的移動。
>> Tp = p560.fkine(qn + [0 dq 0 0 0 0]);
>> dTdq2 = (Tp - T0) / dq
dTdq2 =
1.0000 -0.0000 -0.0000 0.0144
0.0000 0 0.0000 0
0.0000 0.0000 1.0000 0.5963
0 0 0 0
同樣可以寫出
正如我們所預料的,肩關節
的一個微小轉動會引起末端執行器在垂直的
平面內的運動,而沒有
方向運動。等式兩邊同除以一個無限小的時間長度
,則得到關節角速度和末端執行器速度之間的一個關系:
現在考慮方程
的矩陣中左上方的
子矩陣。我們將其乘以
,從而得到
的一階近似導數:
回顧前面對正交旋轉矩陣導數的定義,可以寫出:
從上式可以得出一個末端執行器角速度和關節速度之間的關系:
繼續利用前面算的關節1的導數,得到:
>> dRdq1 = dTdq1(1:3,1:3);
>> R = T0.R
R =
-0.0000 0.0000 1.0000
-0.0000 1.0000 -0.0000
-1.0000 -0.0000 -0.0000
>> S = dRdq1 * R'
S =
-0.0000 -1.0000 0.0000
1.0000 -0.0000 0.0000
0 0 0
這是一個反對稱矩陣,從中可以提取出角速度向量:
>> vex(S)
ans =
-0.0000
0.0000
1.0000
最后得出
從之前那張圖可以很容易地理解上式,末端執行器的角速度就是關節 1 繞着世界坐標系
軸旋轉的角速度。
對第二關節的微小運動重復上述過程,得到
>> dRdq2 = dTdq2(1:3,1:3);
>> S = dRdq2 * R'
S =
-0.0000 -0.0000 -1.0000
0.0000 -0.0000 -0.0000
1.0000 -0.0000 -0.0000
>> vex(S)
ans =
0.0000
-1.0000
0.0000
最后得出
再次參見之前的圖片來理解上式,關節 2 的轉動軸線在
軸負方向上,其旋轉將使機械臂得到一個負y軸方向上的角速度。
一個雅可比矩陣就是一個向量關於另一個向量的向量值函數導數。如果
,且
,則雅可比矩陣是一個
階的矩陣:
我們已經建立了各個關節的速度和機器人末端執行器的移動速度和角速度之間的數字關系。我們將機械臂的正運動學寫為以下函數形式:
對其求導數得到:
這是一個瞬時正運動學,其中
是一個空間速度,包含平移速度和旋轉速度分量。矩陣
是機械臂的雅可比矩陣或稱為幾何雅可比矩陣。可以通過jacob0
方法計算
>> J = p560.jacob0(qn)
J =
0.1501 0.0144 0.3197 0 0 0
0.5963 0.0000 0.0000 0 0 0
0 0.5963 0.2910 0 0 0
-0.0000 -0.0000 -0.0000 0.7071 -0.0000 1.0000
0.0000 -1.0000 -1.0000 -0.0000 -1.0000 -0.0000
1.0000 0.0000 0.0000 -0.7071 0.0000 -0.0000
矩陣的行對應於笛卡兒自由度,而列對應於各個關節——它們是對應於各相應關節單位速度的末端執行器空間速度。前兩列即為前面使用近似導數所計算出的結果。其右上方 階的“0”表明手腕關節的運動對末端執行器的平移運動沒有任何影響——這是機械臂擁有球腕和一個零長度工具的必然結果。