第二章 动力学模型入门:牛顿-欧拉方程、拉格朗日方程、机器人动力学模型的基本形式

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

说实话,很多做控制的工程师,一听到「动力学」三个字就头大。我当年刚入行时也一样,觉得这东西太抽象了。但后来我发现,不懂动力学,力矩控制就是空中楼阁。你想想看,你要给机器人发力矩指令,总得知道它需要多大的力吧?

这一章,我们就来把动力学这层窗户纸捅破。

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 知识体系总览

下面这张图,是我自己总结的动力学模型知识框架。你可以把它当作本章的「地图」:

机器人动力学模型知识体系 机器人动力学模型 牛顿-欧拉法(力的视角) 拉格朗日法(能量的视角) F = m·a_c τ = I·α + ω×(I·ω) L = T - V d/dt(∂L/∂q̇) - ∂L/∂q = τ M(q)·q̈ + C(q,q̇)·q̇ + G(q) = τ M(q):惯性矩阵 C(q,q̇):科里奥利力 G(q):重力项

2.6 实际项目中的选择建议

讲了这么多理论,你可能想问:那我到底该用哪种方法?

我的建议是这样的:

  • 如果你要做实时控制(比如 1kHz 以上):用牛顿-欧拉法。它计算量小,可以递归实现。
  • 如果你在做仿真或离线规划:用拉格朗日法。推导过程更清晰,不容易出错。
  • 如果你刚开始学:先用拉格朗日法推导一个两连杆,感受一下动力学是怎么回事。然后再用牛顿-欧拉法实现一遍,对比结果。

一个小技巧:我在实际项目中,经常先用拉格朗日法在 MATLAB 里推导出符号表达式,然后自动生成 C++ 代码。这样既保证了正确性,又兼顾了运行效率。

2.7 本章小结

好,我们来捋一捋这一章的核心内容:

  1. 动力学模型 是力矩控制的基础,没有它,你的控制就是盲人摸象。
  2. 牛顿-欧拉法 从力的角度出发,适合实时计算。
  3. 拉格朗日法 从能量的角度出发,推导更系统化。
  4. 统一形式 M(q)q̈ + C(q,q̇)q̇ + G(q) = τ 是所有动力学模型的归宿。
  5. 理解每一项的物理意义,比死记公式重要得多。

说实话,动力学模型这东西,光看是学不会的。我建议你找个两连杆机器人,手推一遍拉格朗日方程,再写代码实现一遍。做完这两步,你就算入门了。

下一章,我们会把动力学模型用起来,看看怎么用它做力矩控制。到时候你会发现,今天学的这些,全是宝贝。


可可精品资料库