4、手感补偿算法:摩擦补偿、阻尼补偿、惯性补偿、回正力矩补偿
好,咱们接着聊手感补偿。说实话,这部分才是线控转向手感模拟的「灵魂」所在。
你想想看,一个真实的方向盘,你打它的时候,有摩擦的涩感,有阻尼的黏滞感,有惯性的厚重感,还有回正时那股自动归位的劲儿。这些感觉缺一不可。如果少了任何一个,驾驶员就会觉得「这车不对劲」。我当年在台架上第一次试跑纯理论模型时,手感轻飘飘的,像在玩廉价游戏方向盘——就是因为没加补偿。
下面我一个一个拆开来讲。
4.1 摩擦补偿
摩擦补偿,说白了就是模拟方向盘内部的机械摩擦。真实车辆里,转向柱、万向节、齿轮齿条,哪哪都有摩擦。线控转向取消了这些机械连接,摩擦感就没了。你得用算法把它「补」回来。
我个人习惯用库仑摩擦模型,简单又实用:
T_friction = F_c * sign(ω) + F_v * ω
这里 F_c 是库仑摩擦系数,F_v 是粘性摩擦系数,ω 是方向盘转速。
嗯,这里要注意一点:sign(ω) 在零速附近会抖动。为什么?因为转速为零时,符号函数跳变,容易引起震颤。我建议加一个死区处理:
if |ω| < ω_threshold:
T_friction = 0
else:
T_friction = F_c * sign(ω) + F_v * ω
我曾经在一个项目中,死区设得太小,结果驾驶员在高速直线行驶时,方向盘一直有微弱的抖动反馈。后来把阈值从 0.5 deg/s 调到 2 deg/s,问题就解决了。
4.2 阻尼补偿
阻尼补偿模拟的是转向系统的粘滞阻力。你快速打方向时,阻尼感会变强;慢慢打,阻尼感就弱。这跟液压助力转向里的阻尼阀一个道理。
阻尼补偿的公式很简单:
T_damping = B * ω
B 是阻尼系数,ω 是方向盘角速度。
但这里有个坑——阻尼系数不能是常数。你想想看,低速泊车时,驾驶员希望方向盘轻快;高速行驶时,希望稳重。所以阻尼系数应该随车速变化:
B = B_base + B_speed * f(v)
其中 f(v) 是车速的函数,一般用分段线性或二次曲线。
我记得有一次调试,阻尼系数设得偏高,结果驾驶员在高速变道时,觉得方向盘「黏手」,回正速度太慢。后来把高速段的阻尼系数降低了 20%,手感就自然多了。
4.3 惯性补偿
惯性补偿模拟的是方向盘和转向系统的转动惯量。真实方向盘有质量,你打它的时候,会有一种「推着质量走」的感觉。线控转向的电机转子惯量很小,如果不补偿,手感会轻飘飘的,缺乏质感。
惯性补偿的公式:
T_inertia = J * α
J 是模拟惯量,α 是方向盘角加速度。
这里有个麻烦事——角加速度信号噪声很大。直接微分角速度,出来的信号抖得没法用。我建议加一个低通滤波器:
α_filtered = LPF(α_raw, cutoff_freq)
截止频率我一般设在 10~15 Hz,既能保留动态响应,又能滤掉高频噪声。
另外,惯性补偿不能太大。我见过一个团队,把惯量设得跟真实液压转向一样大,结果驾驶员觉得方向盘「笨重」,快速来回打方向时跟不上手速。嗯,线控转向的优势之一就是可以灵活调节,别把它调回老样子了。
4.4 回正力矩补偿
回正力矩补偿,这是手感模拟里最复杂的一块。它模拟的是轮胎自回正力矩,让方向盘在转弯后自动回正。
回正力矩的主要来源有两个:
- 轮胎侧向力产生的回正力矩——跟侧偏角、轮胎特性有关
- 主销后倾产生的回正力矩——跟车速、转向角有关
简化模型可以写成:
T_return = K_return * δ + C_return * ω
δ 是方向盘转角,K_return 是回正刚度,C_return 是回正阻尼。
但实际项目中,我很少用这么简单的模型。为什么?因为真实回正力矩是非线性的,低速和高速差异很大。我一般用查表法:
T_return = Map(δ, v)
这个 Map 表通过实车标定得到。先在不同车速下测量真实转向系统的回正力矩,然后拟合出二维表格。
我曾经犯过一个错误——回正力矩补偿加得太多,导致方向盘在弯道中回正过快,驾驶员需要一直「拉着」方向盘。后来把回正阻尼系数调大了 30%,才找到平衡点。
4.5 四种补偿的协同关系
四种补偿不是孤立的,它们共同构成了手感的总和:
T_total = T_friction + T_damping + T_inertia + T_return
我画了一张图,帮你理清它们的关系:
从图上你能看到,四种补偿各自有各自的输入参数,最终线性叠加到总力矩上。但实际标定时,它们之间会有耦合效应。比如,回正力矩补偿和阻尼补偿就经常需要联合标定。
我个人习惯的标定顺序是:先调摩擦,再调阻尼,然后加惯性,最后调回正力矩。每一步调完后,都要在台架上跑一遍典型工况——低速泊车、中速过弯、高速变道。嗯,这个过程很费时间,但值得。
公众号:蓝海资料掘金营,微信deep3321