资源描述:
《一级直线倒立摆matlab程序》由会员上传分享,免费在线阅读,更多相关内容在教育资源-天天文库。
1、非线性作业一一级直线倒立摆如图1所示系统里的各参数变量M:小车系统的等效质量(1.096kg);:摆杆的质量(0.109kg);:摆杆的半长(0.25m);J:摆杆系统的转动惯量(0.0034kg*m);g:重力加速度(9.8N/Kg);r:小车的水平位置(m);θ:摆角大小(以竖直向上为0起始位置,逆时针方向为正方向);:小车对摆杆水平方向作用力(N)(向左为正方向),’是其反作用力;:小车对摆杆竖直方向作用力(N)(向上为正方向),’是其反作用力;U:电动机经传动机构给小车的力,可理解为控制作用
2、u’(向左为正方向);:摆杆重心的水平位置(m);:摆杆重心的竖直位置(m)。1.1一级倒立摆的数学建模定义系统的状态为[r,r,θ,θ]经推导整理后可以达到倒立摆系统的牛顿力学模型:(1)(2)因为摆杆一般在工作在竖直向上的小领域内θ=0,可以在小范围近似处理:,则数学模型可以整理成:(3)(4)系统的状态空间模型为=+(5)(6)代人实际系统的参数后状态方程为:=+(7)(8)1.2滑模变结构在一级倒立摆系统的应用主要包括切换函数的设计、控制率的设计和系统消除抖振的抑制。基于线性二次型最优化理论
3、的切换函数设计,定义系统的优化积分指标是:Q>0,本文采用指数趋近律:,其中k和ε为正数。将其代人S=Cx=0中,可以得到:(9)控制率为:(10)ε的选取主要是为了抑制系统的摩擦力和近似线性化所带来的误差和参数摄动等因素,从而使得系统具有良好的鲁棒性。文中k=25,ε=0.8。取变换矩阵T。其中T=,去Q*11=diag([30050350]),Q22=10关于Riccati方程的解有MATLAB的lqr函数可以解出二程序%主程序:直线一级倒立摆clearallcloseallglobalCM0F
4、ts=0.02;%采样时间T=30;%仿真时间TimeSet=[0:ts:T];para=[];%options为解微分函数中的调整参数,reltol和abstol分别是设置相对误差和绝对误差options=odeset('RelTol',1e-3,'AbsTol',[1e-31e-31e-31e-3]);%options=[];x0=[0.5,0.3,0,0];%初始值[t,xout]=ode45('daolibai2eq',TimeSet,x0,options,para);%固定格式,子程序调用
5、%返回值x1=xout(:,1);x2=xout(:,2);x3=xout(:,3);x4=xout(:,4);s=C(1)*x1+C(2)*x2+C(3)*x3+C(4)*x4;%切换函数或切换面%选择控制器ifF==1%fork=1:1:T/ts+1M0=40;%u(k)=-M0*sign(s(k));u=-M0*sign(s);%endelseifF==2beta=30;delta=0;fork=1:1:T/ts+1u(k)=-beta*(abs(x1(k))+abs(x2(k))+abs(x
6、3(k))+abs(x4(k))+delta)*sign(s(k));endend%绘图figure(1);plot(t,x1,'r');xlabel('time(s)');ylabel('CartPosition');figure(2);plot(t,x2,'r');xlabel('time(s)');ylabel('PendulumAngle');figure(3);plot(t,s,'r');xlabel('time(s)');ylabel('s');figure(4);plot(t,u,'r
7、');xlabel('time(s)');ylabel('u');end%子程序functiondx=DxnamicModel(t,x,flag,para)%自定义动态函数globalCM0F%倒立摆经计算后模型M=1.096;m=0.109;b=0.1;l=0.25;I=0.0034;T=0.005;g=0.98;k22=-(I+m*l^2)*b/(I*(M+m)+M*m*l^2);k23=m^2*g*l^2/(I*(M+m)+M*m*l^2);k42=-m*l*b/(I*(M+m)+M*m*l^
8、2);k43=m*g*l*(M+m)/(I*(M+m)+M*m*l^2);b12=(I+m*l^2)/(I*(M+m)+M*m*l^2);b14=m*l/(I*(M+m)+M*m*l^2);A=[0,1,0,0;0,k22,k23,0;0,0,0,1;0,k42,k43,0];b=[0;b12;0;b14];%Ackermann'sformulan1=-1;n2=-2;n3=-3;C=[0,0,0,1]*inv([b,A*b,A^2*b,A^3*b])*(A-n1*e