2007年4月26日 星期四

機動學 作業七

作業七 b94611042 王志豪
我有上本週4/19的課

7.題目
設有三桿相連結成端桿(dyad)之型式。請利用網路講義中之函數dyad及dyad_draw作分析。

function dyad_draw(rho,theta,td,tdd)

其中:
* 各桿之對應長度rho=[a, a+5, a-5]cm,a=(你的學號末一碼)+10;
* 各桿之對應起始角度theta=[0, 0, 0]度;
* 各桿之對應角速度為td=[0.2, 0.5, 0 .3]rad/s;
* 各桿之對應角加速度為tdd=[0, 0.1, 0.2]rad/s^2;
問:
1. 當t=[1 2 3 4 5]秒時,此端桿之對應方位如何?
2. 繪出三桿之結點之速度,加速度與時間t之關係。
3. 能作出此時間區段之動畫嗎?

Ans:
(1)
首先,按題目所示,引用網路講義裡的兩個函式如下:

*******************************************************************
function [vec, dyadata] = dyad(rho,theta,td,tdd)
%
% function [vec, th, dyadata] = dyad(rho,theta,td,tdd)
% Analyzes a dyad linkage composing a crank and a dyad.
% Inputs: rho:length of links
% theta:incling angles, deg.
% td:angular velocity, rad/s
% tdd:angular acceleration, rad/s^2
% Outputs: vec:absoute length of links
% th:angles of links, velocities & acc, deg
% dyadata:original data, in complex forms
% Example:[vec,th,dyadata] = dyad([5 10],[30 50],[2 4])
theta=theta(:); rho=rho(:);
n=length(rho);
if nargin<4, tdd="zeros(size(rho));" nargin="=" td="ones(size(rho));" td="ones(size(rho))*td;end" tdd="ones(size(rho))*tdd;end" td="td(:);tdd=" d2g="pi/180;" tt="exp(i*theta*d2g);" pp="rho.*tt;" vv="i*td.*pp;" aa="-pp.*td.^2+i*pp.*tdd;" dyadata="[pp" vec="[abs(sum(dyadata));angle(sum(dyadata))/d2g];" x="[0;cumsum(real(data(:,1)))];y=" i="1:length(x)-1" k="1:length(rho)" x0="x(k+1);y0=" vx="x0+real(data(k,2));vy=" ax="x0+real(data(k,3));ay=" sdata="sum(data);" ss="[real(sdata(1))" vv="[real(sdata(2))" aa="[real(sdata(3))" nargin="=" dd="1;end;" d="abs(dd);" ab="(B(1)+j*B(2))-(A(1)+j*A(2));" d="abs(AB);th=" t="linspace(pi/2,2.5*pi,20);" cout="max(d/2,0.2)*exp(j*t');Cin=">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
************************************************************************
(註:個人決定再引用網路講義中另一個函數linkshape,這可使圖形美觀.)

dyad_draw([12,17,7],[0,0,0],[0.2,0.5,0.3],[0,0.1,0.2]);

for n=0:1:5;
dyad_draw ([12,17,7],[0.2*n,0.5*n+(1/2)*0.1*n^2,0.2*n+(1/2)*0.2*n^2],[0.2,0.5+n*0.1,0.3+0.2*n],[0,0.1,0.2]);
pause(1);
end;
%在此,我使用了一些數學運算代入dyad_draw這個function裡面.
%由於角速度以及角加速度隨時間而變,所以設一n變數進去,使其模仿時間.
%利用for迴圈,使他重複執行五遍,便可得下列圖片之結果.

當t=[1 2 3 4 5]秒時,此端桿之對應方位:














第1秒















第2秒















第3秒















第4秒















第5秒



(2)
第一桿之速度
第一桿之加速度




第二桿之速度
第二桿之加速度




第三桿之速度
第三桿之加速度



%以上繪圖來自於dyad_draw,利用其角速度以及角加速度的值去跑出來的.
%簡單來說,就是利用第一題的程式,把其得到的值代入另一個繪圖小程式.
%這個程式是用plot畫出來的,順著桿長最大極限而畫出的.
%類似這個:
for a=1:length(rho)
figure
plot(aa(j,:))
figure
plot(bb(j,:))
end
%當初禮拜六畫這個圖的時候,代數好像不是用這個(忘了),不過概念上大概長這個模樣就是了.

(3)
axis equal;
dyad_draw([12,17,7],[0,0,0],[0.2,0.5,0.3],[0,0.1,0.2]);
pause(2)
clf
for n=1:5
axis equal;
dyad_draw([12,17,7],[0.2*t,0.5*t+0.5*0.1*t^2,0.3*t+0.5*0.2*t^2],[0.2,0.5+t*0.1,0.3+t*0.2],[0,0.1,0.2]);
pause(1)
clf
end;
%與第一題的作法雷同,加了些暫停,使其運作更流暢.


hw7動畫

2007年4月25日 星期三

機動學 作業六

作業六 b94611042 王志豪
我有上本週(十二日)的課。

6.1 某一平面組合機構如下圖,其中包括兩滑塊元件一與地固定,另一分於固定於兩桿。青色者則為滑槽。試

* 標出桿號及結數,並計算共計有多少連桿及結數。
* 利用古魯伯公式,計算此機構之可動度,請列出其計算方法。
* 請利用function[df]=gruebler()函數計算其對應之可動度。
* 討論此機構中滑塊及滑槽對可動度之影響。

Ans:
(1)














6.1之圖
經計算過後,共計有12桿及15個結(大致如圖所示,阿拉伯數字為桿號,英文J標記者為結)

(2)
以下為利用古倫柏公式簡單計算的過程:
 M=3*(N-J-1)+F
 N=12 J=15 
 F為12個旋轉結+1個滑動結+2個滑槽結
 F=12*1+1*1+2*2=17
 M=-12+17=5 
所以得出自由度為5

(3)
在此引用function[df]=gruebler()函數,載於課本之中.

***********************************************************
function [df]=gruebler(nlink,jointype)
%% [df]=gruebler(nlink,jointype)
% nlink:no. of total links
% jointype:row matrix for number of joints for each type,
% the order of elements is:
% 1 R-joint 2 slider 3 compound joint(sliding & rolling)
% 4 ball 5 cylinder 6 planar 7 cylinder rolling
% 8 cam 9 helix 10 ball & 11 point contact
% Example: df=gruebler(4,[4])
% Author:D.S.Fon Bime,NTU. Date:Jan. 30, 2007
code=[1 1 2 3 2 3 1 2 1 3 5];
n=length(jointype);
dim=3;
if n>3, dim=6;
end;
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;
*************************************************************
函式輸入為:
gruebler(12,[12 1 2])
故得自由度為5

(4)
在這個機構之中,由於滑塊與地面之間的滑動特性,使整個系統多出了一個滑動結.
滑槽則是因為它可以同時提供滑動與轉動的自由度,所以在計算自由度時,必須記為2




6.2 下面為一個立體機構,分別由兩個旋轉結,一個筒結及兩個球結組成。試說明:

* 各結之自由度如何?
* 利用古魯伯公式如何計算整個機構之自由度,可以動嗎?
* 請利用function[df]=gruebler()函數計算其對應之可動度,並相互印證。
* 這裡有所謂惰性自由度嗎?其對整個機構之影響如何?

Ans:
(1)












6.2之圖
標記模式與6.1相同,按照課本上所述,大致可以分成下列三種狀況:
J2,J3,J5 為球結,自由度為3
J1,J6 為旋轉結,自由度為1
J5 為圓柱結,自由度為2

(2)
m=6(N-J-1)+F=6(6-6-1)+13=7
其自由度為7

(3)
再次引用function[df]=gruebler()函數計算,函式輸入為:
gruebler(6,[2 0 0 3 1])
運算後可以得到自由度為7

(4)
是的,本題有惰性自由度.經過觀察,5號桿與6號桿可以自轉,所以本題的惰性自由度為2,總自由度為7-2=5.而基本上,惰性自由度對系統的影響為總自由度的減少,這是因為可自轉的軸決定系統外型時,其自轉角度不影響系統的外型.
據查網路資料以及配合課本分析,在一般的機構設計中,如果並非必要,應盡量少有這類的設計模式.




6.3
* 何謂葛拉索機構及非葛拉索機構?
* 假設有三組四連桿,設第一桿為固定桿,各桿長度分別如下:
1. 第一組:桿1-桿4分別為7,4,6,5cm
2. 第二組:桿1-桿4分別為8,3.6,5.1,4.1cm
3. 第三組:桿1-桿4分別為5.4,3.1,6.6,4.7cm

* 試問各組應屬何種機構?其迴轉情況會如何?
* 試用grashof()函數檢驗上述三組的連桿組合。
* 上述三組連桿若要成為葛拉索機構,則應如何改善?

Ans:
(1)
1.葛拉索型:
在一四連桿組中,最短桿與最長桿之和小於其他兩桿之和的時後,至少有一桿為可旋轉桿,稱之葛拉索第一類型,亦稱葛拉索型.

2.非葛拉索型:
最短桿與最長桿之和大於其他兩桿之和時,所有的活動連桿必為搖桿,無法產生完整迴轉運動.稱之葛拉索第二類型,或是非葛拉索型

(2)
首先得引用一個function,也是課本裡面就有附的.

***************************************************
function ans=grashof(ground_no,linkage)
% Function to test the Grashof linkage
% Inputs:
% ground_no:the ground link number in the order
% linkage: row matrix for lengths of the 4 links
% in original assigned order.
% Example:ans=grashof(4,[4 4.2 2.6 2])
% Revised: March 4, 2006
ground=linkage(ground_no);
link=sort(linkage);% sorting the links
ig=find(linkage==link(1));
if link(1)+link(4)>link(3)+link(2),
ans='Non-Grashof Linkage';
elseif link(1)+link(4)==link(3)+link(2)
ans='Neutral Linkage';
elseif link(1)==ground,
ans='Double-Crank Linkage';
else
switch ig
case 1
im=3;
case 2
im=4;
case 3
im=1;
case 4
im=2;
end
if ground==linkage(im)
ans='Double-Rocker Linkage';
else
ans='Crank-Rocker Linkage';
end
end
*****************************************************

在第一組中,由題目中可知,7+4=6+5,屬葛拉索第三類桿,即中立連桿組 
函式:
grashof(1,[7 4 6 5])
ans =
Neutral Linkage

第二組裡,8+3.6>5.1+4.1,為葛拉索第二類桿,乃非葛拉索連桿
函式:
grashof(1,[8 3.6 5.1 4.1])
ans =
Non-Grashof Linkage

第三組中,6.6+3.1<5.4+4.7,屬於葛拉索第一類桿,又至少有一桿為曲柄,其接地桿鄰近最短桿,所以是曲柄搖桿型
函式:
grashof(1,[5.4 3.1 6.6 4.7])
ans =
Crank-Rocker Linkage

(3)
仔細觀察上面三組的數據,可以發現只有第二組四連桿為非葛拉索型.
假若想把它改成葛拉索型機構,個人認為可以將最長桿火最短桿減短~~
或者讓第二和第三長的連桿長度增加......
這樣一來,便可以達成葛拉索機構最長與最短之和小於另外兩桿之和的要求囉.

2007年4月24日 星期二

Google的漢語拼音法~~

剛剛去看了一下Google的漢語拼音法......
嗯,感覺若記熟的話,應該打字速度會變快很多吧~~~
事實上,注音輸入好像本來在各種輸入法裡面,速度算慢的了.........]

漢語拚音對照表

只不過......我個人目前還是比較習慣注音耶......XD
感覺上用漢語拼音,一整個就是怪怪的.
如果實際用念它的拼音,其實跟我們實際發音有不少差別,非常詭異.
感覺漢語拼音比較像是讓外國人好上手的東西~~
而不是真的屬於本地人會有的口音......
如果是用國際化這種說法,我個人一向是不以為然啦......
嗯,不過若單論加快打字速度來說,這項輸入法似乎確實有它的優勢在~~~

不知道大陸那邊,在學發音的時候,是真的使用漢語發音來學習麼???
有點好奇......

2007年4月11日 星期三

機動學 作業五

作業五 b94611042 王志豪
5.1.1














手臂外型
繪出手臂外型的程式,如下:
L1=30;
L2=25;
L3=10;
arm1=[0 0;L1/6 -L1/5;L1*(5/6) -L1/6;L1 0;L1*(5/6) L1/6;L1/6 L1/5;0 0;L1 0]
arm2=[L1 0;L2/6+L1 -L2/6;L2*(5/6)+L1 -L2/6;L1+L2 0;L2*(5/6)+L1 L2/6;L2/6+L1 L2/6;L1 0;L1+L2 0]
palm=[L1+L2 0;L3/3+L1+L2 -L3/3;L1+L2+L3 0;L1+L2 0;]
axis equal
line(arm1(:,1),arm1(:,2));
line(arm2(:,1),arm2(:,2));
line(palm(:,1),palm(:,2));

5.1.2
程式函數function body,其程式約略介紹如下:

function body(L1,L2,L3,theta1,theta2,theta3)
%上手臂.下手臂及手掌的長度分別輸入於前三項,後三項則為所欲之角度

arm1=[0 0;L1/6 -L1/5;L1*(5/6) -L1/6;L1 0;L1*(5/6) L1/6;L1/6 L1/5;0 0;L1 0];
arm2=[L1 0;L2/6+L1 -L2/6;L2*(5/6)+L1 -L2/6;L1+L2 0;L2*(5/6)+L1 L2/6;L2/6+L1 L2/6;L1 0;L1+L2 0];
palm=[L1+L2 0;L3/3+L1+L2 -L3/3;L1+L2+L3 0;L1+L2 0;];
%建立起手臂及手掌的矩陣
axis equal
line(arm1(:,1),arm1(:,2));
line(arm2(:,1),arm2(:,2));
line(palm(:,1),palm(:,2));
%繪出手臂外型

clf
axis equal
AXIS([-70 70 -70 40]);
a1=arm1(:,1)*cosd(-theta1)-arm1(:,2)*sind(-theta1);
b1=arm1(:,1)*sind(-theta1)+arm1(:,2)*cosd(-theta1);
line(a1,b1);
theta2=180+theta1-theta2;
a2=arm2(:,1)*cosd(-theta2)-arm2(:,2)*sind(-theta2)+a1(4)-(L1)*cosd(-theta2);
b2=arm2(:,1)*sind(-theta2)+arm2(:,2)*cosd(-theta2)+b1(4)-(L1)*sind(-theta2);
line(a2,b2);
theta3=180+theta2-theta3;
a3=palm(:,1)*cosd(-theta3)-palm(:,2)*sind(-theta3)+a2(4)-(L1+L2)*cosd(-theta3);
b3=palm(:,1)*sind(-theta3)+palm(:,2)*cosd(-theta3)+b2(4)-(L1+L2)*sind(-theta3);
line(a3,b3);
%在這裡,主要就是開始讓手臂和手掌開始旋轉.
%這邊的概念,是先將每個手臂和手掌物件先作旋轉的動作,然後再作平移.
%由於程式執行速度極快,所以肉眼是分辨不出來的,故可直接得到轉動後的圖形.

5.1.3














圖片

5.1.4

動畫連結

動畫主程式大致如下:

%主程式
theta1=linspace(90,75,10)
theta2=linspace(-45,-35,10)
theta3=linspace(-30,-10,10)
for n=1:10
body(30,25,10,theta1(n),theta2(n),theta3(n))
pause(0.5)
end
%主程式這邊是利用先前所建立的function body,直接在外部做迴圈,使之變為動畫.


5.2.1
基本上,每個人每雙手的五根手指頭,除了大拇指之外,其餘者均為三連桿的結構.當中第二與第三指節應該是只能勉強彎曲至90度,而與手掌相連的第一指節,其所能彎曲的角度個人是秉持保留態度,畢竟過去看過不少人曾做出蠻令人驚訝的彎曲角度,應該也能算它是球型關節吧.
好,回歸機動學課本上所述,一個手掌的指頭在同一平面上作移動的情形,以自由度來講,把手掌視為接地的一端,指節分別為第二.第三.四桿,總桿數共計為四.而由於題目要我們探討於同一平面上的情形,故第一指節的球型關節便限於同一平面,所以會共有三個節,其自由度總和為三.
此時,便可使用課本所介紹的古魯伯公式,M=3(N-J-1)+sum(f)=3(4-3-1)+3=3 ,所以可以得到自由度為三的結論,並由三個指節來分別作為驅動桿.

5.2.2
%大抵而言,這個手指的function是用function body 所修改過來的,邏輯大致差不多,只有外型有變化而已.
function finger(L1,L2,L3,theta1,theta2,theta3)

arm1=[0 0;L1/6 -L1/5;L1*(5/6) -L1/6;L1 0;L1*(5/6) L1/6;L1/6 L1/5;0 0;L1 0];
arm2=[L1 0;L2/6+L1 -L2/6;L2*(5/6)+L1 -L2/6;L1+L2 0;L2*(5/6)+L1 L2/6;L2/6+L1 L2/6;L1 0;L1+L2 0];
palm=[L1+L2 0;L3/3+L1+L2 -L3/3;L1+L2+L3 0;L3/3+L1+L2 L3/3;L1+L2 0;];
%建立起三節手指的矩陣
axis equal
line(arm1(:,1),arm1(:,2));
line(arm2(:,1),arm2(:,2));
line(palm(:,1),palm(:,2));
%繪出手指外型
axis equal
a1=arm1(:,1)*cosd(-theta1)-arm1(:,2)*sind(-theta1);
b1=arm1(:,1)*sind(-theta1)+arm1(:,2)*cosd(-theta1);
line(a1,b1);
theta2=180+theta1-theta2;
a2=arm2(:,1)*cosd(-theta2)-arm2(:,2)*sind(-theta2)+a1(4)-(L1)*cosd(-theta2);
b2=arm2(:,1)*sind(-theta2)+arm2(:,2)*cosd(-theta2)+b1(4)-(L1)*sind(-theta2);
line(a2,b2);
theta3=180+theta2-theta3;
a3=palm(:,1)*cosd(-theta3)-palm(:,2)*sind(-theta3)+a2(4)-(L1+L2)*cosd(-theta3);
b3=palm(:,1)*sind(-theta3)+palm(:,2)*cosd(-theta3)+b2(4)-(L1+L2)*sind(-theta3);
line(a3,b3);

%小指
patch([0,-8,-8,0,0],[0 0 4 4 0],'b')
%繪製手掌
theta1=linspace(0,90,10)
theta2=linspace(180,90,10)
theta3=linspace(180,90,10)
for n=1:10
finger(4,2.5,2.5,theta1(n),theta2(n),theta3(n)) %小指
pause(0.5)
%基本上就是利用呼叫function,然後將原本動畫型式,改做每個圖案均會保留,用以得到指頭之極限位置
end














小指的圖

%無名指
patch([0,-8,-8,0,0],[0 0 4 4 0],'b')
%繪製手掌
theta1=linspace(0,90,10)
theta2=linspace(180,90,10)
theta3=linspace(180,90,10)
for n=1:10
finger(5.5,3.5,2.7,theta1(n),theta2(n),theta3(n)) %無名指
pause(0.5)
end
%利用呼叫function,然後將原本動畫型式,改做每個圖案均會保留,用以得到指頭之極限位置














無名指的圖

%中指
patch([0,-8,-8,0,0],[0 0 4 4 0],'b')
%繪製手掌
theta1=linspace(0,90,10)
theta2=linspace(180,90,10)
theta3=linspace(180,90,10)
for n=1:10
finger(6.2,3.7,2.8,theta1(n),theta2(n),theta3(n)) %中指
pause(0.5)
end
%利用呼叫function,然後將原本動畫型式,改做每個圖案均會保留,用以得到指頭之極限位置














中指的圖

%食指
patch([0,-8,-8,0,0],[0 0 4 4 0],'b')
%繪製手掌
theta1=linspace(0,90,10)
theta2=linspace(180,90,10)
theta3=linspace(180,90,10)
for n=1:10
finger(2.6,2.5,2.6,theta1(n),theta2(n),theta3(n)) %食指
pause(0.5)
end
%利用呼叫function,然後將原本動畫型式,改做每個圖案均會保留,用以得到指頭之極限位置














食指的圖

5.2.3
坦白講,我個人實在不大清楚這題所要求的東西.簡單來說,每個投手的姿勢都不盡相同,每個人的手長也各不同,我不知道王建民的各手指長度,所以在一開始,就已經不知如何下手.其二,每次投球出去的時候,隨著力道大小方向的不同,各種加速度也不盡相同,再者不同的球路所造成手指在運動時的加速度以及速度也會不同,直球.滑球.指叉球......等各式球路,變因太多,實不知該如何計算其各手指的加速度以及速度.
話說回來,單純探討各手指之速度及加速度如何,大抵應該就是在出手時,手指的速度以及加速度會與球相同.當然,這是總計的結果.假設如果要把各手指的分量精密計算的話,變數便會大幅增加.考慮到第一指節是球狀關節,所以在純粹的向前加速度與速度中,它可以加入轉動的數值,各手指對球的旋轉所造成的加速度總和,便可以讓球產生變化.
至於與上面單純探討四隻手指在同一平面所能做出的最大變動範圍,即是可以影響球路的高低.當四隻手指越往下扣,球路就會壓的越低,反之亦然.而在此時,就四隻手指單純的速度向量分析,關鍵點於脫手時,四隻手指對於跟球路同方向之速度以及加速度,會在剎那間達到相等.此時必須先排除因摩擦力所造成球產生另外一軸的轉動分量,單純分析相同方向的速度與加速度才是.
不過球員執球時,通常不會五指均緊貼著球.大部分的時候,均只有大拇指.食指.中指有接觸,其餘無名指與小指則未與球有接觸的機會.此時若要探究無名指與小指的速度與加速度,大致來說,應該是會跟手臂揮動之速度與加速度相等,然後再考慮一些手腕的轉動,大致就可以求得了.
單純手指速度與加速度的分析,大抵就是這樣吧.
至於有關講義第三章的dyad_draw函式,由於得不到確切的球員指長數據,故無法有個精確明顯的數字可以直接代入分析,所以這題我便採用理論分析的方式而已.
(附註:若要簡單分析,可假設球投出的瞬間,手掌和接手掌指節的角速度是和角加速度是W和a,然後指節長度是R,故切線加速度即為aR,而法線加速度便是w*w*R)