第二节:动力学模型入门——机器人动力学方程简介
各位同学,欢迎来到动力学部分。说实话,很多做机器人控制的朋友,一开始都绕过了动力学,直接上手PID。我当年也是这么干的——觉得动力学太复杂,先跑起来再说。结果呢?跑是跑起来了,但一碰到高速运动或者负载变化,机器人就开始抖,甚至直接飞车。嗯,那时候我才意识到,不懂动力学,你永远只是在「碰运气」控制。
这一节,我们就来聊聊机器人动力学方程。说白了,就是搞清楚:你给机器人施加的力/力矩,到底是怎么转化成运动的?
1. 机器人动力学方程长什么样?
先给你看一个最经典的形式,别怕,我们慢慢拆解:
τ = M(q) * q̈ + C(q, q̇) * q̇ + G(q)
这个公式,我建议你把它刻在脑子里。它描述的是:
你施加的关节力矩 τ = 惯性力 + 科里奥利力/离心力 + 重力
咱们一项一项来看。
2. 惯性矩阵 M(q)——「质量」的推广
还记得牛顿第二定律吗?F = m * a。在机器人里,每个关节都有「等效质量」,而且这些质量还会互相影响——你动一下肩关节,肘关节的「感觉」也会变。
M(q) 就是一个 n×n 的矩阵(n是关节数)。
对角线上的元素 M_ii 表示第 i 个关节自身的惯性。
非对角线上的元素 M_ij 表示第 i 个关节和第 j 个关节之间的耦合惯性。
我在项目中遇到过一件事:有一次调试一个六轴机械臂,低速时一切正常,一加速就出现奇怪的抖动。排查了半天,最后发现是惯性矩阵里的耦合项没补偿到位。你想想看,肩关节快速转动时,肘关节的等效惯量会剧烈变化,如果不把这个变化算进去,控制肯定出问题。
3. 科里奥利力与离心力 C(q, q̇) * q̇——「看不见的力」
这个项最容易被忽略。我刚开始学的时候也觉得:不就是惯性吗?加上重力不就行了?后来发现,当机器人动起来的时候,还有一股「诡异」的力在作祟。
举个例子:你坐在旋转木马上,伸手去够一个固定的柱子。你会发现手被一股力往旁边拽——这就是科里奥利力。在机器人里,当一个关节运动时,会「拖拽」其他关节,产生耦合效应。
C(q, q̇) 是一个 n×n 的矩阵,它的每个元素都和关节速度 q̇ 有关。
说白了:速度越快,这个力越大。
4. 重力项 G(q)——「永远存在的对手」
这个最好理解。机器人每个连杆都有重量,重力始终在往下拉。G(q) 是一个 n×1 的向量,表示每个关节为了抵抗重力需要额外施加的力矩。
有意思的是:重力项只和关节位置 q 有关,和速度、加速度无关。所以如果你的机器人是静止的,或者运动很慢,重力补偿就是最主要的控制量。
我记得有一次调试一个协作机器人,空载时重力补偿做得很好,但一装上夹爪就往下掉。原因很简单——夹爪的重量改变了整个系统的重心位置,G(q) 需要重新计算。嗯,这个坑我踩过,你们别踩了。
5. 三个项的关系——一张图看懂
下面这张SVG图,帮你理清动力学方程的核心逻辑:
6. 实际应用中的注意事项
讲完了理论,咱们聊聊实际干活时要注意什么。
- 参数辨识很重要:M(q)、C(q,q̇)、G(q) 里的参数(质量、质心、惯量等),理论值和实际值往往有偏差。我建议你拿到机器人后,先做一遍参数辨识实验,别直接拿CAD数据用。
- 计算量要控制:完整的动力学模型计算量不小,尤其是六轴以上的机器人。如果控制器算力有限,可以考虑简化——比如只补偿重力项,或者用离线查表的方式。
- 摩擦也不能忽略:标准的动力学方程里没有摩擦项,但实际中关节摩擦(尤其是减速器摩擦)影响很大。我一般会在方程里额外加一个摩擦项:τ_friction = b * q̇ + τ_coulomb * sign(q̇)。
7. 一个简单的计算示例
假设你有一个单关节的机械臂(简化到极致了),连杆长度1m,质量5kg,质心在连杆中间。当前关节角度 q = 30°,角速度 q̇ = 0.5 rad/s,角加速度 q̈ = 2 rad/s²。
我们来算算需要多大的关节力矩:
M(q) = I + m * (L/2)² = (1/3)*m*L² + m*(L/2)²
= (1/3)*5*1² + 5*0.5²
= 1.667 + 1.25 = 2.917 kg·m²
C(q,q̇) = 0(单关节没有科里奥利效应)
G(q) = m * g * (L/2) * cos(q)
= 5 * 9.8 * 0.5 * cos(30°)
= 5 * 9.8 * 0.5 * 0.866
= 21.22 N·m
τ = M * q̈ + G = 2.917 * 2 + 21.22 = 5.834 + 21.22 = 27.054 N·m
你看,在这个例子里,重力项占了绝大部分(约78%)。所以如果你的机器人运动速度不快,先把重力补偿做好,效果立竿见影。
8. 小结
这一节我们聊了机器人动力学方程的三个核心部分:惯性矩阵、科里奥利力/离心力、重力项。说白了,就是搞清楚「力是怎么分配到各个关节的」。我个人觉得,理解动力学最好的方式就是动手算一遍——哪怕是最简单的二连杆模型,算完你会有完全不同的感觉。
下一节我们会深入讲力矩控制的具体实现,包括怎么在控制器里实时计算这些项。到时候我会分享一些实际代码,敬请期待。
可可精品资料库