资源描述:
《移动机器人路径识别与跟踪的计算机仿真_丁承君.pdf》由会员上传分享,免费在线阅读,更多相关内容在行业资料-天天文库。
1、•132•系统仿真学报2001年8月为sfuntmpl.m;利用模板编写好程序后,在Simulink非线性function[sys,x0,str,ts]=uncertainty11(t,x,u,flag)——程序的文件名模块库中将S-function功能模块复制出来,然后输入文件名,function[sys,x0,str,ts]=mdlInitizeSizes这样就相当于建立了一个新的Simulink功能模块,以供调sizes=simsizes;用。注意运行时,必须是在工作目录下。S-function的设计sizes.NumContStates=2;——角度的微分作为状
2、态向量步骤很简单,但却可实现非常复杂的功能。sizes.NumDiscStates=0;sizes.NumOutputs=2;——输出参数个数值下面给出文件sfuntmpl.m提供的6个子程序及其用途:sizes.NumInputs=7;——输入参数个数值1.mdlInitializeSizes初始化(设置各种参数值)sizes.DirFeedthrough=0;2.mdlDerivatives(t,x,u)输出值sys为状态值的微分sizes.NumSampleTimes=13.mdlUpdate(t,x,u)输出值sys为状态值在下一时刻的更新值sizes=sims
3、izes(sizes);4.mdlOutputs(t,x,u)输出值sys为输入值与状态值的函数x0=[0;0.2];——设置初始值5.mdlGetTimeOfNextVarHit(t,x,u)输出值sys为下一次被触发的str=[];时间ts=[];6.mdlTerminate(t,x,u)模拟结束function.sys=mdlrivatives(t,v,u)在上述六个子程序中,mdlInitializeSizes,mdlDerivativesxita=[I1+(m1/4+m2)*l1^2;m2*l1*l2/2;I2+m2*12^2/4];(t,x,u)和mdlOu
4、tputs(t,x,u)是三个最基本的也是经常使用的子——省略各参数值的输入q1=u(3);q1dot=u(4);程序,若熟练掌握它们的用法,将会大大简化仿真过程。下q2=u(5);q2dot=u(6);%q1dot代表q&1;面我们将通过实例详细介绍它们的使用方法。其它三个子程hq0=[-xita(3)*(2*u(4)*u(6)+u(6)^2)*sin(u(5));序的具体使用可参考《Matlab5.X应用与技巧》。xita(3)*u(4)^2*sin(u(5))];Dq0=[xita(1)+xita(2)+2*xita(2)*cos(u(5)),3S-functio
5、n仿真示例xita(3)+xita(2)*cos(u(5));xita(3)+xita(2)*cos(u(5)),xita(3)];下面通过一个二自由度机器人的非线性鲁棒控制来具sys=inv(Dq0)*([u(1);u(2)]+[u(7);u(7)]-hq0);体说明如何将Simulink模型与S-function结合起来。——求状态的微分机器人的动力学模型为:functionsys=mdlOutputs(t,x,u)sys(1)=x(1);D(q)q&&+h(q,q&)=t+fsys(2)=x(2);——输出状态向量,即角度的微分[3]其中D(q),h(q,q&)的
6、具体参数参见参考文献。设未建模动functionsys=mdlGetTimeOfNextVarHit(t,x,u)力学f为f=[0.5sint0.5sint];sampleTime=1;sys=t+sampleTime;机械手的期望轨迹为:functionsys=mdlTerminate(t,x,u)[]Tqd=0.5cost0.5sintsys=[];——结束仿真采用的控制规律:至此,求出了q&1,q&2。通过积分环节,可得到q1,q2。t=D(q)(q&&-(K+K)e&-KKe)0d1212在该程序中主要用到的是微分输出mdlDerivatives与输出+h0(q
7、,qd)+D0(q)umdlOutputs两个子程序。Simulink模型图如图1所示:下面再给出S-function1的部分程序:function[sys,x0,str,ts]=uncertainty1(t,x,u,flag)——程序的文件名function[sys,x0,str,ts]=mdlInitializeSizessizes=simsizes;sizes.NumContStates=0;——因无状态,个数为零sizes.NumDiscStates=0;sizes.NumOutputs=4;——输出参数个数值sizes.NumI