4、摩擦与柔性建模:库仑+粘滞摩擦模型、Stribeck效应、关节柔性(弹簧-阻尼模型)、齿轮间隙影响

各位同学,咱们今天聊点实在的。

做机器人控制,最让人头疼的是什么?不是算法不够炫,而是你算得再准,实际跑起来就是差那么一截。我当年调试一个六轴机械臂,位置指令发出去,末端就是到不了指定点。折腾了三天,最后发现——摩擦和柔性这两个“隐形杀手”在作怪。

说白了,你的模型里如果没考虑这些,那控制精度就是纸上谈兵。今天我就把这块掰开揉碎了讲清楚。

4.1 库仑+粘滞摩擦模型:最基础的摩擦描述

摩擦这东西,你躲不开。关节转动时,轴承、齿轮、密封圈都会产生阻力。最简单的描述方式就是库仑摩擦加粘滞摩擦。

库仑摩擦:跟速度方向相反,大小恒定。就像你推一个箱子,推之前要克服一个“静摩擦力”,动起来之后这个力基本不变。

粘滞摩擦:跟速度成正比。速度越快,阻力越大。就像在油里搅动,越快越费劲。

合起来就是:

τ_f = τ_c * sign(ω) + b * ω

其中 τ_c 是库仑摩擦系数,b 是粘滞摩擦系数,ω 是关节角速度。

我个人习惯把这个模型作为“起步配置”。它简单、参数少,辨识起来也快。但注意——它有个致命缺陷:无法描述零速附近的非线性行为。

4.2 Stribeck效应:零速附近的“粘滑”现象

你想想看,实际关节从静止到运动,是不是感觉“卡”一下才动?这就是Stribeck效应。

为什么会这样?因为静止时油膜被挤走,金属直接接触,摩擦力反而更大。一旦动起来,油膜形成,摩擦力反而下降。这个“先大后小”的曲线,就是Stribeck曲线。

模型上,我常用这个形式:

τ_f = [τ_c + (τ_s - τ_c) * exp(-|ω/ω_s|^δ)] * sign(ω) + b * ω

τ_s 是静摩擦力,ω_s 是Stribeck速度,δ 是经验指数(一般取0.5~2)。

我在项目中遇到过:用库仑模型辨识出来的参数,低速跟踪误差能到0.5度。换成Stribeck模型后,误差直接降到0.05度。差别就这么大。

4.3 关节柔性:弹簧-阻尼模型

你以为关节是刚性的?太天真了。减速器、传动带、联轴器,这些都有弹性。你发一个位置指令,电机转了,但输出端还没动——这就是柔性。

我习惯用“弹簧-阻尼”模型来描述:

τ = K * (θ_m - θ_l) + D * (ω_m - ω_l)

K 是刚度系数,D 是阻尼系数,θ_m 和 θ_l 分别是电机侧和负载侧的位置。

这个模型虽然简单,但足够实用。你想想看,如果K很大,那关节就接近刚性;如果K很小,那关节就像“软面条”,控制起来就麻烦了。

我曾经吃过一次亏:用刚性模型做轨迹规划,结果实际运行时末端抖动得厉害。后来一测,关节刚度只有理论值的60%。从那以后,我每个关节都先做柔性辨识,再谈控制。

4.4 齿轮间隙:回程误差的根源

齿轮间隙,说白了就是齿轮之间的“空行程”。你正转时齿轮咬合,反转时先要走过这段空隙才能重新咬合。这个空隙,就是回程误差的来源。

模型上,我这样处理:

if (θ_m - θ_l) > gap/2:
    τ = K * (θ_m - θ_l - gap/2) + D * (ω_m - ω_l)
elif (θ_m - θ_l) < -gap/2:
    τ = K * (θ_m - θ_l + gap/2) + D * (ω_m - ω_l)
else:
    τ = 0

gap 就是齿轮间隙的大小。当电机侧和负载侧的偏差在间隙范围内时,力矩传递为0——这就是“空转”现象。

嗯,这里要注意:齿轮间隙和关节柔性经常同时存在,但它们的物理本质不同。柔性是弹性变形,间隙是机械空隙。辨识时要把它们分开处理,否则参数会互相耦合。

4.5 知识体系总览

我把这四块内容的关系画了个图,方便你理解:

摩擦与柔性建模知识体系 库仑+粘滞摩擦模型 τ_f = τ_c·sign(ω) + b·ω 特点:简单、参数少 局限:无法描述零速非线性 适用:高速、低精度场景 Stribeck效应模型 τ_f = [τ_c + (τ_s-τ_c)·exp(-|ω/ω_s|^δ)]·sign(ω) + b·ω 特点:描述“粘滑”现象 关键参数:静摩擦力τ_s、Stribeck速度ω_s 适用:低速、高精度场景 关节柔性(弹簧-阻尼) τ = K·(θ_m-θ_l) + D·(ω_m-ω_l) 特点:弹性变形导致位置偏差 关键参数:刚度K、阻尼D 影响:引起末端抖动、谐振 齿轮间隙模型 间隙内τ=0,间隙外τ=K·(Δθ-gap/2)+D·Δω 特点:机械空隙导致回程误差 关键参数:间隙大小gap 影响:反转时出现“空转” 四个模型共同构成完整的关节动力学描述,缺一不可

4.6 辨识与补偿实战建议

光有模型不够,还得能辨识出参数。我分享几个实战经验:

  1. 先做柔性辨识:给关节一个正弦激励,测量电机侧和负载侧的响应,用最小二乘法拟合K和D。
  2. 再做摩擦辨识:在恒定速度下测量力矩,得到速度-力矩曲线,拟合摩擦参数。
  3. 最后处理间隙:正反转切换时,记录位置偏差,直接测量gap值。

我建议你做一个“两步法”:第一步用库仑+粘滞模型粗调,第二步用Stribeck+柔性模型精调。这样既快又准。

4.7 常见问题与避坑

问题 现象 解决方法
摩擦参数过拟合 低速时模型抖动 增加正则化项,限制参数范围
柔性参数与摩擦耦合 辨识结果不稳定 分开激励,先柔性后摩擦
间隙补偿过度 反转时出现冲击 加入平滑过渡,避免阶跃补偿

我曾经犯过一个错误:把所有参数一起辨识,结果K和τ_c互相“打架”,怎么调都不对。后来才明白,物理上它们就是独立的,必须分开处理。

好了,关于摩擦和柔性建模,我就讲这么多。记住一句话:模型越贴近物理实际,控制精度就越高。但也不要过度复杂,够用就好。

可可精品资料库