二重振り子のようなシステムの動作をシミュレートしたいと思います。このシステムは2自由度のロボットマニピュレーターであり、作動しないため、重力の影響を受ける二重振り子のように動作します。二重振り子との唯一の主な違いは、2つの振り子が、質量中心に質量と慣性の特性を持つ2つの剛体で構成されていることです。
基本的ode45
に、次のタイプのODEのシステムを解決するためにMatlabでプログラミングしました。
ここで、は水平に対する最初の物体の角度、は最初の物体の角速度です。は第1の物体に対する第2の物体の角度であり、は第2の物体の角速度です。すべての係数は、作成した関数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秒後に発散が始まります:
ODE15s
次に、シミュレーションを実行しode15s
て、問題が持続するかどうかを確認しました。いいえ、システムは100秒の間でも安定しているように見えます。
それからまた、ode15s
最初の注文であり、いくつかの統合手順しかないことに注意してください。そこでode15s
、10秒の間に別のシミュレーションを実行しましたが、精度を上げるためMaxStep
にサイズを使用しましたが、残念ながら、これはとの両方ode45
と同じ結果になりode23
ます。
通常、これらのシミュレーションの明らかな結果は、システムが混乱しないため、システムが初期位置にとどまることです。なぜこの相違が発生しているのですか?これらのタイプのシステムは本質的に混oticとしているという事実と関係がありますか?これはode
、Matlabの関数の通常の動作ですか?
x1
とx3
。(凡例や説明のないグラフについてのドライコメントを挿入してください。)(の絶対値)x2
との対数をプロットしてみてくださいx4
。