第二章 动力学模型入门:牛顿-欧拉方程、拉格朗日方程、机器人动力学模型建立

各位同学,欢迎来到《轨迹规划中的力矩补偿秘笈》的第二讲。

说实话,动力学模型这玩意儿,我刚入行那会儿也觉得挺唬人的。一堆矩阵、一堆偏微分,看着就头疼。但后来我发现,搞不懂动力学,你做的轨迹规划就是「盲人摸象」——你只知道机器人该往哪儿走,却不知道它得花多大力气才能走过去。

这一章,咱们就把动力学这层窗户纸捅破。我会用最直白的话,把牛顿-欧拉和拉格朗日这两大流派讲清楚。

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 牛顿-欧拉递推算法

实际工程中,我们不会去解全局方程组,而是用递推的方式:

  1. 正向递推:从基座到末端,计算每个连杆的速度、加速度
  2. 反向递推:从末端到基座,计算每个关节的力/力矩

这种算法计算效率极高,非常适合实时控制。我在嵌入式系统里实现时,一个六轴机器人的动力学计算,用 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 知识体系结构图

下面这张图,是我梳理的本章知识脉络。建议你把它存下来,学完这一章后再回来看,会有更深的理解。

机器人动力学模型知识体系 动力学模型 牛顿-欧拉法 拉格朗日法 牛顿方程:F = m·a 欧拉方程:τ = I·α + ω×(I·ω) 递推算法(正向+反向) 拉格朗日函数:L = T - V 拉格朗日方程:d/dt(∂L/∂q̇) - ∂L/∂q = τ 符号计算辅助推导 统一形式:M(q)q̈ + C(q,q̇)q̇ + G(q) + F(q̇) = τ 惯性项 + 科里奥利项 + 重力项 + 摩擦力项 = 驱动力矩

2.6 实战建议

学完理论,咱们聊聊怎么落地。

  • 先从简单模型开始:别一上来就搞六轴。我建议你先用单连杆或双连杆练手,把牛顿-欧拉递推的代码写一遍。
  • 参数辨识不能省:动力学模型里的质量、质心、惯性张量,理论值和实际值往往有偏差。我习惯用最小二乘法做参数辨识,精度能提升 20% 以上。
  • 摩擦力模型要重视:低速时摩擦力占比很大。我见过一个项目,低速轨迹误差 80% 来自摩擦力补偿不足。建议至少用库仑+粘滞模型。

一个小技巧:在做动力学仿真时,先用拉格朗日法推导出解析表达式,然后用牛顿-欧拉法写实时代码。两者互相验证,能发现很多推导错误。

好了,这一章的内容就到这儿。动力学模型是力矩补偿的基石,下一章我们会基于这个模型,开始讲具体的力矩补偿算法。

可可精品资料库