Çift sarkaçlı bir sistemin davranışını simüle etmek istiyorum. Sistem, harekete geçirilmeyen ve bu nedenle çoğunlukla yerçekiminden etkilenen bir çift sarkaç gibi davranacak olan 2 serbestlik dereceli bir robot manipülatördür. Çift sarkaçlı tek temel fark, kütle merkezlerinde kütle ve atalet özelliklerine sahip iki katı cisimden oluşmasıdır.
Temel olarak, ode45
Matlab altında aşağıdaki türden bir ODE sistemini çözmek için programladım :
burada yataya göre birinci gövdenin açısı olan, , ilk gövdenin açısal hızıdır; birinci gövdesine göre ikinci gövdenin açısıdır ve ikinci gövdenin açısal hızıdır. Tüm katsayılar, oluşturduğum rhs
ve fMass
fonksiyonlarında aşağıdaki kodda belirtilmiştir .
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
Sistemin tamamen dikey bir konumda başlaması için başlangıç koşulunu (ilk gövdenin yataya göre açısı) nasıl ayarladığımı fark edin . Bu şekilde, sadece yerçekimi hareket ettiğinden, bariz sonuç sistemin bu konumdan hiç hareket etmemesi gerektiğidir.
NOT: aşağıdaki tüm grafiklerde, zamana göre ve çözümlerini çizdim .
ODE45
Simülasyonu 6 saniye boyunca çalıştırdığımda, ode45
beklenen çözümü hiç sorun olmadan alıyorum, sistem olduğu yerde kalıyor ve hareket etmiyor:
Ancak, simülasyonu 10 saniye çalıştırdığımda, sistem mantıksız hareket etmeye başlar:
ODE23
Daha sonra ode23
sorunun devam edip etmediğini görmek için simülasyonu çalıştırdım . Aynı davranışla sonuçlanıyorum, ancak bu sefer ıraksama 1 saniye sonra başlıyor:
ODE15s
Daha sonra ode15s
sorunun devam edip etmediğini görmek için simülasyonu çalıştırdım ve hayır, sistem 100 saniye boyunca bile kararlı görünüyor:
Sonra tekrar, ode15s
sadece ilk sipariş ve sadece birkaç entegre adım olduğunu unutmayın. Bu yüzden ode15s
10 saniye boyunca başka bir simülasyon çalıştırdım, ancak hassasiyeti artırmak için 0.01MaxStep
büyüklüğünde ve maalesef bu hem ve hem de aynı sonuca yol açıyor .ode45
ode23
Normalde, bu simülasyonların açık sonucu, sistemin hiçbir şey onu rahatsız etmediği için başlangıç konumunda kalmasıdır. Bu ayrışma neden oluyor? Bu tür sistemlerin doğada kaotik olmasıyla bir ilgisi var mı? Bu ode
, Matlab'daki işlevler için normal bir davranış mıdır ?
x1
ve x3
. (Efsaneleri veya açıklamaları olmadan grafikler hakkında takın kuru comment.) (Mutlak değerler) ait logaritma komplo deneyin x2
ve x4
.