本仓库代码用于测试模型预测控制算法
.
├─ MPC1.m # 主程序,使用位置作为状态量
├─ MPC2.m # 主程序,使用位置和速度作为状态量
└─ lib
├─ getTargetYaw.m # 获取数据序列
├─ getMatrices.m # 计算MPC过程中间矩阵
├─ myQuadprog.m # 无约束二次规划求解器
└─ predict.m # 求解控制量
假设有离散状态空间方程如下,其中
预测区间
控制区间
目标跟随区间
预测区间与控制区间满足如下关系
其中
损失函数
其中
MPC 的本质是求解一个二次规划问题,它的一般形式如下
无约束二次规划问题采用共轭梯度法求解
在一个简单的 CV 模型中,我们测试了两种不同状态空间方程:一种仅以位置为状态量,以速度为控制量;另一种以位置和速度为状态量,以速度与目标速度的差分为控制量。前者为简单计算,在此不赘述,后者的状态空间方程如下所示
我知道拿速度差分当控制量非常抽象,但是速度和电流的关系式有些过于复杂,我暂且还是把这个问题留给电控的 PID,或者让有志后人来解决它吧。
两种方法的跟随效果基本无异,在运动状态稳定变化和突变时均有良好的的响应,可以看到有速度作为状态量时系统的响应稍快一筹。MPC 对比 PID 的主要优势便在于调参的简易性和在不同运动情况下的鲁棒性。
这里再着重解释一下 MPC 的参数,