2007年4月23日 星期一

機動學HW7

part1



當t=[ 1 2 3 4 5]端桿對應的方位,t=1到5要有五張圖片,因此直接做成動畫,直接呈現第一秒到第五秒的位置圖及移動。

dyad_amax 為畫出動畫的function


function dyad_amax(rho,theta,td,tdd,time)

%本函式呼叫dyad_draw
%在運用time為一矩陣,帶入角速度,角加速度公式
%ex: dyad_amax([7 12 2],[0 0 0 ],[0.2 0.5 0.3],[0 0.1 0.2],[1 2 3 4 5])
th=theta;
td1=td;
for i=1:length(time)%1到5秒的迴圈,輸入角速度和角加速度
for j=1:length(rho)
td1(j)=td(j)+tdd(j)*(i);%角速度公式
th(j)=theta(j)+td(j)*(i)+0.5*tdd(j)^2; %角度位移公式
end
[vel acc]=dyad_draw(rho,th,td1,tdd);%呼叫dyad_draw
for m=1:length(rho)
v(m,i)=vel(m); %把vel結果輸入到v的二維矩陣
a(m,i)=acc(m);%把acc結果輸入到a的二維矩陣
end
axis equal;
axis([-1 25 -1 20]);
pause(0.5);
end

part2

for j=1:length(rho)畫出時間與角速度與角加速度的關係
figure
hold on;
title('桿速度和加速度')
plot(v(j,:),'b--') %plot讀取二維矩陣畫出時間和速度的關析圖
plot(a(j,:),'ro-')
end


繪出三桿之結點之速度,加速度與時間t之關係


第一桿

第二桿


第三桿

2007年4月13日 星期五

機動學HW6

我有上本週(十二日)的課。
PART1



總共有12個連桿,其中滑塊也視為一連桿,滑動結和滑塊結都視為復式結所以連結度為二(f=2),但是滑槽應該也是復式結,由於結點有4號和11號連桿,不是一個單純的滑槽結,算是一個稜柱結,因此連節度為一(f=1)。而其它結點都是旋轉結,自由度也都為一(f=1),從圖中表面上只看到九個結點,但因多個連桿連結一個結點,所以不只九個結點,M、N、P、Q都為多個連桿的結點,因此帶入公式                   


(結點數)=(連桿數-1)

M處為(3-1)=2;即連桿 3、6、8
N處為(3-1)=2;即連桿 7、8、12
P處為(3-1)=2;即連桿 2、3、4
Q處為(3-1)=2;即連桿 8、9、10
U處為(3-1)=2;即連桿 1、2、13
R處為(3-1)=2;即聯桿 4、9、13 滑結視為稜柱結連節度f=1
S、T處的滑動結和滑塊結都為復式結連節度f=2故種結點數為:

J=3(正常結)+2(M處)+2(N處)+2(P處)+2(Q處)+2(U處)+2(滑槽)=15

古魯伯公式是計算一個機構的可動度M,可動度要大於一或等於一,機構才可以運動,但是如果小於一的,則此機構是一個不可運動之結構,因此結構之間可能產生內力,互相做用。而計算方法:一個機構的可動度為總自由度減去拘束度,此方法為古魯伯(Grueber)公式

M = 3*(N-1)-(3J-Σf) = 3*(N-J-1)+Σf
N = 連桿之總數
J = 運動結之總數
i = 每一種連桿的連結度
因此我們就可以由古魯伯公式算出:
N=13 J=15 f=13*1+2*2=17
M=3*(13-15-1)+(17)=5

因此可動度為五。
jointype矩陣每個元素所代表:1 R型結 2 滑動結 3 複式結 4 球結 5 圓筒結 6 平面結 7 滾筒結 8 凸輪 9 螺旋結 10 球滑結 11 點觸結 所以有11個R型結,滑槽為特殊型式,因此是為滑動結,滑塊為復式結,連桿數為12所以(12,[11 2 2])算出M=5因此可動度為五。


function [df]=gruebler(nlink,jointype)%nlink為機構連桿數jointype為一矩陣
code=[1 1 2 3 2 3 1 2 1 3 5];%各種結的連結度(f)
n=length(jointype);%jointype的第幾個元素
dim=3;if n>3, dim=6;end; %因為n>3之後的為三度空間結點所以dim=6
ff=0;njoint=0; %設定出始值
for i=1:n,
njoint=njoint+jointype(i);%加總所有連結點
ff=ff+jointype(i)*code(i);%加總自由度
end;
df=dim*(nlink-njoint-1)+ff;%古魯伯公式


把數值帶入function
df=gruebler(12,[11 2 2])
上圖中,此機構的滑塊和滑槽都會增加此機構的可動度,滑塊可以做移動和轉動,如果滑塊固定,其結點與連桿能做轉動。滑槽也是如此滑槽的結點可以做移動和轉動,如果滑槽固定,其結點上的連桿能做轉動和移動。所以這兩種結點都會增加可動度。

PART2



從上圖中只有兩種形式的結點,一種為球型對(Spherical pair)或S-型對,球型隊必須維持兩接觸的球面之球心為共點,因此兩連桿連接時,將會被拘束在X、Y、Z軸方向上旋轉,無法作平移,雖然三度空間有六個自由度,但因為受限制減去三個平移的自由度,所以自由度為3,故DOF=3,拘束度也為三。另一種為圓柱對(Cylinddrical pair)或C型對,是維持兩鋼體之軸同線,兩鋼體間僅有一個軸向平移及一個垂直於軸之旋轉動運動,因此減去四個自由度,所以自由度為二DOF=2,拘速度為四。旋轉對只能在一個軸的方向上作旋轉,因此只有一個自由度,其它方向上都受限制,拘束度為五。

由於為三度空間古魯伯(Grueber)公式,所以要把本來二度空間的公式3個自由度改為6個自由度,其規則如下:
M = 6*(N-1)-(3J-Σf) = 6*(N-J-1)+Σf
因此旋轉結自由度為1,筒結自由度為2,球結之自由度為3。
上圖中,此機構有六個連桿,包含兩個旋轉結,一個圓筒結,三個球結。
N=6 J=6 f=2*1(旋轉結)+2*1(圓筒結)+3*3(球結)=13
M=6(6-6-1)+2*1+1*2+3*3=7
由matlab輸入df=gruebler(6,[2 0 0 3 1])
經過function運算之後df=7,可動度為M=7。
由於惰性自由度,實際可動度為M=7-3(軸向自轉)=4

結果經過Matlab算出的可動度與之前算出的的可動度一樣,但實際上可動度並不為七,因為被惰性自由度抵銷了,連桿3、5、6號桿都會發生軸向自轉。惰性自由度主要是由結點與結點之間連桿發生自轉所引起的,如六號連桿,因為是圓筒結所以可以自轉應該增加一自由度,但是另一結點接的卻是球結,造成連桿產生軸向自轉,因此不能算是一個自由度,但若在可自轉的該桿上在安插一桿,則將會增加自由度。


PART3

葛拉索機構在四連桿中,當最短桿與最長桿之和小於其他兩桿之和,則至少有一桿可為旋轉桿。此稱為葛拉索第一型。非葛拉所機構是指四連桿機構中,最長和最短兩桿的長度和大於其它兩桿長度之和,則所有三個活動搖趕必為搖桿或三搖桿機構,或稱為葛拉索第二型。

第一組:桿1-桿4分別為7,4,6,5cm
最長+最短=7+4=11
中桿長和=6+5=11
此為葛拉所變點機構或稱第三型,為葛拉索特殊狀況,最長桿合最短桿之和等於其他兩桿之和,連桿有兩種形式可繞一圈旋轉。

第二組:桿1-桿4分別為8,3.6,5.1,4.1cm
最長+最短=8+3.6=11.6
中桿長和=5.1+4.1=9.2
此為非葛拉所機構或稱葛拉索第二型,為三搖桿運動。

第三組:桿1-桿4分別為5.4,3.1,6.6,4.7cm
最長+最短=6.6+3.1=9.7
中桿長和=5.4+4.7=10.1
此為葛拉所機構
若鄰近最短桿之桿為基桿為曲柄搖桿型,因此6.6cm、5.5cm為基桿時,為此型。
若最短桿為基桿時,則基桿兩端之連桿為曲柄型,3.1cm為基桿,為此型。
若與最短桿相對應之連桿為基桿時,為雙搖桿型,4.7cm為基桿,為此型。


第一組
ans=grashof(1:4,[4 5 6 7])
ans = Neutral Linkage

第二組
ans=grashof(1:4,[3.6 4.1 5.1 8])
ans = Non-Grashof Linkage

第三組
ans=grashof(1,[3.1 4.7 5.4 6.6])
ans = Double-Crank Linkage

ans=grashof(2,[3.1 4.7 5.4 6.6])
ans = Crank-Rocker Linkage

ans=grashof(3,[3.1 4.7 5.4 6.6])
ans = Double-Rocker Linkage

ans=grashof(4,[3.1 4.7 5.4 6.6])
ans = Crank-Rocker Linkage

第一組
最長桿和最短桿之和要小於11,因此最長桿可減短或伸長,還是維持最長,最短桿也是可以伸長或減短,但還是要維持最短。

第二組
最長桿和最短桿之和要小於9.2,因此最長桿可減短或伸長,還是維持最長,最短桿也是可以伸長或減短,但還是要維持最短。

2007年4月7日 星期六

機動學hw5

part1








function body(L,theta,dd) %L=[L1 L2 L3] theta=[theta1 theta2 theta3]為一矩陣,dd為手臂寬度
L1xt=L(1)*cosd(-theta(1)); %以[0 0]為原點算出上臂的終點
L1yt=L(1)*sind(-theta(1));
L2xt=L1xt+L(2)*cosd(-theta(1)-180 + theta(2));%以上臂的終點算出下臂的終點
L2yt=L1yt+L(2)*sind(-theta(1)-180 + theta(2));
L3xt=L2xt+L(3)*cosd(-theta(1)-360 + theta(2)+theta(3));%以下臂的終點算出手掌的終點
L3yt=L2yt+L(3)*sind(-theta(1)-360 + theta(2)+theta(3));
X=[0 L1xt L2xt L3xt];%把所有的x點放入X矩陣
Y=[0 L1yt L2yt L3yt];%把所有的y點放入Y矩陣
clf;
for i=1:length(X)-1 %從i=1到第4個X的element減一
A=[X(i) Y(i)]; %把X和Y第i個element帶入
B=[X(i+1),Y(i+1)];
g=0.5+i/2; %上臂長為g=1 ,下臂g=0.5+2/2 手掌g=0.5+3/2
if nargin==2,dd=1;end; %如果只放入兩個elemet,則dd=1
d=abs(dd);%算出距離
AB=(B(1)+j*B(2))-(A(1)+j*A(2));%轉換成複數座標
D=abs(AB);th=angle(AB);%算出距離,算出複數座標角度
t=linspace(pi/2,2.5*pi,20);%從pi/2到2.5*pi給予20個點
Cout=max(d/(2*g),0.2)*exp(j*t');Cin=Cout/2;%以複數形式畫圓cout畫大圓cin畫小圓
if dd>0,
P=[0;Cin;Cout(1:10);D+Cout(11:20);D+Cin;D+Cout(20);Cout(1)];%畫出手臂的外為輪廓
else
P=[Cin;0;D;D+Cin];%畫出手臂內的小圓(關節)
end
xx=real(P);yy=imag(P);%分別取實數部,何虛數部
x=xx*cos(th)-yy*sin(th)+A(1);%角度轉換
y=xx*sin(th)+yy*cos(th)+A(2);
line(x,y)
axis equal
axis([-50 50 -10 50 ])%固定座標軸
end;


圖案製作



L1=35; %上臂長
L2=30; %下臂長
L3=10; %手掌長
theta1=-90; %角度
theta2=-45;
theta3=-30;
try1([L1 L2 L3],[theta1, theta2 ,theta3],10); %帶入function



動畫製作


主程式呼叫body function

for d=0:1:10 %d=0到10
theta1=-90+1.5*d;
theta2=-45+d;
theta3=-30+2*d;
body([35 30 10],[theta1 theta2 theta3],4);%呼叫body function
pause(0.5);%每0.5秒暫停依次
axis equal;
end;



part2
2-1
除了拇指以外,其它四指從手掌與指頭連接的地方算起有三個關節,因此有三個地方可以旋轉,但由於人體關節的受限,關節當指節與指節身直時,假設角度為一百八十度,彎曲時最小角度可以達 九十度,所以只能在九十度到一百八十度之間移動。但事手掌與指頭連接的第一個關節比較特殊, 你會發現第一節關節的手指頭可以做三百六十度的旋轉,當然關節上還是有所限制不可能無限度做大幅旋轉。由於要討論手指間關節的自由度,因此我們把手掌視為不可以動的連桿,但連接指頭的第一關節到第三關節都可以移動,根據古魯伯公式M=3(N-J-1)+total(f)=>M=3(4-3-1)+3=3,有四個連趕(包括手掌),有三個運動結,但我假設第一關節到第三關節都為旋轉(f=1),如果第一關節當球對的話(f=3),但假設都只能在平面運動的話都假設為旋對所以M=3有三個自由度,可以由三個指節做連桿運動。



2-2



把body function稍微改變一下,因為body function上臂、下臂、手掌有三個關節根手指一樣,因此只要稍微把主程式改過,就可以表現出手指最大的移動範圍 。


finger function 的主程式



f1j=linspace(-90,0, 20 ); %-90 到0設20個點
f1j2=linspace(180,90,20);
f1j3=linspace(180,90,20);
x=[1 -1 -1 1 1];
y=[0 0 -9 -9 0];
for t=1:1:4
if t==1 %當t==1執行食指的運動
for d=1:1:20
finger([2.5 2 3],[f1j(d) f1j2(d) f1j3(d)]);
patch(x,y,'r');
pause(0.1);
end;

elseif t==2%當t==2執行中指的運動
for d=1:1:20
finger([2.5 2.5 3],[f1j(d) f1j2(d) f1j3(d)]);
patch(x,y,'r');
pause(0.1);
end;

elseif t==3%當t==3執行無名指的運動
for d=1:1:20
finger([2 2 2.5],[f1j(d) f1j2(d) f1j3(d)]);
patch(x,y,'r');
pause(0.1);
end;

elseif t==4%當t==4執行小指的運動
for d=1:1:20
finger([2 1.5 2.5],[f1j(d) f1j2(d) f1j3(d)]);
patch(x,y,'r');
pause(0.1);
end;
end;
end;


2-3


根據手指的速度與加速度,假設手指速度固定而且手指的加速度是等加速度,因此可以較容易求出指頭的終端速度,由於每個人的手指長度不同,因此手指速度會不一樣,所以無法得知每個人投球時的指頭之間的速度,所以假設平均正常人能投時速一百公里的球,而且我們每個關節的相對速度和加速度會不一樣,因此我們考慮平均的速度和加速度,而且只考慮球真正被加速的時間,多餘的動作所花的時間應該排除,假設加速的時間為0.7秒,且投出時速100公里的球速。


速度   角速度   角加速度
食指  3.968kcm/s 529rad/s 755.7rad/s2
中指  3.968kcm/s 496rad/s 708.6rad/s2
無名指 3.968kcm/s 610rad/s 871.4rad/s2
小指  3.968kcm/s 661rad/s 994.2rad/s2