第四节:前馈控制——让车辆提前“知道”该打多少方向

各位同学,今天我们聊前馈控制。

说实话,很多做横向控制的工程师,一开始都只盯着反馈。PID调来调去,参数改得头大,结果弯道一过,误差还是大。我以前也犯过这个错。后来才明白——反馈是事后补救,前馈才是事前准备。

4.1 前馈控制的核心思想

前馈控制,说白了就是“提前补偿”。

车辆在弯道上行驶,你需要提前打一个方向。这个“提前量”不是靠反馈算出来的,而是根据路径本身的特性——比如曲率——直接计算出来的。

我习惯用一个比喻:

  • 反馈控制:你开车时发现偏右了,赶紧往左打一点。这是“看到偏差再修正”。
  • 前馈控制:你看到前方有个弯,提前把方向盘转到合适角度。这是“预判路径再行动”。

你想想看,如果只靠反馈,车辆在弯道里会一直“左右摇摆”,永远追不上理想轨迹。前馈的作用,就是让车辆从一开始就走在正确的方向上。

核心公式(简化版):

前馈转角 = 路径曲率 × 车辆轴距 × 某个增益系数

嗯,这里要注意:这个“增益系数”不是随便给的,它和车速、轮胎特性都有关系。

4.2 基于路径曲率的前馈补偿设计

在实际项目中,我通常分三步走:

  1. 获取路径曲率:从规划模块拿到路径点序列,计算每个点的曲率值。
  2. 计算前馈转角:根据运动学模型,把曲率映射到方向盘转角。
  3. 叠加到反馈输出:前馈值 + 反馈值 = 最终控制量。

这里我贴一段我常用的伪代码,你们感受一下:

// 输入:路径点序列 path_points,当前车速 v
// 输出:前馈转角 feedforward_steer

for each point in path_points:
    curvature = compute_curvature(point)  // 计算曲率
    feedforward_steer = curvature * wheelbase * (1 + K * v^2)
    // K 是稳定性因子,和轮胎侧偏刚度有关
    // 车速越高,前馈补偿越大

// 最终控制量
final_steer = feedforward_steer + feedback_steer

这段代码看起来简单,但坑不少。我曾经在一个项目中,因为曲率计算时用了错误的坐标系,导致前馈方向完全反了——车辆在弯道里往外侧冲。排查了两天才发现,是路径点的顺序搞反了。

避坑指南:

我曾经遇到过一个问题:曲率计算时用了“离散点差分法”,但路径点间距不均匀,导致曲率值剧烈抖动。后来我改用“三次样条插值 + 解析求导”,效果稳定很多。

建议:如果路径点稀疏,先插值再算曲率。

4.3 前馈与反馈的配合

前馈不是万能的。它只能补偿已知的、可预测的偏差。比如弯道曲率、道路坡度这些。但轮胎磨损、路面湿滑、风阻这些不确定因素,还得靠反馈来兜底。

我个人的经验是:前馈解决80%的问题,反馈解决剩下的20%。两者配合好了,横向误差能控制在厘米级。

控制方式 优点 缺点
纯反馈 鲁棒性强,能应对未知扰动 响应慢,弯道误差大
纯前馈 响应快,弯道精度高 对模型误差敏感,无法处理扰动
前馈+反馈 兼顾精度和鲁棒性 参数调校稍复杂

小技巧:

调参时,我习惯先把反馈增益设小一点,让前馈主导。等弯道跟踪稳定了,再慢慢加大反馈增益,用来抑制残余误差。这样调起来思路清晰,不容易乱。

4.4 知识体系图

下面这张图,是我自己总结的前馈控制知识结构。你们可以保存下来,以后做项目时对照着看。

前馈控制知识体系 前馈控制核心概念 路径曲率计算 前馈转角映射 与反馈叠加策略 曲率计算方法 • 离散点差分法 • 三次样条插值法 映射模型 • 运动学模型 • 动力学模型 叠加策略 • 前馈主导 + 反馈微调 • 反馈主导 + 前馈补偿 工程实践:参数标定 → 实车验证 → 迭代优化 目标:横向误差 < 10cm

4.5 一些心里话

前馈控制这个东西,说难不难,说简单也不简单。我见过很多团队,前馈参数全靠试,试到差不多就上线了。结果换条路、换个车速,又出问题。

我个人建议:一定要理解背后的物理模型。曲率怎么算、增益怎么取、车速怎么影响——这些搞清楚了,调参才有方向,而不是瞎蒙。

嗯,今天就聊到这里。前馈控制是横向控制里性价比最高的一个模块,花时间搞透它,绝对值。

一句话总结:

前馈控制让车辆“看得见未来”,反馈控制让车辆“稳得住当下”。两者缺一不可。

可可精品资料库