Matlab Codes
Natural Finger Movement Matalab Code:
clear all;
clc;
PP = 2.4; IP = 1.5; DP = 1;
a = PP; b = IP; c = DP;
alpha1 = acos((b^2 + c^2 - a^2)/(2*b*c));
alpha3 = asin(c*sin(alpha1)/a);
beta = 0*pi/180;
theta2max = pi - alpha3;
theta3max = pi - alpha1;
theta1max = 2*pi - (theta2max + theta3max) - beta;
lambda0 = theta3max/theta2max;
lambda1 = theta2max/theta1max;
if i == 1
for i = 1: 86
theta1(i) = (i-1)*pi/180;
theta2(i) = theta1(i)*lambda1;
theta3(i) = theta2(i)*lambda1;
phi1(i) = theta1(i) + theta2(i);
phi2(i) = theta1(i) + theta2(i) + theta3(i);
phi3(i) = theta1(i) + theta2(i) + theta3(i) - beta;
origin = [0,0]';
P_A = [a*cos(-theta1(i)) a*sin(-theta1(i))]';
P_B = P_A + [b*cos(-phi1(i)) c*sin(-phi1(i))]';
P_C = P_B + [c*cos(-phi2(i)) c*sin(-phi2(i))]';
figure (1)
filename = 'naturalfinger.gif';
pause(0.01)
plot(origin(1), origin(2), 'ro','linewidth', 2)
hold on
plot(P_A(1), P_A(2), 'ro','linewidth', 2)
plot(P_B(1), P_B(2), 'ro','linewidth', 2)
plot(P_C(1), P_C(2), 'ro','linewidth', 2)
line([origin(1) P_A(1)], [origin(2) P_A(2)], 'linewidth', 2, 'color', [0 0 1])
line([P_A(1) P_B(1)], [P_A(2) P_B(2)], 'linewidth', 2, 'color', [0 0 1])
line([P_B(1) P_C(1)], [P_B(2) P_C(2)], 'linewidth', 2, 'color', [0 0 1])
hold off
axis([-5 5 -5 5]);
title('Natural Finger Movement')
drawnow
frame = getframe(1);
im = frame2im(frame);
[imind,cm] = rgb2ind(im,256);
if i == 1;
imwrite(imind,cm,filename,'gif','loopcount',inf,'DelayTime',0.01);
else
imwrite(imind,cm,filename,'gif','WriteMode','append','DelayTime',0.01);
end
end
Prototype Finger Movement Matlab Code:
clear all;
clc;
a = 2.40; b = 1.50; c = 1.00;
RL1_2 = 1.39; theta1_2 = 23.81*pi/180;
RL2_2 = 0.41; theta2_2 = 63.44*pi/180;
RL2_3 = 0.40; theta2_3 = 36.42*pi/180;
RL3_2 = 0.41; theta3_2 = 7.50*pi/180; theta3_3 = 74.05*pi/180;
L1 = 0.475; theta1 = 56.565*pi/180;
%L2 = 0.9650; theta2 = 13*pi/180;
L3 = 0.290; theta3 = 62.59*pi/180;
alpha1 = acos((b^2 + c^2 - a^2)/(2*b*c));
alpha3 = asin(c*sin(alpha1)/a);
beta = 0*pi/180;
theta2max = pi - alpha3;
theta3max = pi - alpha1;
theta1max = 2*pi - (theta2max + theta3max) - beta;
lambda0 = theta3max/theta2max;
lambda1 = theta2max/theta1max;
filename = 'prototype.gif';
for i = 1:86
th1(i) = (i-1)*pi/180;
th2(i) = th1(i)*lambda1;
th3(i) = th2(i)*lambda1;
phi1(i) = th1(i) + th2(i);
phi2(i) = th1(i) + th2(i) + th3(i);
origin = [0,0]';
P_A_1 = [a*cos(-th1(i)) a*sin(-th1(i))]';
P_A_2 = [RL1_2*cos(-theta1_2-th1(i)) RL1_2*sin(-theta1_2-th1(i))]';
P_B_1 = P_A_1 + [b*cos(-phi1(i)) b*sin(-phi1(i))]';
P_B_2 = P_A_1 + [RL2_2*cos(-theta2_2-phi1(i)) RL2_2*sin(-theta2_2-phi1(i))]';
P_B_3 = P_B_2 + [RL2_3*cos(theta2_3-phi1(i)) RL2_3*sin(theta2_3-phi1(i))]';
P_C_1 = P_B_1 + [c*cos(-theta3_2-phi2(i)) c*sin(-theta3_2-phi2(i))]';
P_C_2 = P_B_1 + [RL3_2*cos(-theta3_3-phi2(i)) RL3_2*sin(-theta3_3-phi2(i))]';
P_A = P_A_2 + [L1*cos(theta1-th1(i)) L1*cos(theta1-th1(i))]';
%P_B = P_A + [L2*cos(-theta2-th1(i)) L2*cos(-theta2-th1(i))]';
P_C = P_B_3 + [L3*cos(theta3-phi1(i)) L3*sin(theta3-phi1(i))]';
pause(0.05)
plot(origin(1), origin(2), 'ro','linewidth', 2)
hold on
plot(P_A_1(1), P_A_1(2), 'ro', 'linewidth', 2)
plot(P_A_2(1), P_A_2(2), 'bo', 'linewidth', 2)
plot(P_B_1(1), P_B_1(2), 'ro', 'linewidth', 2)
plot(P_B_2(1), P_B_2(2), 'bo', 'linewidth', 2)
plot(P_B_3(1), P_B_3(2), 'bo', 'linewidth', 2)
plot(P_C_1(1), P_C_1(2), 'ro', 'linewidth', 2)
plot(P_C_2(1), P_C_2(2), 'bo', 'linewidth', 2)
plot(P_A(1), P_A(2), 'bo', 'linewidth', 2)
%plot(P_B(1), P_B(2), 'bo', 'linewidth', 2)
plot(P_C(1), P_C(2), 'bo', 'linewidth', 2)
line([origin(1) P_A_1(1)], [origin(2) P_A_1(2)], 'linewidth', 2, 'color', [0 0 1])
line([origin(1) P_A_2(1)], [origin(2) P_A_2(2)], 'linewidth', 2, 'color', [0 0 1])
line([P_A_2(1) P_A_1(1)], [P_A_2(2) P_A_1(2)], 'linewidth', 2, 'color', [0 0 1])
line([P_A_1(1) P_B_1(1)], [P_A_1(2) P_B_1(2)], 'linewidth', 2, 'color', [0 1 0])
line([P_A_1(1) P_B_2(1)], [P_A_1(2) P_B_2(2)], 'linewidth', 2, 'color', [0 1 0])
line([P_B_1(1) P_B_2(1)], [P_B_1(2) P_B_2(2)], 'linewidth', 2, 'color', [0 1 0])
line([P_B_1(1) P_C_1(1)], [P_B_1(2) P_C_1(2)], 'linewidth', 2, 'color', [1 0 1])
line([P_B_1(1) P_C_2(1)], [P_B_1(2) P_C_2(2)], 'linewidth', 2, 'color', [1 0 1])
line([P_C_1(1) P_C_2(1)], [P_C_1(2) P_C_2(2)], 'linewidth', 2, 'color', [1 0 1])
line([P_A_2(1) P_A(1)], [P_A_2(2) P_A(2)], 'linewidth', 2, 'color', [1 0 0])
line([P_A(1) P_B_2(1)], [P_A(2) P_B_2(2)], 'linewidth', 2, 'color', [1 0 0]) %Need this length
line([P_B_3(1) P_C(1)], [P_B_3(2) P_C(2)], 'linewidth', 2, 'color', [1 0 0])
line([P_C(1) P_C_2(1)], [P_C(2) P_C_2(2)], 'linewidth', 2, 'color', [1 0 0])
axis([-3 5 -5 1]);
hold off;
title('Prototype')
drawnow
frame = getframe(1);
im = frame2im(frame);
[imind,cm] = rgb2ind(im,256);
if i == 1;
imwrite(imind,cm,filename,'gif','loopcount',inf,'DelayTime',0.01);
else
imwrite(imind,cm,filename,'gif','WriteMode','append','DelayTime',0.01);
end
end
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.