Madden and Webster Force Analysis

Force Analysis of an ATV Deerloader

Picture of Mechanism

flickr:5244586072

http://www.arkansasduckhunter.com/atvloader.asp

Discussion of Results

Our assignment was to develop a MATLAB model for a mechanism that demonstrated position, velocity, and acceleration analysis. After completing the initial movement analysis we were to conduct a force analysis in the same program in order to see what the structural constraints for the mechanism should be. First we had to come up with something to model in real life.

After some internet search we discovered a machine that is built as an attachment for an ATV. It is designed for deer hunters to help pick up a harvested deer and load it unto the utility rack on the front of an ATV. (arkansasduckhunter.com/deerloader)

The first step was to make some engineering drawings for the machine in order to better grasp what the mechanism looked like. We used AutoCAD to draw an accurate model of the mechanism. After making the drawing we started the hand calculations for the loops, constraints, and initial conditions. Using complex polar notation we calculated the position, velocity, and acceleration matrices by hand. After this was accomplished we started the process of inputting calculations into MATLAB code.

The MATLAB seemed relatively simple at first when transferring our hand written calculations to the code but once we started running our program we realized that we had some problems with branch defects. After some manipulation we managed to fix the branch defects by changing our vector lengths slightly and reversing the signs on the branch in the code. There was a reoccurring error in the position code saying that some calculations were “NaN” or “not a real number.” After some analyzing of our “two unknown angle” function we realized that we needed to change some variables within our function file. The problem ended up being that we had not inserted zeros for some vectors that did not match from the function to the actual deerloader program. After this small fix the program worked.

For force analysis we first drew out each member by hand to create two force members. We divided up the reaction forces into their respective components and began inserting the resulting equations into MATLAB. We used the matrix method to solve again for the unknowns and after some number tweaking we were able to get reasonable resulting forces as program outputs. We then graphed the resultant forces through the plot command and had reasonable outputs.

Hand Calculations

flickr:5261931070
flickr:5261931544
flickr:5261324813

MATLAB Program

clc;
clear all;
close all;

dtr = pi/180;

% r1_vec + r2_vec + r4_vec + r5_vec = 0
% r1_vec is a ground vector
% r2_vec is a variable length variable angle binary link
% r4_vec is a fixed length variable angle binary link
% r5_vec is a variable (input) length and angle cable modeled as prismatic

% constants
r1 = .5;
theta1= 280*dtr;
c1 = cos(theta1);
s1 = sin(theta1);

theta2_dot = 4;
theta2_ddot = 1;
r2_dot = 1;
r2_ddot = 1;

r4 = .15;
r5_dot = 1;
r5_ddot = 4;

rp = .5;
Fp = 200;

m2 = 10;
m4 = 20;
m5 = .1;
I2 = 5;
I4 = 1;

g = 9.81;

box = 4;
scale= [-box*.4,box*.1,-box*.5,box*.2];

% Initial Conditions
branch = 1;
theta2 = 240*dtr;
r2 = 1.1;
r5 = 1.5;
i = 1;
idx = 1;
for i=1:1:120
%%%%% Position %%%%%
[theta4,theta5,flag]=two_uk_angles(r1,r2,r4,r5,theta1,theta2,branch)
if flag == 1
break
end
thetap = theta4 + 90*dtr;
p1 = 0;
p2 = p1 + r1*exp(j*theta1);
p3 = p2 + r2*exp(j*theta2);
p4 = p3 + r4*exp(j*theta4);
p5 = p4 + r5*exp(j*theta5);
pp = p3 + rp*exp(j*thetap);
c2 = cos(theta2);
s2 = sin(theta2);
c4 = cos(theta4);
s4 = sin(theta4);
c5 = cos(theta5);
s5 = sin(theta5);

p1 = 0;
p2_store(idx) = p1 + r1*exp(j*theta1);
p3_store(idx) = p2 + r2*exp(j*theta2);
p4_store(idx) = p3 + r4*exp(j*theta4);
p5_store(idx) = p4 + r5*exp(j*theta5);
p6_store(idx) = p3 + rp*exp(j*thetap);

thetap = theta4 + 90*dtr;
sp = sin(thetap);
cp = cos(thetap);

%%%%% Velocity %%%%%
A = [-r4*s4, -r5*s5, 0, 0;
-r4*c4, -r5*c5, 0, 0;
-rp*sp, 0, -1, 0;
-rp*cp, 0, 0, -1];

b = [-r2*c2 + r2*s2*theta2_dot - r5_dot*c5;
-r2*s2 + r2*c2*theta2_dot - r5_dot*s5;
r2*s2*theta2_dot - r2_dot*c2;
r2*c2*theta2_dot - r2_dot*s2];

v = inv(A)*b;
theta4_dot = v(1);
theta5_dot = v(2);
vpx = v(3);
vpy = v(4);

vp = sqrt(vpx^2 + vpy^2);

%%%%% Acceleration %%%%%
b = [-r2_ddot*c2+2*r2_dot*theta2_dot*s2+r2*s2*theta2_ddot+r2*c2*theta2_dot^2+r4*c4*theta4_dot^2-r5_ddot*c5+r5_dot*theta5_dot*s5+r5*c5*theta5_dot^2;
-r2_ddot*s2+2*r2_dot*theta2_dot*c2+r2*c2*theta2_ddot+r2*s2*theta2_dot^2+r4*s4*theta4_dot^2-r5_ddot*s5+r5_dot*theta5_dot*c5+r5*s5*theta5_dot^2;
-r2_ddot*c2+2*r2_dot*theta2_dot*s2+r2*s2*theta2_ddot+r2*c2*theta2_dot^2+rp*cp*theta4_dot^2;
-r2_ddot*s2+2*r2_dot*theta2_dot*c2+r2*c2*theta2_ddot+r2*s2*theta2_dot^2+rp*sp*theta4_dot^2];

acc = inv(A)*b;
theta4_ddot = acc(1);
theta5_ddot = acc(2);
acc_px = acc(3);
acc_py = acc(4);

acc_p = sqrt(acc_px^2 + acc_py^2);

plot_pts = [p1,p2,p3,pp,p3,p4,p5];

%%%%% Dynamics %%%%%

ag2x = r2_ddot*c2 + .5*r2*theta2_dot*s2;
ag2y = r2_ddot*s2 + .5*r2*theta2_dot*c2;
alpha2 = theta2_ddot;

ag4x = theta4_ddot*s5 + r2*theta2_ddot*s2;
ag4y = theta4_ddot*c5 + r2*theta2_ddot*c2;
alpha4 = theta4_ddot;

ag5 = r5_ddot;

r21x = .5*r2*c2;
r21y = .5*r2*s2;
r24x = .5*r2*c2;
r24y = .5*r2*s2;

C = [1,0,1,0,0,0,0,0,0,0;
0,1,0,1,0,0,0,0,0,0;
-r21y,r21x,-r24y,r24x,0,0,0,0,0,1;
0,0,0,0,1,0,c5,0,0,0;
0,0,0,0,0,1,s5,0,0,0;
0,0,0,0,0,0,r4*c4*s5-r4*s4*c5,0,0,0;
0,0,0,0,0,0,0,1,1,0;
0,0,1,0,1,0,0,0,0,0;
0,0,0,1,0,1,0,0,0,0;
0,0,0,0,0,0,1,1,0,0];

k = [m2*ag2x;
m2*ag2y + m2*g;
I2*alpha2;
m4*ag4x;
m4*ag4y + m4*g + Fp;
I4*alpha4 + rp*Fp;
m5*ag5;
0;
0;
0];

F = inv(C)*k;

F12x = F(1);
F12y = F(2);
F42x = F(3);
F42y = F(4);
F24x = F(5);
F24y = F(6);
F54 = F(7);
F45 = -F54;
F15 = F(9);
T2 = F(10);

F12x_store(idx) = F(1);
F12y_store(idx) = F(2);
F42x_store(idx) = F(3);
F42y_store(idx) = F(4);
F24x_store(idx) = F(5);
F24y_store(idx) = F(6);
F54_store(idx) = F(7);
F45_store(idx) = -F54;
F15_store(idx) = F(9);
T2_store(idx) = F(10);

i = i+1;
r2 = r2 - 1.1/250;
r5 = r5-1.5/125;
theta2 = theta2 - 1*dtr;
idx = idx+1;

figure(1)
plot(plot_pts)
title('Animation of Mechanism Movement')
axis(scale);
pause(.5);
end

figure(2)
subplot(3,3,1)
plot(F12x_store)
title('Force exerted on prismatic by ground (x-direction)')
xlabel('Time (s)')
ylabel('Force (N)')

subplot(3,3,2)
plot(F12y_store)
title('Force exerted on prismatic by ground (y-direction)')
xlabel('Time (s)')
ylabel('Force (N)')

subplot(3,3,3)
plot(F42x_store)
title('Force exerted on prismatic by scoop (x-direction)')
xlabel('Time (s)')
ylabel('Force (N)')

subplot(3,3,4)
plot(F42y_store)
title('Force exerted on prismatic by scoop (y-direction)')
xlabel('Time (s)')
ylabel('Force (N)')

subplot(3,3,5)
plot(F24x_store)
title('Force exerted on scoop by prismatic (x-direction)')
xlabel('Time (s)')
ylabel('Force (N)')

subplot(3,3,6)
plot(F24y_store)
title('Force exerted on scoop by prismatic (y-direction)')
xlabel('Time (s)')
ylabel('Force (N)')

subplot(3,3,7)
plot(F54_store)
title('Force exerted on Scoop by Cable')
xlabel('Time (s)')
ylabel('Force (N)')

subplot(3,3,8)
plot(F45_store)
title('Force in Cable')
xlabel('Time (s)')
ylabel('Force (N)')

subplot(3,3,9)
plot(F15_store)
title('Force in Cable')
xlabel('Time (s)')
ylabel('Force (N)')

figure(3)
plot(T2_store)
title('Torque vs Time (should equal zero)')
xlabel('Time (s)')
ylabel('Torque (N*m)')
why

Result Graphs

flickr:5261931928
flickr:5261932030
flickr:5261932110
flickr:5261932202
flickr:5261932274
flickr:5261932500