% This script studies the kinematics of a dinosaur automata
clc;clear;
% links
a = 0.5; % crank
[b,c,e,f,g,h,i,j,k,l,m,n] = deal(1); % neck links
d = 1.332; % ground link
%% Angles (deg)
offset = -227; % change based on ground
thetaA_initial = 90;
thetaA = thetaA_initial+offset:1:thetaA_initial+offset+360;
[thetaD,thetaA,thetaB,thetaC] = fourbarpos(a,b,c,d,offset,thetaA,1);
[thetaG,thetaK,thetaE,thetaI,thetaM] = deal(thetaC);
[thetaF,thetaJ,thetaN,thetaL,thetaH] = deal(thetaB);
thetaA = thetaA-offset;
thetaB = thetaB-offset;
thetaC = thetaC-offset;
thetaD = thetaD-offset;
thetaE = thetaE-offset;
thetaF = thetaF-offset;
thetaG = thetaG-offset;
thetaH = thetaH-offset;
thetaI = thetaI-offset;
thetaJ = thetaJ-offset;
thetaK = thetaK-offset;
thetaL = thetaL-offset;
thetaM = thetaM-offset;
thetaN = thetaN-offset;
%% Position
pointP2x = a.*cosd(thetaA)+b.*cosd(thetaB)+e.*cosd(thetaE)+f.*cosd(thetaF)+i.*cosd(thetaI)+j.*cosd(thetaJ)+m.*cosd(thetaM);
pointP2y = a.*sind(thetaA)+b.*sind(thetaB)+e.*sind(thetaE)+f.*sind(thetaF)+i.*sind(thetaI)+j.*sind(thetaJ)+m.*sind(thetaM);
pointP1x = a.*cosd(thetaA)+b.*cosd(thetaB)+e.*cosd(thetaE)+f.*cosd(thetaF)+i.*cosd(thetaI)+j.*cosd(thetaJ)+n.*cosd(thetaN);
pointP1y = a.*sind(thetaA)+b.*sind(thetaB)+e.*sind(thetaE)+f.*sind(thetaF)+i.*sind(thetaI)+j.*sind(thetaJ)+n.*sind(thetaN);
pointHx = a.*cosd(thetaA)+b.*cosd(thetaB)+e.*cosd(thetaE)+f.*cosd(thetaF)+i.*cosd(thetaI)+j.*cosd(thetaJ);
pointHy = a.*sind(thetaA)+b.*sind(thetaB)+e.*sind(thetaE)+f.*sind(thetaF)+i.*sind(thetaI)+j.*sind(thetaJ);
pointP1x = real(pointP1x);
pointP1y = real(pointP1y);
pointP2x = real(pointP2x);
pointP2y = real(pointP2y);
pointHx = real(pointHx);
pointHy = real(pointHy);
% Position Plots
figure(1)
hold on
plot(pointP1x, pointP1y);
plot(pointP2x, pointP2y);
plot(pointHx, pointHy);
axis('equal');
title('Movement of Dino Head');
xlabel('X Position of Dino Head');
ylabel('Y Position of Dino Head');
legend('P1', 'P2', 'Point H');
hold off
%% Angular Velocity
omegaA = 10; %rad/sec
omegaP1 = a/m.*sind(thetaC-thetaA)./sind(thetaB-thetaC);
omegaP2 = a/n.*sind(thetaA-thetaB)./sind(thetaC-thetaB);
figure(2)
hold on
plot(thetaA, omegaP1);
plot(thetaA, omegaP2);
title('Angular Velocity of Dino Head');
xlabel('Angle of Crank (deg)');
ylabel('Angular Velocity of Dino Head (rad/sec)');
legend('P1', 'P2');
hold off
%% Force Relationships
Fcrank = 1; % assume force applied to crank = 1 lb
Fp1 = omegaA.*a./omegaP1./m.*Fcrank;
Fp2 = omegaA.*a./omegaP2./n.*Fcrank;
TotalBiteForce = Fp2-Fp1;
figure(3)
subplot(3,1,1)
hold on
plot(thetaA, Fp2);
set(gca, 'XLim', [90 450],'YLim',[-50 50]);
title('Force of Top Jaw vs Crank Angle');
ylabel('Force (lb)');
legend('Top Jaw');
subplot(3,1,2)
plot(thetaA, Fp1);
set(gca, 'XLim', [90 450],'YLim',[-50 50]);
title('Force of Bottom Jaw vs Crank Angle');
ylabel('Force (lb)');
legend('Bottom Jaw');
subplot(3,1,3)
plot(thetaA,TotalBiteForce);
set(gca, 'XLim', [90 450],'YLim',[-50 50]);
title('Force of Dino Bite vs Crank Angle');
xlabel('Angle of Crank (deg)');
ylabel('Force (lb)');
legend('Total Bite Force');
hold off
mechAdvTopJaw = abs(Fp2/Fcrank);
mechAdvBotJaw = abs(Fp1/Fcrank);
figure(5)
hold on
plot(thetaA, mechAdvTopJaw);
plot(thetaA, mechAdvBotJaw);
set(gca, 'XLim', [90 450],'YLim',[0 50]);
title('Mechanical Advantage of Dino Bite vs Crank Angle');
xlabel('Angle of Crank (deg)');
ylabel('Mech Adv');
legend('Top Jaw', 'Bottom Jaw');
hold off
%% Animation of Dino Head Position
for i = i:length(thetaA)
figure(4)
P1_circle = viscircles([pointP1x(i) pointP1y(i)], 0.05);
P2_circle = viscircles([pointP2x(i) pointP2y(i)], 0.05);
H_circle = viscircles([pointHx(i) pointHy(i)], 0.05);
P1_bar = line([pointP1x(i) pointHx(i)], [pointP1y(i) pointHy(i)]);
P2_bar = line([pointP2x(i) pointHx(i)], [pointP2y(i) pointHy(i)]);
axis('equal');
set(gca, 'XLim', [-7 0],'YLim',[0 7]);
title('Dino Head Movement');
labP1 = text(pointP1x(i), pointP1y(i)+0.2,'P1');
labP2 = text(pointP2x(i), pointP2y(i)+0.2,'P2');
labH = text(pointHx(i), pointHy(i)+0.2,'H');
F(i)=getframe(gcf);
pause(0.01);
if i<length(thetaA)
delete(P1_circle);
delete(P2_circle);
delete(H_circle);
delete(P1_bar);
delete(P2_bar);
delete(labP1);
delete(labP2);
delete(labH);
end
end
obj = VideoWriter('animation.mp4', 'MPEG-4');
open(obj);
writeVideo(obj,F);
close(obj)
Welcome to the University Wiki Service! Please use your IID (yourEID@eid.utexas.edu) when prompted for your email address during login or click here to enter your EID. If you are experiencing any issues loading content on pages, please try these steps to clear your browser cache.