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

%圖表