我希望模拟双摆式系统的行为。该系统是一个2自由度的机器人操纵器,该操纵器没有被致动,因此其行为主要类似于受重力影响的双摆。双摆的唯一主要区别在于,它由两个刚体组成,两个刚体在其质心处具有质量和惯性特性。
基本上,我ode45
在Matlab下进行编程,以解决以下类型的ODE系统:
其中是第一物体相对于水平面的角度,是第一物体相对于水平面的角速度;是第二物体相对于第一物体的角度,是第二物体的角速度。在我创建的rhs
和fMass
函数的以下代码中指定了所有系数。
clear all
opts= odeset('Mass',@fMass,'MStateDependence','strong','MassSingular','no','OutputFcn',@odeplot);
sol = ode45(@(t,x) rhs(t,x),[0 5],[pi/2 0 0 0],opts);
function F=rhs(t,x)
m=[1 1];
l=0.5;
a=[0.25 0.25];
g=9.81;
c1=cos(x(1));
s2=sin(x(3));
c12=cos(x(1)+x(3));
n1=m(2)*a(2)*l;
V1=-n1*s2*x(4)^2-2*n1*s2*x(2)*x(4);
V2=n1*s2*x(2)^2;
G1=m(1)*a(1)*g*c1+m(2)*g*(l*c1+a(2)*c12);
G2=m(2)*g*a(2)*c12;
F(1)=x(2);
F(2)=-V1-G1;
F(3)=x(4);
F(4)=-V2-G2;
F=F';
end
function M=fMass(t,x)
m=[1 1];
l=0.5;
Izz=[0.11 0.11];
a=[0.25 0.25];
c2=cos(x(3));
n1=m(2)*a(2)*l;
M11=m(1)*a(1)^2+Izz(1)+m(2)*(a(2)^2+l^2)+2*n1*c2+Izz(2);
M12=m(2)*a(2)^2+n1*c2+Izz(2);
M22=m(2)*a(2)^2+Izz(2);
M=[1 0 0 0;0 M11 0 M12;0 0 1 0;0 M12 0 M22];
end
请注意,我如何设置的初始条件(第一个物体相对于水平面的角度),以便系统从完全垂直的位置开始。这样,由于仅重力作用,因此明显的结果是系统根本不应该从该位置移动。
注意:在下面的所有图形中,我绘制了关于时间的解和。
ODE45
当我使用进行了6秒钟的仿真时ode45
,我得到了没有任何问题的预期解决方案,系统保持原样并且不动:
但是,当我运行模拟10秒钟时,系统开始不合理地移动:
ODE23
然后,我运行模拟ode23
以查看问题是否仍然存在。我最终得到相同的行为,只是这次差异在1秒后开始:
ODE15
然后,我运行模拟ode15s
以查看问题是否仍然存在,并且不,即使在100秒内,系统也似乎是稳定的:
再说一次,ode15s
只是一阶,请注意,只有几个集成步骤。因此,我ode15s
在10秒内运行了另一个仿真,但MaxStep
大小为以提高精度,但是不幸的是,这导致了与ode45
和相同的结果ode23
。
通常,这些模拟的明显结果将是系统保持在其初始位置,因为没有任何干扰。为什么会出现这种分歧?这些类型的系统本质上是混乱的,这是否与事实有关?这是ode
Matlab中函数的正常行为吗?
x1
和x3
。(约没有传说或描述图表插入干评论。)尝试绘制(的绝对值)的对数x2
和x4
。