【MPC控制 - 从ACC到自动驾驶】3 MPC控制器设计原理与参数配置:打造ACC的“最强大脑”

【MPC控制 - 从ACC到自动驾驶】MPC控制器设计原理与参数配置:打造ACC的"最强大脑"

在Day 1,我们认识了ACC自适应巡航和MPC这位"深谋远虑的棋手"。Day 2,我们一起给汽车"画像",建立了它的纵向动力学模型,并把它翻译成了计算机能懂的离散语言。可以说,我们已经为MPC准备好了"沙盘"和"棋子"。

那么今天,Day 3,我们将进入激动人心的核心环节:MPC控制器设计原理与参数配置。我们要揭开MPC大脑内部的秘密,看看它是如何思考,如何做决策,以及我们如何"调教"它,让它成为一个优秀的"智能驾驶员"。准备好了吗?这部分内容是MPC的灵魂所在,打起精神,我们发车!

想象一下,你现在已经有了一张精确的地图(车辆模型),并且知道每条路怎么走(模型方程)。现在,你想从A点到B点(控制目标,比如保持安全车距),你该如何规划路线呢?你可能会考虑:

  • 哪条路最短?(效率)
  • 哪条路最平坦?(舒适性)
  • 路上有没有限速?(约束)
  • 是不是只规划下一步,还是多看几步?(预测)

MPC做决策的过程,和这个非常相似。它会在一个"有限的未来"里,不断地进行"规划-执行-再规划"。今天,我们就来一步步解构这个"规划"过程。

MPC的核心运作三部曲:预测、优化、执行

我们昨天提到,MPC像个棋手。它的每一步行动,都遵循着一个固定的套路:

  1. 预测未来 (Prediction): 基于我们Day 2建立的离散车辆模型 x ( k + 1 ) = A d x ( k ) + B d u ( k ) + B w d w ( k ) \mathbf{x}(k+1) = \mathbf{A}d\mathbf{x}(k) + \mathbf{B}d u(k) + \mathbf{B}{wd} w(k) x(k+1)=Adx(k)+Bdu(k)+Bwdw(k),MPC会展望未来的一小段时间(称为预测时域 N p N_p Np )。它会尝试不同的控制输入序列 u ( k ) , u ( k + 1 ) , ... , u ( k + N c − 1 ) u(k), u(k+1), \dots, u(k+N_c-1) u(k),u(k+1),...,u(k+Nc−1) (其中 N c N_c Nc 是控制时域 , N c ≤ N p N_c \le N_p Nc≤Np),并预测在这些控制作用下,车辆未来的状态(如速度 v e g o v{ego} vego、相对距离 d r e l d_{rel} drel)会如何演变。
    • 预测时域 N p N_p Np (Prediction Horizon): 指MPC向前看多少步。比如 N p = 20 N_p=20 Np=20, T s = 0.1 T_s=0.1 Ts=0.1秒,就代表MPC会预测未来2秒钟车辆的轨迹。
    • 控制时域 N c N_c Nc (Control Horizon): 指MPC在一个优化周期内,实际计算并优化的未来控制输入的数量。通常 N c ≤ N p N_c \le N_p Nc≤Np。在 N c N_c Nc 步之后,控制输入通常被假定为保持不变或按某种规律延续。
  1. 优化决策 (Optimization): 在预测出的众多未来可能性中,哪一个是"最好"的呢?这就需要一个"评价标准",在MPC中,这个标准就是代价函数 (Cost Function,或称目标函数 Objective Function) 。MPC会努力寻找一个控制序列,使得这个代价函数的值最小。同时,它还要确保所有的控制行为都符合实际的物理限制和安全要求,这些就是约束条件 (Constraints)。这个寻找最优解的过程,本质上是在求解一个带约束的优化问题。

  2. 滚动执行 (Receding Horizon Execution): 优化完成后,MPC会得到一串"最优"的未来控制指令 u ∗ ( k ∣ k ) , u ∗ ( k + 1 ∣ k ) , ... , u ∗ ( k + N c − 1 ∣ k ) u^*(k|k), u^*(k+1|k), \dots, u^*(k+N_c-1|k) u∗(k∣k),u∗(k+1∣k),...,u∗(k+Nc−1∣k)。但它并不会把这些指令全部执行。而是只执行第一个控制指令 u ∗ ( k ∣ k ) u^*(k|k) u∗(k∣k) 。然后,在下一个控制时刻 k + 1 k+1 k+1 到来时,系统会获得新的测量值(车辆实际的状态),然后MPC会重复上述的预测和优化过程,重新计算下一串最优控制指令,并再次只执行第一个。这个过程不断"滚动"向前,因此也称为滚动时域控制 (Receding Horizon Control, RHC)

这个"预测-优化-执行第一个-再重复"的循环,就是MPC工作的核心机制。它赋予了MPC强大的适应性和鲁棒性。

代价函数:MPC的"导航地图"与"评价标准"

代价函数 J J J 是MPC的灵魂,它告诉MPC什么是"好"的控制,什么是"坏"的控制。设计一个好的代价函数,是MPC成功的关键。

对于ACC系统,我们期望达到的控制目标可以概括为:

  1. 准确性 (Accuracy):
    • 车速跟踪: 当没有前车或前车很远时,本车速度 v e g o v_{ego} vego 应尽可能接近驾驶员设定的期望速度 v s e t v_{set} vset。
    • 距离保持: 当有前车时,本车与前车的相对距离 d r e l d_{rel} drel 应尽可能接近计算出的安全距离 d s a f e d_{safe} dsafe (回顾Day 1, d s a f e = d 0 + T h w ⋅ v e g o d_{safe} = d_0 + T_{hw} \cdot v_{ego} dsafe=d0+Thw⋅vego)。
  2. 舒适性 (Comfort):
    • 避免过大的加速度或减速度,即控制输入 u ( k ) = a e g o ( k ) u(k) = a_{ego}(k) u(k)=aego(k) 不宜过大。
    • 避免加速度的剧烈变化(即过大的"冲击度"或"Jerk"),即 u ( k ) − u ( k − 1 ) u(k) - u(k-1) u(k)−u(k−1) 不宜过大。
  3. 经济性 (Economy) (可选):
    • 尽量减少不必要的加速和减速,以节省燃油或电能。这通常与舒适性目标部分重合。

MPC通常采用二次型代价函数 (Quadratic Cost Function),因为它形式简单,易于求解(尤其是当系统模型是线性的,约束也是线性的情况下,优化问题会变成一个凸的二次规划QP问题,有高效的解法)。

一个典型的MPC代价函数可以写成如下形式:

J = ∑ i = 1 N p ∥ y p r e d ( k + i ∣ k ) − y r e f ( k + i ∣ k ) ∥ Q 2 + ∑ j = 0 N c − 1 ∥ Δ u ( k + j ∣ k ) ∥ R 2 + ∑ j = 0 N c − 1 ∥ u ( k + j ∣ k ) ∥ S 2 J = \sum_{i=1}^{N_p} \left\| \mathbf{y}{pred}(k+i|k) - \mathbf{y}{ref}(k+i|k) \right\|{\mathbf{Q}}^2 + \sum{j=0}^{N_c-1} \left\| \Delta u(k+j|k) \right\|{\mathbf{R}}^2 + \sum{j=0}^{N_c-1} \left\| u(k+j|k) \right\|_{\mathbf{S}}^2 J=∑i=1Np∥ypred(k+i∣k)−yref(k+i∣k)∥Q2+∑j=0Nc−1∥Δu(k+j∣k)∥R2+∑j=0Nc−1∥u(k+j∣k)∥S2

是不是看起来有点吓人?别慌,我们把它拆开来看:

  • k k k: 当前的离散时间步。
  • i i i: 在预测时域 N p N_p Np 内的未来时间步索引,从1到 N p N_p Np。
  • j j j: 在控制时域 N c N_c Nc 内的未来控制步索引,从0到 N c − 1 N_c-1 Nc−1。
  • y p r e d ( k + i ∣ k ) \mathbf{y}{pred}(k+i|k) ypred(k+i∣k): 在当前时刻 k k k 预测的未来第 k + i k+i k+i 时刻的系统输出。对于ACC,它可能包含预测的相对距离 d r e l ( k + i ∣ k ) d{rel}(k+i|k) drel(k+i∣k) 和本车速度 v e g o ( k + i ∣ k ) v_{ego}(k+i|k) vego(k+i∣k)。
  • y r e f ( k + i ∣ k ) \mathbf{y}_{ref}(k+i|k) yref(k+i∣k): 我们期望系统在未来第 k + i k+i k+i 时刻达到的参考输出值。
    • 速度控制模式 下,参考速度是 v s e t v_{set} vset,参考距离可以设为一个很大的值或者其权重为0。
    • 距离控制模式 下,参考距离是 d s a f e ( k + i ∣ k ) d_{safe}(k+i|k) dsafe(k+i∣k)(注意 d s a f e d_{safe} dsafe 可能也依赖于预测的本车速度 v e g o ( k + i ∣ k ) v_{ego}(k+i|k) vego(k+i∣k),这会使问题更复杂,有时会用当前时刻计算的 d s a f e d_{safe} dsafe 作为未来一段时间的参考,或进行迭代逼近),参考速度可以是前车速度 v l e a d ( k + i ∣ k ) v_{lead}(k+i|k) vlead(k+i∣k) 或 v s e t v_{set} vset(取较小者)。
  • u ( k + j ∣ k ) u(k+j|k) u(k+j∣k): 在当前时刻 k k k 优化的未来第 k + j k+j k+j 时刻的控制输入(即本车期望加速度 a e g o ( k + j ∣ k ) a_{ego}(k+j|k) aego(k+j∣k))。
  • Δ u ( k + j ∣ k ) \Delta u(k+j|k) Δu(k+j∣k): 控制输入的增量,即 u ( k + j ∣ k ) − u ( k + j − 1 ∣ k ) u(k+j|k) - u(k+j-1|k) u(k+j∣k)−u(k+j−1∣k)。它代表了加速度的变化率(与Jerk相关)。我们通常希望这个增量小一些,以保证舒适性。
  • ∥ v ∥ M 2 \left\| \mathbf{v} \right\|_{\mathbf{M}}^2 ∥v∥M2: 这是一个带权重的二次型范数,表示 v T M v \mathbf{v}^T \mathbf{M} \mathbf{v} vTMv。 M \mathbf{M} M 是一个半正定的权重矩阵。
    • Q \mathbf{Q} Q: 状态/输出权重矩阵 。它衡量我们对跟踪误差的重视程度。 Q \mathbf{Q} Q 中对应某个输出(如 d r e l d_{rel} drel)的对角线元素越大,MPC就会越努力地减小该输出的跟踪误差。
    • R \mathbf{R} R: 控制增量权重矩阵 。它衡量我们对控制输入变化剧烈程度的惩罚。 R \mathbf{R} R 的元素越大,MPC计算出的控制输入变化就越平缓(即加速度变化越小,越舒适)。
    • S \mathbf{S} S: 控制量权重矩阵 (可选,有时包含在R中或不显式列出)。它衡量我们对控制输入大小本身的惩罚。 S \mathbf{S} S 越大,MPC倾向于使用更小的控制输入(更节能,但不一定能快速响应)。

代价函数的通俗理解:

J = ( 未来一段时间内,预测输出与期望输出的差距有多大? ) + ( 未来的控制指令变化是不是太剧烈了? ) + ( 未来的控制指令本身是不是太大了? ) J = (\text{未来一段时间内,预测输出与期望输出的差距有多大?}) + (\text{未来的控制指令变化是不是太剧烈了?}) + (\text{未来的控制指令本身是不是太大了?}) J=(未来一段时间内,预测输出与期望输出的差距有多大?)+(未来的控制指令变化是不是太剧烈了?)+(未来的控制指令本身是不是太大了?)

MPC的目标就是找到一串未来的控制指令 u ( k ∣ k ) , ... , u ( k + N c − 1 ∣ k ) u(k|k), \dots, u(k+N_c-1|k) u(k∣k),...,u(k+Nc−1∣k),使得这个总的"代价" J J J 最小。

权重矩阵 Q \mathbf{Q} Q 和 R \mathbf{R} R 的奥秘------调校的艺术

Q \mathbf{Q} Q 和 R \mathbf{R} R (以及 S \mathbf{S} S)是我们与MPC沟通的"语言"。通过调整这些权重,我们可以告诉MPC我们更看重什么:

  • 增大 Q \mathbf{Q} Q 中对应 d r e l d_{rel} drel 误差的权重: MPC会更积极地保持安全距离,即使这意味着加速度变化可能大一些。
  • 增大 Q \mathbf{Q} Q 中对应 v e g o v_{ego} vego 误差的权重: MPC会更努力地跟踪设定速度。
  • 增大 R \mathbf{R} R 的权重: MPC会倾向于输出更平滑、变化更小的加速度指令,驾驶体验更舒适,但可能响应速度会慢一些。
  • 增大 S \mathbf{S} S 的权重: MPC会尽量使用较小的加速度值,可能更节能,但跟踪性能可能会下降。

这些权重的选取是一个权衡 (Trade-off) 的过程,也是MPC参数调优中最核心、最具挑战性的部分之一。通常需要通过大量的仿真和实车测试,反复迭代,才能找到一组在不同工况下都表现良好的权重。这很像给音响调均衡器,不同的参数组合会带来不同的"听感"(驾驶体验)。

约束条件:MPC的"行为准则"

现实世界中,汽车的性能不是无限的,道路交通也有规则。MPC的一大优势就是能够直接、显式地处理这些约束条件 (Constraints)

对于ACC系统,常见的约束有:

  1. 控制输入约束 (Input Constraints):

    • 加速度限制: 车辆的发动机/电机提供的驱动加速度和刹车系统提供的制动加速度都是有限的。
      a m i n ≤ u ( k + j ∣ k ) ≤ a m a x a_{min} \le u(k+j|k) \le a_{max} amin≤u(k+j∣k)≤amax
      例如, a m i n a_{min} amin 可能是 -5 m/s² (最大刹车), a m a x a_{max} amax 可能是 2 m/s² (舒适的加速上限)。
    • 加速度变化率限制 (Slew Rate / Jerk Constraints): 为了舒适性,加速度的变化不宜过快。
      Δ u m i n ≤ u ( k + j ∣ k ) − u ( k + j − 1 ∣ k ) ≤ Δ u m a x \Delta u_{min} \le u(k+j|k) - u(k+j-1|k) \le \Delta u_{max} Δumin≤u(k+j∣k)−u(k+j−1∣k)≤Δumax
      例如,一个采样周期内加速度变化不超过 0.5 m/s³。
  2. 状态/输出约束 (State/Output Constraints):

    • 速度限制: 本车速度不能超过道路限速,也不能低于某个最低速度(如果有的话),并且不能超过驾驶员设定的 v s e t v_{set} vset。
      v e g o _ m i n ≤ v e g o ( k + i ∣ k ) ≤ v e g o _ m a x v_{ego\min} \le v{ego}(k+i|k) \le v_{ego\_max} vego_min≤vego(k+i∣k)≤vego_max
    • 最小安全距离: 即使在优化过程中,预测的相对距离 d r e l d_{rel} drel 也不能小于某个绝对的最小安全距离 d a b s _ m i n d_{abs\min} dabs_min(这比通过代价函数去"软"逼近 d s a f e d{safe} dsafe 更严格)。
      d r e l ( k + i ∣ k ) ≥ d a b s _ m i n d_{rel}(k+i|k) \ge d_{abs\_min} drel(k+i∣k)≥dabs_min
      这通常是一个硬约束 (Hard Constraint),必须严格遵守。
    • 有些输出约束也可以是软约束 (Soft Constraint),即允许在一定程度上违反,但在代价函数中给予巨大的惩罚。这可以增加优化问题的求解鲁棒性,避免因为过于严格的约束导致找不到可行解。

MPC在求解优化问题时,会确保找到的控制序列 u ∗ ( k ∣ k ) , ... , u ∗ ( k + N c − 1 ∣ k ) u^*(k|k), \dots, u^*(k+N_c-1|k) u∗(k∣k),...,u∗(k+Nc−1∣k) 所产生的预测状态和输出都满足这些约束条件。这就好比给MPC划定了一个"安全操作区域",它只能在这个区域内寻找最优解。

优化求解:寻找代价最小的控制序列

有了代价函数 J J J 和一系列约束条件,MPC的下一步工作就是求解这个带约束的优化问题:

Minimize J ( U ) J(U) J(U)
Subject to:

  1. System Dynamics: x ( k + i + 1 ∣ k ) = A d x ( k + i ∣ k ) + B d u ( k + i ∣ k ) + B w d w ( k + i ∣ k ) \mathbf{x}(k+i+1|k) = \mathbf{A}_d\mathbf{x}(k+i|k) + \mathbf{B}d u(k+i|k) + \mathbf{B}{wd} w(k+i|k) x(k+i+1∣k)=Adx(k+i∣k)+Bdu(k+i∣k)+Bwdw(k+i∣k) (for i = 0 ... N p − 1 i=0 \dots N_p-1 i=0...Np−1)
  2. Input Constraints: a m i n ≤ u ( k + j ∣ k ) ≤ a m a x a_{min} \le u(k+j|k) \le a_{max} amin≤u(k+j∣k)≤amax (for j = 0 ... N c − 1 j=0 \dots N_c-1 j=0...Nc−1)
  3. Input Rate Constraints: Δ u m i n ≤ Δ u ( k + j ∣ k ) ≤ Δ u m a x \Delta u_{min} \le \Delta u(k+j|k) \le \Delta u_{max} Δumin≤Δu(k+j∣k)≤Δumax (for j = 0 ... N c − 1 j=0 \dots N_c-1 j=0...Nc−1)
  4. State/Output Constraints: e.g., v e g o _ m i n ≤ v e g o ( k + i ∣ k ) ≤ v e g o _ m a x v_{ego\min} \le v{ego}(k+i|k) \le v_{ego\_max} vego_min≤vego(k+i∣k)≤vego_max (for i = 1 ... N p i=1 \dots N_p i=1...Np)
    ... (and other constraints)

其中 U = [ u ( k ∣ k ) T , u ( k + 1 ∣ k ) T , ... , u ( k + N c − 1 ∣ k ) T ] T U = [u(k|k)^T, u(k+1|k)^T, \dots, u(k+N_c-1|k)^T]^T U=[u(k∣k)T,u(k+1∣k)T,...,u(k+Nc−1∣k)T]T 是待优化的控制序列。

如果系统模型是线性的(我们Day 2建立的模型就是),代价函数是二次的,约束条件是线性的(我们上面列举的都是),那么这个优化问题就是一个二次规划 (Quadratic Programming, QP) 问题。QP问题是一类研究得比较成熟的优化问题,有很多现成的、高效的QP求解器 (QP Solvers) 可以使用,例如 OSQP, qpOASES, MOSEK, Gurobi 等。这些求解器能够在毫秒级的时间内给出QP问题的解,满足车载实时性的要求。

求解器会输出一个最优的控制序列 U ∗ U^* U∗,也就是 u ∗ ( k ∣ k ) , u ∗ ( k + 1 ∣ k ) , ... , u ∗ ( k + N c − 1 ∣ k ) u^*(k|k), u^*(k+1|k), \dots, u^*(k+N_c-1|k) u∗(k∣k),u∗(k+1∣k),...,u∗(k+Nc−1∣k)。

滚动时域控制:不断向前看,稳健应对变化

正如前面提到的,MPC并不会把计算出来的整个 N c N_c Nc 步的控制序列都用掉。它只采纳序列中的第一个控制动作 u ∗ ( k ∣ k ) u^*(k|k) u∗(k∣k) (即 a e g o ( k ) a_{ego}(k) aego(k)),并将其施加到车辆上。

然后,在下一个采样时刻 k + 1 k+1 k+1:

  1. 系统通过传感器测量得到新的实际状态 x ( k + 1 ) \mathbf{x}(k+1) x(k+1) (比如新的 v e g o v_{ego} vego, d r e l d_{rel} drel, v l e a d v_{lead} vlead)。
  2. 预测时域和控制时域都向前"滚动"一个时间步。
  3. MPC以新的状态 x ( k + 1 ) \mathbf{x}(k+1) x(k+1) 为起点,重新进行预测、代价函数评估和约束检查,再次求解QP优化问题,得到新的最优控制序列 u ∗ ( k + 1 ∣ k + 1 ) , ... , u ∗ ( k + N c ∣ k + 1 ) u^*(k+1|k+1), \dots, u^*(k+N_c|k+1) u∗(k+1∣k+1),...,u∗(k+Nc∣k+1)。
  4. 再次只应用第一个控制动作 u ∗ ( k + 1 ∣ k + 1 ) u^*(k+1|k+1) u∗(k+1∣k+1)。
  5. 如此循环往复。

为什么采用滚动时域策略?

  • 处理扰动: 真实世界充满不确定性。前车可能突然加速减速( w ( k ) w(k) w(k) 的变化),路面可能突然变化,我们的模型也可能不是100%精确。通过在每个时刻都根据最新的测量值重新优化,MPC能够及时地对这些扰动和模型误差做出反应,保持控制的鲁棒性。
  • 反馈校正: 它本质上是一种闭环反馈控制。虽然MPC在"开环"地预测未来,但由于不断地用实际测量值来校正预测的起点,使得整个系统是闭环稳定的。
  • 计算可行性: 如果我们试图一次性优化一个非常非常长的未来控制序列,计算量会大到无法接受。滚动时域将大问题分解为一系列在有限时域内求解的小问题。

MPC参数配置:调校出最佳性能的关键"旋钮"

一个MPC控制器的性能,很大程度上取决于其参数的选择和调校。这些参数就像汽车上的各种调节旋钮,需要精心设置,才能让ACC系统运行得既安全又舒适。

主要的参数包括:

  1. 采样时间 T s T_s Ts (Sampling Time):

    • 影响: 我们在Day 2已经讨论过。它决定了MPC的反应速度和计算频率。
    • 选择: 对于ACC,通常在 0.05 s ∼ 0.2 s 0.05s \sim 0.2s 0.05s∼0.2s (50ms ~ 200ms) 之间。需要平衡车辆动态响应、传感器刷新率和车载处理器的计算能力。
  2. 预测时域 N p N_p Np (Prediction Horizon):

    • 影响:
      • 优点: 较长的 N p N_p Np 能让MPC"看得更远",更好地预见未来的情况,从而做出更平滑、更具前瞻性的控制决策。例如,如果能预见到前方较远处有一个慢车,就可以提前、缓慢地开始减速。
      • 缺点: 极大地增加QP问题的规模和计算复杂度(变量数量和约束数量都随 N p N_p Np 增长)。而且,对模型精度的要求也更高,因为远期预测的误差会累积放大。
    • 选择: 通常需要覆盖被控对象的主要动态响应时间,或者说,足够长到能看到一个控制动作的显著效果。对于ACC,几秒钟的预测时域(例如 N p ⋅ T s = 2 ∼ 5 N_p \cdot T_s = 2 \sim 5 Np⋅Ts=2∼5 秒)是比较常见的。
  3. 控制时域 N c N_c Nc (Control Horizon):

    • 影响:
      • N c N_c Nc 是实际优化的控制输入变量的个数。通常 N c ≤ N p N_c \le N_p Nc≤Np。在 N c N_c Nc 之后的控制输入,通常假定为 u ( k + N c − 1 ∣ k ) u(k+N_c-1|k) u(k+Nc−1∣k) 或某个固定值。
      • 优点: 较小的 N c N_c Nc (比如1到5) 可以显著减少优化变量的数量,从而大大降低计算时间,同时仍然能获得不错的控制性能。
      • 缺点: 如果 N c N_c Nc 太小,可能会限制控制器的灵活性,使其难以应对一些需要复杂控制序列的情况。
    • 选择: 很多情况下, N c N_c Nc 会远小于 N p N_p Np。甚至 N c = 1 N_c=1 Nc=1 也是可行的,但可能会使控制动作有些"短视"。 N c N_c Nc 的选择也是一个权衡计算量和控制性能的过程。
  4. 权重矩阵 Q \mathbf{Q} Q (State/Output Weights) 和 R \mathbf{R} R (Control Input Weights):

    • 影响: 正如前面详细讨论的,它们决定了MPC在不同控制目标(如跟踪精度、舒适性、经济性)之间的平衡。
    • Q \mathbf{Q} Q 矩阵: 通常是对角矩阵。对角线上的元素 q i i q_{ii} qii 越大,表示对应的第 i i i 个状态/输出的跟踪误差越不被容忍。
      • 例如,在ACC中, Q = diag ( q v _ e g o , q d _ r e l , q v _ l e a d ) \mathbf{Q} = \text{diag}(q_{v\ego}, q{d\rel}, q{v\lead}) Q=diag(qv_ego,qd_rel,qv_lead) (如果这三个都是状态变量,并且都需要被加权)。如果 q d _ r e l q{d\rel} qd_rel 远大于 q v _ e g o q{v\_ego} qv_ego,则MPC会优先保证安全距离,即使速度跟踪稍差。
    • R \mathbf{R} R 矩阵: 通常也是对角矩阵(如果控制输入是向量的话,ACC中 u u u 通常是标量 a e g o a_{ego} aego,所以R是标量)。 r j j r_{jj} rjj 越大,表示对应的第 j j j 个控制输入的增量(或本身)的惩罚越大,控制会越平缓。
    • 选择与调校:
      • Bryson法则 (Bryson's Rule) 作为起点: 一种经验性的方法是将权重设置为允许的最大误差(或控制量)的平方的倒数。例如,如果速度误差允许在 ± 2 m/s \pm 2 \text{ m/s} ±2 m/s,则 q v _ e g o ≈ 1 / ( 2 2 ) = 0.25 q_{v\ego} \approx 1/(2^2) = 0.25 qv_ego≈1/(22)=0.25。如果加速度变化允许在 ± 0.5 m/s 2 / sample \pm 0.5 \text{ m/s}^2/\text{sample} ±0.5 m/s2/sample,则 r Δ a ≈ 1 / ( 0.5 2 ) = 4 r{\Delta a} \approx 1/(0.5^2) = 4 rΔa≈1/(0.52)=4。但这只是一个非常粗略的起点。
      • 归一化: 将不同物理量的误差归一化到相似的数值范围,再进行加权,可能更容易调整。
      • 迭代试凑: 大量的仿真测试是必不可少的。从一组初始值开始,观察系统的响应(超调、响应速度、平稳性、约束满足情况),然后逐步调整 Q \mathbf{Q} Q 和 R \mathbf{R} R 的相对大小,直到获得满意的性能。这是一个经验和技巧积累的过程。
      • 先调 Q \mathbf{Q} Q,再调 R \mathbf{R} R。或者先固定 R \mathbf{R} R 为一个较小的值(比如1),然后调整 Q \mathbf{Q} Q 来满足主要的跟踪性能,最后再调整 R \mathbf{R} R 来改善平顺性。
  5. 约束的边界值:

    • a m i n , a m a x , Δ u m i n , Δ u m a x , v e g o _ m i n , v e g o _ m a x , d a b s _ m i n a_{min}, a_{max}, \Delta u_{min}, \Delta u_{max}, v_{ego\min}, v{ego\max}, d{abs\_min} amin,amax,Δumin,Δumax,vego_min,vego_max,dabs_min 等。
    • 影响: 直接决定了MPC的操作空间。
    • 选择:
      • a m i n , a m a x a_{min}, a_{max} amin,amax 通常由车辆的物理性能决定(如最大驱动力、最大制动力),并考虑一定的安全裕量和舒适性。例如,虽然车能做到-9m/s²的急刹,但ACC一般不会用到这么大的值,可能会限制在-3m/s² 到 -5m/s²。
      • Δ u \Delta u Δu 的限制主要为了舒适性。
      • 速度限制由法规、设定速度和安全考虑决定。
      • d a b s _ m i n d_{abs\_min} dabs_min 是绝对的红线,比如一个车身的长度。

参数调校的一般流程:

  1. 明确控制目标和性能指标: 你希望ACC系统达到什么样的响应速度?多大的超调可以接受?舒适性要求如何?
  2. 根据经验或规则选择初始参数: T s , N p , N c T_s, N_p, N_c Ts,Np,Nc 可以根据系统动态和计算能力初步选定。 Q , R \mathbf{Q}, \mathbf{R} Q,R 可以用Bryson法则或简单的单位矩阵开始。约束根据物理限制设定。
  3. 仿真测试: 在各种典型工况下(如跟车、切入、前车急刹、畅通路段巡航)进行仿真。
  4. 分析结果,调整参数:
    • 如果响应太慢:尝试减小 R \mathbf{R} R,或增大 Q \mathbf{Q} Q 中对应误差项的权重,或适当增大 N c N_c Nc。
    • 如果超调太大或震荡:尝试增大 R \mathbf{R} R,或减小 Q \mathbf{Q} Q,或检查 N p N_p Np 是否足够长。
    • 如果控制输入变化太剧烈(不舒服):增大 R \mathbf{R} R (惩罚 Δ u \Delta u Δu)。
    • 如果频繁触碰约束:检查约束设置是否合理,或者模型是否准确。
    • 如果计算时间太长:减小 N p N_p Np 或 N c N_c Nc,或增大 T s T_s Ts (但这会牺牲性能)。
  5. 迭代: 重复步骤3和4,直到获得满意的综合性能。
  6. 实车测试与微调: 仿真毕竟是理想化的,最终参数还需要在实车上进行验证和细致调整。

这是一个充满挑战但也非常有趣的过程,就像一位调音师在精心雕琢一件乐器,使其发出最美妙的声音。

ACC控制模式切换与MPC的配合

还记得Day 1我们讲的ACC的两种主要工作模式吗?速度控制和距离控制。MPC如何适应这两种模式呢?答案是调整代价函数中的参考值 y r e f \mathbf{y}_{ref} yref 和权重 Q \mathbf{Q} Q

  • 速度控制模式 (无前车或前车远/快):

    • 目标: v e g o → v s e t v_{ego} \to v_{set} vego→vset。
    • y r e f \mathbf{y}{ref} yref 中的速度参考设为 v s e t v{set} vset。
    • y r e f \mathbf{y}_{ref} yref 中的距离参考可以设为一个非常大且无关的值,或者 Q \mathbf{Q} Q 矩阵中与距离误差对应的权重设为0或一个很小的值。
    • 此时,代价函数主要惩罚 ( v e g o − v s e t ) 2 (v_{ego} - v_{set})^2 (vego−vset)2。
  • 距离控制模式 (有前车且需要跟驰):

    • 目标: d r e l → d s a f e d_{rel} \to d_{safe} drel→dsafe,同时 v e g o ≈ v l e a d v_{ego} \approx v_{lead} vego≈vlead (但不超过 v s e t v_{set} vset)。
    • y r e f \mathbf{y}{ref} yref 中的距离参考设为 d s a f e ( k + i ∣ k ) = d 0 + T h w ⋅ v e g o ( k + i ∣ k ) d{safe}(k+i|k) = d_0 + T_{hw} \cdot v_{ego}(k+i|k) dsafe(k+i∣k)=d0+Thw⋅vego(k+i∣k) (或其近似值)。
    • y r e f \mathbf{y}{ref} yref 中的速度参考可以设为预测的前车速度 v l e a d ( k + i ∣ k ) v{lead}(k+i|k) vlead(k+i∣k),或者 m i n ( v l e a d ( k + i ∣ k ) , v s e t ) min(v_{lead}(k+i|k), v_{set}) min(vlead(k+i∣k),vset)。
    • 此时, Q \mathbf{Q} Q 矩阵中与距离误差 d r e l d_{rel} drel 和速度误差 v e g o v_{ego} vego 相关的权重都会比较大,MPC会努力同时满足这两个目标。

通过在每个控制周期根据当前是否有有效跟车对象,动态地调整MPC代价函数中的参考信号和权重,就可以实现ACC在不同模式下的平滑切换和精确控制。

今日总结与明日展望

今天,我们深入探索了MPC控制器设计的三大核心要素:代价函数、约束条件和优化求解 ,以及关键的滚动时域控制 策略。我们还详细讨论了MPC中最重要的参数------预测时域 N p N_p Np、控制时域 N c N_c Nc、采样时间 T s T_s Ts 以及权重矩阵 Q \mathbf{Q} Q 和 R \mathbf{R} R------它们是如何影响控制器性能,以及如何进行初步的配置和调校。

可以说,我们已经掌握了设计一个MPC控制器的基本蓝图。我们知道它如何设定目标(代价函数),如何遵守规则(约束),如何做出决策(优化求解),以及如何不断适应变化(滚动时域)。

这个"大脑"已经初具雏形,但它是否真的好用,还需要实践的检验。在明天的博客中,我们将进入MPC的仿真与参数精调环节。我们会看到如何将今天设计的MPC控制器在一个模拟环境中运行起来,观察它的实际表现,并通过系统的方法来优化那些关键的参数,让我们的ACC系统真正达到"聪明又稳重"的境界。

习题

1. 简答题:请用你自己的话解释MPC中的"预测时域 ( N p N_p Np)"和"控制时域 ( N c N_c Nc)"分别是什么含义?为什么通常 N c ≤ N p N_c \le N_p Nc≤Np?

2. 判断题:在MPC的代价函数 J = ∑ ∥ y p r e d − y r e f ∥ Q 2 + ∑ ∥ Δ u ∥ R 2 J = \sum \|\mathbf{y}{pred} - \mathbf{y}{ref}\|{\mathbf{Q}}^2 + \sum \|\Delta u\|{\mathbf{R}}^2 J=∑∥ypred−yref∥Q2+∑∥Δu∥R2 中,如果我希望车辆的加速度变化更平缓,驾驶感觉更舒适,我应该增大权重矩阵 Q \mathbf{Q} Q 还是 R \mathbf{R} R?

3. 选择题:以下哪项不是模型预测控制(MPC)能够直接处理的约束类型?

A. 控制输入的大小限制 (如最大加速度)

B. 控制输入的变化率限制 (如最大Jerk)

C. 系统状态的限制 (如最大车速)

D. 未建模的外部随机扰动的大小

4. 思考题:假设你在为一个ACC系统调试MPC参数。你发现车辆在跟车时,与前车的距离总是比设定的安全距离 d s a f e d_{safe} dsafe 要小一点,而且减速时有点突兀。你会考虑调整哪些MPC参数,以及如何调整?请说明理由。


答案:

  1. 答案:

    • 预测时域 ( N p N_p Np): 指MPC在做当前决策时,会向前预测未来多少个时间步长的系统行为。它代表了MPC"看得有多远"。例如,如果采样时间是0.1秒, N p = 20 N_p=20 Np=20,那么MPC会预测未来2秒内系统的状态。
    • 控制时域 ( N c N_c Nc): 指MPC在一个优化周期内,实际计算并优化的未来控制输入的数量。它代表了MPC一次"规划多少步控制动作"。
    • 为什么通常 N c ≤ N p N_c \le N_p Nc≤Np:
      1. 计算量: 优化变量的数量直接由 N c N_c Nc 决定。较小的 N c N_c Nc 可以显著减少优化问题的复杂度,加快求解速度。如果 N c = N p N_c = N_p Nc=Np,则优化变量会很多。
      2. 性能与鲁棒性: 实践表明,很多情况下,不需要对整个预测时域内的所有控制输入都进行精细优化。只优化前面少数几步的控制输入(即较小的 N c N_c Nc),然后在 N c N_c Nc 之后假设控制输入保持不变或按简单规律延续,往往也能获得很好的控制效果,并且对模型不确定性的鲁棒性可能更好。因为远期的控制决策对当前影响较小,且依赖于更不可靠的远期预测。
      3. 滚动时域特性: 由于MPC采用滚动时域策略,只执行第一个控制输入,然后在下一时刻重新优化,所以并不强求一次性计算出非常长期的精确控制序列。
  2. 答案:增大权重矩阵 R \mathbf{R} R。
    R \mathbf{R} R 是用来惩罚控制输入增量 Δ u \Delta u Δu (即加速度的变化) 的。增大 R \mathbf{R} R 会使得MPC在优化时更倾向于选择那些加速度变化较小的控制序列,从而使驾驶感觉更平顺、更舒适。 Q \mathbf{Q} Q 是惩罚状态/输出跟踪误差的。

  3. 答案:D. 未建模的外部随机扰动的大小

    MPC通过其滚动时域和反馈校正机制,能够对未建模扰动产生一定的鲁棒性(即在扰动发生后进行补偿),但它不能直接将"未建模的随机扰动的大小"作为优化问题中的一个显式约束来处理,因为这些扰动本质上是不可预测或难以精确量化的。A, B, C 都是MPC可以显式处理的常见约束类型。

  4. 答案:

    • 问题1:距离总是比 d s a f e d_{safe} dsafe 小一点(稳态误差或跟踪不准):

      • 可能原因与调整:
        1. Q \mathbf{Q} Q 中对应 d r e l d_{rel} drel 误差的权重 ( q d _ r e l q_{d\_rel} qd_rel) 可能偏小: 这使得MPC对距离误差的容忍度较高。可以尝试增大 q d _ r e l q_{d\_rel} qd_rel,让MPC更重视减小距离跟踪误差。
        2. 模型不准确: 如果车辆模型(特别是与阻力相关的部分)与实际情况偏差较大,可能导致稳态误差。需要回顾和改进Day 2的模型。
        3. d s a f e d_{safe} dsafe 的计算或参考设置: 确保 d s a f e d_{safe} dsafe 的计算是准确的,并且在代价函数中正确地作为 d r e l d_{rel} drel 的参考。如果 d s a f e d_{safe} dsafe 本身依赖于 v e g o v_{ego} vego,需要确认这个依赖关系在参考值设定中是否得到妥善处理。
        4. 积分作用缺失(如果适用): 某些MPC实现中,为了消除稳态误差,可能会引入增量式控制或者在状态中加入积分项。如果当前MPC结构没有这类机制,可能会存在静差。
    • 问题2:减速时有点突兀(舒适性差):

      • 可能原因与调整:
        1. R \mathbf{R} R 中对应控制增量 Δ u \Delta u Δu 的权重 ( r Δ u r_{\Delta u} rΔu) 可能偏小: 这使得MPC允许较大的加速度变化。可以尝试增大 r Δ u r_{\Delta u} rΔu,以惩罚剧烈的加速度变化,使减速过程更平缓。
        2. 控制输入变化率约束 ( Δ u m a x \Delta u_{max} Δumax) 设置过大: 检查约束 Δ u m i n ≤ u ( k + j ∣ k ) − u ( k + j − 1 ∣ k ) ≤ Δ u m a x \Delta u_{min} \le u(k+j|k) - u(k+j-1|k) \le \Delta u_{max} Δumin≤u(k+j∣k)−u(k+j−1∣k)≤Δumax 是否设置得过于宽松。可以尝试减小 Δ u m a x \Delta u_{max} Δumax 的绝对值 (对于减速,是负的 Δ u \Delta u Δu)。
        3. 预测时域 N p N_p Np 可能偏短: 如果 N p N_p Np 太短,MPC可能"看得不够远",导致在需要减速时反应比较"急促"。可以尝试适当增大 N p N_p Np,让MPC有更长的规划窗口。
        4. Q \mathbf{Q} Q 中 q d _ r e l q_{d\_rel} qd_rel 权重过大,而 R \mathbf{R} R 权重过小: 过于强调距离跟踪的精确性,可能会牺牲舒适性。需要在两者之间找到平衡。

    调整策略的先后顺序建议:

    1. 首先尝试调整权重 Q \mathbf{Q} Q 和 R \mathbf{R} R。比如,先稍微增大 q d _ r e l q_{d\rel} qd_rel 看看能否改善距离跟踪,然后增大 r Δ u r{\Delta u} rΔu 看看能否让减速平缓。这两个是影响性能最直接的参数。
    2. 如果调整权重效果不佳,再考虑检查和调整约束值,或者审视 N p N_p Np 是否合适。
    3. 最后,如果问题依然存在,可能需要回到模型层面,检查模型精度。

    在调整时,最好一次只改一个或一类参数,观察效果,避免多个参数同时大幅度修改导致难以判断是哪个参数起了作用。

相关推荐
机器学习之心几秒前
Matlab实现LSTM-SVM时间序列预测,作者:机器学习之心
机器学习·matlab·lstm·时间序列预测·lstm-svm
白熊18813 分钟前
【机器学习基础】机器学习入门核心算法:K-近邻算法(K-Nearest Neighbors, KNN)
算法·机器学习·近邻算法
wx_xkq128815 分钟前
智能体赋能效率,企业知识库沉淀价值:UMI企业智脑的双轮驱动!
人工智能·aigc
小鸡吃石子20 分钟前
大语言模型(LLM)入门项目推荐
人工智能·机器学习·语言模型
清 澜35 分钟前
《三维点如何映射到图像像素?——相机投影模型详解》
计算机视觉·机器人·自动驾驶·slam·三维重建·三维视觉·投影变换
思绪漂移1 小时前
深度学习中的卷积和反卷积
人工智能·深度学习
tomplus211 小时前
ai客服平台哪家好:AnKo多模型AI聚合时代!
人工智能·ai·ai网站·ai软件·ai聚合·ai智能化·ai代运营
blues_C1 小时前
AI测试用例生成系统设计与实现:融合多模态、OCR解析与知识库增强
人工智能·ai·ocr·测试用例·ai生成测试用例
FnTop2 小时前
为什么共现矩阵是高维稀疏的
人工智能·线性代数·矩阵
AIGC_ZY2 小时前
DiT、 U-Net 与自回归模型的优势
人工智能·数据挖掘·回归