第四节 目标函数设计:跟踪误差权重、控制量惩罚、加速度平滑性权重

好,咱们接着聊。上一节我们把MPC的预测模型搭起来了,那模型有了,接下来最关键的一步就是——怎么告诉控制器“什么才是好的行为”?

说白了,就是设计目标函数。你想想看,MPC本质上是个优化问题,它得有个目标去最小化。这个目标长什么样,直接决定了车辆是“贴线狂魔”还是“佛系巡航”。

我个人习惯把目标函数拆成三块来看:跟踪误差控制量惩罚加速度平滑性。这三块权重调好了,车就听话;调不好,要么抖得像筛糠,要么拐弯拐到沟里去。

4.1 跟踪误差权重:你到底有多想“贴线”?

先看第一项——跟踪误差。这玩意儿衡量的是车辆实际状态和参考轨迹之间的偏差。

通常我们关心两个东西:横向位置偏差航向角偏差。数学上写成:

J_error = Σ ( w_e * e_y² + w_ψ * e_ψ² )

其中:

  • e_y 是横向偏差(车离车道中心线多远)
  • e_ψ 是航向角偏差(车头指向和道路方向差多少)
  • w_ew_ψ 就是对应的权重

这里有个坑,我踩过。有一次在高速场景调试,我把 w_e 设得特别大,结果车在直道上确实贴线很准,但一进弯道,方向盘就开始疯狂抖动。为什么?因为权重太大,控制器为了消除那一点点横向误差,不惜猛打方向。

注意:跟踪误差权重不是越大越好。过大的横向误差权重会导致系统“过度反应”,尤其在弯道入口和出口处,容易引发震荡。

我建议的调参思路是:

  • 直道场景:可以适当提高 w_e,让车保持居中
  • 弯道场景:适当降低 w_e,给控制量惩罚留点空间
  • 航向角权重 w_ψ:一般比横向权重小一个数量级,因为航向偏差可以通过横向偏差间接修正

4.2 控制量惩罚:别让方向盘“抽风”

第二项是控制量惩罚。说白了,就是告诉控制器:“你别为了追求完美跟踪,把方向盘打得飞起。”

控制量通常指前轮转角 δ,有时候也包括加速度 a。目标函数里写成:

J_input = Σ ( w_δ * δ² + w_a * a² )

这里 w_δw_a 就是控制量的惩罚权重。

嗯,这里要注意:控制量惩罚的本质是“能耗”和“舒适性”的权衡。你想想看,如果 w_δ 设成0,那控制器会怎么干?它会用最大的转角去消除误差,结果就是——乘客晕车,转向机过热。

我在项目中遇到过一种情况:某款车的转向系统响应特别快,但机械间隙小。一开始我把 w_δ 设得很小,结果方向盘高频抖动,转向电机电流直接爆表。后来把 w_δ 提高了3倍,抖动消失了,跟踪精度只损失了不到5%。

小技巧:控制量惩罚权重可以从0.1开始试。如果发现方向盘动作太激进,每次加50%往上调,直到动作变得平滑为止。

4.3 加速度平滑性权重:让乘客不晕车

第三项,也是很多新手容易忽略的——加速度平滑性。它惩罚的是控制量的变化率,也就是 jerk(加加速度)。

数学形式:

J_smooth = Σ ( w_dδ * (δₖ - δₖ₋₁)² + w_da * (aₖ - aₖ₋₁)² )

说白了,就是不让方向盘和油门/刹车变化得太突然。你想想看,如果上一时刻方向盘打了10度,这一时刻突然要打30度,那车会怎么反应?——猛地一拽,乘客脑袋撞玻璃。

我个人习惯把 w_dδ 设得比 w_δ 大一些。为什么?因为平滑性直接决定了乘坐体验。我曾经调试过一个L2级别的车道保持功能,跟踪精度已经达标了,但测试工程师反馈说“坐这车想吐”。后来我把加速度平滑性权重提高了两倍,问题就解决了。

核心观点:三个权重的优先级排序应该是:
1. 安全性(跟踪误差)—— 必须保证不偏离车道
2. 舒适性(加速度平滑性)—— 影响用户体验
3. 经济性(控制量惩罚)—— 影响能耗和机械寿命

4.4 三个权重的调参实战策略

好,理论说完了,咱们聊聊实战中怎么调。我一般按以下步骤来:

  1. 先固定跟踪误差权重:把 w_ew_ψ 设为一个基准值,比如 w_e=1.0w_ψ=0.1
  2. 再调控制量惩罚:从 w_δ=0.1 开始,逐步增加,直到方向盘动作不再抖动
  3. 最后调平滑性权重:从 w_dδ=0.5 开始,观察加速度曲线是否平滑
  4. 微调迭代:三个权重互相影响,需要来回调2-3轮

下面是一个典型的权重配置示例,来自我做过的一个项目:

权重参数 初始值 最终值 调整原因
w_e(横向偏差) 1.0 0.8 弯道抖动,降低后改善
w_ψ(航向偏差) 0.1 0.15 直道偏航,稍微提高
w_δ(转角惩罚) 0.1 0.3 转向抖动,提高后平滑
w_dδ(转角变化率) 0.5 1.0 乘客晕车,提高后改善
w_a(加速度惩罚) 0.05 0.1 加减速太猛,适当提高
w_da(加速度变化率) 0.2 0.5 起步顿挫,提高后平顺

看到没?最终值和初始值差别不小。这就是调参的常态——纸上谈兵容易,实际跑起来才知道问题在哪。

4.5 避坑指南

最后,分享几个我踩过的坑:

  • 权重比例失调:我曾经把跟踪误差权重设得比控制量惩罚大100倍,结果车在弯道里直接冲出车道——因为控制器为了减小误差,打了太大的方向,导致车辆失稳。
  • 忽略加速度平滑性:有一次只调了前两项,觉得跟踪精度很好,结果试乘时测试员说“这车像在跳摇摆舞”。加上平滑性权重后,问题立刻解决。
  • 权重不随车速变化:高速和低速时,同样的权重效果完全不同。我建议把权重做成车速的函数,比如高速时增大跟踪误差权重,低速时增大控制量惩罚。

嗯,目标函数设计这块,说白了就是三个权重的博弈。没有万能公式,只有不断试错。但只要你理解了每个权重的物理意义,调起来就有方向了。

下一节,咱们聊聊约束处理——怎么让MPC知道“方向盘不能打到底”、“加速度不能超过0.3g”。这些约束设不好,MPC算出来的解可能根本不能用。