模型预测控制MPC具身智能详解

0. 简介

模型预测控制(Model Predictive Control,简称MPC)是自动驾驶和机器人领域中一种强大的控制方法,它通过优化未来一段时间内的系统行为来实现控制目标。本文将从控制理论和优化的角度,深入浅出地介绍MPC及其在自动驾驶领域的应用。

MPC由三个主要部分构成:
PID图所示,两个回路之间没有交叉,就像二者是相互独立一样,如果系统(Plant)足够大,因为调参十分困难

MPC的优势:可以处理多变量问题,并且可以添加约束制输入,并将第一个控制输入应用到系统中。

1. 控制理论与优化的交叉

控制理论和优化之间有着密切的联系,而模型预测控制恰好位于这两个领域的交叉点。MPC实际上是以优化方法来求解控制问题,或者说是以优化问题的求解来给出控制器的动作。MPC外层是控制的框架,内部融合了优化的思想。

1.1 模型预测控制的三大要素

MPC由四个主要部分构成:

  1. 预测模型:预测模型能够在短时间内根据历史信息、当前输入很好地预测系统状态的变化。需要一个模型能够基于历史信息和当前状态,来预测未来输出,这就涉及状态量的描述,非线性模型的线性化,从而确保预测输出最大限度接近期望值
  2. 优化控制序列:在预测范围内,通过数学优化选择一个最优的控制序列,使某个性能指标最小化(如能耗、跟踪误差)。
  3. 在线滚动优化:通过某种最优化算法(QP)来反复优化未来一段短时间的控制输入,使得在这种控制输入下预测模型的输出与参考值的差距最小,由于外部干扰,模型系统误差等原因,预测输出与实际存在偏差,滚动优化要做的就是找到每个时刻下的局部最优解,一般会设计一个损失函数,转化为二次规划问题,找到最优解
  4. 反馈校正:基于测量对模型预测进行修正,并在下一个时间点根据新的状态重新进行预测和优化

1.2 MPC基本工作原理

以车辆沿中线行驶为例,MPC的工作流程如下:

  1. 预测未来路径:基于当前状态,预测p步后可达到中线的路径
  2. 优化选择:从无穷多条可能路径中,选择"代价"最小的一条
  3. 执行第一步:仅执行优化路径中的第一步,舍弃后面步骤
  4. 滚动优化:在新的起点重复以上过程

1.3 MPC代价函数详解

在MPC中,代价函数(也称目标函数)是优化问题的核心,它定义了我们希望系统优化的目标。典型的MPC代价函数可以表示为:

J = ∑ i = 0 N − 1 x k + i T Q x k + i + u k + i T R u k + i + x k + N T F x k + N J = \sum_{i=0}^{N-1} x_{k+i}^T Q x_{k+i} + u_{k+i}^T R u_{k+i} + x_{k+N}^T F x_{k+N} J=i=0N1xk+iTQxk+i+uk+iTRuk+i+xk+NTFxk+N

其中:

  • x k + i x_{k+i} xk+i 是预测的系统状态向量(包含位置、速度等状态变量)
  • u k + i u_{k+i} uk+i 是控制输入向量(如方向盘角度、加速度等)
  • Q Q Q 是状态权重矩阵,调整不同状态变量的重要性
  • R R R 是控制输入权重矩阵,调整对控制输入幅值的惩罚程度
  • F F F 是终端状态权重矩阵,用于保证系统在预测期末状态的稳定性
  • N N N 是预测步数

对于车辆路径跟踪问题,这个代价函数实际上反映了两个主要目标:

  1. 跟踪精度:使车辆尽可能接近参考轨迹(状态误差最小化)
  2. 控制平滑性:避免控制输入的剧烈变化,保证舒适性和安全性

简化的代价函数形式也常见,特别是在实际应用中:

J = ∑ i = 1 p w e e k + i 2 + ∑ i = 0 p − 1 w Δ u Δ u k + i 2 J=\sum_{i=1}^{p}{w}_{e}{e}_{k+i}^{2}+\sum_{i=0}^{p-1}{w}_{\Delta u}{\Delta u}_{k+i}^{2} J=i=1pweek+i2+i=0p1wΔuΔuk+i2

这里:

  • e k + i {e}_{k+i} ek+i 代表第k+i时刻的轨迹偏差(车辆位置与参考路径间的误差)
  • Δ u k + i {\Delta u}_{k+i} Δuk+i 代表控制输入的变化量(例如方向盘转角的变化率)
  • w e {w}_{e} we w Δ u {w}_{\Delta u} wΔu 分别是对应的权重系数

这个简化形式直观地表达了两个关键目标之间的权衡:一方面我们希望车辆准确跟踪路径(第一项),另一方面我们希望控制动作平滑(第二项)。通过调整权重 w e {w}_{e} we w Δ u {w}_{\Delta u} wΔu,我们可以在跟踪精度和控制平滑性之间找到合适的平衡点。

在矩阵形式中,整个预测范围内的代价函数可以表示为:

J = ( X − X r e f ) T Q ( X − X r e f ) + U T R U J = (X - X_{ref})^T Q (X - X_{ref}) + U^T R U J=(XXref)TQ(XXref)+UTRU

其中:

  • X X X 是包含预测范围内所有状态的向量 [ x k + 1 T , x k + 2 T , . . . , x k + N T ] T [x_{k+1}^T, x_{k+2}^T, ..., x_{k+N}^T]^T [xk+1T,xk+2T,...,xk+NT]T
  • X r e f X_{ref} Xref 是参考轨迹
  • U U U 是包含预测范围内所有控制输入的向量 [ u k T , u k + 1 T , . . . , u k + N − 1 T ] T [u_k^T, u_{k+1}^T, ..., u_{k+N-1}^T]^T [ukT,uk+1T,...,uk+N1T]T
  • Q Q Q R R R 是相应的权重矩阵

在状态空间表示中,系统的状态转移方程为:

x k + 1 = A x k + B u k x_{k+1} = Ax_k + Bu_k xk+1=Axk+Buk

通过这个方程,可以将系统未来N步的状态预测表示为当前状态和未来控制输入的函数:

X = A x k + B U X = \mathcal{A}x_k + \mathcal{B}U X=Axk+BU

其中 A \mathcal{A} A B \mathcal{B} B 是适当维度的矩阵,可以从系统动态模型导出。

将状态预测表达式代入代价函数,可以得到仅关于控制输入序列 U U U 的二次函数,然后使用二次规划求解器求解最优控制序列。

2. MPC的数学原理

2.1 预测模型

以车辆运动学自行车模型为例,状态量更新公式:

x k + 1 = x k + v k cos ⁡ ( θ k ) d t y k + 1 = y k + v k sin ⁡ ( θ k ) d t θ k + 1 = θ k + v k tan ⁡ ( δ k ) L d t v k + 1 = v k + a k d t \begin{aligned} x_{k+1} &= x_k + v_k\cos(\theta_k)dt \\ y_{k+1} &= y_k + v_k\sin(\theta_k)dt \\ \theta_{k+1} &= \theta_k + v_k\frac{\tan(\delta_k)}{L}dt \\ v_{k+1} &= v_k + a_kdt \end{aligned} xk+1yk+1θk+1vk+1=xk+vkcos(θk)dt=yk+vksin(θk)dt=θk+vkLtan(δk)dt=vk+akdt

其中:

  • ( x , y ) (x, y) (x,y):车辆位置
  • θ \theta θ:车辆航向角
  • v v v:车辆速度
  • δ \delta δ:前轮转向角
  • a a a:加速度
  • L L L:轴距
  • d t dt dt:时间步长

2.2 损失函数设计

MPC优化问题的损失函数通常包含以下几个部分:

  1. 横向偏移误差:轨迹和参考线的差距(CTE)
    ∑ k = 1 N w c t e ∣ ∣ c t e k ∣ ∣ 2 \sum_{k=1}^{N}w_{cte}||cte_k||^2 k=1Nwcte∣∣ctek2

  2. 航向偏差:当前航向与期望航向的差距
    ∑ k = 1 N w e p s i ∣ ∣ e p s i k ∣ ∣ 2 \sum_{k=1}^{N}w_{epsi}||epsi_k||^2 k=1Nwepsi∣∣epsik2

  3. 速度误差:当前速度和期望速度的差距
    ∑ k = 1 N w v ∣ ∣ v k − v r e f ∣ ∣ 2 \sum_{k=1}^{N}w_v||v_k-v_{ref}||^2 k=1Nwv∣∣vkvref2

  4. 控制量约束:限制控制输入的幅值
    ∑ k = 1 N − 1 ( w δ ∣ ∣ δ k ∣ ∣ 2 + w a ∣ ∣ a k ∣ ∣ 2 ) \sum_{k=1}^{N-1}(w_{\delta}||\delta_k||^2+w_a||a_k||^2) k=1N1(wδ∣∣δk2+wa∣∣ak2)

  5. 控制量变化率约束:使控制更加平滑
    ∑ k = 1 N − 2 ( w δ r a t e ∣ ∣ δ k + 1 − δ k ∣ ∣ 2 + w a r a t e ∣ ∣ a k + 1 − a k ∣ ∣ 2 ) \sum_{k=1}^{N-2}(w_{\delta_{rate}}||\delta_{k+1}-\delta_k||^2+w_{a_{rate}}||a_{k+1}-a_k||^2) k=1N2(wδrate∣∣δk+1δk2+warate∣∣ak+1ak2)

2.3 约束条件

  1. 状态方程约束
    x k + 1 = x k + v k cos ⁡ ( θ k ) d t y k + 1 = y k + v k sin ⁡ ( θ k ) d t θ k + 1 = θ k + v k tan ⁡ ( δ k ) L d t v k + 1 = v k + a k d t c t e k + 1 = f ( x k ) − y k + v k sin ⁡ ( θ k ) d t e p s i k + 1 = a r c t a n ( f ′ ( x k ) ) − θ k + v k tan ⁡ ( δ k ) L d t \begin{aligned} x_{k+1} &= x_k + v_k\cos(\theta_k)dt \\ y_{k+1} &= y_k + v_k\sin(\theta_k)dt \\ \theta_{k+1} &= \theta_k + v_k\frac{\tan(\delta_k)}{L}dt \\ v_{k+1} &= v_k + a_kdt \\ cte_{k+1} &= f(x_k) - y_k + v_k\sin(\theta_k)dt \\ epsi_{k+1} &= arctan(f'(x_k)) - \theta_k + v_k\frac{\tan(\delta_k)}{L}dt \end{aligned} xk+1yk+1θk+1vk+1ctek+1epsik+1=xk+vkcos(θk)dt=yk+vksin(θk)dt=θk+vkLtan(δk)dt=vk+akdt=f(xk)yk+vksin(θk)dt=arctan(f(xk))θk+vkLtan(δk)dt

  2. 执行器约束
    δ ∈ [ δ m i n , δ m a x ] a ∈ [ a m i n , a m a x ] \begin{aligned} \delta &\in [\delta_{min}, \delta_{max}] \\ a &\in [a_{min}, a_{max}] \end{aligned} δa[δmin,δmax][amin,amax]

2.4 MPC的数学构建与代价函数推导

为了系统地构建MPC控制器,我们需要详细理解其数学基础,尤其是代价函数的构造和雅可比矩阵的推导过程。

2.4.1 MPC问题的形式化表述

首先,我们将MPC问题形式化为一个有限时域最优控制问题。对于离散时间系统,控制目标是在预测范围内最小化代价函数,同时满足系统动态约束和其他约束条件。

对于离散时间系统模型:
x k + 1 = f ( x k , u k ) x_{k+1} = f(x_k, u_k) xk+1=f(xk,uk)

其中 x k x_k xk是系统状态, u k u_k uk是控制输入。

2.4.2 代价函数构建的理论基础

MPC的代价函数通常包含两个主要部分:

  1. 状态偏差惩罚 - 衡量系统状态与参考轨迹的偏差
  2. 控制量惩罚 - 限制控制输入的大小以避免剧烈控制动作

标准形式的代价函数为:

J = ( X − X r e f ) T Q ( X − X r e f ) + U T R U J = (\mathbf{X}-\mathbf{X}_{ref})^TQ(\mathbf{X}-\mathbf{X}_{ref}) + \mathbf{U}^TR\mathbf{U} J=(XXref)TQ(XXref)+UTRU

这个函数的设计基于最优控制理论中的线性二次型调节器(LQR)思想,其理论基础可以追溯到贝尔曼最优性原理。代价函数中:

  • X \mathbf{X} X表示预测范围内的所有状态向量 [ x k + 1 T , x k + 2 T , . . . , x k + N T ] T [x_{k+1}^T, x_{k+2}^T, ..., x_{k+N}^T]^T [xk+1T,xk+2T,...,xk+NT]T
  • X r e f \mathbf{X}_{ref} Xref表示参考轨迹
  • U \mathbf{U} U表示控制输入序列 [ u k T , u k + 1 T , . . . , u k + N − 1 T ] T [u_k^T, u_{k+1}^T, ..., u_{k+N-1}^T]^T [ukT,uk+1T,...,uk+N1T]T
  • Q Q Q R R R是权重矩阵,用于平衡状态跟踪精度和控制代价
2.4.3 雅可比矩阵构建的必要性

当系统模型为非线性时,为了应用基于梯度的优化方法求解MPC问题,我们需要计算代价函数关于控制变量的梯度。这就需要构建雅可比矩阵。

雅可比矩阵本质上描述了系统状态对控制输入的敏感度。对于系统状态方程 x k + 1 = f ( x k , u k ) x_{k+1} = f(x_k, u_k) xk+1=f(xk,uk),雅可比矩阵定义为:

J u = ∂ f ∂ u J_u = \frac{\partial f}{\partial u} Ju=uf

它表示状态变化率对控制输入的偏导数。

2.4.4 雅可比矩阵的推导过程

以自行车模型为例,我们可以展示雅可比矩阵的推导过程:

  1. 首先列出系统状态方程:
    x ˙ = v cos ⁡ ( θ ) y ˙ = v sin ⁡ ( θ ) θ ˙ = v tan ⁡ ( δ ) L v ˙ = a \begin{aligned} \dot{x} &= v\cos(\theta) \\ \dot{y} &= v\sin(\theta) \\ \dot{\theta} &= \frac{v\tan(\delta)}{L} \\ \dot{v} &= a \end{aligned} x˙y˙θ˙v˙=vcos(θ)=vsin(θ)=Lvtan(δ)=a

  2. 将连续时间模型离散化(使用欧拉前向差分法):
    x k + 1 = x k + v k cos ⁡ ( θ k ) d t y k + 1 = y k + v k sin ⁡ ( θ k ) d t θ k + 1 = θ k + v k tan ⁡ ( δ k ) L d t v k + 1 = v k + a k d t \begin{aligned} x_{k+1} &= x_k + v_k\cos(\theta_k)dt \\ y_{k+1} &= y_k + v_k\sin(\theta_k)dt \\ \theta_{k+1} &= \theta_k + \frac{v_k\tan(\delta_k)}{L}dt \\ v_{k+1} &= v_k + a_kdt \end{aligned} xk+1yk+1θk+1vk+1=xk+vkcos(θk)dt=yk+vksin(θk)dt=θk+Lvktan(δk)dt=vk+akdt

  3. 计算状态方程关于控制输入u的偏导数,得到雅可比矩阵:
    ∂ x k + 1 ∂ δ k = 0 ∂ x k + 1 ∂ a k = 0 ∂ y k + 1 ∂ δ k = 0 ∂ y k + 1 ∂ a k = 0 ∂ θ k + 1 ∂ δ k = v k d t L cos ⁡ 2 ( δ k ) ∂ θ k + 1 ∂ a k = 0 ∂ v k + 1 ∂ δ k = 0 ∂ v k + 1 ∂ a k = d t \begin{aligned} \frac{\partial x_{k+1}}{\partial \delta_k} &= 0 \\ \frac{\partial x_{k+1}}{\partial a_k} &= 0 \\ \frac{\partial y_{k+1}}{\partial \delta_k} &= 0 \\ \frac{\partial y_{k+1}}{\partial a_k} &= 0 \\ \frac{\partial \theta_{k+1}}{\partial \delta_k} &= \frac{v_kdt}{L\cos^2(\delta_k)} \\ \frac{\partial \theta_{k+1}}{\partial a_k} &= 0 \\ \frac{\partial v_{k+1}}{\partial \delta_k} &= 0 \\ \frac{\partial v_{k+1}}{\partial a_k} &= dt \end{aligned} δkxk+1akxk+1δkyk+1akyk+1δkθk+1akθk+1δkvk+1akvk+1=0=0=0=0=Lcos2(δk)vkdt=0=0=dt

    这样就得到了单步雅可比矩阵:
    $$
    J_u =
    \begin{bmatrix}
    \frac{\partial x_{k+1}}{\partial \delta_k} & \frac{\partial x_{k+1}}{\partial a_k} \
    \frac{\partial y_{k+1}}{\partial \delta_k} & \frac{\partial y_{k+1}}{\partial a_k} \
    \frac{\partial \theta_{k+1}}{\partial \delta_k} & \frac{\partial \theta_{k+1}}{\partial a_k} \
    \frac{\partial v_{k+1}}{\partial \delta_k} & \frac{\partial v_{k+1}}{\partial a_k}
    \end{bmatrix}

    \begin{bmatrix}
    0 & 0 \
    0 & 0 \
    \frac{v_kdt}{L\cos^2(\delta_k)} & 0 \
    0 & dt
    \end{bmatrix}
    $$

2.4.5 多步预测下的雅可比矩阵构建

在MPC中,我们关心的是整个预测范围内的状态对当前控制输入的敏感度。由于状态传播的链式效应,多步雅可比矩阵的构建变得复杂。

假设我们预测N步,控制序列为 U = [ u k , u k + 1 , . . . , u k + N − 1 ] \mathbf{U} = [u_k, u_{k+1}, ..., u_{k+N-1}] U=[uk,uk+1,...,uk+N1]
预测状态为 X = [ x k + 1 , x k + 2 , . . . , x k + N ] \mathbf{X} = [x_{k+1}, x_{k+2}, ..., x_{k+N}] X=[xk+1,xk+2,...,xk+N]
那么完整的雅可比矩阵为:

J = ∂ X ∂ U = [ ∂ x k + 1 ∂ u k 0 ⋯ 0 ∂ x k + 2 ∂ u k ∂ x k + 2 ∂ u k + 1 ⋯ 0 ⋮ ⋮ ⋱ ⋮ ∂ x k + N ∂ u k ∂ x k + N ∂ u k + 1 ⋯ ∂ x k + N ∂ u k + N − 1 ] J = \frac{\partial \mathbf{X}}{\partial \mathbf{U}} = \begin{bmatrix} \frac{\partial x_{k+1}}{\partial u_k} & 0 & \cdots & 0 \\ \frac{\partial x_{k+2}}{\partial u_k} & \frac{\partial x_{k+2}}{\partial u_{k+1}} & \cdots & 0 \\ \vdots & \vdots & \ddots & \vdots \\ \frac{\partial x_{k+N}}{\partial u_k} & \frac{\partial x_{k+N}}{\partial u_{k+1}} & \cdots & \frac{\partial x_{k+N}}{\partial u_{k+N-1}} \end{bmatrix} J=UX= ukxk+1ukxk+2ukxk+N0uk+1xk+2uk+1xk+N00uk+N1xk+N

这个矩阵是下三角形式,因为未来状态只依赖于当前和过去的控制输入。对于非线性系统,这些偏导数通常需要数值计算或使用自动微分技术得到。下面的代价函数 J = ( X − X r e f ) T Q ( X − X r e f ) + U T R U J = (\mathbf{X}-\mathbf{X}_{ref})^TQ(\mathbf{X}-\mathbf{X}_{ref}) + \mathbf{U}^TR\mathbf{U} J=(XXref)TQ(XXref)+UTRU就是使用QR分解得到的约束,从而得到当前帧的雅可比矩阵。雅可比分解原理

2.4.6 雅可比矩阵、状态预测方程与代价函数的关系

在MPC中,我们有状态预测方程 X = A x k + B U + C \mathbf{X} = \mathcal{A}x_k + \mathcal{B}\mathbf{U} + \mathcal{C} X=Axk+BU+C 和代价函数 J = ( X − X r e f ) T Q ( X − X r e f ) + U T R U J = (\mathbf{X}-\mathbf{X}_{ref})^TQ(\mathbf{X}-\mathbf{X}_{ref}) + \mathbf{U}^TR\mathbf{U} J=(XXref)TQ(XXref)+UTRU状态预测方程与代价函数的关系

  • 状态预测方程 X = A x k + B U + C \mathbf{X} = \mathcal{A}x_k + \mathcal{B}\mathbf{U} + \mathcal{C} X=Axk+BU+C 描述了控制输入 U \mathbf{U} U 如何影响未来状态 X \mathbf{X} X
  • 代价函数 J = ( X − X r e f ) T Q ( X − X r e f ) + U T R U J = (\mathbf{X}-\mathbf{X}_{ref})^TQ(\mathbf{X}-\mathbf{X}_{ref}) + \mathbf{U}^TR\mathbf{U} J=(XXref)TQ(XXref)+UTRU 评估控制方案的好坏
  • 将状态预测方程代入代价函数,可以得到仅关于控制输入 U \mathbf{U} U 的函数:
    J ( U ) = ( ( A x k + B U + C ) − X r e f ) T Q ( ( A x k + B U + C ) − X r e f ) + U T R U J(\mathbf{U}) = ((\mathcal{A}x_k + \mathcal{B}\mathbf{U} + \mathcal{C})-\mathbf{X}_{ref})^TQ((\mathcal{A}x_k + \mathcal{B}\mathbf{U} + \mathcal{C})-\mathbf{X}_{ref}) + \mathbf{U}^TR\mathbf{U} J(U)=((Axk+BU+C)Xref)TQ((Axk+BU+C)Xref)+UTRU
2.4.7 代价函数的统一简化表示

首先,MPC的代价函数表示为关于控制增量 Δ u \Delta u Δu和状态向量 X \mathbf{X} X的二次函数:

J = ( X − X r e f ) T Q ( X − X r e f ) + Δ u T R Δ u J = (\mathbf{X}-\mathbf{X}_{ref})^TQ(\mathbf{X}-\mathbf{X}_{ref}) + \Delta u^T R \Delta u J=(XXref)TQ(XXref)+ΔuTRΔu

代入状态预测方程 X = B Δ u + X 0 \mathbf{X} = \mathcal{B}\Delta u + \mathbf{X}_0 X=BΔu+X0后(其中 X 0 \mathbf{X}_0 X0代表不受当前控制影响的状态部分):

J = ( ( B Δ u + X 0 ) − X r e f ) T Q ( ( B Δ u + X 0 ) − X r e f ) + Δ u T R Δ u J = ((\mathcal{B}\Delta u + \mathbf{X}_0)-\mathbf{X}_{ref})^TQ((\mathcal{B}\Delta u + \mathbf{X}_0)-\mathbf{X}_{ref}) + \Delta u^T R \Delta u J=((BΔu+X0)Xref)TQ((BΔu+X0)Xref)+ΔuTRΔu

实际上我们在真正使用的时候会使用 Δ u \Delta u Δu来作为控制,而不是直接 U \mathbf{U} U,需要通过迭代完成修正

U \mathbf{U} U(绝对控制输入)
表示控制变量的实际值
通常定义为预测时域内所有控制输入的向量: U = [ u k T , u k + 1 T , . . . , u k + N − 1 T ] T \mathbf{U} = [u_k^T, u_{k+1}^T, ..., u_{k+N-1}^T]^T U=[ukT,uk+1T,...,uk+N1T]T
在代价函数中以绝对形式出现: U T R U \mathbf{U}^TR\mathbf{U} UTRU
状态预测方程表示为: X = A x k + B U + C \mathbf{X} = \mathcal{A}x_k + \mathcal{B}\mathbf{U} + \mathcal{C} X=Axk+BU+C

Δ u \Delta u Δu(控制增量)
表示控制变量的变化量,即 Δ u k = u k − u k − 1 \Delta u_k = u_k - u_{k-1} Δuk=ukuk1
强调控制信号的平滑变化
在代价函数中以增量形式出现: Δ u T R Δ u \Delta u^T R \Delta u ΔuTRΔu
状态预测方程表示为: X = B Δ u + X 0 \mathbf{X} = \mathcal{B}\Delta u + \mathbf{X}_0 X=BΔu+X0

2.4.8 求解最优控制

当MPC问题没有约束条件时,我们通过微分求最优解:

  1. 对代价函数 J J J关于 Δ u \Delta u Δu求偏导数:
    ∂ J ∂ Δ u = 2 B T Q ( B Δ u + X 0 − X r e f ) + 2 R Δ u \frac{\partial J}{\partial \Delta u} = 2\mathcal{B}^TQ(\mathcal{B}\Delta u + \mathbf{X}_0 - \mathbf{X}_{ref}) + 2R\Delta u ΔuJ=2BTQ(BΔu+X0Xref)+2RΔu

  2. 令偏导数等于零:
    ∂ J ∂ Δ u = 0 \frac{\partial J}{\partial \Delta u} = 0 ΔuJ=0

  3. 求解得到最优控制增量:
    ( B T Q B + R ) Δ u = − B T Q ( X 0 − X r e f ) (\mathcal{B}^TQ\mathcal{B} + R)\Delta u = -\mathcal{B}^TQ(\mathbf{X}_0 - \mathbf{X}_{ref}) (BTQB+R)Δu=BTQ(X0Xref)
    Δ u = − ( B T Q B + R ) − 1 B T Q ( X 0 − X r e f ) \Delta u = -(\mathcal{B}^TQ\mathcal{B} + R)^{-1}\mathcal{B}^TQ(\mathbf{X}_0 - \mathbf{X}_{ref}) Δu=(BTQB+R)1BTQ(X0Xref)

2.4.9 实际应用

在有约束条件的情况下,我们将代价函数转换为标准二次规划形式:

J = 1 2 Δ u T H Δ u + f T Δ u + c J = \frac{1}{2}\Delta u^T H \Delta u + f^T\Delta u + c J=21ΔuTHΔu+fTΔu+c

其中:

  • H = 2 ( B T Q B + R ) H = 2(\mathcal{B}^TQ\mathcal{B} + R) H=2(BTQB+R)
  • f = 2 B T Q ( X 0 − X r e f ) f = 2\mathcal{B}^TQ(\mathbf{X}_0 - \mathbf{X}_{ref}) f=2BTQ(X0Xref)
  • c c c为常数项,不影响优化结果

这种形式可以直接输入到QP求解器中,得到满足各种约束条件下的最优控制序列。

3. MPC参数设计

3.1 基本参数选择

  1. 采样时间 T s T_s Ts

    • 太大:无法快速处理扰动
    • 太小:计算负荷过大
    • 建议: T r 20 ≤ T s ≤ T r 10 \frac{T_r}{20} \leq T_s \leq \frac{T_r}{10} 20TrTs10Tr,其中 T r T_r Tr为系统开环响应时间
  2. 预测范围

    • 太短:缺乏前瞻性(例如制动距离不足)
    • 太长:计算开销大,易受突发情况影响导致无效预测
    • 建议:在开环响应时间内采样20-30个样本

  3. 控制范围

    • 控制范围过小:控制效果不佳
    • 控制范围过大:后半部分效果有限但计算开销大
    • 建议:控制范围应在预测范围的10~20%之间,至少2-3步

3.2 约束类型和权重

  1. 硬约束与软约束

    • 硬约束:必须满足的约束条件
    • 软约束:可以适当违反的约束条件
    • 注意:全部使用硬约束可能导致无解
  2. 权重设置

    • 通过权重矩阵调整不同目标间的平衡
    • 同一组内不同成员可分配不同权重(如不同输出的权重)

3.3 MPC速度优化

  1. 模型简化
    • 减少状态数量
    • 适当减小预测/控制范围
    • 减少约束数量
    • 降低数据表示精度

…详情请参照古月居

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

敢敢のwings

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值