Я хочу імітувати поведінку системи, що нагадує подвійний маятник. Система - це маніпулятор-робот 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 секунду:
ODE15s
Потім я запустив симуляцію, ode15s
щоб перевірити, чи проблема не існує, система здається стабільною навіть протягом 100 секунд:
Потім знову ode15s
лише перший порядок та зауважте, що є лише кілька інтегруючих кроків. Тому я запустив ще одне моделювання ode15s
протягом 10 секунд, але MaxStep
розміром для підвищення точності, і, на жаль, це призводить до того ж результату, що і для обох ode45
і ode23
.
Зазвичай очевидним результатом цих симуляцій буде те, що система залишається у вихідному положенні, оскільки ніщо її не турбує. Чому виникає така розбіжність? Чи має щось спільне з тим, що такі типи систем мають хаотичний характер? Це нормальна поведінка для ode
функцій в Matlab?
x1
і x3
. (Вставте сухий коментар до графіків без легенд чи описів.) Спробуйте скласти логарифми (абсолютні значення) x2
та x4
.