欢迎光临散文网 会员登陆 & 注册

如何用S函数实现积分运算

2023-05-01 23:52 作者:幽影微光  | 我要投稿

在对多自由度机器人臂进行控制时,关节的行程和行程速度从多体模块是可以直接导出的,在常规PD控制中,只需要针对上面两个控制量给定目标值,然后做闭环控制就可以了。S-Function可以很好地执行该算法。但如果要把PD做成PID该如何利用S-Function进行运算?

 在已知初始状态的情况下,确实是可以使用S-Function进行积分运算的。比如:

测试sim模型

S-Function代码:

function [sys,x0,str,ts] = spacemodel(t,x,u,flag)

 

switch flag,

case 0,

[sys,x0,str,ts]=mdlInitializeSizes;

case 1,

sys=mdlDerivatives(t,x,u);

case 3,

sys=mdlOutputs(t,x,u);

case {2,4,9}

sys=[];

otherwise

error(['Unhandled flag = ',num2str(flag)]);

end

 

function [sys,x0,str,ts]=mdlInitializeSizes

sizes = simsizes;

sizes.NumContStates = 1;

sizes.NumDiscStates = 0;

sizes.NumOutputs = 1;

sizes.NumInputs = 1;

sizes.DirFeedthrough = 0;

sizes.NumSampleTimes = 1;

sys = simsizes(sizes);

x0 = [0];

str = [];

ts = [0 0];

 

function sys=mdlDerivatives(t,x,u)

e1 = u(1);

sys = e1;

function sys=mdlOutputs(t,x,u)

ie1 = x(1);

sys = ie1 ;

原理很明显,就是将e1的积分赋值状态量x,由于用到了mdlDerivatives,需要给定初始状态x0,仿真结果如下:

仿真结果

结论:如果这个方法帮到了你,我感到很高兴。如果需要转载此文章,请尊重我的劳动成果,注明出处。如果你有更好的方法,请告诉我让我也学习一下,谢谢。 

如何用S函数实现积分运算的评论 (共 条)

分享到微博请遵守国家法律