大家好,我是苏承栈,今天我们来聊聊MPC模型预测控制这个话题。
首先,如果你对PID控制比较熟悉,那对MPC的理解会更容易一些。MPC,顾名思义,就是基于模型进行预测和控制。那么,我们的系统模型从哪里来呢?主要有两种方法:
- 从文献中寻找别人已经建立的公认模型;
- 进行系统辨识,然后进行建模。(这个难度比较大,不建议新手尝试)
接下来,我们来看看MPC的经典控制流程图:
预测控制算法的三要素
内部(预测)模型、参考轨迹、控制算法。现在一般更清晰地表述为内部(预测)模型、滚动优化、反馈控制。
预测控制最大的优势在于它能够显式处理约束。这种能力来自于它对系统未来动态行为的预测,通过将约束加到未来的输入、输出或状态变量上,可以将约束显式地表示在一个在线求解的二次规划或非线性规划问题中。
MPC具有控制效果好、鲁棒性强等优点,可以有效克服过程的不确定性、非线性和并联性,并能方便地处理过程被控变量和操纵变量中的各种约束。
在线性模型预测控制(LMPC)的基础上,还发展了非线性模型预测控制(NMPC)、显式模型预测控制(EMPC)和鲁棒模型预测控制。
模型预测控制的细节
首先,我们定义一个模型来描述我们的车辆,比如自行车模型。在这个模型中,我们可以通过控制前轮的转角和车辆的加速度来控制车辆轨迹。为了简化问题,我们只考虑前轮驱动的车辆,并将转角记作δ。
在每个控制周期,我们都从传感器读取数据并得到车辆状态量,比如位置、速度、车身角度、转向角和加速度。然后,我们使用这些数据和动力学模型来预测下一时刻的车辆状态。
损失函数
在模型预测控制中,我们需要定义损失函数来优化路径。如果模型不能保持目标速度,那么我们就要惩罚模型。如果可能的话,我们并不想要突然的加减速或者突然的转向。但是既然这些实际上是不可避免的,我们可以尽可能地抑制加减速和转向的变化率。这不仅可以减轻晕车,还可以更加省油。模型的损失函数应当包含跟踪误差、转向误差、速度损失函数项、转向损失函数项、加速度损失函数项以及转向和加速度的变化率。
优化模型预测控制
我们需要用模型预测控制来寻找最优路径,那么就需要动力学模型来预测下一拍的状态,以下是动力学模型和系统约束:
求解与利用
关于如何求解MPC,其实有很多权威性的文献都有详细的介绍。你可以去GitHub上下载一些现成的代码来运行和测试。比如这个链接:https://github.com/mvirgo/MPC-Project。里面有一个博主写好的代码,配置好环境后可以直接运行。
关于如何利用MPC求解的结果,主要就是将计算好的控制量发送到模拟器,或者在实际的车辆上执行。比如,你可以将计算好的转向角度和油门开度发送到方向盘和油门踏板。
模型预测控制是自动驾驶技术中的一个重要组成部分。通过MPC,我们可以实现对车辆的精确控制,使其在复杂的道路上安全、稳定地行驶。
好了,今天的内容就到这里。如果你对MPC还有其他问题,欢迎在评论区留言交流。我是苏承栈,我们下期再见!
