2007年4月28日 星期六

Homework 8

Homework 8 b94611001 歐陽太閒
本週四 (4/26)曾來上課。

根據題目:
四連桿,其桿長分別為r=[4 3 3 5],由桿2驅動,設第一固定桿角度theta1=0度; 角速度 td2=10rad/s; 角加速度tdd2=0 rad/s^2。

一 ,設桿2角度theta2=45度時,運動學分析



採用老師機動學教學部落格中提供的f4bar程式(f4bar程式之輸出之第七行夾角並未輸出)註解後版本如附件一
其中:
r(1:4) = [4 3 3 5] %各桿之長度
theta1 = 0 deg %第一桿水平角
theta2 = 45 deg %驅動桿水平夾角
td2 = 10 %驅動桿(第二桿)角速度
tdd2 = 0 %驅動桿(第二桿)角加速度
mode = -1 %閉合型
linkdrive = 0 %驅動桿第二桿


>> r(1:4) = [4 3 3 5]
t1=0
t2=45
ang=10
aacc=0
f4bar(r,t1,t2,ang,aacc,-1,0)

ans =

1.0e+003 *

0.0040 0 0 0
0.0021 + 0.0021i 0.0450 0.0100 0
0.0011 + 0.0028i 0.0695 -0.0163 0.4914
-0.0008 + 0.0049i 0.0995 -0.0050 0.3836

0.0212 + 0.0212i 0.0021 + 0.0021i
0.0041 - 0.0245i 0.0032 + 0.0049i
-0.2121 - 0.2121i 0
-1.8712 - 0.4391i 0

可得以下分析:

即各桿之(*1000)
位置 角度(度數) 角速度 角加速度
桿1 0.0040 0 0 0
桿2 0.0021 + 0.0021i 0.0450 0.0100 0
桿3 0.0011 + 0.0028i 0.0695 -0.0163 0.4914
桿4 -0.0008 + 0.0049i 0.0995 -0.0050 0.3836

Q速度 0.0212 + 0.0212i Q位置 0.0021 + 0.0021i
P速度 0.0041 - 0.0245i P位置 0.0032 + 0.0049i
Q加速 -0.2121 - 0.2121i
P加速 -1.8712 - 0.4391i

f4bar之程式似乎與網頁之說明有所不同,程式中註解data (1,6),data (2,6)分別為Q,P位置,但網頁為VQ,AQ,VP,AP之絕對值


二,四連桿位置及各點速度



由於需繪出一四連桿系統並撰寫一程式繪製之,故參考機動學教學平台主題6.1至6.5關於四連桿系統的位置,速度,加速度之分析,並據此撰寫一

函式以利日後使用.

由於教學平台之範例程式為以直線來表現連桿,故試寫一函式嘗試以連桿圖形來顯示實際的運動狀況,基礎架構仍同於drawlinks.m,概述如下:
1.輸入防呆處理
2.提取f4bar分析的結果
3.進行計算,產生繪圖用數據
4.進行繪圖
5.數據標示及顯示(P,Q桿端速度)

執行結果如下:

script如下:
title('作業8.2 作者:歐陽太閒 b94611001');%資訊
xlabel('x-axis');
ylabel('y-axis');
dw4shape([4 3 3 5],0,45,10,0,-1,0);


dw4shape程式碼如下:
function [values]=dw4shape(r,th1,th2,td,tdd,mode,linkdrive)
%歐陽太閒 b94611001
%本函數改寫自老師的drawlinks.m
%[values]=dw4shape(四桿長,第一桿角度,第二桿角度,角速度,角加速度,模式,驅動桿)
%[values]=dw4shape([4 3 3 5],0,45,10,0,-1,0)
%本程式需要f4bar.m及linkshape.m方能正常執行
r2d=180/pi;
axis equal;
if nargin<7,linkdrive=0;end %防呆
if nargin<6,mode=1;end %防呆
[values b]=f4bar(r,th1,th2,td,tdd,mode,linkdrive); %提取f4bar中的值
rr=values(:,1);
rr(3,1)=rr(1,1)+rr(4,1);
rx=real(rr(:,1));rx(4)=0;
ry=imag(rr(:,1));ry(4)=0;

qv=abs(values(1,5)); %取得點Q速度
if real(real(values(1,5)))>0;dirqv=atan(imag(values(1,5))/real(values(1,5)))*r2d;else;dirqv=pi/2;end %方向
pv=abs(values(2,5)); %取得點P速度
if real(real(values(2,5)))>0;dirpv=atan(imag(values(2,5))/real(values(2,5)))*r2d;else;dirpv=pi/2;end %方向

if b==1
linkshape([0 0],[rx(1),ry(1)],0.5); %第一桿
hold on;
if linkdrive==0 %第二桿為驅動桿時
linkshape([0 0],[rx(2),ry(2)],0.5); %繪製第二桿
linkshape([rx(2) ry(2)],[rx(3),ry(3)],0.5); %繪製第三桿
else
linkshape([0 0],[rx(2),ry(2)],1); %繪製第二桿
linkshape([rx(2) ry(2)],[rx(3),ry(3)],0.5);%繪製第三桿
end
linkshape([rx(3) ry(3)],[rx(1),ry(1)],0.5);%繪製第四桿
end
text(0,0,' O');
text(rx(1),ry(1),' R');
text(rx(2),ry(2),' P');
text(rx(2)/2,ry(2)/2, ['Pv=' num2str(pv) 'θ= ' num2str(dirpv)]);%標示P速度
text(rx(3),ry(3),' Q');
text((rx(3)-rx(2))/2+rx(2),(ry(3)-ry(2))/2+ry(2),['Qv=' num2str(qv) 'θ=' num2str(dirqv)]);%標示Q速度
%程式結束

另外,若以圖形方式呈現(由於圖形速度加速度過大,故未完整顯示),可在dw4shape末端加入以下程式碼
藍色為Q點速度,紅色為P點速度,黃色為Q點加速,粉紅色為P點加速


可利用以下程式碼:
qvx=real(values(1,5))
qvy=imag(values(1,5))
line([rx(2) rx(2)+qvx],[ry(2) ry(2)+qvy],'color','b','linewidth',2) %藍色為Q點速度
pvx=real(values(2,5))
pvy=imag(values(2,5))
line([rx(3) rx(3)+pvx],[ry(3) ry(3)+pvy],'color','r','linewidth',2) %紅色為P點速度
qax=real(values(3,5))
qay=imag(values(3,5))
line([rx(2) rx(2)+qax],[ry(2) ry(2)+qay],'color','y','linewidth',2) %黃色為Q點加速
pax=real(values(4,5))
pay=imag(values(4,5))
line([rx(3) rx(3)+pax],[ry(3) ry(3)+pay],'color','m','linewidth',2) 粉紅色為P點加速
axis equal;grid on
axis([-30 30 -30 30]);



若採用老師的drawlinks

title('作業8.2 作者:歐陽太閒 b94611001');%資訊
xlabel('x-axis');
ylabel('y-axis');
drawlinks([4 3 3 5],0,45,-1,0);
則其結果為





三,四連桿之限制角度


由於四連桿運動機構中有死點存在,故需撰寫一程式進行分析找尋驅動桿可運動的範圍
而本程式中利用機動學教學部落格中的fb_angle_limits.m進行角度分析
其結構如下:
1.程式資訊
2.自fb_angle_limits取得角度分析的資訊
3.以此資訊進行繪製
4.數據標示


script如下:
>>dw4lim([4 3 3 5],0,-1,0)
angs =
28.9550 (最小角)
ange =
331.0450 (最大角)

執行結果:


function dw4lim(r,th1,sigma,driver)
%歐陽太閒 b94611001
%dw4lim(四桿長,第一桿角度,模式,驅動桿)
%本程式用於進行尋找四連桿系統的驅動桿最大角及最小角
%本程式需有 dw4shape.m 及 fb_angle_limits.m方可正確執行
title('作業8.3 作者:歐陽太閒 b94611001');%資訊
xlabel('x-axis');
ylabel('y-axis');
[angs, ange]=fb_angle_limits(r,th1,driver) %利用fb_angle_limits進行分析
dw4shape(r,th1,Qstart,0,0,sigma,driver); %程式碼再利用
dw4shape(r,th1,Qstop,0,0,sigma,driver);
text(r(1),r(1),['s1=' num2str(angs,'%6.1f')]); %取到小數下第一位並轉成字串
text(r(1),-r(1),['s1=' num2str(ange,'%6.1f')]);
%程式結束


而若以老師的drawlimits進行分析:
drawlimits([4 3 3 5],0,-1,0)
Qstart =
28.9550 (最小角)
Qstop =
331.0450 (最大角)

執行結果:


四,設theta2=[0:20:360],試繪出此組四連桿之重疊影像,解釋為何有些沒有值。

本程式繪出四連桿的連續運動並顯示其驅動桿之旋轉有一範圍,亦即沒有值處乃是來自於其在f4bar的分析結果中乃是不存在的(虛數)
是故,即如老師在課堂上所說的,其沒有值處是由於其解為虛數,在實數座標系中不能顯現.

script如下:

title('作業8.4 作者:歐陽太閒 b94611001');%資訊
xlabel('x-axis');
ylabel('y-axis');
for k=[0:20]
dw4shape([4 3 3 5],0,k*20,10,0,-1,0);
end

執行結果:


而若以drawlinks為之
script如下:
title('作業8.4 作者:歐陽太閒 b94611001');%資訊
xlabel('x-axis');
ylabel('y-axis');
for k=[0:20]
drawlinks([4 3 3 5],0,k*20,-1,0);
end

結果:

Combination of links fail at degrees 0.0
Combination of links fail at degrees 20.0
Combination of links fail at degrees 340.0
Combination of links fail at degrees 360.0
Combination of links fail at degrees 380.0

即為fbar中傳回b不為1,不能組合的無效結果,也就是在驅動桿運動範圍外的結果.


五,動畫

根據老師的drawlimit執行結果:
drawlimits([4 3 3 5],0,-1,0)
Qstart =
28.9550
Qstop =
331.0450
故可知其可旋轉範圍為28.9550 2到331.0450之間

可寫一程式使其迴轉:
其結構如下
1.資訊
2.for-loop進行繪製

程式碼如下:
title('作業8.5 作者:歐陽太閒 b94611001');%資訊
xlabel('x-axis');
ylabel('y-axis');
r=[4 3 3 5]
for k=[29:331] %簡化程式碼
pause(0.01);
clf;
axis([-8 8 -5 5]); %固定座標系
dw4shape(r,0,k,0,0,-1,0) %採用先前撰寫的dw4shape
end

結果如下:

影片連結
經老師指導,本影片已經改進為坐標不移動


心得:
本次作業雖可參考教學平台之資料,但仍在實際處理上遇到很多困難,其大多來自於角度分析時定義的限制,所以必須要使用複雜的if-then-else

結構來進行處理,而四連桿系統的運動本就複雜難以分析,故前人累積的智慧,使我們不必重新從頭想起,而可以以現成的公式,定理等進行處理.

而本次作業也已經進入到分析實際運用於生活中的結構,表面上看來簡單,實際上卻極為複雜.

附件一
%歐陽太閒 b94611001 加註
function [data,form] = f4bar(r,theta1,theta2,td2,tdd2,mode,linkdrive)
%
%function [data,form] = f4bar(r,theta1,theta2,td2,tdd2,mode,linkdrive)
% This function analyzes a four-bar linkage when the driving link is
% crank or coupler. The input data are:
% theta1,theta2 are angles in degrees
% r=[r1 r2 r3 r4]= lengths of links(1=frame)
%td2 = crank or coupler angular velocity (rad/sec)
%tdd2 = crank or coupler angular acceleration (rad/sec^2)
%mode = +1 or -1. Identifies assembly mode
%linkdrive = 0 for crank as driver; 1 for coupler as driver
%data (1:4,1) = link positions for 4 links
%data (1:4,2) = link angles in degrees
%data (1:4,3) = link angular velocities
%data (1:4,4) = link angular accelerations
%data (1,5) = velocity of point Q
%data (2,5) = velocity of point P
%data (3,5) = acceleration of point Q
%data (4,5) = acceleration of point P
%data (1,6) = position of Q %和網頁說明不同
%data (2,6) = position of P
%form = assembly status. form = 0, mechanism fails to
% assemble.
% program revised from Waldron's Textbook
% Revised:DSFON, BIME, NTU. Date: Feb. 7, 2007
if nargin<7,linkdrive=0;end %防呆裝置 補足驅動
if nargin<6,mode=1;end %防呆裝置 補足模數
data=zeros(4,6); %建立4*6的零矩陣
% if coupler is the driver, interchange the vetor 3 & 2
if linkdrive==1,r=[r(1) r(3) r(2) r(4)];end %驅動桿為第三桿時,r的順序交換
rr=r.*r;d2g=pi/180;
[theta,td,tdd]=deal(zeros(4,1)); %存到theta,td,tdd
theta(1:2)=[theta1 theta2]*d2g; %theta1,theta2的輸入為角度量非徑度量
t1=theta(1);tx=theta(2);
s1=sin(t1);c1=cos(t1); %分別取t1,tx的水平和垂直分量
sx=sin(tx);cx=cos(tx);
% position calculations %取位置
A=2*r(1)*r(4)*c1-2*r(2)*r(4)*cx;
C=rr(1)+rr(2)+rr(4)-rr(3)-2*r(1)*r(2)*(c1*cx+s1*sx);
B=2*r(1)*r(4)*s1-2*r(2)*r(4)*sx;
pos=B*B-C*C+A*A;
if pos>=0, %pos>0時可組合
form=1;
% Check for the denominator equal to zero
if abs(C-A)>=1e-5 %避免分母為零,採用一小數字為分界
t4=2*atan((-B+mode*sqrt(pos))/(C-A));
s4=sin(t4);c4=cos(t4);
t3=atan2((r(1)*s1+r(4)*s4-r(2)*sx),(r(1)*c1+r(4)*c4-r(2)*cx));
s3=sin(t3);c3=cos(t3);
else
% If the denominator is zero, compute theta(3) first 分母為零先計算theta(3)
A=-2*r(1)*r(3)*c1+2*r(2)*r(3)*cx;
B=-2*r(1)*r(3)*s1+2*r(2)*r(3)*sx;
C=rr(1)+rr(2)+rr(3)-rr(4)-2*r(1)*r(2)*(c1*cx+s1*sx);
pos=B*B-C*C+A*A;
if pos>=0,
t3=2*atan((-B-mode*sqrt(pos))/(C-A));
s3=sin(t3); c3=cos(t3);
t4=atan2((-r(1)*s1+r(3)*s3+r(2)*sx),...
(-r(1)*c1+r(3)*c3+r(2)*cx));
s4=sin(t4);c4=cos(t4);
end
end %theta(3),theta(4)計算完畢

theta(3)=t3;theta(4)=t4;


%velocity calculation %速度分析計算
td(2)=td2;
AM=[-r(3)*s3, r(4)*s4; -r(3)*c3, r(4)*c4]; %r3,r4分別乘上其對應角度的sin,cos化為分量
BM=[r(2)*td(2)*sx;r(2)*td(2)*cx]; %乘上角速度和方向分量
CM=AM\BM; %求解([RM] [AM] = [CM]公式,6.2)
td(3)=CM(1);td(4)=CM(2); %得速度

%acceleration calculation %加速度分析計算
tdd(2)=tdd2; %類似速度分析計算的作法
BM=[r(2)*tdd(2)*sx+r(2)*td(2)*td(2)*cx+r(3)*td(3)*td(3)*c3-...
r(4)*td(4)*td(4)*c4;r(2)*tdd(2)*cx-r(2)*td(2)*td(2)*sx-...
r(3)*td(3)*td(3)*s3+r(4)*td(4)*td(4)*s4];
CM=AM\BM; %求解([DM]=[RM]\[FM])
tdd(3)=CM(1);tdd(4)=CM(2); %得解
%store results in array data %將解格式化,存入矩陣以利處理
% coordinates of P and Q
if linkdrive==1,
c2=c3;c3=cx;s2=s3;s3=sx;
r(2:3)=[r(3) r(2)];theta(2:3)=[theta(3) theta(2)];
td(2:3)=[td(3) td(2)];tdd(2:3)=[tdd(3) tdd(2)];
else
c2=cx;s2=sx;
end
for j=1:4,
data(j,1:4)=[r(j)*exp(i*theta(j)) theta(j)/d2g td(j) tdd(j)] ;
end % position vectors
data(1,5)=r(2)*td(2)*exp(i*theta(2));%velocity for point Q %存入一開始建立的零矩陣
data(2,5)=r(4)*td(4)*exp(i*theta(4));%velocity for point P
data(3,5)=r(2)*(i*tdd(2)-td(2)*td(2))*exp(i*theta(2));%acc of Q
data(4,5)=r(4)*(i*tdd(4)-td(4)*td(4))*exp(i*theta(4));%acc of P
data(1,6)=data(2,1);%position of Q, again
data(2,6)=data(1,1)+data(4,1);% position of P

%find the accelerations
else
form=0; %處理form=0時
if linkdrive==1,
r=[r(1) r(3) r(2) r(4)];
for j=1:4, data(j,1)=r(j).*exp(i*theta(j));end % positions
end
end

%第八次作業結束

2007年4月19日 星期四

Homework 7

%homework 7 作者:歐陽太閒 b94611001

7.1. 繪製位置


根據題目要求:
r=[a a+5 a-5]cm,a=1+10
長度起始角度 angle=[0 0 0]度
角速度 w=[0.2 0.5 0.3]rad/s(原題目的0.3多一空格)
角加速度 wa=[0, 0.1, 0.2]rad/s^2

而當時間改變時角速度變量(w0為原角速度,wa為角加速度):
delw=wa*t+w0
故將其對時間積分得
deltheta=0.5*w*(t)^2+w0*t
即為角度改變量

因此利用老師的dyad_draw列成以下script file(老師的dyad.m最後一行的vect似乎應為vec)
由於本題只要求位置,故dyad_draw中繪製速度,加速度的line部份暫以%使其成為註解
直接將各桿角速度,角加速度之參考點視為原點時:
結果如圖
程式碼如下:

%作業7.1 考慮角速度,角加速度參考點.歐陽太閒 b94611001
axis equal; %等比例
clf;
title('作業7.1 作者:歐陽太閒 b94611001 單位:cm,rad/s,rad/s^2'); %資訊
xlabel('x-axis');
ylabel('y-axis');
a=1+10; %1+10
r=[a a+5 a-5]; %各桿長
ang=[0 0 0]; %預設角度
w1=[0.2 0.5 0.3]; %角速度
aa=[0 0.1 0.2]; %角加速度
r2d=180/(pi); %角徑轉換
for t=[1 2 3 4 5] %迴圈
% for t=[1 1.5 2 2.5 3 3.5 4 4.5 5]
delw=w1 + t.*aa; %新角速度
deltheta=0.5.*aa.*(t.^2)+ w1.*t %各桿分別的角度增加量
ang2=deltheta.*r2d; %角度增加量 = 各桿對原點所轉角度
dyad_draw(r,ang2,delw,aa);
end


以上的結果有些奇怪,因此若考量dyad_draw的各桿角度是指對原點的絕對角度,而非對前一桿的角度,
但角速度造成的角位移則是對角速度對應之原點造成角位移(否則其桿的對應原點將移動),因此在第二三桿的位移增加量上需考慮其上一桿的位

置,但角速度仍可直接計算.
而由於各桿之角速度和角加速度皆為定值,故可寫一script file如下:
結果如圖
若啟用速度,加速度繪製
結果如圖
程式碼如下:

%作業7.1 考慮角速度,角加速度參考點.歐陽太閒 b94611001
axis equal; %等比例
clf;
title('作業7.3 作者:歐陽太閒 b94611001 單位:cm,rad/s,rad/s^2'); %資訊
xlabel('x-axis');
ylabel('y-axis');
a=1+10; %1+10
r=[a a+5 a-5]; %各桿長
ang=[0 0 0]; %預設角度
w1=[0.2 0.5 0.3]; %角速度
aa=[0 0.1 0.2]; %角加速度
r2d=180/(2*pi); %角徑轉換

for t=[1 2 3 4 5]
%固定座標系
delw=w1 + t.*aa; %各桿角速度
deltheta=0.5.*aa.*(t^2)+w1*t; %各桿分別的角度增加量
ang2(1)=(deltheta(1))*r2d; %1桿實際絕對角度
ang2(2)=ang2(1)+(deltheta(2))*r2d; %2桿實際絕對角度
ang2(3)=ang2(2)+(deltheta(3))*r2d; %3桿實際絕對角度
dyad_draw(r,ang2,delw,aa);
end


以上程式架構皆為:
1.座標定義和資訊
2.定義參數
3.以for-loop給予時間
a.分別以公式計算角速度和位移角度
b.以dyad_draw畫出
4.結束

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


由於本程式以dyad為發展基礎,故直接採取其內對於速度加速度之定義,以以下程式求得值帶入dyad並繪製.
以下程式架構皆為:
1.座標定義和資訊
2.定義參數
3.以for-loop給予時間
a.分別以公式計算角速度和位移角度
b.以dyad求得速度,加速度,合速度,合加速度等
c.存入變數
4.以for-loop給予陣列序
a.繪製圖形
5.結束

1.利用以下程式求得各桿端速度與t之關係:
結果如圖
以下為程式碼:

%作業7.2.1 各桿加速度 歐陽太閒 b94611001
a=1+10; %1+10
r=[a a+5 a-5]; %各桿長
ang=[0 0 0]; %預設角度
w1=[0.2 0.5 0.3]; %角速度
aa=[0 0.1 0.2]; %角加速度
r2d=180/(pi); %角徑轉換
title('作業7.2 作者:歐陽太閒 b94611001 綠,紅,粉紅分別為桿1,2,3速度'); %資訊
xlabel('x-axis');
ylabel('y-axis');

for j=[1:1:41]
t=j/10+1
delw=w1 + t.*aa; %各桿角速度
deltheta=0.5.*aa.*(t^2)+w1*t; %各桿分別的角度增加量
ang2(1)=(deltheta(1))*r2d; %1桿實際絕對角度
ang2(2)=ang2(1)+(deltheta(2))*r2d; %2桿實際絕對角度
ang2(3)=ang2(2)+(deltheta(3))*r2d; %3桿實際絕對角度
[vec,data] = dyad(r,ang2,delw,aa);%利用dyad
x=[0;cumsum(real(data(:,1)))]; %取值
y=[0;cumsum(imag(data(:,1)))];
sdata=sum(data); %將三桿值和
for k=1:length(r)
vl(k,j)=abs(data(k,2));
al(k,j)=abs(data(k,3));
%line([x0 vx],[y0 vy],'marker','s','linewidth',2);
%line([x0 ax],[y0 ay],'marker','s','color','r','linewidth',3)
end
end
for k=[1:1:40] %繪製
line([k/10+1 (k+1)/10+1],[vl(1,k) vl(1,k+1)],'color','g','linewidth',2) %桿一速度
line([k/10+1 (k+1)/10+1],[vl(2,k) vl(2,k+1)],'color','m','linewidth',2) %桿二速度
line([k/10+1 (k+1)/10+1],[vl(3,k) vl(3,k+1)],'color','r','linewidth',2) %桿三速度
end


2.各桿端加速度與t之關係
結果如圖
以下為程式碼:

%作業7.2.2 各桿加速度 歐陽太閒 b94611001
a=1+10; %1+10
r=[a a+5 a-5]; %各桿長
ang=[0 0 0]; %預設角度
w1=[0.2 0.5 0.3]; %角速度
aa=[0 0.1 0.2]; %角加速度
r2d=180/(pi); %角徑轉換
title('作業7.2 作者:歐陽太閒 b94611001 綠,紅,粉紅分別為桿1,2,3加速度'); %資訊
xlabel('x-axis');
ylabel('y-axis');

for j=[1:1:41]
t=j/10+1
delw=w1 + t.*aa; %各桿角速度
deltheta=0.5.*aa.*(t^2)+w1*t; %各桿分別的角度增加量
ang2(1)=(deltheta(1))*r2d; %1桿實際絕對角度
ang2(2)=ang2(1)+(deltheta(2))*r2d; %2桿實際絕對角度
ang2(3)=ang2(2)+(deltheta(3))*r2d; %3桿實際絕對角度
[vec,data] = dyad(r,ang2,delw,aa);%利用dyad
x=[0;cumsum(real(data(:,1)))]; %取值
y=[0;cumsum(imag(data(:,1)))];
sdata=sum(data); %將三桿值和
for k=1:length(r)
vl(k,j)=abs(data(k,2)); %取速度
al(k,j)=abs(data(k,3)); %取加速度
end
end
for k=[1:1:40] %繪製
line([k/10+1 (k+1)/10+1],[al(1,k) al(1,k+1)],'color','g','linewidth',2) %桿一加速度
line([k/10+1 (k+1)/10+1],[al(2,k) al(2,k+1)],'color','m','linewidth',2) %桿二加速度
line([k/10+1 (k+1)/10+1],[al(3,k) al(3,k+1)],'color','r','linewidth',2) %桿三加速度
end


3.合速度及合加速度與t之關係:
結果如圖
以下為程式碼:

%作業7.2.3 各桿加速度 歐陽太閒 b94611001
a=1+10; %1+10
r=[a a+5 a-5]; %各桿長
ang=[0 0 0]; %預設角度
w1=[0.2 0.5 0.3]; %角速度
aa=[0 0.1 0.2]; %角加速度
r2d=180/(pi); %角徑轉換
title('作業7.2 作者:歐陽太閒 b94611001 綠色為合速度'); %資訊
xlabel('x-axis');
ylabel('y-axis');
for j=[1:1:401]
t=j/100+1
delw=w1 + t.*aa; %各桿角速度
deltheta=0.5.*aa.*(t^2)+w1*t; %各桿分別的角度增加量
ang2(1)=(deltheta(1))*r2d; %1桿實際絕對角度
ang2(2)=ang2(1)+(deltheta(2))*r2d; %2桿實際絕對角度
ang2(3)=ang2(2)+(deltheta(3))*r2d; %3桿實際絕對角度
[vec,data] = dyad(r,ang2,delw,aa);%利用dyad
x=[0;cumsum(real(data(:,1)))]; %取值
y=[0;cumsum(imag(data(:,1)))];
sdata=sum(data); %將三桿值和
vv(j)=[abs(sdata(2))]; %取速度加速度絕對值
a2(j)=[abs(sdata(3))];
end
for k=[1:1:400] %繪製
line([k/100+1 (k+1)/100+1],[vv(k) vv(k+1)], 'marker','d','color','g','linewidth',3) %合速度
line([k/100+1 (k+1)/100+1],[a2(k) a2(k+1)], 'marker','d','color','m','linewidth',3) %合加速度
end


7.3動畫
本動畫利用7.1的程式修改而成,提高程式碼的重複利用率.
連結於此
採取1~5秒動作

以下為程式碼:

%作業7.3 動畫 歐陽太閒 b94611001
axis equal; %等比例
clf;
title('作業7.3 作者:歐陽太閒 b94611001 單位:cm,rad/s,rad/s^2'); %資訊
xlabel('x-axis');
ylabel('y-axis');
a=1+10; %1+10
r=[a a+5 a-5]; %各桿長
ang=[0 0 0]; %預設角度
w1=[0.2 0.5 0.3]; %角速度
aa=[0 0.1 0.2]; %角加速度
r2d=180/(pi); %角徑轉換

for t=[1:0.1:5]
pause(0.1);%時間間隔
clf;
axis([-40 40 -40 40]); %固定座標系
delw=w1 + t.*aa; %各桿角速度
deltheta=0.5.*aa.*(t^2)+w1*t; %各桿分別的角度增加量
ang2(1)=(deltheta(1))*r2d; %1桿實際絕對角度
ang2(2)=ang2(1)+(deltheta(2))*r2d; %2桿實際絕對角度
ang2(3)=ang2(2)+(deltheta(3))*r2d; %3桿實際絕對角度
dyad_draw(r,ang2,delw,aa);
end


以上程式架構為:
1.座標定義和資訊
2.定義參數
3.以for-loop給予時間
a.延時清除
b.分別以公式計算角速度和位移角度
c.以dyad_draw畫出
4.結束

心得:本次作業在期中考期間,時間較緊迫,但是在程式寫作和分析時題目仍相當有內涵,故花費了較以往作業更長的時間,而本次作業讓我們了解
到關於具有角速度,角加速度的自由擺動桿之運動分析,而利用老師提供的dyad和dyad_draw乃節省了大量的時間,免去重複開發和除錯的痛苦.

2007年4月12日 星期四

Homework 6

homework6 歐陽太閒 b94611001

6.1平面組合機構


6.1圖

1.此圖共有12桿(L1(j2於其上不運動應視為一桿),L2,L3,L4,L5,L6,L7,L8,L9,L10,L11,L12),其中L10為固定(

接地)桿
且運動結中j1共1個運動結為旋轉結(R)DOF=1,
j2,j3,j4共3個運動結為複式結,其中j4為滑塊結(DOF=2),j2滑動結(DOF=2),j3滑槽結視為稜柱結DOF=1.
而M1,M2,M3,M4,M5,M6為多桿共結,故其所佔結數=(相連桿數-1),
故M1=(3-1)=2,M2=(3-1)=2,M3=(3-1)=2,M4=(3-1)=2,M5=(3-1)=2,M6=(3-1)=2
因此總運動結數:
J=1+1+2+6*2=16
Σf=1+1+2*2+6*2=18
2.古魯伯公式:
M=3*(N-1)-(3*J-Σf)
M=可動度
N=系統的連桿(link)總數
J=系統的運動結(joint)總數
fi=i號運動結的連結度
故利用古魯伯公式代入(N=12,J=16,f=18):
M=3*(N-1)-(3*J-Σf)=3*(12-1)-(3*16-18)=33-30=3

3.題目要求採用老師撰寫的function[df]=gruebler()
故可得知其呼叫指令為
>> gruebler(12,[14 0 2])
其結果為
ans =
3


另外一種算法為視M6非三桿共結,則可得一答案為(J=15,f=3*2)
M=3*(N-1)-(3*J-Σf)=3*(12-1)-(3*15-17)=33-28=5
其呼叫指令為
>> gruebler(12,[13 0 2])
ans =
5

4.至於j4滑塊結(外力閉合),j2滑動結(外型閉合),j3滑槽結(外型閉合)
對於本系統的可動度影響為由於前二個運動結皆屬於DOF=2之複式結(轉動,沿特定方向滑動)
而第三個滑槽結根據12日請教老師的結果,應為由於接了兩個桿而可視為一個稜柱對(DOF=1)和一個三桿相連旋轉節,共使得DOF=3故使得本系統之可動度較純使用旋轉對的系統多了數個自由度,且使其可以受和系統可動度(3)等量的外部輸入而作動,而非一可能有預載負荷的靜不定不可動結構(DOF=-1).

6.2立體組合機構


6.2圖

1.本系統共有6桿(L1,L2,L3,L4,L5,L6),其中L1上套有R1但仍接地為固定桿,而有6個運動結,R1,R2為旋轉結

(DOF=1),而S1,S2,S3為球結(DOF=3),C1為筒結(DOF=2)
故其Σf=2*1+3*3+1*2=13

2.若由空間古魯伯公式計算
N=6
J=6
Σf=13
M=6*(N-1)-(6*J-Σf)=6*(6-1)-(6*6-13)=7
為一可動結構,但若考慮惰性自由度則為5
3.若利用老師的function[df]=gruebler()函式
則其呼叫指令為:
>>gruebler(6,[2 0 0 3 1])
結果:
ans =
7
4.根據定義:惰性自由度(Idle Degree of Freedom)
是由於球狀結及圓筒結而使得連桿形成自轉運動(例如筒結的軸轉動)而抵銷1個自由度稱之(可由觀察而得).
因此在S1,S2間的L5會產生自轉,而S3和C1之間的L4也會產生自轉,依照定義共會少2個自由度,是為惰性自由度

,故實際機構上的可動度為7-2=5,此惰性自由度造成系統上的實際可動度較古魯伯公式所推得者為少,使得機

構之可動度較所推得者少.

6.3葛拉索機構


1.
a.根據葛拉索準則,葛拉索機構為一四連桿機構,當一機構中的最長桿與最短桿的和小於另兩桿的和,則其至少

一桿是可旋轉桿(可完全迴轉).若表示成不等式則為:s+g<p+q
b.至於非葛拉索型機構,則是最長桿與最短桿的和大於另兩桿的和,則除驅動桿外三活動連桿皆為搖桿,即為非

葛拉索型機構,表成數學式為s+g>p+q

2.(圖形繪製用程式碼參考附件一)
第一組:桿1-桿4分別為7,4,6,5cm
g=7,s=4,p=5,q=6
s+g=11=p+q
為中立連桿組(Neutral Linkage),葛拉索變點機構,可能有兩種運動形式(平行四邊形機構和平行四邊形反置

機構,需利用另一個平行四邊形機構方可避免)
6.3.1圖


第二組:桿1-桿4分別為5,7,6,3cm
g=7,s=3,p=5,q=6
s+g=10<p+q=11
為葛拉索一型機構,第一桿為固定桿,為一Crank-Rocker Linkage機構
6.3.2圖



第三組:桿1-桿4分別為5,4,4,3cm
s+g=8=p+q,為一中立連桿組(Neutral Linkage),葛拉索變點機構,有兩種運動形式(如第一組)
6.3.2圖



3.利用grashof()函式檢驗
第一組
>> grashof(1,[7 4 6 5])
ans =
Neutral Linkage
第二組
>> grashof(1,[5 7 6 3])
ans =
Crank-Rocker Linkage
第三組
>>grashof(1,[5 4 4 3])
ans =
Neutral Linkage
以上三組皆和前述分析同,檢驗成功

4.若以以上三組要成為葛拉索機構之改善方法如下:
第一組:為中立連桿組,故可以加長桿3或桿4使s+g<p+q其成為一葛拉索機構,
或者加上另一平行四邊形運動機構,而可以避免態點的存在,如圖(摘自老師所著課本)

第二組:為一Crank-Rocker的葛拉索機構.

第三組:為中立連桿組,故可以加長桿2或桿3使s+g<p+q其成為一葛拉索機構,
或者加上另一平行四邊形運動機構.

心得:本次作業在使用古魯伯公式時體會,在工程的分析上不能一切照公式硬帶,須臨機應變,例如多桿共結或者是複式結的處理皆須另外考慮,而在處理葛拉索機構時,方知簡單的四連桿機構分析起來竟然如此複雜,而且在解位置需要大量的計算,但最後能推得各種組合的運動模式,由此可見前人的智慧.

附件1:link4(l)程式碼
function link4(l)
%作業6.3.2 顯示用程式碼 作者 歐陽太閒
%本程式為便利繪出三種四連桿之機構,故參考老師所著之程式範例4.7-function four_link2

(theta2,r,mode)
%並嘗試進行簡化改寫,以利使用.
clf; %清除畫面
axis equal; %軸等比例
title('作業6.3 作者:歐陽太閒 b94611001'); %資訊
xlabel('x-axis');
ylabel('y-axis');
d2r=pi/180; %角徑轉換因子
ang=(0:15:360)'*d2r; %形成一組軌跡所需角
l2=l.^2; %開始建立常用之多項式,根據老師所著課本之解四連桿位置及參考程式範例4.7
Bx=l(2)*cos(ang);%解B結之x位置
By=l(2)*sin(ang);%解B結之y位置
m=(l2(4)-l2(3)-l2(1)+l2(2))./(Bx-l(1))/2;m2=(m-l(1)).^2;
p=(By./(Bx-l(1)));p2=p.^2;
Cy=((m-l(1)).*p+sqrt(m2.*p2-(p2+1).*(m2-l2(4))))./(p2+1); %解Cy之位置
Cx=m-(By./(Bx-l(1))).*Cy; %解Cx之位置
Cx=l(1)+sqrt(l2(4)-Cy.^2); %解Cx之位置
for i=1:length(ang)
if isreal(Cy(i)) %去除虛數解
line([0 Bx(i) Cx(i) l(1) 0]',[0 By(i) Cy(i) 0 0]'); %實際繪製
end
end
%程式結束

2007年3月29日 星期四

Homework 5

Homework5 歐陽太閒 b94611001

P5.1


5.1.1


以此帶入5.2所寫的body函數
body(35,30,18,0,180,180)
L1 L2 L3 角度,由身上實測而得,單位cm
結果如圖

5.1.2 結構及程式碼


本函數(body.m)程式結構為:
1.定義基本常數,如角徑轉換常數等,並進行繪圖參數設定,如比例等.
2.
a.定義上臂資料,引入L1,theta1參數,以及粗細端半徑等.
b.建立半圓繪製用矩陣和上臂的座標矩陣.
c.以旋轉矩陣將上臂座標群轉至目標角度.
d.以line繪製上臂(arm1).
3.
a.定義下臂資料,引入L2,theta2,theta1參數,以及粗細端半徑等.
b.建立半圓繪製用矩陣和上臂的座標矩陣.
c.以旋轉矩陣將下臂座標群轉至目標角度,並平移使接至上臂接點.
d.以line繪製下臂(arm2).
4.
a.定義手掌資料,引入L3,theta3參數.
b.建立手掌座標群矩陣
c.以旋轉矩陣將手掌座標群轉至目標角度,並平移使接至下臂接點.
d.以line繪製手掌(palm).
5.函數結束
程式碼如下

%P5.1~3 b94611001 歐陽太閒
%P5.2 body(35,30,18,90,-45,-30)
function body (L1,L2,L3,theta1,theta2,theta3)
d2r=pi/180; %角徑轉換
axis equal; %等比例
r3=4; %上臂端粗半徑
r4=5; %細半徑
title('作業5.1 作者:歐陽太閒 b94611001 單位:cm'); %資訊
xlabel('x-axis');
ylabel('y-axis');
i=[-pi/2:0.01:pi/2]; %以下產生端半圓
xt2=r3*cos(i);
yt2=r3*sin(i);
xr2=r4*cos(i);
yr2=r4*sin(i);
xa1=[0 0,(-xr2) 0,0 L1,(xt2+L1) L1,L1 0,0 L1,L1 L1]; %上臂座標
ya1=[0 0,yr2 r4,r4 r3,yt2 -r3,-r3 -r4,-r4 -r3,-r3 0];
angR1=-theta1*d2r; %相對角度
xu=xa1*cos(angR1)-ya1*sin(angR1); %旋轉
yu=xa1*sin(angR1)+ya1*cos(angR1);
arm1 = line(xu,yu,'erasemode','none','linewidth',1); %繪製
r1=3; %下臂端粗半徑
r2=4; %細半徑
i=[-pi/2:0.01:pi/2]; %以下產生端半圓
xt=r1*cos(i);
yt=r1*sin(i);
xr=r2*cos(i);
yr=r2*sin(i);
xa2=[0 0,(-xr) 0,0 L2,(xt+L2) L2,L2 0,0 L2,L2 L2]; %下臂座標
ya2=[0 0,yr r2,r2 r1,yt -r1,-r1 -r2,-r2 -r1,-r1 0];
angR2=(theta2*d2r-pi-theta1*d2r); %相對角度
xb=xa2*cos(angR2)-ya2*sin(angR2); %旋轉
yb=xa2*sin(angR2)+ya2*cos(angR2);
xb=xb+xu(length(xu)); %移動至arm1接點
yb=yb+yu(length(yu));
arm2 = line(xb,yb,'erasemode','none','linewidth',1); %繪製
palmx=[1 0,0 0,0 3,3 18,18 18,18 8,8 18,18 18,18 8,8 18,18 18,18 8,8 18,18 18,18 8,8 13,13 13,13 3,3 3,3 3,3 0,0 0,0 1]; %手掌座標
palmy=[5 5,5 2,2 0,0 0,0 2,2 2,2 2,2 4,4 4,4 4,4 6,6 6,6 6,6 8,8 8,8 8,8 10,10 10,10 10,10 10,10 8,8 5,5 5];
palmx=palmx*L3/18; %比例調整
palmx=palmx-1;palmy=palmy-5; %位置調整
angR3=theta3*d2r-pi+angR2; %相對角度
palmx2=palmx*cos(angR3)-palmy*sin(angR3); %旋轉
palmy2=palmx*sin(angR3)+palmy*cos(angR3);
palmx2=palmx2+xb(length(xb)); %移動至arm2接點
palmy2=palmy2+yb(length(xb));
palm=line(palmx2,palmy2,'erasemode','none','linewidth',1); %繪製
%P.5.1函數結束


5.1.3


量自己的手臂尺寸作為輸入,當theta1=90度,theta2=-45度,theta3=-30度時,其位置指令
body(35,30,18,90,-45,-30)
結果如圖
結果如圖

5.1.4


theta1角度在-90度與-75度間變動,theta2在-45度至-35度間變動,theta3則在-30度至-10度間變動。試將其變動區間分為十等分,模擬動畫
結果如圖

動畫連結

程式碼如下

%P5.1~3 b94611001 歐陽太閒
theta1=linspace(-90,-75,10); %各分成10等分
theta2=linspace(-45,-35,10);
theta3=linspace(-30,-10,10);
clf;
axis equal; %座標等比
axis([-50 50 -50 50]); %固定座標系
for i=1:10
pause(1);
clf;
body (35,32,18,theta1(i),theta2(i),theta3(i));
drawnow;
end


P5.2


5.2.1假設


人類手指可解析為以手掌,第一指節,第二指節,第三指節,以手掌為固定桿,而第一指節,第二指節,第三指節間分別以第一指關節,第二指關節,第三關指節間連接.
根據作業部落格之圖,除第一指關節(連接手掌與第一指節)為變形的球形對(DOF<6)其他指關節皆為旋轉對(DOF=1)且都有角度限制,根據自行測量結果,其角度限制分別為:
第一指關節:-10~90(單位:degree,相對上一指節)
第二指關節:-5~100
第三指關節:0~90
若假設各關節皆為旋轉對則根據古魯伯公式
M=3(N-1)-(3J-Σf)
3(4-1)-(3*3-3)=3知各指可動度為3
另外,在分析時,考慮手掌為剛體不會進行彎曲,而各手指也簡化為均勻的棒形桿,而且暫不考慮各手指之間參數的差異,也不考慮關節間的間隙,而以連接點取代.而由於題目要求,故也不考慮手指的側向移動,且四指同時運動,忽略拇指,因而第一指關節也可視為球形對,而各指關節也不考慮肌肉的變化和而只以骨骼結構為基礎,以進行運動學的分析.而各指節之長度根據以自己手指測量之結果為:
第一指節=4 (單位:cm)
第二指節=3
第三指節=2.5
故可以finger函數繪製
finger (9,4,2,2.5,10,20,30,40)
結果如圖

程式碼如下

function finger (L1,L2,L3,L4,theta1,theta2,theta3,theta4)
%作業5.2(finger) 歐陽太閒 b94611001
%theta1=0
%theta2=-10~90
%theta3=-5~100
%theta4=0~90
axis equal; %等比例
title('作業5.2 作者:歐陽太閒 b94611001 單位:cm 掌心向上,掌為紅色'); %資訊
xlabel('x-axis');
ylabel('y-axis');
%L1=9
%L2=4
%L3=3
%L4=2.5

d2r=pi/180;%角徑轉換
axis equal;
r1=0.9;%各指節粗細半徑參數
r2=1.1;
r3=0.7;
r4=0.9;
r5=0.6;
r6=0.7;
r7=0.4;
r8=0.6;
%手掌
i=[-pi/2:0.01:pi/2]; %產生半圓陣列
xt2=r1*cos(i);
yt2=r1*sin(i);
xr2=r2*cos(i);
yr2=r2*sin(i);
xa1=[0 0,(-xr2) 0,0 L1,(xt2+L1) L1,L1 0,0 L1,L1 L1];%手掌座標群矩陣
ya1=[0 0,yr2 r2,r2 r1,yt2 -r1,-r1 -r2,-r2 -r1,-r1 0];
angR1=theta1*d2r;
xu=xa1*cos(angR1)-ya1*sin(angR1); %旋轉
yu=xa1*sin(angR1)+ya1*cos(angR1);
finger1 = line(xu,yu,'color','r');%繪出,假設手掌為固定桿不進行動作
%第一指節
xt=r3*cos(i);
yt=r3*sin(i);
xr=r4*cos(i);
yr=r4*sin(i);
xa2=[0 0,(-xr) 0,0 L2,(xt+L2) L2,L2 0,0 L2,L2 L2];%第一指節座標群矩陣
ya2=[0 0,yr r4,r4 r3,yt -r3,-r3 -r4,-r4 -r3,-r3 0];
angR2=(theta2+theta1)*d2r;
xb=xa2*cos(angR2)-ya2*sin(angR2); %旋轉
yb=xa2*sin(angR2)+ya2*cos(angR2);
xb=xb+xu(length(xu));%平移至手掌端點
yb=yb+yu(length(yu));
finger2 = line(xb,yb);%繪出
%第二指節
xt3=r5*cos(i);
yt3=r5*sin(i);
xr3=r6*cos(i);
yr3=r6*sin(i);
xa3=[0 0,(-xr3) 0,0 L3,(xt3+L3) L3,L3 0,0 L3,L3 L3];%第二指節座標群矩陣
ya3=[0 0,yr3 r6,r6 r5,yt3 -r5,-r5 -r6,-r6 -r5,-r5 0];
angR3=(theta3+theta2+theta1)*d2r;
xb2=xa3*cos(angR3)-ya3*sin(angR3); %旋轉
yb2=xa3*sin(angR3)+ya3*cos(angR3);
xb2=xb2+xb(length(xu));%平移至第一指節端點
yb2=yb2+yb(length(yu));
finger3 = line(xb2,yb2);
%第三指節
xt4=r7*cos(i);
yt4=r7*sin(i);
xr4=r8*cos(i);
yr4=r8*sin(i);
xa4=[0 0,(-xr4) 0,0 L4,(xt4+L4) L4,L4 0,0 L4,L4 L4];%第三指節座標群矩陣
ya4=[0 0,yr4 r8,r8 r7,yt4 -r7,-r7 -r8,-r8 -r7,-r7 0];
angR4=(theta4+theta3+theta2+theta1)*d2r;
xb4=xa4*cos(angR4)-ya4*sin(angR4); %旋轉
yb4=xa4*sin(angR4)+ya4*cos(angR4);
xb4=xb4+xb2(length(xu));%平移至第二指節端點
yb4=yb4+yb2(length(yu));
finger4 = line(xb4,yb4);%繪出
%finger繪製結束


5.2.2極限


第一指關節:-10~90(單位:degree,相對上一指節)
第二指關節:-5~100
第三指關節:0~90
第一指節=4 (單位:cm)
第二指節=3
第三指節=2.5
故可得手指運動之範圍,範圍之起終為極限
結果如圖

動畫連結
程式碼如下

%L1=9
%L2=4
%L3=3
%L4=2.5
%theta1=-10~90
%theta2=-5~100
%theta3=0~90
theta1=linspace(-10,90,10); %各分成10等分
theta2=linspace(-5,100,10);
theta3=linspace(0,90,10);
clf;
axis equal; %座標等比
for i=1:10
finger (9,4,3,2.5,0,theta1(i),theta2(i),theta3(i));
end



5.2.3投球


根據發表於Jounal of Applied Physiology的論文Nonuniform activation of the agonist muscle does not covary with index finger acceleration in old adults(Douglass H. Laidlaw,University of Colorado,2002),
其中提到人類於Postural Steadiness During Position Holding時的手指(食指)的於35% load加速度 (old = 0.068 ± 0.031 m/s2; young = 0.050 ± 0.017 m/s2),
而投球時較接近holding而非tracking,故採用其holding數據.而角速度old (10.0 ± 0.9 and 12.1 ± 1.1°/s, respectively)
而棒球的投球資料
快速直球
最基本,將食指,中指放於球的縫線最寬段且縫線與手指垂直.
而網頁舉例之王建民乃採用伸卡球(シンカ-)
根據台灣棒球維基乃是一"中指及食指(也可用無名指代替食指)叉開,在投出時不旋轉手腕,而是以類似直球的方式投出"之投法,如圖
各種投球法(台灣棒球維基)故人類投球時球速乃是來自於手臂,而實際形成的球路才與手勢(手指運動)有關.

故可依以上資料配合教授之講義對各指節之位移,速度,加速度做一計算
假設
投球終手勢如圖

結果如下
第一指節 =
位移 速度(cm/s) 加速度(cm/s^2)
0.6983 1.4748 2.0322
第二指節 =
1.2535 2.6472 2.4569
第三指節=
2.5000 5.2796 2.4750
total=
4.4519 0.2034 6.9641
程式碼如下

%5.2.4 b94611001 歐陽太閒
%各手指之速度及加速度如何?(以變化率最大的食指為例,而中指與食指近似,拇指協助,依靠手腕之力量,其他指動作較小)
d2r=pi/180;%角徑轉換
len=[4 3 2.5] %各指節長參數
theta=[-10 -5 0] %各指關節角度,極限
angv=[12.1 12.1 12.1]*d2r %角速度,degree/s
angc=[0.3 0.2 0.1] %角加速度
%速度加速度,參考老師的作法:
xang=exp(i*theta*d2r); %化為複數
ss=len.*xang;%計算位移
vv=i*len.*xang.*angv; %計算速度
aa=(-len.*angc.^2+i*len.*angc).*xang; %計算加速度
finger1=[abs(ss(1)) abs(vv(1)) abs(aa(1))]%各指節位移,速度,加速度
finger2=[abs(ss(2)) abs(+vv(2)) abs(aa(2))]
finger3=[abs(ss(3)) abs(+vv(3)) abs(aa(3))]
total=[abs(sum(ss)) abs(vp) abs(ap)]%總值
%參考Nonuniform activation of the agonist muscle does not covary with index
%finger acceleration in old adults資料
%angc=6.8cm/s^2
%angv=12.1degree/s=0.2


第五次作業結束

2007年3月22日 星期四

Homework 4

作業四 b94611001 歐陽太閒
%作業4.1 b94611001 歐陽太閒
%結果影片
%結果圖片
clf; %清除畫面
axis equal; %座標等比
axis([-len len*3 -len len]*3); %固定座標系
title('按 ctrl+c結束 作者:歐陽太閒 b94611001 L=1+10'); %資訊
d2r=pi/180; %角徑轉換
cirr=pi*2; %圓周
L=10+1; %邊長=學號+10
triMat1=[0 0;L/2 0;0 len*sin(60*d2r);-L/2 0;0 0] %正三角矩陣
delayTime= 0.1 %延遲時間
ang1=0;
rotAng=10*d2r; %旋轉角速度
tri1=line(triMat1(:,1)-len/2,triMat1(:,2),'erasemode','xor','color','r','linewidth',1); %對右頂點旋轉
tri2=line(triMat1(:,1)+len/2,triMat1(:,2),'erasemode','xor','color','b','linewidth',1); %對左頂點旋轉
tri3=line(triMat1(:,1),triMat1(:,2)-L*sin(60*d2r),'erasemode','xor','color','g','linewidth',1); %對上頂點旋轉
x1=get(tri1,'xdata');y1=get(tri1,'ydata'); %x,y座標擷取
x3=get(tri2,'xdata');y3=get(tri2,'ydata');
x5=get(tri3,'xdata');y5=get(tri3,'ydata');
while 1
pause(delayTime); %設定延遲時間
ang1=ang1+rotAng;
x2=x1*cos(ang1)-y1*sin(ang1); %旋轉平移
y2=x1*sin(ang1)+y1*cos(ang1);
x4=x3*cos(ang1)-y3*sin(ang1)+L*3;
y4=x3*sin(ang1)+y3*cos(ang1);
x6=x5*cos(ang1)-y5*sin(ang1)+L*6;
y6=x5*sin(ang1)+y5*cos(ang1);
set(tri1,'xdata',x2,'ydata',y2);
set(tri2,'xdata',x4,'ydata',y4);
set(tri3,'xdata',x6,'ydata',y6);
if ang1>cirr
ang1=ang1-2*cirr;
end; %if結束
drawnow; %繪製
end %while結束

%作業4.1程式碼結束
%---------------------------------------
%作業4.2 b94611001 歐陽太閒
%結果圖片
clf; %清除畫面
axis equal; %座標等比
title('作業4.2 作者:歐陽太閒 b94611001 藍粗線為彈簧 單位:cm'); %資訊
xlabel('x-axis');
ylabel('y-axis');
d2r=pi/180;
%%%%%%%%桿%%%%%%%%
thick=4; %厚度
p1=[0 0]; %桿的長度及座標
p2=[10,0];
disX=(p1(1)-p2(1)); %x距離
disY=(p1(2)-p2(2)); %y距離
disAbs= ((abs(disX)^2+abs(disY)^2))^0.5 %試寫非複數版
disAng=atan(abs(disY/disX));
t=linspace(pi/2,2.5*pi,20); %產生一20個元素的向量自90deg至450deg
Xc=(thick/2)*cos(t'); %分開處理
Yc=(thick/2)*sin(t');
Xcs=Xc/2;
Ycs=Yc/2;
Xarr=[0;Xcs;Xc(1:10);disAbs+Xc(11:20);disAbs+Xcs;disAbs+Xc(20);Xc(1)]; %桿的各點矩陣
Yarr=[0;Ycs;Yc(1:10);Yc(11:20);Ycs;Yc(20);Yc(1)];
x2=Xarr; %教授的複數版的確簡潔許多
y2=Yarr;

for i=0:30:360 %桿繞一圈
angR=i*d2r;
xl=x2*cos(angR)-y2*sin(angR)+p1(1); %旋轉
yl=x2*sin(angR)+y2*cos(angR)+p2(2);
xs=p2(1)*cos(angR)-p2(2)*sin(angR)+p1(1); %處理端點
ys=p2(1)*sin(angR)+p2(2)*cos(angR)+p2(2);
link1=line(xl,yl,'color','r'); %繪製
%%%%%%%%彈簧%%%%%%%%
spring = line([15 xs],[0 ys],'linewidth',4);
end %結束
%作業4.2程式碼結束
%---------------------------------------
%作業4.3有兩種轉法
%結果四連桿相關位置
%結果每30deg軌跡(1)
%結果每30deg軌跡(2)
%結果影片

%作業4.3.1 b94611001 歐陽太閒

clf; %清除畫面
axis equal; %座標等比
title('作業4.3.2 第一種轉法 作者:歐陽太閒 b94611001 單位:cm'); %資訊
xlabel('x-axis');
ylabel('y-axis');
axis([-10 20 -8 8]); %固定座標系
d2r=pi/180; %轉換
%A(0,0);B(3,4);C(13,4);D(10,0),2cm,3cm,1.5cm,2cm
len=[10 5 10 5];
thickArr=[3 1.5 2 2];
linksArrXo=[0 3 13 10 0];
linksArrYo=[0 4 4 0 0];
linksArrX=linksArrXo;
linksArrY=linksArrYo;
for j=0:30:360 %不同角度
p1=[linksArrX(1) linksArrY(1)];
for i=1:1:4 %繪連桿
thick=thickArr(i); %厚度
p1=[linksArrX(i) linksArrY(i)]; %桿的長度及座標
p2=[linksArrX(i+1) linksArrY(i+1)];
disX=(p2(1)-p1(1)); %x距離
disY=(p2(2)-p1(2)); %y距離
if disX==0;
disAng=-pi/2;
p2(2)=-p2(2);
else
if linksArrY(i+1)-linksArrY(i)>0 %處理下彎
disAng=atan(disY/disX);
else
disAng=-atan(disY/disX);
end
if linksArrX(i+1)-linksArrX(i)>0 %處理向左
disAng=atan(disY/disX);
else
disAng=atan(disY/disX) + pi;
end
end
disAbs= ((disX)^2+(disY)^2)^0.5; %試寫非複數版
t=linspace(pi/2,2.5*pi,20); %產生一20個元素的向量自90deg至450deg
Xc=(thick/2)*cos(t'); %分開處理
Yc=(thick/2)*sin(t');
Xcs=Xc/2;
Ycs=Yc/2;
Xarr=[0;Xcs;Xc(1:10);disAbs+Xc(11:20);disAbs+Xcs;disAbs+Xc(20);Xc(1)]; %桿的各點矩陣
Yarr=[0;Ycs;Yc(1:10);Yc(11:20);Ycs;Yc(20);Yc(1)];
x2=Xarr;
y2=Yarr;
xl=x2*cos(disAng)-y2*sin(disAng)+p1(1); %旋轉
yl=x2*sin(disAng)+y2*cos(disAng)+p1(2);
xs=p2(1)*cos(disAng)-p2(2)*sin(disAng); %處理端點
ys=p2(1)*sin(disAng)+p2(2)*cos(disAng);
link11=line(xl,yl,'color','r'); %繪製

end %連桿繪製結束
%計算每轉30deg時角度
angR=j*d2r;
len2=len.^2;
Bx=len(2)*cos(angR);
By=len(2)*sin(angR);
Cy=By
Cx=Bx+len(3);
linksArrX=[0 Bx Cx 10 0];
linksArrY=[0 By Cy 0 0];
pause(1) %動態軌跡
end %轉動結束
%4.3程式碼結束
%---------------------------------------
%作業4.3.2第二種轉法 b94611001 歐陽太閒
clf; %清除畫面
axis equal; %座標等比
title('作業4.3 作者:歐陽太閒 b94611001 單位:cm'); %資訊
xlabel('x-axis');
ylabel('y-axis');
axis([-10 20 -8 8]); %固定座標系
d2r=pi/180; %轉換
%A(0,0);B(3,4);C(13,4);D(10,0),2cm,3cm,1.5cm,2cm
len=[10 5 10 5];
thickArr=[3 1.5 2 2];
linksArrXo=[0 3 13 10 0];
linksArrYo=[0 4 4 0 0];
linksArrX=linksArrXo;
linksArrY=linksArrYo;
for j=0:30:360 %不同角度
p1=[linksArrX(1) linksArrY(1)];
for i=1:1:4 %繪連桿
thick=thickArr(i); %厚度
p1=[linksArrX(i) linksArrY(i)]; %桿的長度及座標
p2=[linksArrX(i+1) linksArrY(i+1)];
disX=(p2(1)-p1(1)); %x距離
disY=(p2(2)-p1(2)); %y距離
if disX==0;
disAng=-pi/2;
p2(2)=-p2(2);
else
if linksArrY(i+1)-linksArrY(i)>0 %處理下彎
disAng=atan(disY/disX);
else
disAng=-atan(disY/disX);
end
if linksArrX(i+1)-linksArrX(i)>0 %處理向左
disAng=atan(disY/disX);
else
disAng=atan(disY/disX) + pi;
end
end
disAbs= ((disX)^2+(disY)^2)^0.5; %試寫非複數版
t=linspace(pi/2,2.5*pi,20); %產生一20個元素的向量自90deg至450deg
Xc=(thick/2)*cos(t'); %分開處理
Yc=(thick/2)*sin(t');
Xcs=Xc/2;
Ycs=Yc/2;
Xarr=[0;Xcs;Xc(1:10);disAbs+Xc(11:20);disAbs+Xcs;disAbs+Xc(20);Xc(1)]; %桿的各點矩陣
Yarr=[0;Ycs;Yc(1:10);Yc(11:20);Ycs;Yc(20);Yc(1)];
x2=Xarr;
y2=Yarr;
xl=x2*cos(disAng)-y2*sin(disAng)+p1(1); %旋轉
yl=x2*sin(disAng)+y2*cos(disAng)+p1(2);
xs=p2(1)*cos(disAng)-p2(2)*sin(disAng); %處理端點
ys=p2(1)*sin(disAng)+p2(2)*cos(disAng);
link11=line(xl,yl,'color','r'); %繪製

end %連桿繪製結束
%計算每轉30deg時角度,參考教授著機動學課本-四連桿運動
angR=j*d2r;
len2=len.^2;
Bx=len(2)*cos(angR);
By=len(2)*sin(angR);
item1=(len(4)^2-len(3)^2-len(1)^2+len(2)^2)./(Bx-len(1))/2;
item2=By./(Bx-len(1));
rslt=(((item1-len(1))^2).*item2^2-(item2^2+1).*(item2-len(4)^2))^0.5;
Cy=((item1-len(1)).*item2+rslt)./(item2^2+1);
Cx=item1-item2.*Cy;
linksArrX=[0 Bx Cx 10 0];
linksArrY=[0 By Cy 0 0];
pause(1) %動態軌跡
end %轉動結束
%4.3程式碼結束

2007年3月17日 星期六

Homework 3

作業三 b94611001 歐陽太閒
P3.1.1
%程式碼如下

%作業三P3.1.1 歐陽太閒
L1=32; %手臂長(cm)
L2=28; %手肘+手掌中心長
s=25; %肩頸距
h=30; %頭頂高
clf; %清除畫面
%藍線為肢體運動之對應位置,綠線和紅線分別為拳頭和肘關節軌跡
cosphi=(L1^2 - L2^2 + s^2 - h^2)/(2*(h*L2)+2*(L1*s));%計算夾角
costheta=(s^2+h^2-(L1^2+L2^2))/(2*L1*L2);
anglesl1= acos(abs(cosphi));
anglel1l2= (acos(abs(cosphi))+acos(abs(costheta)));

x=[0 -s,-s -s-L1*cos(anglesl1),-s-L1*cos(anglesl1) 0] %x-陣列
y=[0 0,0 L1*sin(anglesl1),L1*sin(anglesl1) h] %y-陣列
line(x,y); %繪製

for i=1:1:3 %嘗試上移
h=h+5;
cosphi=(L1^2 - L2^2 + s^2 - h^2)/(2*(h*L2)+2*(L1*s));
costheta=(s^2+h^2-(L1^2+L2^2))/(2*L1*L2);
anglesl1= acos(abs(cosphi));
anglel1l2= (acos(abs(cosphi))+acos(abs(costheta)));

x=[0 -s,-s -s+L1*cos(anglesl1),-s+L1*cos(anglesl1) 0]
y=[0 0,0 L1*sin(anglesl1),L1*sin(anglesl1) h]
line(x,y);
end
%繪製軌跡
%肘關節軌跡
i=[0:0.01:pi];
xt1=L1*cos(i)-s;
yt1=L1*sin(i);
track1= line(xt1,yt1);
set(track1, {'Color'},{'r'})
%拳頭軌跡
xt2=[0 0];
yt2=[0 h];
track2= line(xt2,yt2);
set(track2, {'Color'},{'g'})
%頭
i=[-pi:0.01:pi];
xt3=10*cos(i);
yt3=15*sin(i)+15;
track3= line(xt3,yt3);
set(track3, {'Color'},{'b'})
%標註
xlabel('x-axis');
ylabel('y-axis');
title('Homework P3.1 單位:cm 作者:歐陽太閒');
axis equal;%座標軸等距

%執行結果
x =
0 -25.0000 -25.0000 -25.3415 -25.3415 0
y =
0 0 0 31.9982 31.9982 30.0000
x =
0 -25.0000 -25.0000 -21.7640 -21.7640 0
y =
0 0 0 31.8360 31.8360 35.0000
x =
0 -25.0000 -25.0000 -18.8750 -18.8750 0
y =
0 0 0 31.4083 31.4083 40.0000
x =
0 -25.0000 -25.0000 -15.9903 -15.9903 0
y =
0 0 0 30.7055 30.7055 45.0000

%圖片
P3.1.1結果


P3.1.2

%程式碼
%作業三P3.1.2 歐陽太閒
L1=32; %手臂長(cm)
L2=28; %手肘+手掌中心長
s=20; %肩頸距
h=30; %頭頂高
clf; %清除畫面
%繪出肩頸
line([0 -s],[0 0]);
%頭
i=[-pi:0.01:pi];
xt3=10*cos(i);
yt3=15*sin(i)+15;
track3= line(xt3,yt3);
set(track3, {'Color'},{'b'});
%拳頭最大移動範圍,以60cm為半徑之圓
line([-s -s],[L1+L2 0]);
i=[-pi:0.01:pi];
xt1=(L1+L2)*cos(i)-s
yt1=(L1+L2)*sin(i)
fist= line(xt1,yt1);
set(fist, {'Color'},{'r'})
%標註
xlabel('x-axis');
ylabel('y-axis');
title('Homework P3.1.2 單位:cm 作者:歐陽太閒');
axis equal;%座標軸等距


%圖片-拳頭移動的最大範圍
P3.1.2結果

另外,可沿頭頂上方移動距
range=((L1+L2)^2+s^2)^(1/2)-h
結果:
range =
33.2456

P3.1.3
本作業根據之假設如下:
肩膀呈水平且不移動
假設手臂,手肘及頭頂中央均在一平面上運動
故可設肩肘關節皆為旋轉對(DOF=1),分析較為方便
假設手腕和手肘連結,不做運動
假設頭頸與肩高度差不變
假設肩,肘關節之旋轉有其上限
根據以上假設可將此作業視為一
三連桿與一滑塊機構(拳頭)(RRRP連桿組),而滑塊僅能依一個維度運動,可視為棱柱對,沿著頭頂上方垂直移動.
如此才能便於整體分析,而將其運動以數學型式表示,並且以MATLAB描繪之,而不需處理繁雜瑣碎的運動細節或者根據實驗結果慢慢繪製.

--
P3.2

1.旋轉對(Revolute pair, turning pair)
一個自由度,圓弧運動,面接觸的低對
生活中應用的非常多,幾乎大多數的可動機構上都會出現,
此種連接方式可靠而穩定,且製造維護相對容易,也常和其他接頭形式合併使用,例如門的鉸鏈,門閂,電扇,怪手,時鐘等.
鉸鏈
門閂
電扇
怪手
時鐘

2.低對(lower pairs)
物體之間以面或多面連接,因接觸面大而應力較小,傳統上較為穩定可靠,較不會因為應力產生影響結構的變形,為常見的連接方式.
主要有球面對(S,DOF=3),面型對(E,DOF=3),圓柱對(C,DOF=2),旋轉對(R,DOF=1),稜柱對(P,DOF=1),螺旋對(H,DOF=1)
例如常見的檯燈旋轉對

高對(higher pairs)
物體間以極小的面積連接,如點或線,因為應力相對較大,結構上較不安定,所以在過去在連接上較少見,不過近年來因為材料科學的進步,可以應用的場合和層面逐漸變多變廣.
主要有圓柱滾動,輪滾動,球體滾動或滑動等.
如辦公椅腳的滾輪.

而近年來也常出現同時使用各種不同的連接對的情況,稱為複合對,例如滾珠軸承(球狀高對和旋轉對)等,截取兩者的好處,而可獲得更高的效率
滾珠軸承

3.型式閉合結
利用連接對(結)的構形來限制另一桿的運動範圍
大多數的連接方式為此,結構簡單常見.
例如引擎的活塞

外力閉合結
利用外來力量(如重力等)保持兩桿接觸.
例如以下的抽屜是利用重力將其保持在滑軌上.
抽屜

--
P3.3

首先,根據達文西(Leonardo da Vinci,1452-1519)的人體圖
利用AutoCAD匯入後測量(如)得知人體之比例為:
身高:身長:手長:腿長:外切圓心和身長下端距:外切圓半徑:頸長=
[300 72 148.36 174 10.77 180 10]
肩頭角:68deg
腿胯角:32deg
故第二題之圓圈之直徑與人體之身高,臂長關聯為
360:300:148.36

故可依此撰寫一函數,繪成圖形
運作結果圖
執行命令為
acrobat(180);

%程式如下

function acrobato=acrobat(h)
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%homework P3.3%%%%%%

%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%作業三P3.1.1 歐陽太閒 b94611001

height=h; %身高
%由達文西人體圖測繪得的身高:身長:手長:腿長:外切圓心和身長下

端距:外切圓半徑比:頭
body=[300 72 148.36 174 10.77 180 10];
%角度
d2r=pi/180
%肩頭角
angleh=pi/2 - 68*d2r
%腿胯角
anglel=32*d2r
%利用身高推算各數值
bodyIns=(body./300).*h
bodyMatrix=[0, 0, -bodyIns(4)*cos(anglel), bodyIns(4)*cos

(anglel),0, -bodyIns(3)*cos(angleh), bodyIns(3)*cos

(angleh), 0;...
bodyIns(6)-bodyIns(5), bodyIns(6)-bodyIns(5)

+bodyIns(2), bodyIns(4)*sin(anglel)-bodyIns(5),...
bodyIns(4)*sin(anglel)-bodyIns(5), bodyIns(6)-

bodyIns(5)+bodyIns(2), bodyIns(6)-bodyIns(5)+bodyIns(2)

+bodyIns(3)*sin(angleh),...
bodyIns(6)-bodyIns(5)+bodyIns(2)+bodyIns(3)*sin

(angleh),bodyIns(6)+bodyIns(2)+bodyIns(5)+bodyIns(7);]
theta=-30
xtrans=bodyIns(6)*pi/6;
cirtrans=0;
clf;
for l=0:5
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%人體和外切圓繪製%%%

%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%畫圓
i=[-pi:0.01:pi];
xc1=(bodyIns(6))*cos(i)+cirtrans;
yc1=(bodyIns(6))*sin(i)+bodyIns(6);
circlet= line(xc1,yc1);
set(circlet, {'Color'},{'r'});
cirtrans= cirtrans+xtrans;
%身體座標
bodyMatrix2(1,:)=bodyMatrix(1,:)+l*xtrans; %平
bodyMatrix2(2,:)=bodyMatrix(2,:);
bodyArrx=[bodyMatrix2(1,1) bodyMatrix2(1,2)];%身x
bodyArry=[bodyMatrix2(2,1) bodyMatrix2(2,2)];%身y
drawB1= line(bodyArrx,bodyArry);
bodyArrx2=[bodyMatrix2(1,1) bodyMatrix2(1,3),bodyMatrix2

(1,1) bodyMatrix2(1,4)];%腿x
bodyArry2=[bodyMatrix2(2,1) bodyMatrix2(2,3),bodyMatrix2

(2,1) bodyMatrix2(2,4)];%腿y
drawB2= line(bodyArrx2,bodyArry2);
bodyArrx3=[bodyMatrix2(1,5) bodyMatrix2(1,6),bodyMatrix2

(1,5) bodyMatrix2(1,7)];%手x
bodyArry3=[bodyMatrix2(2,5) bodyMatrix2(2,6),bodyMatrix2

(2,5) bodyMatrix2(2,7)];%手y
drawB3= line(bodyArrx3,bodyArry3);
%頭
xh1=(bodyIns(7)*2)*cos(i)+l*xtrans+bodyMatrix(1,8);
yh1=(bodyIns(7)*2)*sin(i)+bodyMatrix(2,8);
head= line(xh1,yh1);
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%人體和外切圓繪製結束

%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%

%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%旋轉%%%%%%%%%%%%%%%

%%%%%%%%%%%%%%%%%
bodyMatrix(2,:) = bodyMatrix(2,:)-bodyIns(6);
%for p=1:1:7
% bodyMatrix(:,p)=tr*bodyMatrix(:,p);
% end
bodyMatrix=bodyMatrix';
ang=[theta]*d2r;
t=ang(1);
sint=sin(t);cost=cos(t);
tt(1,1)=cost;tt(1,2)=sint;
tt(2,1)=-sint;tt(2,2)=cost;
bodyMatrix=bodyMatrix*tt;
bodyMatrix=bodyMatrix';
bodyMatrix(2,:) = bodyMatrix(2,:)+bodyIns(6);
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%旋轉結束%%%%%%%%%%%

%%%%%%%%%%%%%%%%%%%%%%%%%%%%
end
%標註
xlabel('x-axis');
ylabel('y-axis');
title('Homework P3.3 單位:cm 作者:歐陽太閒');
axis equal;%座標軸等距
%homework P3.3結束
--
歐陽太閒作業三結束

2007年3月8日 星期四

Homework 2

b94611001 歐陽太閒

P2.1:

a.首先是一個骨骼機構的Flash遊戲,人體機構可以進行千變萬化的運動,也讓人類得以在地球上生存下來,和其他物種競爭.

(from:wireframe)

b.人體能進行如此豐富的動作,是由於精細的骨骼和關節與肌肉在神經的控制下的互動結果.
而以機動學的觀點,這些骨骼和關節便是運動結和連桿.在人體上中以球形對和旋轉對居多.
而由於生物體骨骼生長的限制和生物進化的原則,最後人體的骨骼體系以這兩類簡單的結構組成.
如下圖:

旋轉對如指關節,膝關節等,球形對如髖關節等.
由這些基本的機構,人類可以抓握,跑步,抬頭等等,成為自然界最複雜的的生物之一.
而由於生物體骨骼生長的限制和生物進化的原則,最後人體的骨骼體系以這兩類簡單的結構組成.
頭頸關節

脊椎

肩關節

腕關節

髖關節

膝關節

踝關節



P2.2:

人類在進行發明的過程中通常經過一段無法解析的思維過程,然而在今日快速發展的社會裡,若完全依靠靈光一現進行研發,則無法預期成效,也是管理的大忌.故工程設計的有效訓練對一個有生產力的工程師來說是有其必要的.而若要進行可以預測的研發(也就是合成)則必須先進行分析的逆向工程訓練.以避免設計出不可行的方案,或重新發明輪子.

而一創造或發明如何合理化,可進入量產,則必須經過一連串的過程,例如若要發展一可在空中進行低廉,自給自足,大量長期氣候觀測的氣球,那麼問題需求可以模糊地定為在高空自給無人載具,並可承載精密觀測儀器.
其背景則為在衛星太過昂貴,而地面觀測又不全面的情況下,無人價廉的高空觀測器就是很好的替代品.
所以,此研發的目標便是低成本,高承載,自行存活的空中載具,
更進一步我們便可訂出其性能規範,例如承載可達20kg,可以自行定位在某一經緯度,可以在20~50km高的平流層以某種能源永久存活,並且有高度的安定性.

接下來,觀念例如:可能使用太陽能為動力,利用GPS定位,現有的合成纖維,和避免同高度飛行器撞擊的警示裝置,強力無線電,節能的定位馬達等便會出現,就可以開始進行分析和評估,而工程訓練的效果最會發揮於此過程,也是學習曲線的整合.例如若使用鈽電池可能成本太高,且有安全顧慮,而以飛船形式存在可能利於航行但不利定點等,便可淘汰掉大多數的方案,以便進行細部的設計,就必須結合各領域的工程師和電腦軟體進行分工,進行各部份的詳細規劃和成本精算,最後便可將幾個方案製作原型,檢驗是否符合一開始的性能需求,並且嘗試裝載部份儀器,以便進行量產前的修正.若有錯則回到前面的步驟.最後選出表現最佳的原型,進行大量生產.

以上的過程便是經過訓練,有管理的發明創造,可以避免無謂的研發成本浪費(如許多叫好不叫座的高科技產品),也可以避免無頭蒼蠅式的胡亂投產,使得績效低落.所以工程設計之訓練是絕對必要的.

P2.3:

%code:
M=1+10; %M=(學號最後兩位數字值)+10,
x=[1:10]; %x=[1 2 3 4 5 6 7 8 9 10]
y=x.^(1/M); %y= x^(1/M)
graph=plot(x,y);%用plot(x,y)繪出y=f(x)之關係線。
xlabel('x'); %圖表設定
ylabel('y');
title('Homework P2.3');
grid on;

%結果
M =
11
x =
1 2 3 4 5 6 7 8 9 10
y =
Columns 1 through 6
1.0000 1.0650 1.1050 1.1343 1.1576 1.1769
Columns 7 through 10
1.1935 1.2081 1.2211 1.2328

%圖表