第二章 动力学模型入门:牛顿-欧拉方程、拉格朗日方程、机器人动力学模型建立
各位同学,欢迎来到《轨迹规划中的力矩补偿秘笈》的第二讲。
说实话,动力学模型这玩意儿,我刚入行那会儿也觉得挺唬人的。一堆矩阵、一堆偏微分,看着就头疼。但后来我发现,搞不懂动力学,你做的轨迹规划就是「盲人摸象」——你只知道机器人该往哪儿走,却不知道它得花多大力气才能走过去。
这一章,咱们就把动力学这层窗户纸捅破。我会用最直白的话,把牛顿-欧拉和拉格朗日这两大流派讲清楚。
2.1 为什么要学动力学?
先问个问题:你写了一个轨迹,机器人跑起来抖得跟筛子似的,为什么?
答案很简单——你没考虑力矩补偿。运动学只告诉你位置、速度、加速度的关系,但动力学告诉你:要产生这些运动,关节电机需要输出多大的扭矩。
我在做六轴机器人项目时,遇到过一个问题:空载跑得挺好,一夹持工件就过载报警。查了半天,发现是动力学模型里没加负载项。从那以后,我养成了一个习惯——任何轨迹规划,必须先过一遍动力学仿真。
核心观点:动力学模型是连接「运动规划」和「电机控制」的桥梁。没有它,你的轨迹就是空中楼阁。
2.2 牛顿-欧拉方程:最直观的动力学
牛顿-欧拉法,说白了就是「硬算」。它基于牛顿第二定律和欧拉方程,把每个连杆的受力情况都列出来。
2.2.1 牛顿方程(平动部分)
对于一个刚体,质心的平动满足:
F = m * a_c
其中 F 是作用在质心上的合力,m 是质量,a_c 是质心加速度。
2.2.2 欧拉方程(转动部分)
转动部分稍微复杂一点:
τ = I * α + ω × (I * ω)
这里 τ 是力矩,I 是惯性张量,α 是角加速度,ω 是角速度。最后那个叉乘项,就是所谓的「陀螺力矩」或「科里奥利力项」。
我的经验:很多初学者会忽略 ω × (I * ω) 这一项。但在高速运动时,这一项产生的力矩可能占到总力矩的 30% 以上。我曾经调试一个 SCARA 机器人,高速往返时总是过冲,加上这一项补偿后,轨迹精度直接提升了两个数量级。
2.2.3 牛顿-欧拉递推算法
实际工程中,我们不会去解全局方程组,而是用递推的方式:
- 正向递推:从基座到末端,计算每个连杆的速度、加速度
- 反向递推:从末端到基座,计算每个关节的力/力矩
这种算法计算效率极高,非常适合实时控制。我在嵌入式系统里实现时,一个六轴机器人的动力学计算,用 STM32H7 跑只需要不到 100 微秒。
2.3 拉格朗日方程:从能量角度看问题
如果说牛顿-欧拉是「蛮力法」,那拉格朗日就是「巧办法」。它不关心具体的力,只关心系统的能量。
2.3.1 拉格朗日函数
L = T - V
其中 T 是系统总动能,V 是系统总势能。
2.3.2 拉格朗日方程
d/dt (∂L/∂q̇) - ∂L/∂q = τ
这里 q 是广义坐标(比如关节角度),q̇ 是广义速度,τ 是广义力(关节力矩)。
注意:拉格朗日方程推导过程中,需要计算偏导数。对于多自由度机器人,手动推导会非常繁琐。我建议使用符号计算工具(如 MATLAB 的 Symbolic Toolbox 或 Python 的 SymPy)来辅助。
2.3.3 两种方法的对比
| 特性 | 牛顿-欧拉法 | 拉格朗日法 |
|---|---|---|
| 物理意义 | 直观,基于力和力矩 | 抽象,基于能量 |
| 计算效率 | 高(递推算法 O(n)) | 低(需要计算偏导数) |
| 推导难度 | 中等,需处理约束力 | 较低,自动消去约束力 |
| 适用场景 | 实时控制、嵌入式实现 | 理论分析、离线仿真 |
我个人习惯:做实时控制用牛顿-欧拉,做理论分析用拉格朗日。两者并不矛盾,而是互补的。
2.4 机器人动力学模型的标准形式
无论用哪种方法,最终得到的动力学模型都可以写成统一的形式:
M(q) * q̈ + C(q, q̇) * q̇ + G(q) + F(q̇) = τ
其中:
- M(q):惯性矩阵,与位置有关
- C(q, q̇):科里奥利力和离心力矩阵
- G(q):重力项
- F(q̇):摩擦力项(库仑摩擦+粘滞摩擦)
- τ:关节驱动力矩
避坑指南:我曾经在项目里只用了 M(q) 和 G(q),忽略了 C(q, q̇) 项。结果在高速轨迹下,力矩误差高达 40%。记住:速度越快,科里奥利力越不可忽略。
2.5 知识体系结构图
下面这张图,是我梳理的本章知识脉络。建议你把它存下来,学完这一章后再回来看,会有更深的理解。
2.6 实战建议
学完理论,咱们聊聊怎么落地。
- 先从简单模型开始:别一上来就搞六轴。我建议你先用单连杆或双连杆练手,把牛顿-欧拉递推的代码写一遍。
- 参数辨识不能省:动力学模型里的质量、质心、惯性张量,理论值和实际值往往有偏差。我习惯用最小二乘法做参数辨识,精度能提升 20% 以上。
- 摩擦力模型要重视:低速时摩擦力占比很大。我见过一个项目,低速轨迹误差 80% 来自摩擦力补偿不足。建议至少用库仑+粘滞模型。
一个小技巧:在做动力学仿真时,先用拉格朗日法推导出解析表达式,然后用牛顿-欧拉法写实时代码。两者互相验证,能发现很多推导错误。
好了,这一章的内容就到这儿。动力学模型是力矩补偿的基石,下一章我们会基于这个模型,开始讲具体的力矩补偿算法。