第二章:动力学模型入门

各位同学,欢迎来到动力学模型的世界。

说实话,我刚入行那会儿,觉得动力学就是一堆吓人的公式。什么牛顿、拉格朗日,看着就头大。但后来我发现,搞懂这些,是做好力矩控制的基础。你想想看,连机器人本身的物理特性都不了解,怎么去控制它?

2.1 牛顿-欧拉方程:最直观的动力学

牛顿-欧拉方程,说白了就是「力等于质量乘以加速度」的升级版。它把机器人拆成一个个连杆,分别计算每个连杆受到的力和力矩。

我个人习惯用牛顿-欧拉法做实时控制。为什么?因为它计算快,适合嵌入式跑。公式长这样:

// 牛顿方程:力 = 质量 × 加速度
F = m * a

// 欧拉方程:力矩 = 转动惯量 × 角加速度 + 角速度 × 转动惯量 × 角速度
τ = I * α + ω × (I * ω)

嗯,这里要注意,欧拉方程里的那个叉乘项,就是科里奥利力和离心力的来源。我在项目中遇到过,如果忽略这一项,高速运动时力矩会算错,机器人直接抖成筛子。

核心要点:牛顿-欧拉法是递推算法,从基座开始往外推速度、加速度,再从末端往回推力、力矩。适合实时控制,计算量 O(n)。

2.2 拉格朗日方程:从能量角度看问题

拉格朗日方程是另一种思路。它不直接算力,而是算系统的动能和势能。公式是:

L = T - V

τ = d/dt (∂L/∂q̇) - ∂L/∂q

其中 L 是拉格朗日量,T 是动能,V 是势能,q 是关节角度。

说实话,拉格朗日法写起来更简洁,尤其适合推导整个系统的动力学方程。但计算量比牛顿-欧拉大,我一般用它做离线仿真和参数辨识。

我的经验:如果你刚开始学,建议先用拉格朗日法推导一遍二连杆的动力学方程。手算一遍,比看十遍书都管用。我曾经花了一个周末手推二连杆,之后再看六轴机器人,思路一下就通了。

2.3 惯性矩阵:机器人的「质量」

惯性矩阵 M(q),说白了就是机器人的「等效质量」。但它不是常数,而是随关节角度变化的。

为什么?因为机器人动起来时,各个连杆的相对位置在变,等效到每个关节上的转动惯量也在变。你想想看,手臂伸直和弯曲时,同样的力矩产生的加速度能一样吗?

状态 惯性矩阵特点 控制影响
低速 变化缓慢,近似常数 PID 还能应付
中速 变化明显,需要补偿 必须用模型
高速 剧烈变化,耦合严重 必须实时计算

避坑指南:我曾经在调试六轴机器人时,发现某个关节在特定角度下会突然震动。查了半天,发现是惯性矩阵在该位置接近奇异,导致控制增益被放大。后来加了惯性矩阵的伪逆处理,问题才解决。

2.4 科里奥利力与离心力:速度带来的麻烦

科里奥利力和离心力,都跟速度有关。它们合在一起,写成 C(q, q̇)q̇。

科里奥利力:当一个关节运动时,会影响另一个关节的动力学。比如你挥动手臂时,手腕关节会受到一个额外的力矩。

离心力:关节转动时,连杆有「往外甩」的趋势。你想想看,拿一根绳子甩重物,手会感觉到一个向外拉的力,那就是离心力。

我个人的经验是:低速时这些力可以忽略,但一旦速度超过某个阈值(比如关节角速度 > 1 rad/s),就必须补偿。否则力矩控制会变得很不稳定。

// 科里奥利力矩阵的计算(简化版)
for i = 1 to n:
    for j = 1 to n:
        for k = 1 to n:
            C[i][j] += (∂M[i][j]/∂q[k] + ∂M[i][k]/∂q[j] - ∂M[k][j]/∂q[i]) * q̇[k]

这段代码看着复杂,但说白了就是惯性矩阵对关节角度的偏导。实际工程中,我们一般用数值方法或者符号推导来算。

2.5 重力项:永远存在的对手

重力项 G(q),是机器人动力学里最「老实」的一项。它只跟关节角度有关,跟速度、加速度无关。

但别小看它。重力补偿做不好,机器人要么往下掉,要么往上顶。我记得第一次做力矩控制时,忘了加重力补偿,结果机器人一上电就「啪」地砸下来了。还好速度慢,没出事故。

重力补偿公式:

G(q) = ∂V(q) / ∂q

其中 V(q) 是系统的重力势能。

实际工程中,重力项可以离线算好,存成查找表。也可以实时计算,但要注意计算效率。我一般用符号推导工具(比如 SymPy)先导出解析式,再转成 C 代码。

2.6 知识体系总览

下面这张图,是我自己总结的动力学模型知识结构。你可以把它当成一张地图,随时回来看看。

动力学模型知识体系 牛顿-欧拉法 拉格朗日法 递推算法 O(n) 计算量 适合实时控制 力/力矩递推 能量法 解析推导 适合仿真 参数辨识 动力学方程:M(q)q̈ + C(q,q̇)q̇ + G(q) = τ 惯性矩阵 M(q) 随角度变化 科里奥利+离心 C 随速度变化 重力项 G(q) 随角度变化 三种力共同作用,决定了机器人的动力学行为

这张图把动力学模型分成了两大流派:牛顿-欧拉法和拉格朗日法。它们最终都归结到同一个动力学方程:M(q)q̈ + C(q,q̇)q̇ + G(q) = τ。其中 M、C、G 就是我们刚讲的那三个核心项。

我的建议:初学者不用急着把所有公式都背下来。先理解每个项的物理意义,知道它什么时候重要、什么时候可以忽略。等你真正做项目时,再回来查公式也不迟。

好了,这一章的内容就到这里。记住,动力学模型不是用来考试的,是用来解决实际问题的。下次你调试机器人时,试着想想:现在是 M 的问题,还是 C 的问题,还是 G 的问题?想清楚了,调参就有方向了。

可可精品资料库