中正平和的机器人学笔记——5. 机械臂动力学

0. 基础知识

0.1 线加速度

上一篇中我们讲到了在坐标系{A}和坐标系{B}原点重合时, B Q ^BQ BQ的速度矢量的表示方式:

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

我们可以将左侧改写为如下形式:

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

记住这种形式的方程,会在求解加速度方程时很有用。
接下来推导线加速度的公式,大家一起动手推一下吧!
对式5.1求导,可得当坐标系{A}和坐标系{B}原点重合时, B Q ^BQ BQ的加速度在坐标系{A}中的表达式:

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

对式5.3右侧的第一项和最后一项代入式5.2,整理后可得,

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

将上式扩展到原点不重合的情况,就得到了一般的表达式:

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

另外要指出,当计算旋转关节时, B Q ^BQ BQ为常量,那么,

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

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

0.2 角加速度

接下来我们推导角加速度公式。假设坐标系{B}以角速度 A Ω B ^A\Omega_B AΩB相对于坐标系{A}转动,同时坐标系{C}以角速度 B Ω C ^B\Omega_C BΩC相对于坐标系{B}转动。

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

对式5.6求导可得,

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

同样我们将式5.2带入上式最后一项,可以得到,

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

上式用于计算机械臂连杆的角加速度。

0.3 质量分布

这里引入惯性张量(inertia tensor) 的概念,他可以表征刚体质量分布的方式,是对物体惯性矩的广义度量。给出如下3 × \times × 3矩阵,

A I ^AI AI = ( I x x − I x y − I x z − I x y I y y − I y z − I x z − I y z I z z ) \begin{pmatrix} I_{xx} & -I_{xy} & -I_{xz}\\ -I_{xy} & I_{yy} & -I_{yz}\\ -I_{xz} & -I_{yz} & I_{zz} \end{pmatrix} IxxIxyIxzIxyIyyIyzIxzIyzIzz

其中各个元素分别为:

I x x I_{xx} Ixx = ∭ V ( y 2 + z 2 ) ρ   d v \iiint_{V}^{}(y^2 + z^2)\rho\,dv V(y2+z2)ρdv
I y y I_{yy} Iyy = ∭ V ( x 2 + z 2 ) ρ   d v \iiint_{V}^{}(x^2 + z^2)\rho\,dv V(x2+z2)ρdv
I z z I_{zz} Izz = ∭ V ( x 2 + y 2 ) ρ   d v \iiint_{V}^{}(x^2 + y^2)\rho\,dv V(x2+y2)ρdv
I x y I_{xy} Ixy = ∭ V x y ρ   d v \iiint_{V}^{}xy\rho\,dv Vxyρdv
I y z I_{yz} Iyz = ∭ V x z ρ   d v \iiint_{V}^{}xz\rho\,dv Vxzρdv
I z x I_{zx} Izx = ∭ V y z ρ   d v \iiint_{V}^{}yz\rho\,dv Vyzρdv

I x x I_{xx} Ixx I y y I_{yy} Iyy I z z I_{zz} Izz称为惯性矩(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} i+1ωi+1 = i i + 1 R _i^{i+1}R ii+1R i ω i ^i\omega_i iωi + θ ˙ i + 1 \dot{θ}_{i+1} θ˙i+1 i + 1 Z ^ i + 1 ^{i+1}\hat{Z}_{i+1} i+1Z^i+1 (5.10)

那么再根据式5.2,

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

就可以推导出角加速度的变换公式:

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

如果第i+1个关节式移动关节,那么上式就可以化简为:

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

接下来是推导线加速度公式,首先以免大家遗忘,再给出线速度公式,

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

应用式5.6如下,

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

就可以得到每个连杆坐标系原点的线加速度,

i + 1 v ˙ i + 1 ^{i+1}\dot{v}_{i+1} i+1v˙i+1 = i i + 1 R _i^{i+1}R ii+1R [   i v ˙ i + i ω ˙ i × i P i + 1 + i ω i × ( i ω i × i P 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] [ iv˙i+iω˙i×iPi+1+iωi×(iωi×iPi+1)] (5.13_1)

如果第i+1个关节是移动关节,那么上式就应当为:

i + 1 v ˙ i + 1 ^{i+1}\dot{v}_{i+1} i+1v˙i+1 = i i + 1 R _i^{i+1}R ii+1R [   i v ˙ i + i ω ˙ i × i P i + 1 + i ω i × ( i ω i × i P i + 1 ) ] + 2 i + 1 ω i + 1 × d ˙ i + 1 i + 1 Z ^ i + 1 + d ¨ i + 1 i + 1 Z ^ 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} [ 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 (5.13_1)

同理我们可以得到每个连杆质心的线加速度:

i v ˙ C i ^i\dot{v}_{C_i} iv˙Ci = i ω ˙ i × i P C i + i ω i × ( i ω i × i P C I ) + i v ˙ 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 iω˙i×iPCi+iωi×(iωi×iPCI)+iv˙i (5.14)

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

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

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

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

i + 1 v ˙ i + 1 ^{i+1}\dot{v}_{i+1} i+1v˙i+1 = i i + 1 R _i^{i+1}R ii+1R [   i v ˙ i + i ω ˙ i × i P i + 1 + i ω i × ( i ω i × i P 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] [ iv˙i+iω˙i×iPi+1+iωi×(iωi×iPi+1)] (5.13_1)

i + 1 v ˙ C i + 1 ^{i+1}\dot{v}_{C_{i+1}} i+1v˙Ci+1 = i + 1 ω ˙ i + 1 × i + 1 P C i + 1 + i + 1 ω i + 1 × ( i + 1 ω i + 1 × i + 1 P C i + 1 ) + i + 1 v ˙ 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} i+1ω˙i+1×i+1PCi+1+i+1ωi+1×(i+1ωi+1×i+1PCi+1)+i+1v˙i+1 (5.14)

1.2 牛顿-欧拉方程

前面通过外推法计算出每个连杆质心的线加速度和角加速度后,运用牛顿-欧拉公式便可计算出作用在连杆质心上的惯性力和力矩:

F i F_i Fi = m v ˙ C i m\dot{v}_{C_i} mv˙Ci (5.15)

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

式中坐标系{ C i C_i Ci}的原点位于连杆质心,各坐标系方向与原连杆坐标系{ i i i}方向相同。

1.3 内推法(inward iterations)——计算力和力矩

上一节计算出每个连杆上的力和力矩后,我们就要计算出产生这些力和力矩的需要施加在关节上的关节力矩。
先规定两个符号:
f i f_i fi = 连杆 i − 1 i-1 i1作用在连杆 i i i上的力;
n i n_i ni = 连杆 i − 1 i-1 i1作用在连杆 i i i上的力矩。
中正平和的机器人学笔记——5. 机械臂动力学_第1张图片
首先我们将作用在连杆 i i i上所有的力相加,得到力平衡方程:

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

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

i N i ^iN_i iNi = i n i − i n i + 1 + ( − i P C i ) × i f i − ( i P i + 1 − i P C i ) × i f i + 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} iniini+1+(iPCi)×ifi(iPi+1iPCi)×ifi+1 (5.18)

利用力平衡方程和附加旋转矩阵的办法,可以将上式化简为

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

最后我们排列一下力和力矩方程,让相邻连杆按照序号大的向序号小的顺序(也就是内推)来迭代:

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

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

那么怎么求得关节力矩呢?
在静力学中,可以通过计算一个连杆施加于相邻连杆的力矩在 Z ^ \hat{Z} Z^方向上分量求得:

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

如果是移动关节,则有
τ i \tau_i τi = i f i T i Z ^ i ^if_i\\^{Ti}\hat{Z}_i ifiTiZ^i (5.23)

式5.23和式5.24中的 τ \tau τ表示线性驱动力。

1.4 牛顿-欧拉递推动力学算法

我们把前面三节推导的结果整理以下,就是这个算法啦!
外推: i : 0 → 5 i : 0 \to 5 i:05 (把牛顿欧拉方程放到外推法里)

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

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

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

i + 1 v ˙ i + 1 ^{i+1}\dot{v}_{i+1} i+1v˙i+1 = i i + 1 R _i^{i+1}R ii+1R [   i v ˙ i + i ω ˙ i × i P i + 1 + i ω i × ( i ω i × i P 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] [ iv˙i+iω˙i×iPi+1+iωi×(iωi×iPi+1)] (5.13_1)

i + 1 v ˙ C i + 1 ^{i+1}\dot{v}_{C_{i+1}} i+1v˙Ci+1 = i + 1 ω ˙ i + 1 × i + 1 P C i + 1 + i + 1 ω i + 1 × ( i + 1 ω i + 1 × i + 1 P C i + 1 ) + i + 1 v ˙ 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} i+1ω˙i+1×i+1PCi+1+i+1ωi+1×(i+1ωi+1×i+1PCi+1)+i+1v˙i+1 (5.14)

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

i + 1 N i + 1 ^{i+1}N_{i+1} i+1Ni+1 = C i + 1 I i + 1 i + 1 ω ˙ i + 1 + i + 1 ω i + 1 × C i + 1 I i + 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} Ci+1Ii+1i+1ω˙i+1+i+1ωi+1×Ci+1Ii+1ωi+1 (5.16)

内推: i : 6 → 1 i : 6 \to 1 i:61(注意序号)

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

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

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

1.5 总结与补充

1.5.1 考虑重力的动力学算法

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

1.5.2 动力学方程的结构

用牛顿-欧拉方程对机械臂进行分析时,动力学方程可以表示为如下形式

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

式中 M ( Θ ) M\left(\Theta \right) M(Θ)为机械臂的 n × n n \times n n×n 质量矩阵 V ( Θ , Θ ˙ ) V\left(\Theta, \dot{\Theta}\right) V(Θ,Θ˙) n × 1 n \times 1 n×1离心力哥氏力矢量 G ( Θ ) G\left(\Theta \right) G(Θ) n × 1 n \times 1 n×1重力矢量。质量矩阵可分为四块,主对角线的两块为有效惯量,副对角线上的两块为耦合惯量;哥氏力部分在高速时影响较为显著。
其实上面这个式子对于学过自控原理的同学应该比较熟悉,就是状态空间表达式。

1.5.3总结

牛顿欧拉法逻辑还是很严密的,如果跟着一起推导的话,理解起来并不是太难,就怕一上来看到算法的一大坨公式就第一印象觉得很难,这样的心态在学习新知识的时候是最要不得的。说起来,刚学完运动学部分觉得很简单,然后甫一接触动力学部分,看到成片公式也举得有点烦躁。但是如我所说,一条条自己推导,结合实际去理解也就过去了。学习本就不是一件容易的事,在这个过程里体会数学和力学的魅力岂不美哉(Or2)。。。

2. 拉格朗日动力学方程(Lagrangian Dynamic Formulation)

牛顿-欧拉方法是建立在动力学基本公式以及作用在连杆之间的约束力和力矩之上的。而另一种方法,也就是这一节要讲的拉格朗日动力学方程法,则是从能量角度分析的,当然,最终两种分析方法得到的结果应该是相同的。

2.1 动能方程

首先分析第 i i i根连杆的动能 k i k_i ki,可以表示为

k i k_i ki = 1 2 m i v C i T v C i + 1 2 i ω i T   C i I i   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 21mivCiTvCi+21iωiT CiIi iωi (5.24)

式中第一项是基于连杆质心线速度的动能,第二项是连杆的角速度的动能。机械臂的动能是所有连杆动能之和,亦即

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

式5.24中的 v C i v_{C_i} vCi i ω i ^i\omega_i iωi Θ \Theta Θ Θ ˙ \dot{\Theta} Θ˙的函数,由此我们可知机械臂的动能可以表示为关节位置和关节速度的标量函数。事实上也确实如此,机械臂的动能可以写成

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

2.2 势能方程

接下来我们考虑连杆的势能。第 i i i根连杆的势能 u i u_i ui可以表示为

u i u_i ui = − m i   0 g T   0 P C i + u r e f -m_i \ ^0g^T \ ^{0}P_{C_i} + u_{ref} mi 0gT 0PCi+uref (5.26)

注意这里的 0 g ^0g 0g 3 × 1 3 \times 1 3×1的重力矢量, 0 P C i ^0P_{C_i} 0PCi位于第 i i i个连杆质心的矢量。

机械臂的总势能为各个连杆势能之和,即

u u u = ∑ i = 1 n u i \sum_{i=1}^nu_i i=1nui (5.27)

2.3 拉格朗日函数

拉格朗日动力学公式为我们提供了一种利用标量函数来推导动力学方程的方法,这个标量函数就是拉格朗日函数,亦即一个机械系统的动能和势能之差,它可以表示为

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

则机械臂的运动方程为

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

进一步得到

d d t ∂ k ∂ Θ ˙ − ∂ 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 dtdΘ˙kΘk+Θu=τ (5.30)

2.4 总结

以上就是机械臂动力学的拉格朗日方程。当时自己学完这一部分突然联想到,高中做力学物理题的时候(就是那些小物块,斜面,圆坑一类的)往往按受力分析去做会很麻烦,但是如果用能量守恒的动能势能方程做就很简单。这一点在本章分析机械臂的动力学方程也是这样,算是一点挺有趣的事情。

3. 总结

动力学部分终于也总结完了。相比运动学部分来说确实更有难度一点,但是还是那句话,自己多手算多推导,多联想。这一部分耗费心力太多,到现在已经懒于举一个实例或者MATLAB代码了。另外一个收获,就是这几天上手了一点LaTex输入公式的技巧,算是意外收获吧。

你可能感兴趣的:(机器人学)