目录
1 倒立摆小车模型搭建
2倒立摆传递函数模型实现
3 控制系统仿真设计
3.1 仿真模型
3.2 控制系统搭建过程
3.2.1 PID控制器设计
3.2.2 模糊PID控制器设计
1 倒立摆小车模型搭建
倒立摆小车模型参考了《MATLAB建模与仿真》一书中的P342,主要参数为M=0.98kg、m=0.4kg、b=0.15N/(m.s)、I=0.005kg.m2、l=0.4m、g=9.8N/kg.其具体含义如图1-1所示。
通过模型看到,当摆杆夹角远远小于1弧度时,可以进行近似处理,从而令cosθ=-1,sinθ=-φ,(dθdt)2=0 。
可得微分方程如图1-2所示。
然后可以建立起以摆杆角度为输出量,给予小车的推力为输入量的传递函数模型,如图1-3所示
2倒立摆传递函数模型实现
我采用的是MATLAB R2017b,通过脚本文件编写了GetPendulum函数,输入小车质量,摆杆质量和摆杆长度即可得到倒立摆的传递函数。具体的代码如图2-1所示,调用过程如图2-2所示。
3 控制系统仿真设计
3.1 仿真模型
基于模糊调参的PID倒立摆控制系统仿真模型如图3-1所示,其中红色框部分为模糊控制和可调参数的PID控制,蓝框部分为单一的PID控制,通过一个阶跃信号产生扰动,可以在二种控制方案之间进行对比实验,这里的模糊控制器选用带Ruleviewer功能的模块,可以在仿真时看到控制规律。同时也方便后面对规则进行调试更改。
3.2 控制系统搭建过程
3.2.1 PID控制器设计
3.2.2 模糊PID控制器设计
在命令行输入fuzzy即可打开模糊控制器的规则设置界面,如图3-3所示,我们可以在这里创建输入变量,输出变量和规则库。我选择的是第一个,Mamdani类型,然后可以开始控制器的设计。
如图3-4所示,为控制器的基本设置,输入变量有两个,一个是摆杆角度,一个是角度的变化率,输出变量为三个,分别对应PID的三个参数,左侧可以看到去模糊化的方法为重心法。中间就是我们的规则库。点击可以进入详细的配置界面,各变量具体设置如下图所示:
如图3-5所示,左侧为角度变量的取值范围和隶属度函数,右侧为角度对应时间的变化率,这里我的范围规定都是-5到5之间,隶属度函数是三角形,实际使用时要根据输入量的具体情况,串入一个Gain模块,设置我们的比例因子,使输入范围在设置值之间。
输出变量的设置如图3-6所示,同样采用三角形隶属度函数,P的范围设置为110-120,I的范围设置为115-125,D的范围设置为80-90,通过不同的输入值,可以相应选择不同的PID参数。点击图3-4中间的模块可以进入规则库编辑界面,如图3-7所示,可见,当角度和角度变化率都在mf2这个位置时,PID三个参数输出为mf2,按照这样的方式,建立起完整的规则库。
4 仿真结果与分析
如图4-1所示,可以在仿真过程中实时预览输入输出量,很直观的看到隶属度函数是如何对整个模糊空间进行切割的,又是如何根据重心法得出精确解的。
如图4-2所示,为阶跃输出响应曲线,其中红色表示PID控制曲线,黑色表示模糊控制和PID结合的控制曲线,通过图可以看到,PID有很大的超调量,但趋于稳定的速度更快,模糊控制曲线更为平缓,且比PID控制更接近稳定值。
当采用随机信号发生器作为干扰的激励源时,其响应曲线如图4-3所示,可以看到,传统的PID控制器基本已经失效了,完全随着激励而变化,但黑色线代表的模糊控制器,还可以保持住一定的稳定性。所以,通过实现可以知道,模糊控制PID更适用于环境参数容易变化的场合。
具体代码可以在下方链接获取: