MATLAB Projectile Motion

edited November 2008 in Science & Tech
I am doing a catapult project where I have to launch something using MATLAB. The mechanism I am implmenting is the crank slider. What I am trying to do is to start when the crank slider is flat, and then create an initial velocity of the links before sending the ball into the air (this is when the the crank slider has been rotated CCW for 90 degrees).

I am having trouble with the projectile motion of the code. Can someone help me out on how to create the continuous range and velocity plots? I have attached my code for you to see.

I just need some help on how to create the projectile motion code, since I think I have to write two statements about the path of the ball, one before the lanch and one after the launch.



% Definitions
R2D = 180/pi; % rad to deg
D2R = pi/180; % deg to rad
F2M = 0.3040; % feet to meter
m = 45.46; % kg
g = -9.8; % gravity (m/s^2)
j = sqrt(-1);
dt = 0.001; %1000Hz

R1 = 15*F2M; %m
R2 = 15*F2M;
 

% Initial conditions
xBall = [0; 0]; % theta/omega
 

% Machine initial conditions
Torque = (-1)*m*g*R1; % N-m
Pmotor = 1119000; % W
Tbreak = (4404 / 0.738)*2.3; % break torque in N-m
 

% Ball
I = m*(R1^2);
 

for launch=0:1:20
times_launched = launch + 1;
 

% Main loop
iter = 0;
for time=0:dt:1
 
% Index
iter = iter + 1;
 

% Torque generation and check
if( (xBall(2,1)) < ((Pmotor)/Tbreak) )
Torque = Tbreak;
else
Torque = (Pmotor)/xBall(2,1);
end
 


% From 0 degrees to 90 degrees
if ((xBall(1,1)*R2D) >= 0 ) || ((xBall(1,1)*R2D) < 90)
% Calculate net torque
Tgrav = ( m*g*cos(xBall(1,1)))*R1;
Tnet = Torque + Tgrav;

% Calculate instantaneous angular acceleration
alphaB = Tnet/I;

% Calculate the derivative of the state
xdot = [ xBall(2,1); alphaB ];

% Integration of the state
xBall = xBall + xdot*dt;

% Dependent states
pBall = R1*( cos(xBall(1,1)) + j*sin(xBall(1,1)) );
vBall = xBall(2,1) * R1;
Power = (Tnet/R1) * vBall;
 


elseif ( ((xBall(1,1)*R2D) >= 90) || ((xBall(1,1)*R2D) <= 180) )

% Calculate net torque
Tgrav = ( m*g*cos( xBall(1,1)) )*R1;
Tnet = Torque + Tgrav;

% Calculate instantaneous angular acceleration
alphaB = Tnet/I;

% Calculate the derivative of the state
xdot = [ xBall(2,1); alphaB ];

% Integration of the state
xBall = xBall + xdot*dt;

% Dependent states
pBall = real(vBall) * time;
Power = (Tnet/R1) * vBall;

end;
 

DATA(iter,:) = [ iter time xBall' alphaB Tnet xBall(1,1)*R2D ...
real(pBall) imag(pBall) real(vBall) imag(vBall) vBall Power ];

end;

end;
 


%% Trajectory of Projectile (y vs. x)
figure(1);
plot( DATA(:,8), DATA(:,9), '.' );
title ('Trajectory (y vs. x) of projectile during launch')
xlabel('x')
ylabel('y')
 

%% Range (x) vs. time
figure(2);
subplot (211), plot(DATA(:,2), DATA(:,8), '.' );
title ('Range(x) as a function of time')
ylabel('Range(x)')
 

%% Altitude (y) vs. time
subplot (212), plot(DATA(:,2), DATA(:,9), '.' );
title ('Altitude(y) as a function of time')
xlabel('time')
ylabel('Altitude(y)')
 

%% Velocity (x and y components) vs. time
figure(3);
subplot (211), plot(DATA(:,2), DATA(:,10), '.' );
title ('Velocity (x and y) as a function of time')
ylabel('Velocity(x)')

subplot (212), plot(DATA(:,2), DATA(:,11), '.' );
xlabel('time')
ylabel('Velocity(y)')
 

%% Velocity (total) vs. time
figure(4);
plot(DATA(:,2), DATA(:,12), '.' );
title ('Velocity(total) as a function of time')
xlabel('time')
ylabel('Velocity (total))')
 

%% Power vs. time
figure(5);
plot(DATA(:,2), DATA(:,13), '.' );
title ('Power as a function of time')
xlabel('time')
ylabel('Power')

Sign In or Register to comment.