卡尔曼滤波器在PID控制器中的应用
- 格式:doc
- 大小:225.00 KB
- 文档页数:7
卡尔曼滤波器在PID控制器中的应用
学生姓名:潘培哲
学号: 12013002347 专业:控制工程
指导教师:李鹏
云南大学信息学院
一、引言
传统的倒立摆系统采用单纯的PID 控制模式,这种控制模式虽然可以在一定程度上满足系统的要求,但是具有精度差,响应时间长,稳定性不高等不足之处.造成这种情况的一个原因是控制信号中含有噪声干扰,噪声干扰会在很大程度上影响系统的性能.另外,除了以上提到的外界干扰外,系统内部也存在干扰,主要包括建模时因抽象和简化而引入的结构干扰以及实际系统中因参数变化而引入的参数干扰.因此,为了提高系统的稳定性,使之具有较短的响应时间和控制精度,本文设计了一种基于卡尔曼滤波器的PID 控制系统,通过卡尔曼滤波器对系统的一些噪声进行滤波处理之后,对系统的随机误差进行了比普通PID 更进一步的补偿,获得了更为精确的系统模型,从而使系统的稳定性和精度以及响应时间都得到了有效的提高.本文以直线小车倒立摆为例,研究了卡尔曼滤波器在倒立摆控制系统中的应用.
二、卡尔曼滤波器原理
在现代随机最优控制和随机信号处理技术中,信号和噪声往往是多维非平稳随机过程,因其时变性,功率谱不固定.在1960年卡尔曼提出了卡尔曼滤波理论,该理论采用时域上的递推算法在计算机上进行数据滤波处理.
对于离散域系统:
离散卡尔曼滤波器递推算法为:
图1 卡尔曼滤波器结构图
三、基于卡尔曼滤波器的PID 控制器工作过程
下面便以直线小车倒立摆为被控对象,来进一步研究卡尔曼滤波技术在倒立摆系统中的应用.
3.1 倒立摆系统的数学模型
对直线小车的倒立摆系统的数学建模. 对于倒立摆系统,由于其本身是自不稳定的非线性系统,实验建模存在一定的困难.但经过小心的假设忽略掉一些次要的因素后,倒立摆系统就是一个典型的运动的刚体系统,可以在惯性坐标系内应用经典力学理论建立系统的动力学方程.
对一级倒立摆线性化后得到系统的近似模型如下
对方程组进行拉普拉斯变换,得到
整理消去X(s)后得到传递函数:(假设初始条件为0)
取小车倒立摆系统各个参数如下:
摆杆质量m = 0.109kg,长度l = 0.25m,摆杆惯量I =0.0034kgm2,小车的质量M = 1.096kg,重力加速度g≈10m /s 2,小车摩擦系数b=0.1N/m/sec.进而得到倒立摆系统输入力F到输出摆杆角度θ的开环传递函数G(s)为
。
本文仅对G(s)进行分析.
3.2 带有卡尔曼滤波器的PID控制系统结构图
采用卡尔曼滤波器的PID 控制系统的结构图所示.与传统的PID 控制系统的结构图相比较,在被控对象输出值之后附加了一个卡尔曼滤波器,通过该滤波器将系统的量测噪声和控制干扰量进行消减,消减过程主要体现在经过滤波后的输出值经过反馈之后又回到了系统中,从而使得系统的性能得以提高.对G(S)式取采样时间为1ms,将对象离散化,并描述为离散状态方程的形式,
其中
u
meas
xhatOut
y hatOut
KALMAN
PID(z)
与传统的PID 控制系统的结构图相比较,在被控对象输出值之后
图2 采用卡尔曼滤波器的PID 控制系统的结构图
四、系统仿真
根据所示的控制系统,在Matlab /Simulink 环境下建立仿真模型平台,并在Matlab /Simulink 环境下编程仿真.
带有测量噪声的被控对象输出为
取控制干扰、
测量干扰信号均为方差为0.01 的白噪声信号,输入阶跃信号幅值为1,Q=1,R=1.仿真时间为4s. 将PID 参数设置为Kp=20,Ki=70,Kd=2,
仿真结果如图3,4所示:
图3 滤波后的曲线图4 未滤波曲线
图3 是采用卡尔曼滤波器结果,图4 是未采用卡尔曼滤波器的结果.通过图3 可知:采用卡尔曼滤波器后,噪声显著减小,稳定时间Ts 为2s,系统能够迅速的达到稳定,而未采用卡尔曼滤波器的系统,噪声含量多,控制输出不稳定.由图4 可见,使用传统PID进行控制,系统的品质较差,特别是在平衡位置附近有较大的震荡,这大大影响系统的稳定精度.
五、结论
本文简要介绍了卡尔曼滤波器波理论及其算法,在对一级倒立摆建模的基础之上,对基于卡尔曼滤波器的PID 控制进行了仿真,仿真结果证明了该方法的有效性.通过对比可以看出,采用卡尔曼波器后,只要合理选用PID 控制器参数,可以得到稳定的系统输出,显著减小噪声的影响同时,能够有效减少系统的峰值时间,减小震荡次数,快速的使系统达到稳定.
附录:
(卡尔曼滤波程序)
function [xhatOut, yhatOut] = KALMAN(u,meas) % 卡尔曼滤波器
persistent P xhat A B C Q R
% 定义持久性变量
if isempty(P)
% 赋初始值
xhat = [0;0];
P = [0.2011 0.4036;0.4036 0.81];
A = [1 0.001; -0.025 1];
B = [0.000004484;0.009];
C = [1 0];
Q = 1*eye(1);
R = 1*eye(1);
end
% 计算状态预测值和其协方差矩阵
xhat = A*xhat + B*u;
P = A*P*A' + B*Q*B';
% 计算卡尔曼增益
K = P*C'/(C*P*C' + R);
% 计算测量残差
resid = meas - C*xhat;
% 更新最优估计值以及协方差矩阵
xhat = xhat + K*resid;
P = (eye(2)-K*C)*P;
% 输出结果
xhatOut = xhat;
yhatOut = C*xhatOut;