第二章 动力学模型入门:牛顿-欧拉方程、拉格朗日方程、机器人动力学模型的基本形式
各位同学,欢迎来到动力学模型的世界。
说实话,很多做控制的工程师,一听到「动力学」三个字就头大。我当年刚入行时也一样,觉得这东西太抽象了。但后来我发现,不懂动力学,力矩控制就是空中楼阁。你想想看,你要给机器人发力矩指令,总得知道它需要多大的力吧?
这一章,我们就来把动力学这层窗户纸捅破。
2.1 为什么要学动力学?
先问个问题:你给电机发一个力矩指令,机器人就一定能按你期望的方式动吗?
答案是否定的。
因为机器人本身有质量、有惯性,关节之间还有耦合。你给关节1一个力,关节2可能也会跟着动。这就是动力学要解决的问题——描述力和运动之间的关系。
我个人习惯把动力学模型比作「机器人的身体说明书」。有了它,你才知道怎么推、怎么拉,机器人会做出什么反应。
核心观点:动力学模型 = 从「力」到「加速度」的映射关系。
2.2 牛顿-欧拉方程:最直观的动力学
牛顿-欧拉方程,说白了就是牛顿第二定律的升级版。
你记得 F = ma 吧?对,就是那个。但机器人不是单个质点,它是一堆连杆串在一起的。所以我们需要把 F = ma 应用到每个连杆上,同时还要考虑旋转运动。
2.2.1 平移运动
对于每个连杆的质心,有:
F = m * a_c
其中 F 是作用在连杆上的合力,m 是连杆质量,a_c 是质心加速度。
2.2.2 旋转运动
对于旋转部分,有:
τ = I * α + ω × (I * ω)
这里 τ 是力矩,I 是惯性张量,α 是角加速度,ω 是角速度。
嗯,这里要注意:那个 ω × (I * ω) 项,就是所谓的「陀螺力矩」或「科里奥利力」。我在做六轴机器人项目时,就遇到过因为忽略这一项,导致高速运动时轨迹跑偏的情况。后来加上这一项,问题就解决了。
我的经验:牛顿-欧拉法适合做实时计算,因为它可以递归求解。从基座开始,逐级向外推算,效率很高。
2.3 拉格朗日方程:从能量角度看问题
如果说牛顿-欧拉是「力」的视角,那拉格朗日就是「能量」的视角。
我个人更喜欢拉格朗日法,为什么?因为它不用考虑内部约束力。你只需要写出系统的动能和势能,然后套公式就行了。
拉格朗日方程的标准形式:
d/dt (∂L/∂q̇) - ∂L/∂q = τ
其中 L = T - V,T 是动能,V 是势能,q 是广义坐标。
说白了,就是:
- 先算所有连杆的动能 T
- 再算所有连杆的势能 V
- 然后对每个关节求偏导
- 最后得到的就是动力学方程
举个例子,一个简单的单摆:
动能 T = 0.5 * m * l² * θ̇²
势能 V = m * g * l * (1 - cosθ)
拉格朗日量 L = T - V
代入拉格朗日方程:
m * l² * θ̈ + m * g * l * sinθ = τ
你看,结果很简洁。这就是单摆的动力学模型。
避坑指南:我曾经在推导一个七自由度机械臂时,用拉格朗日法算到一半发现少了一项。后来检查发现,是动能项里漏掉了关节之间的耦合速度。所以写代码时一定要逐项核对,别偷懒。
2.4 机器人动力学模型的基本形式
不管是牛顿-欧拉还是拉格朗日,最终得到的动力学模型都可以写成统一的形式:
M(q) * q̈ + C(q, q̇) * q̇ + G(q) = τ
我来解释一下每一项:
| 符号 | 名称 | 含义 |
|---|---|---|
| M(q) | 惯性矩阵 | 描述各关节的惯性和耦合惯性 |
| C(q, q̇) | 科里奥利/离心力矩阵 | 描述速度引起的耦合力 |
| G(q) | 重力向量 | 描述重力对每个关节的影响 |
| τ | 关节力矩 | 你发给电机的指令 |
这个公式,你会在后续所有力矩控制算法中反复见到。我建议你把它刻在脑子里。
2.4.1 各项的物理意义
M(q) 惯性矩阵:
- 对角线元素:每个关节自身的转动惯量
- 非对角线元素:关节之间的耦合惯性
- 举个例子:你推关节1,关节2也会感受到一个力,这就是耦合
C(q, q̇) 科里奥利/离心力:
- 当机器人高速运动时,这一项会变得很大
- 我做过一个测试:在 30°/s 的速度下,C 项贡献的力矩可以占到总力矩的 40%
- 所以低速时你可以忽略它,但高速时不能
G(q) 重力项:
- 最简单的补偿项
- 很多工业机器人只做重力补偿,就能实现不错的拖动示教效果
关键理解:动力学模型不是「一个公式」,而是「三个物理效应的叠加」。你理解了每个效应的来源,调试时就知道该调哪里。
2.5 知识体系总览
下面这张图,是我自己总结的动力学模型知识框架。你可以把它当作本章的「地图」:
2.6 实际项目中的选择建议
讲了这么多理论,你可能想问:那我到底该用哪种方法?
我的建议是这样的:
- 如果你要做实时控制(比如 1kHz 以上):用牛顿-欧拉法。它计算量小,可以递归实现。
- 如果你在做仿真或离线规划:用拉格朗日法。推导过程更清晰,不容易出错。
- 如果你刚开始学:先用拉格朗日法推导一个两连杆,感受一下动力学是怎么回事。然后再用牛顿-欧拉法实现一遍,对比结果。
一个小技巧:我在实际项目中,经常先用拉格朗日法在 MATLAB 里推导出符号表达式,然后自动生成 C++ 代码。这样既保证了正确性,又兼顾了运行效率。
2.7 本章小结
好,我们来捋一捋这一章的核心内容:
- 动力学模型 是力矩控制的基础,没有它,你的控制就是盲人摸象。
- 牛顿-欧拉法 从力的角度出发,适合实时计算。
- 拉格朗日法 从能量的角度出发,推导更系统化。
- 统一形式 M(q)q̈ + C(q,q̇)q̇ + G(q) = τ 是所有动力学模型的归宿。
- 理解每一项的物理意义,比死记公式重要得多。
说实话,动力学模型这东西,光看是学不会的。我建议你找个两连杆机器人,手推一遍拉格朗日方程,再写代码实现一遍。做完这两步,你就算入门了。
下一章,我们会把动力学模型用起来,看看怎么用它做力矩控制。到时候你会发现,今天学的这些,全是宝贝。
可可精品资料库