第三章 数学模型建立:牛顿-欧拉方程、拉格朗日力学、力控系统的状态空间表示

各位工程师朋友,大家好。这一章我们聊聊数学建模。

说实话,很多搞力控的同行一听到「数学模型」四个字就头疼。我当年刚入行时也一样,觉得反正有PID顶着,建什么模?直到有一次,我在调试一个六自由度力控平台时,系统在某个特定姿态下疯狂震荡,PID怎么调都压不住。后来老老实实把动力学模型拉出来一算,才发现是惯性耦合项在作怪。嗯,从那以后,我再也不敢轻视建模这一步了。

这一章,我们就来拆解三种最核心的建模方法:牛顿-欧拉方程、拉格朗日力学,以及力控系统的状态空间表示。说白了,就是搞清楚「力怎么传」、「能量怎么变」、「系统怎么用矩阵描述」这三件事。

3.1 牛顿-欧拉方程:最直观的力与运动

牛顿-欧拉方程,我个人习惯叫它「硬刚法」。为什么?因为它直接对每个刚体列写力平衡和力矩平衡方程,简单粗暴,物理意义一目了然。

对于单个刚体,牛顿方程描述平动:

F = m * a_c

其中 F 是作用在质心上的合力,m 是质量,a_c 是质心加速度。

欧拉方程描述转动:

τ = I * α + ω × (I * ω)

τ 是合力矩,I 是惯性张量,α 是角加速度,ω 是角速度。注意那个叉乘项 ω × (I·ω),这是陀螺力矩,很多初学者会漏掉它。

避坑指南: 我曾经在调试一个高速旋转的力控关节时,发现力矩指令总是偏大。查了两天,最后发现是欧拉方程里忘了加陀螺力矩项。高速旋转下,这个耦合项的影响非常大,千万别忽略。

对于多刚体系统,比如机械臂,我们需要对每个连杆分别列写牛顿-欧拉方程,然后通过关节约束力把它们连起来。这个过程可以用递归牛顿-欧拉算法(RNEA)高效实现,正向递推计算速度和加速度,反向递推计算力和力矩。

你想想看,这种方法的好处是什么?直观,每个力都有明确的物理对应。但缺点也很明显——方程数量多,耦合复杂,尤其是当系统有几十个自由度时,手算几乎不可能。

3.2 拉格朗日力学:从能量角度看问题

拉格朗日力学,说白了就是「绕开约束力,直接看能量」。我个人非常喜欢这种方法,尤其是在处理复杂约束系统时,它能省掉大量繁琐的受力分析。

核心公式就一个:

d/dt (∂L/∂q̇) - ∂L/∂q = τ

其中 L = T - V 是拉格朗日量,T 是动能,V 是势能,q 是广义坐标,τ 是广义力。

为什么说它好用?因为你不必关心每个约束力具体是多少,只要写出系统的动能和势能,然后对广义坐标求偏导就行了。约束力会自动在方程中消掉。

举个例子,一个简单的二连杆机械臂,用牛顿-欧拉法需要列写6个方程(每个连杆3个),还要处理关节反力。但用拉格朗日法,只需要写出两个连杆的动能和势能,然后对两个关节角求导,直接得到两个二阶微分方程。

我的经验: 在实际项目中,我通常这样选择——如果系统自由度少(比如小于6),且需要精确知道关节力/力矩,我用牛顿-欧拉法。如果系统自由度多,或者有复杂约束(比如闭链机构),我首选拉格朗日法。说白了,牛顿-欧拉法适合「算力」,拉格朗日法适合「算运动」。

拉格朗日法导出的动力学方程通常可以写成标准形式:

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

M(q) 是惯性矩阵,C(q, q̇) 是科里奥利和离心力矩阵,G(q) 是重力项。这个形式非常有用,因为它直接对应到后面的控制律设计。

3.3 力控系统的状态空间表示

有了动力学方程,下一步就是把它变成状态空间形式。为什么要这么做?因为现代控制理论(LQR、H∞、MPC等)都是基于状态空间模型设计的。

状态空间表示的标准形式是:

ẋ = A * x + B * u
y = C * x + D * u

对于力控系统,我们通常选择状态变量为位置和速度:

x = [q; q̇]

那么状态方程可以写成:

ẋ = [q̇; M(q)^(-1) * (τ - C(q, q̇)*q̇ - G(q))]

你看,这里把动力学方程拆成了两个一阶方程。第一个方程说「速度是位置的导数」,第二个方程说「加速度由惯性矩阵的逆乘以净力得到」。

对于力控系统,输出 y 通常是我们关心的力/力矩信号。比如在阻抗控制中,输出是接触力;在力位混合控制中,输出是力和位置的组合。

小技巧: 我建议大家在建立状态空间模型时,先把系统线性化。比如在平衡点附近做泰勒展开,得到线性化的 A、B 矩阵。这样虽然牺牲了一点精度,但可以方便地使用线性控制理论分析稳定性。等基本控制律调通后,再考虑非线性补偿。

下面我用一个简单的单自由度力控系统来演示整个建模流程。假设一个质量-弹簧-阻尼系统,受到外力 f 作用:

m * ẍ + b * ẋ + k * x = f

选择状态变量 x1 = x(位置),x2 = ẋ(速度),则状态空间表示为:

[ẋ1]   [0    1 ] [x1]   [0 ]
[ẋ2] = [-k/m -b/m] [x2] + [1/m] * f

y = [1 0] * [x1; x2]   (输出位置)
或者
y = [k b] * [x1; x2]   (输出弹簧力+阻尼力)

这个模型虽然简单,但包含了力控系统的基本要素:惯性、阻尼、刚度。实际的多自由度系统只是把这个结构扩展到矩阵形式而已。

3.4 三种方法的对比与选择

为了让大家更直观地理解,我画了一张对比图:

三种建模方法对比 牛顿-欧拉法 ✅ 物理意义直观 ✅ 适合求约束力 ❌ 方程数量多 ❌ 耦合复杂 适用场景: • 少自由度系统 • 需要关节力信息 • 实时控制实现 拉格朗日法 ✅ 自动消去约束力 ✅ 适合复杂系统 ✅ 标准矩阵形式 ❌ 能量计算繁琐 适用场景: • 多自由度系统 • 闭链机构 • 控制律设计 状态空间法 ✅ 现代控制基础 ✅ 便于稳定性分析 ✅ 可处理MIMO系统 ❌ 非线性需线性化 适用场景: • LQR/H∞控制 • 观测器设计 • 系统辨识 可转换 可转换

从图中可以看出,三种方法并不是互斥的。在实际工程中,我经常这样组合使用:先用拉格朗日法推导出系统的动力学方程,得到 M、C、G 矩阵,然后转换成状态空间形式用于控制器设计,最后用牛顿-欧拉法在仿真中验证关节力是否合理。

核心要点: 数学模型是力控系统分析的基石。不管你用哪种方法,最终目标都是得到一个能够准确描述系统动力学行为的数学表达。我个人建议初学者先从拉格朗日法入手,因为它能帮你建立「能量视角」,这对理解后续的阻抗控制、力位混合控制非常有帮助。

好了,这一章的内容就到这里。记住,建模不是目的,而是手段。模型建得好,后面的控制设计才能事半功倍。下一章我们会基于这些模型,深入讨论力控系统的稳定性判据和频域分析方法。


专注资料整理