中正平和的機器人學筆記——5. 機械臂動力學

0. 基礎知識

0.1 線加速度

上一篇中我們講到了在座標系{A}和座標系{B}原點重合時,BQ^BQ的速度矢量的表示方式:

AVQ^AV_Q = BARBVQ^A_BR^BV_Q + AΩB^A\Omega_B ×\times BARBQ^A_BR^BQ (5.1)

我們可以將左側改寫爲如下形式:

ddt\frac{\mathrm{d}} {\mathrm{d}t}(BARBQ^A_BR^BQ) = BARBVQ^A_BR^BV_Q + AΩB^A\Omega_B ×\times BARBQ^A_BR^BQ (5.2)

記住這種形式的方程,會在求解加速度方程時很有用。
接下來推導線加速度的公式,大家一起動手推一下吧!
對式5.1求導,可得當座標系{A}和座標系{B}原點重合時,BQ^BQ的加速度在座標系{A}中的表達式:

AV˙Q^A\dot{V}_Q = ddt\frac{\mathrm{d}} {\mathrm{d}t}(BARBVQ^A_BR^BV_Q) + AΩ˙B^A\dot{\Omega}_B ×\times BARBQ^A_BR^BQ + AΩB^A\Omega_B ×\times ddt\frac{\mathrm{d}} {\mathrm{d}t}(BARBQ^A_BR^BQ) (5.3)

對式5.3右側的第一項和最後一項代入式5.2,整理後可得,

AV˙Q^A\dot{V}_Q = BARBV˙Q^A_BR^B\dot{V}_Q + 2AΩB^A\Omega_B ×\times BARBVQ^A_BR^BV_Q + AΩ˙^A\dot{\Omega} ×\times BARBQ^A_BR^BQ + AΩB^A\Omega_B ×\times (AΩB^A\Omega_B ×\times BARBQ^A_BR^BQ) (5.4)

將上式擴展到原點不重合的情況,就得到了一般的表達式:

AV˙Q^A\dot{V}_Q = AV˙BORG^A\dot{V}_{BORG} + BARBV˙Q^A_BR^B\dot{V}_Q + 2AΩB^A\Omega_B ×\times BARBVQ^A_BR^BV_Q + AΩ˙^A\dot{\Omega} ×\times BARBQ^A_BR^BQ + AΩB^A\Omega_B ×\times (AΩB^A\Omega_B ×\times BARBQ^A_BR^BQ) (5.5)

另外要指出,當計算旋轉關節時,BQ^BQ爲常量,那麼,

BVQ^BV_Q = BV˙Q^B\dot{V}_Q = 0
因此相應地,式5.5就可以簡化爲:

AV˙Q^A\dot{V}_Q = AV˙BORG^A\dot{V}_{BORG} + AΩ˙^A\dot{\Omega} ×\times BARBQ^A_BR^BQ + AΩB^A\Omega_B ×\times (AΩB^A\Omega_B ×\times BARBQ^A_BR^BQ) (5.6)

0.2 角加速度

接下來我們推導角加速度公式。假設座標系{B}以角速度AΩB^A\Omega_B相對於座標系{A}轉動,同時座標系{C}以角速度BΩC^B\Omega_C相對於座標系{B}轉動。

AΩC^A\Omega_C = AΩB^A\Omega_B + BARBΩC^A_BR^B\Omega_C (5.7)

對式5.6求導可得,

AΩ˙C^A\dot{\Omega}_C = AΩ˙B^A\dot{\Omega}_B + ddt(BARBΩC)\frac{\mathrm{d}}{\mathrm{d}t}(^A_BR^B\Omega_C) (5.8)

同樣我們將式5.2帶入上式最後一項,可以得到,

AΩ˙C^A\dot{\Omega}_C = AΩ˙B^A\dot{\Omega}_B + BARBΩ˙C^A_BR^B\dot{\Omega}_C + AΩB^A\Omega_B ×\times BARBΩC^A_BR^B\Omega_C (5.9)

上式用於計算機械臂連桿的角加速度。

0.3 質量分佈

這裏引入慣性張量(inertia tensor) 的概念,他可以表徵剛體質量分佈的方式,是對物體慣性矩的廣義度量。給出如下3 ×\times 3矩陣,

AI^AI = (IxxIxyIxzIxyIyyIyzIxzIyzIzz)\begin{pmatrix} I_{xx} & -I_{xy} & -I_{xz}\\ -I_{xy} & I_{yy} & -I_{yz}\\ -I_{xz} & -I_{yz} & I_{zz} \end{pmatrix}

其中各個元素分別爲:

IxxI_{xx} = V(y2+z2)ρ dv\iiint_{V}^{}(y^2 + z^2)\rho\,dv
IyyI_{yy} = V(x2+z2)ρ dv\iiint_{V}^{}(x^2 + z^2)\rho\,dv
IzzI_{zz} = V(x2+y2)ρ dv\iiint_{V}^{}(x^2 + y^2)\rho\,dv
IxyI_{xy} = Vxyρ dv\iiint_{V}^{}xy\rho\,dv
IyzI_{yz} = Vxzρ dv\iiint_{V}^{}xz\rho\,dv
IzxI_{zx} = Vyzρ dv\iiint_{V}^{}yz\rho\,dv

IxxI_{xx}IyyI_{yy}IzzI_{zz}稱爲慣性矩(mass moments of inertia),其餘三個稱爲慣量積(mass products of inertia)。我們在選擇座標軸時,最好使得剛體的慣量積爲零,此時座標系的軸也被稱爲主軸(principal axes),相應的慣量矩被稱爲主慣性矩(principal moments of inertia)

1. 牛頓—歐拉遞推動力學方程(Iterative Newton-Euler Dynamic Formulation)

這個方法就是假設已知關節的位置、速度、加速度(Θ\Theta, Θ˙\dot{\Theta}, Θ¨\ddot{\Theta})。結合前面我們鋪墊過的運動學和質量分佈知識,就可以計算出驅動關節運動所需要的力矩。這個算法主要包括三部分:
其一是外推法,運用運動學知識,通過對每個連桿運用牛頓-歐拉方程依次從連桿1到連桿n向外遞推計算連桿的速度和加速度;
其二是運用牛頓歐拉方程,通過每個連桿質心的速度和加速度,計算作用在連桿質心上的慣性力和力矩;
其三是內推法,通過連桿間的相互作用力和力矩,從連桿n到連桿1向內迭代計算關節驅動力矩。
通常在一些教材將這個算法分爲兩部分:內推法和外推法。
中間運用牛頓歐拉方程有的寫在內推法裏,有的寫在外推法裏,有點混亂。比如《機器人學導論》這本書裏,文字上解釋的時候把牛頓歐拉方程這個算到內推法裏,但是在算法中又算到外推法裏,真實捉雞。。。所以這裏從我的觀點來看,乾脆就當作三部分得了。不過仔細想想,從算法角度的話,算到外推法裏很合理,同一個循環算了速度和加速度,接着算力和力矩;但是從理解角度,把這部分算到內推法裏也很合理,外推法運動學算速度和加速度,內推法算力和力矩。老鐵沒毛病!所以怎麼理解就看大家了。。。

1.1 外推法(outwards iterations)——計算速度和加速度

上一篇雅可比矩陣部分我們已經講過了速度的“傳遞”問題:

i+1ωi+1^{i+1}\omega_{i+1} = ii+1R_i^{i+1}R iωi^i\omega_i + θ˙i+1\dot{θ}_{i+1} i+1Z^i+1^{i+1}\hat{Z}_{i+1} (5.10)

那麼再根據式5.2,

ddt\frac{\mathrm{d}} {\mathrm{d}t}(BARBQ^A_BR^BQ) = BARBVQ^A_BR^BV_Q + AΩB^A\Omega_B ×\times BARBQ^A_BR^BQ (5.2)

就可以推導出角加速度的變換公式:

i+1ω˙i+1^{i+1}\dot{\omega}_{i+1} = ii+1R_i^{i+1}R iω˙i^i\dot{\omega}_i + θ¨i+1\ddot{θ}_{i+1} i+1Z^i+1^{i+1}\hat{Z}_{i+1} + ii+1Riωi^{i+1}_iR^i\omega_i ×\times θ¨i+1\ddot{\theta}_{i+1} i+1Z^i+1^{i+1}\hat{Z}_{i+1} (5.11_1)

如果第i+1個關節式移動關節,那麼上式就可以化簡爲:

i+1ω˙i+1^{i+1}\dot{\omega}_{i+1} = ii+1R_i^{i+1}R iω˙i^i\dot{\omega}_i (5.11_2)

接下來是推導線加速度公式,首先以免大家遺忘,再給出線速度公式,

i+1vi+1^{i+1}v_{i+1} = ii+1R_i^{i+1}R ( ivi+iωi×iPi+1)\left( \ ^iv_i+ ^i\omega_i \times ^iP_{i+1} \right) (5.12)

應用式5.6如下,

AV˙Q^A\dot{V}_Q = AΩ˙^A\dot{\Omega} ×\times BARBQ^A_BR^BQ + AΩB^A\Omega_B ×\times (AΩB^A\Omega_B ×\times BARBQ^A_BR^BQ) (5.6)

就可以得到每個連桿座標系原點的線加速度,

i+1v˙i+1^{i+1}\dot{v}_{i+1} = ii+1R_i^{i+1}R [ iv˙i+iω˙i×iPi+1+iωi×(iωi×iPi+1)]\left[\ ^i\dot{v}_i+ ^i\dot{\omega}_i \times ^iP_{i+1} + ^i\omega_i \times \left( ^i\omega_i \times ^iP_{i+1}\right)\right] (5.13_1)

如果第i+1個關節是移動關節,那麼上式就應當爲:

i+1v˙i+1^{i+1}\dot{v}_{i+1} = ii+1R_i^{i+1}R [ iv˙i+iω˙i×iPi+1+iωi×(iωi×iPi+1)]+2i+1ωi+1×d˙i+1i+1Z^i+1+d¨i+1i+1Z^i+1\left[\ ^i\dot{v}_i+ ^i\dot{\omega}_i \times ^iP_{i+1} + ^i\omega_i \times \left( ^i\omega_i \times ^iP_{i+1}\right)\right] + 2^{i+1}\omega_{i+1} \times \dot{d}_{i+1}\\^{i+1}\hat{Z}_{i+1} + \ddot{d}_{i+1}\\^{i+1}\hat{Z}_{i+1} (5.13_1)

同理我們可以得到每個連桿質心的線加速度:

iv˙Ci^i\dot{v}_{C_i} = iω˙i×iPCi+iωi×(iωi×iPCI)+iv˙i^i\dot{\omega}_i \times \\^iP_{C_i} + \\^i\omega_i \times \left( ^i\omega_i \times \\^iP_{C_I}\right) + ^i\dot{v}_i (5.14)

整理一下外推法,就是以下公式:

i+1ωi+1^{i+1}\omega_{i+1} = ii+1R_i^{i+1}R iωi^i\omega_i + θ˙i+1\dot{θ}_{i+1} i+1Z^i+1^{i+1}\hat{Z}_{i+1} (5.10)

i+1ω˙i+1^{i+1}\dot{\omega}_{i+1} = ii+1R_i^{i+1}R iω˙i^i\dot{\omega}_i + θ¨i+1\ddot{θ}_{i+1} i+1Z^i+1^{i+1}\hat{Z}_{i+1} + ii+1Riωi^{i+1}_iR^i\omega_i ×\times θ¨i+1\ddot{\theta}_{i+1} i+1Z^i+1^{i+1}\hat{Z}_{i+1} (5.11_1)

i+1vi+1^{i+1}v_{i+1} = ii+1R_i^{i+1}R ( ivi+iωi×iPi+1)\left( \ ^iv_i+ ^i\omega_i \times ^iP_{i+1} \right) (5.12)

i+1v˙i+1^{i+1}\dot{v}_{i+1} = ii+1R_i^{i+1}R [ iv˙i+iω˙i×iPi+1+iωi×(iωi×iPi+1)]\left[\ ^i\dot{v}_i+ ^i\dot{\omega}_i \times ^iP_{i+1} + ^i\omega_i \times \left( ^i\omega_i \times ^iP_{i+1}\right)\right] (5.13_1)

i+1v˙Ci+1^{i+1}\dot{v}_{C_{i+1}} = i+1ω˙i+1×i+1PCi+1+i+1ωi+1×(i+1ωi+1×i+1PCi+1)+i+1v˙i+1^{i+1}\dot{\omega}_{i+1} \times \\^{i+1}P_{C_{i+1}} + \\^{i+1}\omega_{i+1} \times \left( ^{i+1}\omega_{i+1} \times \\^{i+1}P_{C_{i+1}}\right) + ^{i+1}\dot{v}_{i+1} (5.14)

1.2 牛頓-歐拉方程

前面通過外推法計算出每個連桿質心的線加速度和角加速度後,運用牛頓-歐拉公式便可計算出作用在連桿質心上的慣性力和力矩:

FiF_i = mv˙Cim\dot{v}_{C_i} (5.15)

NiN_i = CiIω˙i+ωi×CiIωi^{C_i}I\dot{\omega}_i + \omega_i \times \\^{C_i}I\omega_i (5.16)

式中座標系{CiC_i}的原點位於連桿質心,各座標系方向與原連桿座標系{ii}方向相同。

1.3 內推法(inward iterations)——計算力和力矩

上一節計算出每個連桿上的力和力矩後,我們就要計算出產生這些力和力矩的需要施加在關節上的關節力矩。
先規定兩個符號:
fif_i = 連桿i1i-1作用在連桿ii上的力;
nin_i = 連桿i1i-1作用在連桿ii上的力矩。
在這裏插入圖片描述
首先我們將作用在連桿ii上所有的力相加,得到力平衡方程:

iFi^iF_i = ifii+1iR^if_i - ^i_{i+1}R i+1fi+1^{i+1}f_{i+1} (5.17)

將所有作用在質心上的力矩相加,得到力矩平衡方程:

iNi^iN_i = iniini+1+(iPCi)×ifi(iPi+1iPCi)×ifi+1^in_i - \\^in_{i+1} + \left(-^iP_{C_i}\right) \times \\^if_i - \left(^iP_{i+1} -\\^iP_{C_i}\right) \times\\^if_{i+1} (5.18)

利用力平衡方程和附加旋轉矩陣的辦法,可以將上式化簡爲

iNi^iN_i = inii+1iRini+1iPCi×iFiiPi+1×i+1iR^in_i - \\^i_{i+1}R \\ ^in_{i+1} -\\^iP_{C_i} \times \\^iF_i - ^iP_{i+1}\times\\ ^i_{i+1}R ifi+1^if_{i+1} (5.19)

最後我們排列一下力和力矩方程,讓相鄰連桿按照序號大的向序號小的順序(也就是內推)來迭代:

ifi^if_i = iFi+i+1iR^iF_i + \\^i_{i+1}R i+1fi+1^{i+1}f_{i+1} (5.20)

ini^in_i = iNi+i+1iRini+1+iPCi×iFi+iPi+1×i+1iR^iN_i + \\^i_{i+1}R \\ ^in_{i+1} +\\^iP_{C_i} \times \\^iF_i + \\^iP_{i+1}\times\\ ^i_{i+1}R ifi+1^if_{i+1} (5.21)

那麼怎麼求得關節力矩呢?
在靜力學中,可以通過計算一個連桿施加於相鄰連桿的力矩在Z^\hat{Z}方向上分量求得:

τi\tau_i = iniTiZ^i^in_i\\^{Ti}\hat{Z}_i (5.22)

如果是移動關節,則有
τi\tau_i = ifiTiZ^i^if_i\\^{Ti}\hat{Z}_i (5.23)

式5.23和式5.24中的τ\tau表示線性驅動力。

1.4 牛頓-歐拉遞推動力學算法

我們把前面三節推導的結果整理以下,就是這個算法啦!
外推:i:05i : 0 \to 5 (把牛頓歐拉方程放到外推法裏)

i+1ωi+1^{i+1}\omega_{i+1} = ii+1R_i^{i+1}R iωi^i\omega_i + θ˙i+1\dot{θ}_{i+1} i+1Z^i+1^{i+1}\hat{Z}_{i+1} (5.10)

i+1ω˙i+1^{i+1}\dot{\omega}_{i+1} = ii+1R_i^{i+1}R iω˙i^i\dot{\omega}_i + θ¨i+1\ddot{θ}_{i+1} i+1Z^i+1^{i+1}\hat{Z}_{i+1} + ii+1Riωi^{i+1}_iR^i\omega_i ×\times θ¨i+1\ddot{\theta}_{i+1} i+1Z^i+1^{i+1}\hat{Z}_{i+1} (5.11_1)

i+1vi+1^{i+1}v_{i+1} = ii+1R_i^{i+1}R ( ivi+iωi×iPi+1)\left( \ ^iv_i+ ^i\omega_i \times ^iP_{i+1} \right) (5.12)

i+1v˙i+1^{i+1}\dot{v}_{i+1} = ii+1R_i^{i+1}R [ iv˙i+iω˙i×iPi+1+iωi×(iωi×iPi+1)]\left[\ ^i\dot{v}_i+ ^i\dot{\omega}_i \times ^iP_{i+1} + ^i\omega_i \times \left( ^i\omega_i \times ^iP_{i+1}\right)\right] (5.13_1)

i+1v˙Ci+1^{i+1}\dot{v}_{C_{i+1}} = i+1ω˙i+1×i+1PCi+1+i+1ωi+1×(i+1ωi+1×i+1PCi+1)+i+1v˙i+1^{i+1}\dot{\omega}_{i+1} \times \\^{i+1}P_{C_{i+1}} + \\^{i+1}\omega_{i+1} \times \left( ^{i+1}\omega_{i+1} \times \\^{i+1}P_{C_{i+1}}\right) + ^{i+1}\dot{v}_{i+1} (5.14)

i+1Fi+1^{i+1}F_{i+1} = mi+1i+1v˙Ci+1m_{i+1}\\^{i+1}\dot{v}_{C_{i+1}} (5.15)

i+1Ni+1^{i+1}N_{i+1} = Ci+1Ii+1i+1ω˙i+1+i+1ωi+1×Ci+1Ii+1ωi+1^{C_{i+1}}I_{i+1}\\^{i+1}\dot{\omega}_{i+1} + \\^{i+1}\omega_{i+1} \times \\^{C_{i+1}}I\\^{i+1}\omega_{i+1} (5.16)

內推:i:61i : 6 \to 1(注意序號)

ifi^if_i = iFi+i+1iR^iF_i + \\^i_{i+1}R i+1fi+1^{i+1}f_{i+1} (5.20)

ini^in_i = iNi+i+1iRini+1+iPCi×iFi+iPi+1×i+1iR^iN_i + \\^i_{i+1}R \\ ^in_{i+1} +\\^iP_{C_i} \times \\^iF_i + \\^iP_{i+1}\times\\ ^i_{i+1}R ifi+1^if_{i+1} (5.21)

τi\tau_i = iniTiZ^i^in_i\\^{Ti}\hat{Z}_i (5.22)

1.5 總結與補充

1.5.1 考慮重力的動力學算法

如果要考慮重力的話,只需要令0v˙0^0\dot{v}_0 = GG即可。

1.5.2 動力學方程的結構

用牛頓-歐拉方程對機械臂進行分析時,動力學方程可以表示爲如下形式

τ\tau = M(Θ)Θ¨ + V(Θ,Θ˙)+ G(Θ)M\left(\Theta \right) \ddot{\Theta} \ +\ V\left(\Theta, \dot{\Theta}\right) + \ G\left(\Theta \right) (5.23)

式中M(Θ)M\left(\Theta \right)爲機械臂的n×nn \times n 質量矩陣V(Θ,Θ˙)V\left(\Theta, \dot{\Theta}\right)n×1n \times 1離心力哥氏力矢量G(Θ)G\left(\Theta \right)n×1n \times 1重力矢量。質量矩陣可分爲四塊,主對角線的兩塊爲有效慣量,副對角線上的兩塊爲耦合慣量;哥氏力部分在高速時影響較爲顯著。
其實上面這個式子對於學過自控原理的同學應該比較熟悉,就是狀態空間表達式。

1.5.3總結

牛頓歐拉法邏輯還是很嚴密的,如果跟着一起推導的話,理解起來並不是太難,就怕一上來看到算法的一大坨公式就第一印象覺得很難,這樣的心態在學習新知識的時候是最要不得的。說起來,剛學完運動學部分覺得很簡單,然後甫一接觸動力學部分,看到成片公式也舉得有點煩躁。但是如我所說,一條條自己推導,結合實際去理解也就過去了。學習本就不是一件容易的事,在這個過程裏體會數學和力學的魅力豈不美哉(Or2)。。。

2. 拉格朗日動力學方程(Lagrangian Dynamic Formulation)

牛頓-歐拉方法是建立在動力學基本公式以及作用在連桿之間的約束力和力矩之上的。而另一種方法,也就是這一節要講的拉格朗日動力學方程法,則是從能量角度分析的,當然,最終兩種分析方法得到的結果應該是相同的。

2.1 動能方程

首先分析第ii根連桿的動能kik_i,可以表示爲

kik_i = 12mivCiTvCi+12iωiT CiIi iωi\frac{1}{2}m_iv_{C_i}^T v_{C_i} + \frac{1}{2}^i\omega_i^T \ ^{C_i}I_i \ ^i\omega_i (5.24)

式中第一項是基於連桿質心線速度的動能,第二項是連桿的角速度的動能。機械臂的動能是所有連桿動能之和,亦即

kk = i=1nki\sum_{i=1}^n k_i (5.25)

式5.24中的vCiv_{C_i}iωi^i\omega_iΘ\ThetaΘ˙\dot{\Theta}的函數,由此我們可知機械臂的動能可以表示爲關節位置和關節速度的標量函數。事實上也確實如此,機械臂的動能可以寫成

k(Θ,Θ˙)k\left(\Theta, \dot{\Theta}\right) = 12Θ˙TMΘ˙\frac{1} {2} \dot{\Theta}^TM\dot{\Theta} (5.26)

2.2 勢能方程

接下來我們考慮連桿的勢能。第ii根連桿的勢能uiu_i可以表示爲

uiu_i = mi 0gT 0PCi+uref-m_i \ ^0g^T \ ^{0}P_{C_i} + u_{ref} (5.26)

注意這裏的0g^0g3×13 \times 1的重力矢量,0PCi^0P_{C_i}位於第ii個連桿質心的矢量。

機械臂的總勢能爲各個連桿勢能之和,即

uu = i=1nui\sum_{i=1}^nu_i (5.27)

2.3 拉格朗日函數

拉格朗日動力學公式爲我們提供了一種利用標量函數來推導動力學方程的方法,這個標量函數就是拉格朗日函數,亦即一個機械系統的動能和勢能之差,它可以表示爲

L(Θ,Θ˙)\mathcal{L}\left(\Theta,\dot{\Theta}\right) = k(Θ,Θ˙)u(Θ,Θ˙)k\left(\Theta,\dot{\Theta}\right) - u\left(\Theta,\dot{\Theta}\right) (5.28)

則機械臂的運動方程爲

ddtLΘ˙LΘ=τ\cfrac{\mathrm{d}}{\mathrm{d}t}\cfrac{\partial \mathcal{L}}{\partial \dot{\Theta}} - \cfrac{\partial \mathcal{L}}{\partial \Theta} = \tau (5.29)

進一步得到

ddtkΘ˙kΘ+uΘ=τ\cfrac{\mathrm{d}}{\mathrm{d}t}\cfrac{\partial k}{\partial \dot{\Theta}} - \cfrac{\partial k}{\partial \Theta} + \cfrac{\partial u}{\partial \Theta}= \tau (5.30)

2.4 總結

以上就是機械臂動力學的拉格朗日方程。當時自己學完這一部分突然聯想到,高中做力學物理題的時候(就是那些小物塊,斜面,圓坑一類的)往往按受力分析去做會很麻煩,但是如果用能量守恆的動能勢能方程做就很簡單。這一點在本章分析機械臂的動力學方程也是這樣,算是一點挺有趣的事情。

3. 總結

動力學部分終於也總結完了。相比運動學部分來說確實更有難度一點,但是還是那句話,自己多手算多推導,多聯想。這一部分耗費心力太多,到現在已經懶於舉一個實例或者MATLAB代碼了。另外一個收穫,就是這幾天上手了一點LaTex輸入公式的技巧,算是意外收穫吧。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章