0. 基础知识

0.1 线加速度

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

AVQ^AV_QAVQ​ = BARBVQ^A_BR^BV_QBA​RBVQ​ + AΩB^A\Omega_BAΩB​ ×\times× BARBQ^A_BR^BQBA​RBQ (5.1)

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

ddt\frac{\mathrm{d}} {\mathrm{d}t}dtd​(BARBQ^A_BR^BQBA​RBQ) = BARBVQ^A_BR^BV_QBA​RBVQ​ + AΩB^A\Omega_BAΩB​ ×\times× BARBQ^A_BR^BQBA​RBQ (5.2)

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

AV˙Q^A\dot{V}_QAV˙Q​ = ddt\frac{\mathrm{d}} {\mathrm{d}t}dtd​(BARBVQ^A_BR^BV_QBA​RBVQ​) + AΩ˙B^A\dot{\Omega}_BAΩ˙B​ ×\times× BARBQ^A_BR^BQBA​RBQ + AΩB^A\Omega_BAΩB​ ×\times× ddt\frac{\mathrm{d}} {\mathrm{d}t}dtd​(BARBQ^A_BR^BQBA​RBQ) (5.3)

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

AV˙Q^A\dot{V}_QAV˙Q​ = BARBV˙Q^A_BR^B\dot{V}_QBA​RBV˙Q​ + 2AΩB^A\Omega_BAΩB​ ×\times× BARBVQ^A_BR^BV_QBA​RBVQ​ + AΩ˙^A\dot{\Omega}AΩ˙ ×\times× BARBQ^A_BR^BQBA​RBQ + AΩB^A\Omega_BAΩB​ ×\times× (AΩB^A\Omega_BAΩB​ ×\times× BARBQ^A_BR^BQBA​RBQ) (5.4)

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

AV˙Q^A\dot{V}_QAV˙Q​ = AV˙BORG^A\dot{V}_{BORG}AV˙BORG​ + BARBV˙Q^A_BR^B\dot{V}_QBA​RBV˙Q​ + 2AΩB^A\Omega_BAΩB​ ×\times× BARBVQ^A_BR^BV_QBA​RBVQ​ + AΩ˙^A\dot{\Omega}AΩ˙ ×\times× BARBQ^A_BR^BQBA​RBQ + AΩB^A\Omega_BAΩB​ ×\times× (AΩB^A\Omega_BAΩB​ ×\times× BARBQ^A_BR^BQBA​RBQ) (5.5)

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

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

AV˙Q^A\dot{V}_QAV˙Q​ = AV˙BORG^A\dot{V}_{BORG}AV˙BORG​ + AΩ˙^A\dot{\Omega}AΩ˙ ×\times× BARBQ^A_BR^BQBA​RBQ + AΩB^A\Omega_BAΩB​ ×\times× (AΩB^A\Omega_BAΩB​ ×\times× BARBQ^A_BR^BQBA​RBQ) (5.6)

0.2 角加速度

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

AΩC^A\Omega_CAΩC​ = AΩB^A\Omega_BAΩB​ + BARBΩC^A_BR^B\Omega_CBA​RBΩC​ (5.7)

对式5.6求导可得,

AΩ˙C^A\dot{\Omega}_CAΩ˙C​ = AΩ˙B^A\dot{\Omega}_BAΩ˙B​ + ddt(BARBΩC)\frac{\mathrm{d}}{\mathrm{d}t}(^A_BR^B\Omega_C)dtd​(BA​RBΩC​) (5.8)

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

AΩ˙C^A\dot{\Omega}_CAΩ˙C​ = AΩ˙B^A\dot{\Omega}_BAΩ˙B​ + BARBΩ˙C^A_BR^B\dot{\Omega}_CBA​RBΩ˙C​ + AΩB^A\Omega_BAΩB​ ×\times× BARBΩC^A_BR^B\Omega_CBA​RBΩC​ (5.9)

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

0.3 质量分布

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

AI^AIAI = (Ixx−Ixy−Ixz−IxyIyy−Iyz−Ixz−IyzIzz)\begin{pmatrix} I_{xx} & -I_{xy} & -I_{xz}\\ -I_{xy} & I_{yy} & -I_{yz}\\ -I_{xz} & -I_{yz} & I_{zz} \end{pmatrix}⎝⎛​Ixx​−Ixy​−Ixz​​−Ixy​Iyy​−Iyz​​−Ixz​−Iyz​Izz​​⎠⎞​

其中各个元素分别为:

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

IxxI_{xx}Ixx​、IyyI_{yy}Iyy​、IzzI_{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​ = ii+1R_i^{i+1}Rii+1​R iωi^i\omega_iiωi​ + θ˙i+1\dot{θ}_{i+1}θ˙i+1​ i+1Z^i+1^{i+1}\hat{Z}_{i+1}i+1Z^i+1​ (5.10)

那么再根据式5.2,

ddt\frac{\mathrm{d}} {\mathrm{d}t}dtd​(BARBQ^A_BR^BQBA​RBQ) = BARBVQ^A_BR^BV_QBA​RBVQ​ + AΩB^A\Omega_BAΩB​ ×\times× BARBQ^A_BR^BQBA​RBQ (5.2)

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

i+1ω˙i+1^{i+1}\dot{\omega}_{i+1}i+1ω˙i+1​ = ii+1R_i^{i+1}Rii+1​R iω˙i^i\dot{\omega}_iiω˙i​ + θ¨i+1\ddot{θ}_{i+1}θ¨i+1​ i+1Z^i+1^{i+1}\hat{Z}_{i+1}i+1Z^i+1​ + ii+1Riωi^{i+1}_iR^i\omega_iii+1​Riωi​ ×\times× θ¨i+1\ddot{\theta}_{i+1}θ¨i+1​ i+1Z^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​ = ii+1R_i^{i+1}Rii+1​R iω˙i^i\dot{\omega}_iiω˙i​ (5.11_2)

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

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

应用式5.6如下,

AV˙Q^A\dot{V}_QAV˙Q​ = AΩ˙^A\dot{\Omega}AΩ˙ ×\times× BARBQ^A_BR^BQBA​RBQ + AΩB^A\Omega_BAΩB​ ×\times× (AΩB^A\Omega_BAΩB​ ×\times× BARBQ^A_BR^BQBA​RBQ) (5.6)

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

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

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

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

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

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

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

i+1ωi+1^{i+1}\omega_{i+1}i+1ωi+1​ = ii+1R_i^{i+1}Rii+1​R iωi^i\omega_iiωi​ + θ˙i+1\dot{θ}_{i+1}θ˙i+1​ i+1Z^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​ = ii+1R_i^{i+1}Rii+1​R iω˙i^i\dot{\omega}_iiω˙i​ + θ¨i+1\ddot{θ}_{i+1}θ¨i+1​ i+1Z^i+1^{i+1}\hat{Z}_{i+1}i+1Z^i+1​ + ii+1Riωi^{i+1}_iR^i\omega_iii+1​Riωi​ ×\times× θ¨i+1\ddot{\theta}_{i+1}θ¨i+1​ i+1Z^i+1^{i+1}\hat{Z}_{i+1}i+1Z^i+1​ (5.11_1)

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

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

i+1v˙Ci+1^{i+1}\dot{v}_{C_{i+1}}i+1v˙Ci+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}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 牛顿-欧拉方程

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

FiF_iFi​ = mv˙Cim\dot{v}_{C_i}mv˙Ci​​ (5.15)

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

式中坐标系{CiC_iCi​}的原点位于连杆质心,各坐标系方向与原连杆坐标系{iii}方向相同。

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

上一节计算出每个连杆上的力和力矩后,我们就要计算出产生这些力和力矩的需要施加在关节上的关节力矩。
先规定两个符号:
fif_ifi​ = 连杆i−1i-1i−1作用在连杆iii上的力;
nin_ini​ = 连杆i−1i-1i−1作用在连杆iii上的力矩。

首先我们将作用在连杆iii上所有的力相加,得到力平衡方程:

iFi^iF_iiFi​ = ifi−i+1iR^if_i - ^i_{i+1}Rifi​−i+1i​R i+1fi+1^{i+1}f_{i+1}i+1fi+1​ (5.17)

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

iNi^iN_iiNi​ = ini−ini+1+(−iPCi)×ifi−(iPi+1−iPCi)×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}ini​−ini+1​+(−iPCi​​)×ifi​−(iPi+1​−iPCi​​)×ifi+1​ (5.18)

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

iNi^iN_iiNi​ = 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}Rini​−i+1i​Rini+1​−iPCi​​×iFi​−iPi+1​×i+1i​R ifi+1^if_{i+1}ifi+1​ (5.19)

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

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

ini^in_iini​ = 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}RiNi​+i+1i​Rini+1​+iPCi​​×iFi​+iPi+1​×i+1i​R ifi+1^if_{i+1}ifi+1​ (5.21)

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

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

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

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

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

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

i+1ωi+1^{i+1}\omega_{i+1}i+1ωi+1​ = ii+1R_i^{i+1}Rii+1​R iωi^i\omega_iiωi​ + θ˙i+1\dot{θ}_{i+1}θ˙i+1​ i+1Z^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​ = ii+1R_i^{i+1}Rii+1​R iω˙i^i\dot{\omega}_iiω˙i​ + θ¨i+1\ddot{θ}_{i+1}θ¨i+1​ i+1Z^i+1^{i+1}\hat{Z}_{i+1}i+1Z^i+1​ + ii+1Riωi^{i+1}_iR^i\omega_iii+1​Riωi​ ×\times× θ¨i+1\ddot{\theta}_{i+1}θ¨i+1​ i+1Z^i+1^{i+1}\hat{Z}_{i+1}i+1Z^i+1​ (5.11_1)

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

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

i+1v˙Ci+1^{i+1}\dot{v}_{C_{i+1}}i+1v˙Ci+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}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+1Fi+1^{i+1}F_{i+1}i+1Fi+1​ = mi+1i+1v˙Ci+1m_{i+1}\\^{i+1}\dot{v}_{C_{i+1}}mi+1​i+1v˙Ci+1​​ (5.15)

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

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

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

ini^in_iini​ = 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}RiNi​+i+1i​Rini+1​+iPCi​​×iFi​+iPi+1​×i+1i​R ifi+1^if_{i+1}ifi+1​ (5.21)

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

1.5 总结与补充

1.5.1 考虑重力的动力学算法

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

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

1.5.3总结

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

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

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

2.1 动能方程

首先分析第iii根连杆的动能kik_iki​,可以表示为

kik_iki​ = 12mivCiTvCi+12iωiTCiIiiω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_i21​mi​vCi​T​vCi​​+21​iωiT​ Ci​Ii​ iωi​ (5.24)

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

kkk = ∑i=1nki\sum_{i=1}^n k_i∑i=1n​ki​ (5.25)

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

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

2.2 势能方程

接下来我们考虑连杆的势能。第iii根连杆的势能uiu_iui​可以表示为

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

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

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

uuu = ∑i=1nui\sum_{i=1}^nu_i∑i=1n​ui​ (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)

则机械臂的运动方程为

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

进一步得到

ddt∂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}= \taudtd​∂Θ˙∂k​−∂Θ∂k​+∂Θ∂u​=τ (5.30)

2.4 总结

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

3. 总结

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

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

  1. 中正平和的机器人学笔记——1. 机械臂正运动学(附MATLAB代码)

    中正平和的机器人学笔记--1.正运动学 0. 何为运动学?何为正运动学? 运动学主要研究的就是机械臂的运动特性(位置.速度.加速度等),但是不考虑使机械臂产生运动时施加的力和力矩(这部分是动力学).而 ...

  2. 柔性matlab机械臂运动空间代码,中正平和的机器人学笔记——2. 机械臂逆运动学(附MATAB代码)...

    0. 预备知识(别跳过呀) 上一篇我们讲了正运动学,也就是通过齐次变换矩阵,知晓关节角后求得机械臂末端的位姿,并表示在基座标系下.这一篇我们就来讲一讲逆运动学问题--已知工具坐标系{T}相对于固定坐标 ...

  3. 中正平和的机器人学笔记——0. 前言

    中正平和的机器人学笔记--0.前言 一点唠叨的话 没有想到最后还是入了机器人学的坑,心情复杂. 借鉴某同学课设时写csdn blog整理自己所学知识的方法,我也将这周学习到的机器人学的知识记录整理下来 ...

  4. 机器人学matlab建模实例,中正平和的机器人学笔记——3.几个MATLAB实例

    0. 轨迹 学机器人学前最想知道的,就是如何把机器人末端执行器平滑地从A点移动到B点,也许不太准确,应当说从位姿A移动到位姿B. 0.1 关节空间运动 考虑末端执行器在以下两个笛卡尔位姿之间移动 下面 ...

  5. 中正平和的机器人学笔记——4. 雅可比矩阵(附MTALB代码)

    1. 基础知识 基础知识主要是希望大家回顾一下大学物理里讲的速度矢量和角速度矢量部分的知识,用矢量形式去表示,还有叉乘的相关知识,这些我就不赘述了. 想象存在坐标系{A}和{B},把{B}固连在某一刚 ...

  6. 中正平和的机器人学笔记——6. 一种气驱型柔性臂的正运动学模型

    1. 前言 柔性臂是当前机器人领域一个比较热的研究方向,国内外高校如MIT.Stanford.JHU和我校.上交.中科大.北航等等都有做研究.大致可以分为三类:气驱/绳驱,超弹性材料,智能材料(DE/ ...

  7. 中正平和的机器人学笔记——7. 一种气驱型柔性臂的逆运动学模型

    1. 前言 上一篇分析了Air-Octor的正运动学模型,这一篇是学习另一篇论文1的笔记,着重分析这种柔性臂的逆运动学模型,也就是通过kϕk_\phikϕ​ 和 ϕ\phiϕ 以及 sss 来求 l1 ...

  8. 机械臂动力学--加速度计算

    #机械臂动力学–加速度 线加速 在博客<速度与矢量的微分>的式(5-12)描述了坐标系{A}下的速度矢量BQ^B QBQ,当坐标系{A}的原点与坐标系{B}的原点重合时,速度矢量BQ^BQ ...

  9. matlab 机械臂动力学

    机械臂动力学解决的问题: 1. 正动力学: 已知一个力矩τ,计算出操作臂的运动θ dθ ddθ ,用于模型仿真有用. 2. 逆动力学:已知轨迹点θ/dθ/ddθ ,求出期望的关节力矩矢量τ,用于机械臂 ...

最新文章

  1. python描述符魔术方法_Python所有特殊方法、魔术方法、 钩子
  2. Boosting(提升方法)之GBDT
  3. Vue中使用axios的响应拦截器处理请求失败的情况(处理token过期问题)以及 登录成功跳转回原来页面问题
  4. 大学一年级计算机教程视频教程,大学一年级公开课《计算机基础教程》期末试题复习.doc...
  5. 腾讯再回应被骗,悬赏1000瓶老干妈求线索!老干妈:腾讯从来没有催收过
  6. UVA - 207 PGA Tour Prize Money
  7. 《原力计划【第二季】》第 8 周周榜揭晓!!!
  8. 一文详解神经网络 BP 算法原理及 Python 实现
  9. 史上最强Java生成chm的教程(上)
  10. mysql人像伴随模型_还不了解MySQL跨行事务模型吗?看完这篇你也就差不多了!...
  11. excel表格怎么恢复?常见的恢复方法
  12. dell客服(dell客服维修中心)
  13. 暴雪battle注册账户不转到中国
  14. 利用matlab批量修改文件名称或后缀
  15. java一元多项式减法运算_一元多项式的表示及加减乘除运算
  16. 计算机软件 大shen
  17. 百度开源RPC框架brpc
  18. 2022中国连锁企业人才管理报告
  19. Docker安装配置Jenkins教程
  20. 方差代价函数到梯度下降函数

热门文章

  1. 软件开发的哲学思考(转)
  2. 最小生成树之Kruskal克鲁斯卡尔算法
  3. STM8S UART串口使用中断收发数据
  4. 【颜纠日记】干性皮肤的人油性皮肤更容易衰老?
  5. Python数据分析——数据建模、数据分类实现过程、常见分类算法
  6. Nodejs 包与 NPM 第三方模块安装和 package.json 以及 CNPM
  7. 使用ErrorStack进行错误跟踪及诊断
  8. 使用Postman循环调用接口
  9. 独到理解@Java概述
  10. oracle update set select,oracle update set select from 关联更新