MPC 详解

794 阅读1分钟

MPC

经过LQR的漫长旅程,终于到达了MPC(Model Predictive Control),除了PID算法外最重要的控制算法,也是在自动驾驶过程中最常用的算法。链接GitHub

那么,问题来了?为什么我们要用MPC,LQR不可以吗?MPC比LQR强在哪里了? 首先关于LQR的问题,以下三个问题没有解决。

▶ How to handle obstacles?
▶ How to handle input, state, or output constraints?
▶ What about modeling and state estimation errors?

此外,对于uk=Kxku_k=Kx_k 可以很明显的看出来这个控制变量是不知道后续的变化,只与当前状态有关。

其实很显然,LQR的最优化问题其实是二次规划的一个简单形式,没有考虑不等式的情况,而实际中并不是这样的。

通用MPC模型

image.png

J0(xinit)=minxk,uk p(xN)+k=0N1q(xk,uk)s.t. xk+1=f(xk,uk),k=0,,N1,x0=xinit,ukU,xkX,xNXf. \begin{aligned} J_0^{*}(x_{init}) = \min_{x_k, u_k} & \ p(x_N) + \sum_{k=0}^{N-1} q(x_k, u_k)\\ \text{s.t. } % & x_{k+1} = \ k = 0, \dots, N-1, \\ & x_{k+1} = f(x_k, u_k), k = 0, \dots, N-1, \\ & x_0 = x_{init}, \\ & u_k \in \mathcal{U}, \\ & x_k \in \mathcal{X}, x_N \in \mathcal{X_f}. \end{aligned}

MPC的具体步骤为

1 使用状态预测器预测当前状态

2 从当前状态预测最优路径

3 执行最优路径的第一步

4 执行一步后然后重复

MPC和LQR相比,具体的优点体现在

1.考虑约束条件即取值范围 2.允许模型误差 3.在线求解 4.可以处理线性与非线性模型

LQR可以理解为MPC的一个特例,当系统为线性系统且没有约束,目标函数为二次函数且预测范围为无限时,MPC等同与LQR,当状态预测有卡尔曼滤波得到时,等同于inear-quadratic Gaussian (LQG) control

关于状态反馈部分

LQR的输入 uk=Kxku_k = K x_k

MPC的输入uk=μMPC(xk)u_k = μMPC(x_k)

LQR和MPC的反馈都体现在这个地方,区别在于LQR是离线的,只要事先求出K,系统的控制逻辑就不变了,类似于确定了PID算法的Kp,Kd,KiK_p,K_d,K_i。但是MPC是在线控制的,每次都要再求一个最优化问题。LQR缺少的就是这个滑窗的步骤。

QP-MPC模型

对于标准的QP问题,应该具有以下形式

x=argmin12xTQx+qxxRnAinxbinAeqx=beqlbxubx∗ = arg \min \frac{1}{2}x^TQx + qx \quad x ∈ R^n\\ A_{in} x ⪯ b_{in}\\ A_{eq}x = b_{eq} \\ l_b ⪯ x ⪯ u_b \\

其中QT = Q 且正定

C:=[xRnAinxbin,Aeqx=beq,lbxub]C := [{x ∈ R^n | A_{in}x ⪯ b_{in}, A_{eq}x = b_{eq}, l_b ⪯ x ⪯ u_b}] \not = ∅

对于QP-MPC(MPC的一个简单特例),其表达式为

minxk,uk12xNTLxN+KN112xkTQxk+12ukTRukxk+1=Akxk+Bkuk,k=0,...,N1,x0=xinit,xN=xdes,xkX,ukU,k=0,...,N1.\min_{ x_k ,u_k} \frac{1}{2} x_N^T L x_N + \sum_K^{ N−1} \frac{1} {2} x_k^T Q x_k + \frac{1}{2} u_k^T R u_k\\ x_{k+1} = A_kx_k + B_ku_k, k = 0, . . . , N − 1, \\ x_0 = x_{init}, x_N = x_{des}, \\ xk ∈ X , uk ∈ U, k = 0, . . . , N − 1.