1、中科院 2005-2006 第一学期神经网络三级倒立摆的神经网络控制摘要:建立了基于人工神经网络改进BP 算法的三级倒立摆的数学模型,并给出了 BP 网络结构,利用 Matlab 软件进行训练仿真,结果表明,改进的 BP 算法控制倒立摆精度高、收敛快,在非线性控制、鲁棒控制等领域具有良好的应用前景。1.引言倒立摆系统的研究开始于 19 世纪 50 年代,它是一个典型的非线性、高阶次、多变量、强耦合和绝对不稳定系 统.许多抽象的控制概念,如系统的稳定性、可控性、系统的收敛速度和抗干扰 能力都可以通过倒立摆直观地表现出来。随着现代控制理论的发展,倒立摆的研究对于火箭飞行控制和机器人控制等现代高科技
2、的研究具有重 要的实践意义。目前比较常见的倒立摆稳定控制方法有线性控制,如 LQR,LQY 等;智能控制,如 变论域自适应模糊控制,遗传算法,预测控制等。2.系统的数学模型2.1 三级倒立摆的模型及参数三级倒立摆主要 由小车,摆 1、摆 2、摆 3 组成,它们之间自由链接。小车可以在水平导轨上左右平移,摆杆可以在铅垂平面内运动,将其置于坐标系后如图 1 所示:规定顺时针方向的转角和力矩均为正。此外,约定以下记号: 为外界作u用力, 为小车位移, ( =1,2,3)为摆 与铅垂线方向的夹角, 分别xii iO为摆 的链接点位置。其它的系统参数说明如下:i- 小车系统等效质量; - 二摆质心至旋转
3、轴之间的距离;0m2l- 一摆质量; - 三摆质心至旋转轴之间的距离;1 3l- 二摆质量; - 一、二摆之间的距离;2m1L- 三摆质量; - 二、三摆之间的距离;3 2- 一摆对其质心处转动惯量; - 小车系统的摩擦系数;1J 0f- 二摆对其质心处转动惯量; - 一摆转轴处的摩擦阻力矩系数;2 1- 三摆对其质心处转动惯量; - 二摆转轴处的摩擦阻力矩系数;3J 2f- 一摆质心至旋转轴之间的距离; - 三摆转轴处的摩擦阻力矩系数。1l 3f2.2 三级倒立摆的非线性模型为: 0),(),(),( 032132113213211 UGNZFZM其中01231213121123232313
4、123221 ()cos()cos(,) cos()()()scosmmlLlLJMll ll LlL 12131312233co()sco()()LlJml mJl01213121231232 2313123223131()sin(,) i()si()sinsin()flLfFflmmlLlf Lffl 223232isi()fl f, 1213112 20sin(,)()imlLNgl0TG3.神经网络控制器的设计3.1 BP 神经网络人工神经网络(ANN) 由于具有信息的分布存储、并行处理以及自学习能力等优点,在信息处理、模式识别、智能控制及系统建模等领域得到越来越广泛的应用。近年来,已
5、有多种 ANN 模型被提出并得以深入研究。其中,80%90%的人工神经网络模型是采用 BP 网络或它的改进形式,它是前向网络的核心部分,体现了网络最精华的部分。标准的 BP 网络是根据 WidrowHoff 规则,采用梯度下降算法,主要由信息信号的正向传播和误差信号的反向传播两部分组成。BP 神经网络在未经任何训练的情况下,不能作为系统控制器使用。训练样本数的多少对训练结果有很大影响。样本数越多,网络训练结果越精确,但运行时间加长,计算成本也增加,所以合理选择样本数据非常重要。在实际仿真过程中,经过试探训练样本数为 5000 时结果较为合理,此时样本数据能够反映系统的基本特征,可以得到预期的仿
6、真结果。3.2 控制程序整个的程序设计如下:p=x3_1;x3_2;x3_3;x3_4;x3_5;x3_6;x3_7;x3_8;u=x_u;%初始化训练数据net=newff(minmax(p),8,1,tansig,purelin,trainlm);%生成一个两层的神经网络,第一层的传递函数为,第二层的传递函数为net.trainParam.goal=0.0000001;%设置与网络训练相关的数据,包括训练精度和最大训练次数net.trainParam.epochs=5000;net=init(net);%初始化网络net=train(net,p,u);%根据前面的数据和设置的参数对网络进行
7、训练y=sim(net,p)%对已经训练好的网络进行仿真,检查所得的网络是否符合要求plot(u,r)hold on;plot(y,*)%将训练所用数据和神经网络仿真的数据画在同一张图上,进行对比gensim(net,-1)%如果所得到的网络符合要求,则将得到的网络生成一个 simulink 模块,替代原来的反馈矩阵对倒立摆模型进行控制采用 LQR 方法对系统进行建模生成系统传递函数程序如下所示:clcclearm0= 1.32822; m1= 0.2200; m2= 0.2200; m3= 0.1870; J1= 0.0049626; J2= 0.0049626; J3 = 0.004823
8、5; d1= 0.304; d2= 0.304; d3= 0.226; D1= 0.49; D2= 0.49; f0= 22.9147; f1= 0.007056; f2= 0.002646; f3= 0.002646;g= 9.81;M=m0+m1+m2+m3 m1*d1+m2*D1+m3*D1 m2*d2+m3*D2 m3*d3;m1*d1+m2*D1+m3*D1 J1+m1*d1*d1+m2*D1*D1+m3*D1*D1 m2*d2*D1+m3*D1*D2 m3*d3*D1;m2*d2+m3*D2 m2*d2*D1+m3*D1*D2 J2+m2*d2*d2+m3*D2*D2 m3*d3*
9、D2;m3*d3 m3*d3*D1 m3*d3*D2 J3+m3*d3*d3M=1.95522 0.26631 0.15851 0.042262;0.26631 0.12301522 0.0776699 0.02070838;0.15851 0.0776699 0.07019322 0.02070838;0.042262 0.02070838 0.02070838 0.014375212F=-f0 0 0 0;0 -f1-f2 f2 0;0 f2 -f2-f3 f3;0 0 f3 -f3F= -22.9147 0 0 0;0 -0.009702 0.002646 0;0 0.002646 -0
10、.005292 0.002646;0 0 0.002646 -0.002646G=11.88;0;0;0;Nb=0 0 0 0;0 m1*d1+m2*D1+m3*D1 0 0;0 0 m2*d2*g+m3*D2*g 0;0 0 0 m3*d3*gNb= 0 0 0 0;0 0.26631 0 0;0 0 1.553398 0;0 0 0 0.4141676A22=inv(M)*FA21=inv(M)*NbB2=inv(M)*GA21=inv(M)*NbA22=inv(M)*FB2=inv(M)*GT0=1 0 0 0 ;0 1 0 0;0 -1 1 0;0 0 -1 1;%T0=eye(4,4
11、)A21=T0*A21*inv(T0);A22=T0*A22*inv(T0);B2=T0*B2;A=zeros(4,4) eye(4,4);A21 A22B= zeros(4,1);B2 C = eye(4,4) zeros(4,4) D = zeros(4,1)%LQR%Q=diag(100 1 1 1 1 1 1 1);R = 0.01;K = lqr(A,B,Q,R)Ac = (A-B*K);Bc = B;Cc = C;Dc = D;T = 0:0.01:10;U = ones(size(T);sys_c=ss(Ac,Bc,Cc,Dc);Y,T,X=lsim(sys_c,U,T);fig
12、ure(1)plot(T,Y)gridxlabel(time(s);legend(Cart,PendulumDown,PendulumMiddle,PendulumUp)Nbar= K(1);Cn = 1 0 0 0 0 0 0 0; %sys = ss(A,B,Cn,0);sys_cl = ss(Ac,Bc*Nbar,Cc,Dc);Y,T,X = lsim(sys_cl,U,T);figure(2)plot(T,Y)gridxlabel(time(s);legend(Cart,PendulumDown,PendulumMiddle,PendulumUp)%全维观测器P = -40 -41 -
13、42 -43 -44 -45 -46 -47;L = place(A,C,P)Ace = A-B*K B*K;zeros(size(A) (A-L*C);eig(Ace)Bce = B*Nbar;zeros(size(B);Cce = Cc zeros(size(Cc);Dce = 0;0;0;0;est_cl = ss(Ace,Bce,Cce,Dce);Y,T,X = lsim(est_cl,U,T);figure(3)plot(T,Y)gridxlabel(time(s);legend(Cart,PendulumDown,PendulumMiddle,PendulumUp)采用 Simul
14、ink 和 S 函数进行控制系统的设计,系统仿真程序如下所示:图 2 Simulink 仿真图functionsys,x0,str,ts=dot2(t,x,u,flag)switch flagcase 0,sys,x0,str,ts=mdlInitializeSizes;case 1,sys=mdlDerivatives(t,x,u);case 3,sys=mdlOutputs(t,x,u);case 2,9sys=;otherwiseerror(Unhandled flag = ,num2str(flag);endfunction sys,x0,str,ts=mdlInitializeSiz
15、essizes = simsizes;sizes.NumContStates = 8;sizes.NumDiscStates = 0;sizes.NumOutputs = 8;sizes.NumInputs = 1;sizes.DirFeedthrough = 0;sizes.NumSampleTimes = 1;sys = simsizes(sizes);%x0=0.05,0.08,0.008,0.009,0,0,0,0;x0=0.05,0.08,0.001,0.008,0,0,0,0;str=;ts=0 0;function sys=mdlDerivatives(t,x,u)tao=-11
16、.88*u;0;0;0;D=-1.95522 -0.26631*cos(x(2) -0.15851*cos(x(3) -0.042262*cos(x(4);-0.26631*cos(x(2) -0.12301522 -0.0776699*cos(x(3)-x(2) -0.02070838*cos(x(4)-x(2);-0.15851*cos(x(3) -0.0776699*cos(x(3)-x(2) -0.07019322 -0.02070838*cos(x(4)-x(3);-0.042262*cos(x(4) -0.02070838*cos(x(4)-x(2) -0.02070838*cos
17、(x(4)-x(3) -0.014375212;H=-22.947*x(5)+0.26631*sin(x(2)*x(6)2+0.15851*sin(x(3)*x(7)2+0.042262*sin(x(4)*x(8)2;-0.009702*x(6)+0.002646*x(7)+0.0776699*sin(x(3)-x(2)*x(7)2+0.02070838*sin(x(4)-x(2)*x(8)2+2.609838*sin(x(2);0.002646*x(6)-0.0776699*sin(x(3)-x(2)*x(6)2-0.005292*x(7)+0.002646*x(8)+0.02070838*
18、sin(x(4)-x(3)*x(8)2+1.553398*sin(x(3);-0.02070838*sin(x(4)-x(2)*x(6)2+0.002646*x(7)-0.02070838*sin(x(4)-x(3)*x(7)2-0.002646*x(8)+0.4141676*sin(x(4);sys=x(5);x(6);x(7);x(8);-inv(D)*H+inv(D)*tao;function sys=mdlOutputs(t,x,u)E=1 0 0 0 0 0 0 0;0 1 0 0 0 0 0 0;0 -1 1 0 0 0 0 0;0 0 -1 1 0 0 0 0;0 0 0 0 1 0 0 0;0 0 0 0 0 1 0 0;0 0 0 0 0 -1 1 0;0 0 0 0 0 0 -1 1;sys=E*x;图 3 结果仿真图4.小结通过对一级倒立摆数学模型分析,进行了倒立摆小车改进 BP 算法的控制系统仿真实验。仿真表明该 BP 算法收敛性好、计算量小, BP 神经网络从理论上可以逼近任意非线性函数,所以它特别适合控制像倒立摆这样的严重非线性、多变量系统。