机器人动力学分析
机器人动力学分析方法包括牛顿欧拉法、拉格朗日法、高斯法、凯恩方法等。
Matlab 提供的逆动力学采用的是牛顿欧拉法(RNE——Recursive Newton-Euler)。该方法需要三个参数:给定最终的角度、速度、角加速度,返回各个关节所需要的力矩。可选参数有重力加速度和负载 fext。
牛顿欧拉法
我们的目标是给定机器人的关节位置 q、速度 qd 和加速度 qdd,计算出为了产生这个运动状态,每个关节需要施加多大的驱动力矩。
注意区分静力学与动力学。"力域雅可比"解决的是静力学或外力映射问题,目的是将作用在机器人末端执行器上的外力/力矩映射到对应的关节空间力矩。
区别在于:一个是给定运动状态,计算每个关节为了达到这个运动状态需要多大力;另一个则是给定末端的力,计算这个力分配在各个关节上是多大。
牛顿欧拉法的精髓在于正推和逆推:
- 正向递推(Forward Recursion):从基座到末端,计算每个连杆的速度、加速度。
- 反向递推(Backward Recursion):从末端到基座,计算每个关节需要提供的力和力矩。
动力学的核心是构建一个**'运动状态 - 力学参数'**的方程。已知各个关节的关节空间的速度、角速度、加速度,通过正推构建线速度、线加速度、角速度、角加速度以及质心和端点的速度关系。最难理解的是对 Zi 轴的求导,需拆成先微分再对时间求导。
构建运动状态和力的关系的等式如下:
牛顿方程:
用于解决刚体平移的动力学刻画,沟通力与线加速度的关系。
欧拉方程:
用于解决刚体旋转的动力学刻画,沟通力矩与角速度、角加速度的关系。
其中,
是刚体在{C}中的惯性张量。
要得到连杆质心的力和力矩,就必须要求线加速度、角速度、角加速度了。
由于串联机械臂具有强耦合关系,相邻关节之间存在一定递推关系。当前连杆的运动状态依赖于前一个连杆的运动参数。递推法就是计算当前连杆真实运动状态的方法。
正推
首先对连杆 1 进行计算,然后利用递推式,就能得知连杆 2 的运动状态直至关节 n。
旋转运动参数
角速度:
![\omega_i] (此处为图片占位,原文档链接保留)
真实的角速度是公转速度 + 自转速度。wi 指前一个关节的角速度,第二项是绕 Zi+1 的自转速度。
角加速度:
对角速度求时间的微分。重点在于如何对 \hat{Z}{i+1} 求导。为了简化计算,设 Z_i 和 Z{i+1} 互相垂直,d\hat{Z}_{i+1} 表示偏移量,可用叉积表示。
对于 dt 求导:
接着,将所有参数转入{i+1}系中,利用旋转矩阵统一上下标。
平移运动参数
线速度:
线速度不仅会由前一个连杆传递,如果前一个连杆是旋转关节,由于存在连杆长度 R,必然会产生由旋转而产生的线速度 v_rotate = ω × R。
是指{i}系原点指向{i+1}系原点的向量。
线加速度:
同理,求加速度就是对速度求时间的微分。将 \dot P^*_{i+1} 替换进求导的式子,先将各参数转入{i}参考系,再用旋转矩阵将运动参数转入{i+1}系中。
从质心到关节的变换
实际控制中控制的是关节,因此需要将质心处的参数变换到关节上。
规定关节坐标系原点指向质心的向量为 P^*{C{i+1}},套用线速度的递推公式。
求导可得线加速度关系,并将其转入{i+1}系。
汇总可知,已掌握线速度、线角速度、角速度、角加速度的递推公式,以及力和力矩的递推公式。
反推
反推就是通过力、力矩和运动参数构成的方程,输入运动参数,获得各关节的力矩。
采用改进 DH 参数建模,第 i 连杆在第 i 关节的后面。每一个关节都独立产生控制力矩,对第 i 连杆受力分析:杆 i 会受到杆(i-1)的作用力 f_i,也会受到杆(i-1)的反作用力 f_{i-1}。
列出牛二:
其中 F 是该连杆质心处的合力。
统一到{i}坐标系中后,对连杆{i}受力分析。假设连杆{i}存在前后两段连杆{i-1}{i+1},目的是分析连杆{i}质心处的受力情况。
关节{i-1}逆时针旋转,会给杆{i}一个向左上的力 f_i。关节{i}也逆时针旋转,会给杆{i}一个向右上的力 f_{i+1},自身会受到杆{i+1}的反作用力 -f_{i+1}。
根据右手法则,四指由 f 指向 r,得到力矩 N 的方向。我们的目标是要计算质心处和合力矩。目前已经得到两端相邻连杆对杆{i}的作用力矩了,还要将其转换到质心处。
假设质心 Ci 向杆{i}坐标系原点的向量是 -^{i}P_{C_i},那么质心 Ci 向杆{i+1}坐标系原点的向量就是 ^{i}P_{i+1}-^{i}P_{C_i}。对于作用于两端的力矩就可以通过这个公式合成到质心处:得到 ^{i}N_i 就是质心处的合力矩。
那么关节 i 应该施加的力可以通过移项得到 ^{i}n_i,观察公式,显然是和 ^{i+1}n_{i+1} 相关的,因此,要计算前一个关节的力矩,就必须得知后一个关节的力矩。这就是为什么计算力矩的过程叫做'逆推'!
^{i}n_i 并不是最终的关节力矩,而是中间计算过程中的一个变量——惯性力矩。惯性力矩考虑了当前杆件和相邻杆件的惯性力矩、外力和重力的影响。但是,我们的关节只能产生绕 z 轴旋转的力,至于重力或负载给的压力,它根本无法影响。因此我们还需要提取与绕 Z 轴相关的力矩,这很简单,直接用 Z 轴的方向向量点积即可提取出这个方向上作用的力:
至此为止,你就完全掌握了正逆推的过程!!!
静力学分析
特别地,当机械臂的速度加速度均为零时,也就是静止时,上面的式子可以得到简化。下式就刻画了静止时各关节力和力矩的计算方式,它可以分析静态下机械臂的负载能力。

这就是 Matlab 机器人工具箱的 rne 的实现逻辑。
为什么选择牛顿欧拉法?
时间复杂度最低——仅 O(n)。相对而言,拉格朗日法接近 O(n^3)。
| 方法 | 原理 | 计算效率 |
|---|---|---|
| 牛顿 - 欧拉法 | 牛顿第二定律 + 欧拉方程 | ⭐⭐⭐⭐⭐ O(n) |
| 拉格朗日法 | 能量法 | ⭐⭐ O(n³) |
| 高斯法 | 最小约束原理 | ⭐⭐ |
| 凯恩法 | 广义达朗贝尔原理 | ⭐⭐⭐ |
当然 RNE 也有缺点:
- 推导过程繁琐,依赖递归顺序。
- 不易直接得到显式动力学模型。


