人工神经网络作业M A T L A B仿真(共3篇)-标准化文件发布号:(9456-EUATWK-MWUB-WUNN-INNUL-DDQTY-KII人工神经网络仿真作业(3篇)人工神经网络仿真作业1:三级倒立摆的神经网络控制人工神经网络仿真作业2:基于模型整体逼近的机器人RBF网络自适应控制人工神经网络仿真作业3:基于RBF的机械手无需模型自适应控制研究神经网络仿真作业1:三级倒立摆的神经网络控制摘要:建立了基于人工神经网络改进BP 算法的三级倒立摆的数学模型,并给出了BP 网络结构,利用Matlab 软件进行训练仿真,结果表明,改进的BP 算法控制倒立摆精度高、收敛快,在非线性控制、鲁棒控制等领域具有良好的应用前景。
1.引言倒立摆系统的研究开始于19世纪50年代,它是一个典型的非线性、高阶次、多变量、强耦合和绝对不稳定系统.许多抽象的控制概念,如系统的稳定性、可控性、系统的收敛速度和抗干扰能力都可以通过倒立摆直观地表现出来。
随着现代控制理论的发展,倒立摆的研究对于火箭飞行控制和机器人控制等现代高科技的研究具有重要的实践意义。
目前比较常见的倒立摆稳定控制方法有线性控制,如LQR,LQY 等;智能控制,如变论域自适应模糊控制,遗传算法,预测控制等。
2.系统的数学模型2.1三级倒立摆的模型及参数三级倒立摆主要由小车,摆1、摆2、摆3组成,它们之间自由链接。
小车可以在水平导轨上左右平移,摆杆可以在铅垂平面内运动,将其置于坐标系后如图1 所示:规定顺时针方向的转角和力矩均为正。
此外,约定以下记号:u 为外界作用力,x 为小车位移,i (i =1,2,3)为摆i 与铅垂线方向的夹角, i O 分别为摆i 的链接点位置。
其它的系统参数说明如下:0m -- 小车系统等效质量; 2l -- 二摆质心至旋转轴之间的距离;1m -- 一摆质量; 3l -- 三摆质心至旋转轴之间的距离; 2m-- 二摆质量; 1L -- 一、二摆之间的距离;3m -- 三摆质量; 2L -- 二、三摆之间的距离;1J -- 一摆对其质心处转动惯量; 0f -- 小车系统的摩擦系数;2J -- 二摆对其质心处转动惯量; 1f -- 一摆转轴处的摩擦阻力矩系数; 3J -- 三摆对其质心处转动惯量; 2f -- 二摆转轴处的摩擦阻力矩系数;1l -- 一摆质心至旋转轴之间的距离; 3f -- 三摆转轴处的摩擦阻力矩系数。
2.2三级倒立摆的非线性模型为:000),,(),,,,,(),,(0321321321321321321U G N Z F Z M ++=θθθθθθθθθθθθθθθθθθ 其中01231121311222112111112131123223222212131221333331312232233132212()cos ()cos (,,)()cos cos()cos()cos cos()()cos cos cos(m m m m m l m L m L m l m L J m l m L m L M m l m L m l L m L L m l m l L m l m L m l L m l L θθθθθθθθθθθθθθθθ+++++⎡⎢++++⎢=⎢+-+-⎢-⎣+-13122133131222223233232233332333)cos()cos()cos()cos()m L L m l L J m l m L m l L m l L J m l θθθθθθθθθ⎤⎥+--⎥⎥++-⎥-+⎦011213111121231232221312121331131223222333322232331313233()sin 0()(,,,,,)0()sin()0sin()()sin sin ()sin()()f m l m L m L f f F f m l L m L L m l L m l m L m l f m l m L m l L f f f m l θθθθθθθθθθθθθθθθθθθθ⎡-++⋅⎢-+⎢=⎢-+⋅-⎢--⎢⎣+⋅⋅⋅++--++3233233322323sin()sin()L f m l L f θθθθθθ⎤⎥⎥⎥-⎥---⎥⎦112131112223223330()sin (,)()sin sin m l m L m L N m l m L g m l g θθθθθ⎡⎤⎢⎥++⎢⎥=⎢⎥+⎢⎥⎢⎥⎣⎦, 100T G = 3.神经网络控制器的设计3.1 BP 神经网络人工神经网络(ANN)由于具有信息的分布存储、并行处理以及自学习能力等优点,在信息处理、模式识别、智能控制及系统建模等领域得到越来越广泛的应用。
近年来,已有多种ANN 模型被提出并得以深入研究。
其中,80%~90%的人工神经网络模型是采用BP 网络或它的改进形式,它是前向网络的核心部分,体现了网络最精华的部分。
标准的BP 网络是根据Widrow -Hoff 规则,采用梯度下降算法,主要由信息信号的正向传播和误差信号的反向传播两部分组成。
BP神经网络在未经任何训练的情况下,不能作为系统控制器使用。
训练样本数的多少对训练结果有很大影响。
样本数越多,网络训练结果越精确,但运行时间加长,计算成本也增加,所以合理选择样本数据非常重要。
在实际仿真过程中,经过试探训练样本数为5000时结果较为合理,此时样本数据能够反映系统的基本特征,可以得到预期的仿真结果。
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);%%根据前面的数据和设置的参数对网络进行训练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.0048235;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*D1m2*d2*D1+m3*D1*D2 m3*d3*D1;m2*d2+m3*D2 m2*d2*D1+m3*D1*D2J2+m2*d2*d2+m3*D2*D2 m3*d3*D2;m3*d3 m3*d3*D1 m3*d3*D2 J3+m3*d3*d3] M=[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.014375212]F=[-f0 0 0 0;0 -f1-f2 f2 0;0 f2 -f2-f3 f3;0 0 f3 -f3]F=[ -22.9147 0 0 0;0 -0.009702 0.002646 0;0 0.002646 -0.005292 0.002646;0 0 0.002646 -0.002646]G=[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*g]Nb=[ 0 0 0 0;0 0.26631 0 0;0 0 1.553398 0;0 0 0 0.4141676]A22=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)A21=T0*A21*inv(T0);A22=T0*A22*inv(T0);B2=T0*B2;A=[zeros(4,4) eye(4,4);A21 A22]B=[ 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);figure(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 -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')采用Simulink和S函数进行控制系统的设计,系统仿真程序如下所示:图2 Simulink仿真图function[sys,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,9}sys=[];otherwiseerror(['Unhandled flag = ',num2str(flag)]);endfunction [sys,x0,str,ts]=mdlInitializeSizessizes = 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.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(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*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算法的控制系统仿真实验。