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


第五次作業結束

4 則留言:

不留白老人 提到...

太閒:這一題你做很非常好。整個分析也很完整。

th86 提到...

謝謝老師的指教

匿名 提到...

太閒救救我><

我昨天晚上去老師的講義區抓了dyad的function來用,

可是我發現我不管怎麼弄,

debug都會告訴我說dyad這個function有錯,

可是我找不到錯啊><。

主要就是錯在
if nargin<4,  
tdd=zeros(size(rho))  
if nargin==2,  
td=ones(size(rho))  
end
end
這幾行裡面

他說我missing variable or function

我現在只知道nargin是代表我輸入的變數有幾個,

剩下zeros跟ones我看不太懂,

不過這幾個functions都是matlab內建的所以我想應該也沒有少掉什麼function

然後變數我不是有給了嗎/ \

感覺上也不太可能少呀,

好奇怪 我弄了好久都還是卡在這邊,

除非我狠下心把上面那幾行刪掉,

不然真的跑不動!!

救我 ><。

th86 提到...

那個dyad的最後一行要改成vec(原為vect)