4. 摩擦参数模型:库仑摩擦、粘滞摩擦、Stribeck效应,如何建模?
各位工程师朋友,咱们今天聊聊摩擦建模。说实话,摩擦是动力学里最让人头疼的东西之一。我刚开始做六轴机械臂整定时,总觉得动力学模型算得挺准,一上实际设备就发现——关节一动,误差就出来了。后来才明白,摩擦这个"隐形杀手"没处理好。
摩擦模型,说白了就是描述关节运动时阻力怎么变化的数学表达式。你想想看,电机转动要克服摩擦力,减速器里的齿轮啮合也有摩擦,这些力如果不建模,你的前馈补偿就是瞎蒙。好,咱们一步步拆解。
4.1 库仑摩擦:最基础的干摩擦模型
库仑摩擦是最简单的模型。它假设摩擦力大小恒定,只与运动方向有关,与速度大小无关。数学表达式长这样:
τ_f = τ_c * sign(ẋ)
其中 τ_c 是库仑摩擦系数,sign(ẋ) 是速度方向符号。正转和反转的摩擦力大小一样,方向相反。
我在项目中遇到过一个问题:用这个模型做前馈补偿,低速时效果还行,速度一上去就偏差很大。为什么?因为库仑摩擦忽略了速度对摩擦力的影响。说白了,它只适合做粗略估计。
关键点:库仑摩擦模型只有两个参数——正转库仑摩擦系数和反转库仑摩擦系数。实际标定时,通常让关节匀速运动,测出不同速度下的力矩,然后取低速段的平均值。
4.2 粘滞摩擦:速度越大,阻力越大
粘滞摩擦描述的是润滑油膜产生的阻力。速度越快,油膜剪切力越大,摩擦力也就越大。模型很简单:
τ_f = τ_v * ẋ
τ_v 是粘滞摩擦系数,ẋ 是关节速度。这是个线性关系,好理解也好标定。
嗯,这里要注意:实际机械臂的粘滞摩擦并不完全是线性的。尤其是高速段,油膜温度升高,粘度下降,摩擦力反而会偏离线性。我习惯在标定时多取几个速度点,看看线性度好不好。如果偏差大,就得考虑分段线性或者多项式拟合。
| 摩擦类型 | 数学表达式 | 参数数量 | 适用场景 |
|---|---|---|---|
| 库仑摩擦 | τ_c * sign(ẋ) | 2(正/反各一个) | 低速、干摩擦 |
| 粘滞摩擦 | τ_v * ẋ | 1 | 中高速、润滑良好 |
| 库仑+粘滞 | τ_c * sign(ẋ) + τ_v * ẋ | 3 | 通用场景 |
4.3 Stribeck效应:低速区的"反常"现象
Stribeck效应是个有意思的现象。你想想看,当关节从静止开始运动时,摩擦力不是直接降到库仑摩擦水平,而是先下降再上升。为什么会这样?
我解释一下:静止时,润滑油被挤出去,金属表面直接接触,摩擦力很大(静摩擦)。一旦开始运动,润滑油被带入接触面,形成油膜,摩擦力迅速下降。随着速度继续增加,油膜变厚,粘滞阻力开始占主导,摩擦力又慢慢上升。这个"下降再上升"的曲线,就是Stribeck效应。
数学上常用这个模型:
τ_f = [τ_c + (τ_s - τ_c) * exp(-|ẋ/ẋ_s|^δ)] * sign(ẋ) + τ_v * ẋ
其中 τ_s 是静摩擦力,ẋ_s 是Stribeck速度(拐点速度),δ 是形状参数(通常取0.5~2)。这个模型有5个参数,标定起来稍微麻烦点。
我的经验:Stribeck模型虽然精确,但参数多,标定耗时。如果只是做常规轨迹跟踪,库仑+粘滞模型就够了。只有在低速高精度场景(比如力控、装配)才需要Stribeck模型。我曾经在一个精密装配项目里,因为没考虑Stribeck效应,低速时力控震荡得厉害,加上之后立马稳了。
4.4 摩擦模型的工程实现
讲完理论,咱们看看怎么在实际代码里用。我一般把摩擦模型封装成一个函数,输入速度和模型参数,输出摩擦力矩:
def friction_model(vel, params):
"""
摩擦模型计算
params: [tau_c_pos, tau_c_neg, tau_v, tau_s, vel_s, delta]
"""
tau_c_pos, tau_c_neg, tau_v, tau_s, vel_s, delta = params
# 判断方向
if vel > 0:
tau_c = tau_c_pos
elif vel < 0:
tau_c = tau_c_neg
else:
return 0 # 静止时摩擦力不确定,通常返回0
# 库仑+粘滞
tau_f = tau_c * sign(vel) + tau_v * vel
# 如果启用Stribeck
if tau_s > 0 and vel_s > 0:
stribeck = (tau_s - tau_c) * exp(-abs(vel/vel_s)**delta)
tau_f += stribeck * sign(vel)
return tau_f
标定方法我简单说一下:让关节以不同恒定速度运动,记录力矩传感器数据。然后做最小二乘拟合,把参数估计出来。注意,正反转要分开标,因为库仑摩擦系数可能不一样。
避坑指南:我曾经犯过一个错误——直接用电机电流估算摩擦力矩,没考虑惯性力和重力项。结果标出来的摩擦参数完全不对。正确做法是:先补偿掉惯性力和重力,剩下的残差才是摩擦力。另外,温度对摩擦影响很大,最好在恒温环境下标定,或者加温度补偿。
4.5 知识体系总览
为了让你更直观地理解摩擦模型的整体结构,我画了一张图:
这张图把三种摩擦模型的关系和参数数量都理清楚了。你实际用的时候,根据精度需求和标定成本来选。我个人建议:先上库仑+粘滞,跑一遍看看效果。如果低速段误差大,再考虑加Stribeck。别一上来就搞复杂模型,标定工作量翻倍不说,参数多了反而容易过拟合。
好,摩擦模型就讲到这里。记住一句话:摩擦是动力学整定的"最后一公里",处理好了,前馈补偿的精度能提升一个量级。
公众号:蓝海资料掘金营,微信deep3321