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=Kxk 可以很明显的看出来这个控制变量是不知道后续的变化,只与当前状态有关。
其实很显然,LQR的最优化问题其实是二次规划的一个简单形式,没有考虑不等式的情况,而实际中并不是这样的。
通用MPC模型

J0∗(xinit)=xk,ukmins.t. p(xN)+k=0∑N−1q(xk,uk)xk+1=f(xk,uk),k=0,…,N−1,x0=xinit,uk∈U,xk∈X,xN∈Xf.
MPC的具体步骤为
1 使用状态预测器预测当前状态
2 从当前状态预测最优路径
3 执行最优路径的第一步
4 执行一步后然后重复
MPC和LQR相比,具体的优点体现在
1.考虑约束条件即取值范围
2.允许模型误差
3.在线求解
4.可以处理线性与非线性模型
LQR可以理解为MPC的一个特例,当系统为线性系统且没有约束,目标函数为二次函数且预测范围为无限时,MPC等同与LQR,当状态预测有卡尔曼滤波得到时,等同于inear-quadratic Gaussian (LQG) control
关于状态反馈部分
LQR的输入
uk=Kxk
MPC的输入uk=μMPC(xk)
LQR和MPC的反馈都体现在这个地方,区别在于LQR是离线的,只要事先求出K,系统的控制逻辑就不变了,类似于确定了PID算法的Kp,Kd,Ki。但是MPC是在线控制的,每次都要再求一个最优化问题。LQR缺少的就是这个滑窗的步骤。
QP-MPC模型
对于标准的QP问题,应该具有以下形式
x∗=argmin21xTQx+qxx∈RnAinx⪯binAeqx=beqlb⪯x⪯ub
其中QT = Q 且正定
C:=[x∈Rn∣Ainx⪯bin,Aeqx=beq,lb⪯x⪯ub]=∅
对于QP-MPC(MPC的一个简单特例),其表达式为
xk,ukmin21xNTLxN+K∑N−121xkTQxk+21ukTRukxk+1=Akxk+Bkuk,k=0,...,N−1,x0=xinit,xN=xdes,xk∈X,uk∈U,k=0,...,N−1.