4. 拉格朗日动力学建模:广义坐标、拉格朗日方程、应用实例

动力学建模,说白了就是给机械系统写运动方程。牛顿法大家都会,但一到多关节、多约束的系统,画受力图能画到崩溃。我个人习惯用拉格朗日法,因为它只关心能量,不关心约束力。

你想想看,一个六轴机械臂,每个关节都有电机、减速器、连杆,用牛顿法写几十个方程,光检查符号就能花半天。拉格朗日法呢?只要写出系统的动能和势能,然后套公式。嗯,这里要注意,公式本身很简单,但真正难的是选对广义坐标。

4.1 广义坐标:少即是多

什么叫广义坐标?说白了就是能唯一确定系统位形的最少参数。可以是角度、位移,甚至可以是某个抽象量。

核心思想:用最少的坐标描述系统,自动满足约束条件。

举个例子,一个单摆:

  • 牛顿法:需要 x、y 两个坐标,再加一个绳长约束方程
  • 拉格朗日法:只用一个角度 θ,约束自动满足

我在项目中遇到过一位同事,给四足机器人建模时用了 18 个笛卡尔坐标,结果约束方程写了 12 个,调试了整整两周。后来换成 6 个广义坐标(每条腿 3 个关节角),一天搞定。

系统类型 常用广义坐标 自由度
平面机械臂 关节角度 θ₁, θ₂, ... n(关节数)
倒立摆 小车位移 x,摆角 θ 2
四旋翼 位置 (x,y,z) + 姿态 (φ,θ,ψ) 6
双足机器人 躯干位姿 + 关节角度 通常 10~20

选坐标的技巧:优先选能直接驱动或测量的量。比如电机编码器读的是角度,那就用角度做广义坐标,后续做控制时不用再转换。

4.2 拉格朗日方程:能量视角的动力学

拉格朗日方程长这样:

d/dt (∂L/∂q̇ᵢ) - ∂L/∂qᵢ = Qᵢ

其中 L = T - V,叫拉格朗日量。T 是动能,V 是势能。Qᵢ 是广义力。

为什么会这么简洁?因为拉格朗日法把所有的力分成了两类:

  • 保守力(重力、弹簧力)→ 放进势能 V 里
  • 非保守力(电机力矩、摩擦力)→ 放进广义力 Qᵢ 里

我曾经犯过一个低级错误:把重力项既写在 V 里,又写在 Qᵢ 里,结果模型多了一倍的重力矩。嗯,记住,保守力只进 V,不进 Q。

4.3 建模步骤:四步走

我总结了一套流程,每次建模都按这个来:

  1. 选广义坐标 q = [q₁, q₂, ..., qₙ]ᵀ
  2. 写动能 T:注意是绝对速度,不是相对速度
  3. 写势能 V:重力势能、弹性势能等
  4. 套方程:对每个 qᵢ 求偏导,整理成标准形式

避坑指南:写动能时最容易出错。我曾经把连杆质心的速度算成了关节速度,结果模型在高速时完全不对。记住,动能要用质心在惯性系下的绝对速度。

4.4 应用实例:二连杆机械臂

咱们拿一个平面二连杆机械臂练手。两个关节,两个连杆,忽略摩擦。

第一步:选广义坐标

q = [θ₁, θ₂]ᵀ,两个关节角度。

第二步:写动能

每个连杆的动能 = 平动动能 + 转动动能。质心位置需要从关节角度算出来。

连杆1质心位置:
x₁ = lc₁ * cos(θ₁)
y₁ = lc₁ * sin(θ₁)

连杆2质心位置:
x₂ = l₁ * cos(θ₁) + lc₂ * cos(θ₁+θ₂)
y₂ = l₁ * sin(θ₁) + lc₂ * sin(θ₁+θ₂)

然后对时间求导得到速度,再算动能:

T = ½ m₁(vx₁² + vy₁²) + ½ I₁θ̇₁² 
  + ½ m₂(vx₂² + vy₂²) + ½ I₂(θ̇₁+θ̇₂)²

第三步:写势能

只有重力势能,取 y=0 为零势能面:

V = m₁g y₁ + m₂g y₂

第四步:套拉格朗日方程

对 θ₁ 和 θ₂ 分别求偏导,整理后得到:

M(q)q̈ + C(q,q̇)q̇ + G(q) = τ

其中 M 是惯性矩阵,C 是科里奥利/离心力矩阵,G 是重力项,τ 是关节力矩。

关键点:M 矩阵一定是正定对称的。如果你算出来不对称,说明求导过程有错。这是我常用的自检方法。

4.5 知识体系总览

下面这张图把拉格朗日建模的脉络理清楚了:

拉格朗日动力学建模知识体系 机械系统 选择广义坐标 q₁, q₂, ..., qₙ 计算动能 T(q, q̇) 计算势能 V(q) L = T - V d/dt(∂L/∂q̇) - ∂L/∂q = Q 输出:M(q)q̈ + C(q,q̇)q̇ + G(q) = τ → 用于仿真与控制

4.6 实用技巧与避坑

做了这么多年仿真,我总结了几条实用经验:

  • 符号计算优先:用 MATLAB Symbolic 或 SymPy 做符号推导,手算容易漏项
  • 验证对称性:M 矩阵必须对称,不对称就是错了
  • 检查量纲:每一项的量纲必须一致,力矩就是力矩,不能混进力的量纲
  • 对比特殊位形:让所有关节角为 0,看重力项是否合理

我的习惯:建完模后,先做一次静力学验证。让所有速度和加速度为 0,方程退化成 G(q) = τ。这时候用手算一下重力矩,对上了再往下走。

拉格朗日法最大的优势,就是让你从复杂的受力分析中解放出来,专注于能量。你想想看,一个六轴机械臂,用牛顿法写受力图能写满三页纸,用拉格朗日法就是几行能量表达式。嗯,这就是为什么我强烈推荐大家掌握这个方法。