이중 진자 같은 시스템의 동작을 시뮬레이션하고 싶습니다. 이 시스템은 작동하지 않고 중력의 영향을받는 이중 진자처럼 동작하는 2 자유도 로봇 조작기입니다. 이중 진자와의 유일한 주요 차이점은 질량 중심에서 질량 및 관성 특성을 가진 두 개의 강체로 구성된다는 것입니다.
기본적으로 ode45
Matlab에서 다음 유형의 ODE 시스템을 해결하도록 프로그래밍했습니다 .
여기서 은 수평에 대한 제 1 바디의 각도이고, 는 제 1 바디의 각속도이며; 은 제 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 초 후에 발산이 시작됩니다.
ODE15
그런 다음 시뮬레이션을 실행하여 ode15s
문제가 지속되는지 확인하고 100 초 동안에도 시스템이 안정적으로 보입니다.
다시 한 번, ode15s
첫 번째 순서이며 몇 가지 통합 단계 만 있습니다. 그래서 내가 가진 또 다른 시뮬레이션을 실행 ode15s
십초 동안 만 MaxStep
의 크기 정밀도를 높이기 위해, 불행하게도, 모두 같은 결과이 리드 ode45
하고 ode23
.
일반적으로 이러한 시뮬레이션의 명백한 결과는 시스템이 혼란스럽지 않기 때문에 시스템이 초기 위치를 유지한다는 것입니다. 왜이 발산이 발생합니까? 이러한 유형의 시스템이 본질적으로 혼란 스럽다는 사실과 관련이 있습니까? 이것이 ode
Matlab의 함수에 대한 정상적인 동작 입니까?
x1
와 x3
. (범례 또는 설명없이 그래프에 대한 삽입 건조 주석.) (절대 값)의 대수 플롯 시도 x2
와 x4
.