要过年咯,最近为了寻找第二篇论文的创新点,在到处调研文献和复现新的方法,由于下一篇论文想往MPC这边靠,因此在学习线性MPC之后,开始探索非线性MPC的知识。
之前的线性MPC控制见这篇博客: 【模型预测控制】基于线性MPC的二阶弹簧阻尼系统轨迹跟踪控制
1. 非线性模型预测控制(NMPC)概述
与传统线性MPC类似,非线性MPC通过基于模型的预测和受限优化相结合,计算每个控制区间的控制动作。主要区别包括: 预测模型可以是非线性的,并包含随时间变化的参数,等号和不等式约束可以是非线性的,需要最小化的标量成本函数可以是决策变量的非二次(线性或非线性)函数。 默认情况下,非线性MPC控制器通过fmincon函数解决非线性规划问题。
2. 基于神经状态空间预测模型的非线性MPC控制方法
由于面向对象是非线性系统,而实际工程中非线性模型往往难以准确建立,而MPC的控制精度又非常依赖于预测模型的精度,因此,如何提高预测模型的准确性是MPC控制中的一个主要难点。
由于神经网络的强大拟合性,可考虑使用神经网络对实际模型的输入输出进行辨识,然后将辨识好的神经网络模型作为MPC的预测模型,这样就能解决预测模型不准的问题,该思路可通过下图进行表示。
需注意,NMPC不再使用传统的卡尔曼滤波,由于系统的非线性特性,须使用拓展卡尔曼滤波或无迹卡尔曼滤波进行状态估计。
3. 仿真示例
假设有以下二阶非线性仿射系统
{
x
˙
1
=
x
2
x
˙
2
=
−
(
k
m
)
x
1
−
(
c
m
)
x
2
−
(
β
m
)
x
2
3
+
(
1
m
)
u
y
=
x
1
\begin{cases} \dot{x}_1=x_2\\ \dot{x}_2=-\left( \frac{k}{m} \right) x_1-\left( \frac{c}{m} \right) x_2-\left( \frac{\beta}{m} \right) x_{2}^{3}+\left( \frac{1}{m} \right) u\\ y=x_1\\ \end{cases}
⎩
⎨
⎧x˙1=x2x˙2=−(mk)x1−(mc)x2−(mβ)x23+(m1)uy=x1其中,x1为位置;x2为速度,u为控制输入;m为质量;c为线性阻尼系数;k为弹簧刚度;beta为非线性阻尼系数。
目标:假设模型是未知的,通过神经网络对该模型的输入输出数据进行拟合,然后将其拟合后的模型作为NMPC的预测模型,设计NMPC控制对该非线性模型进行控制。
3.1 神经网络辨识模型
将系统的输入输出数据通过神经网络进行辨识,经过800次迭代后,辨识结果如下图所示
辨识精度

拟合误差

经过训练后,最终的拟合精度为95.97%,拟合误差为23.01,可见辨识精度还是非常高的,可以再通过调参一下提高辨识精度。
3.2 NMPC控制器设计
- 由于NMPC没有内置状态估计器,因此不需要显式定义信号类型。
- 代价函数使用默认的线性二次型。
- 状态估计器使用拓展卡尔曼滤波,状态转移方程同样使用之前训练好的神经网络模型。
- 预测时域
30步,控制时域10步,控制输入限制[-10, 10],控制输入导数限制[-1, 1],输出权重只关心位置跟踪误差即[50, 0],控制输入及其变化导数设为较小的量0.01。 - is done:仿真步长
0.01s,仿真时间10s,参考信号正弦sin(t),系统初始状态x0 = [0.5; 0.5];.
3.3 仿真验证
搭建的simulink仿真框图如下所示:
启动仿真,跟踪效果以及控制信号如下所示:
观察结果可得,图1的位置曲线平滑,与参考曲线基本重合,稳态误差约为0.1左右,该误差可通过降低采样时间来缩短,但同时计算量也会增大;图2的控制输入以及控制输入导数均受到了MPC的硬约束限制;整体控制效果良好。
总结
综上所述,基于神经状态空间预测模型的非线性MPC控制方法基本实现,通过神经网络辨识解决了预测模型精度较低的问题,最终实现了对正弦信号的跟踪控制,能够严格处理输入/状态约束,动态响应好,控制精度高。相比于之前的线性MPC控制来说,能够解决很多非线性特性问题。
后续展望:如果在此过程中,非线性模型是缓慢时变的,又该如何解决,如何对控制器参数进行实时或者缓慢更新?后续思考这一问题。

2万+

被折叠的 条评论
为什么被折叠?



