2007年4月24日 星期二

hw7

我有參加本週(4/19)上課

設有三桿相連結成端桿(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;
問:

當t=[1 2 3 4 5]秒時,此端桿之對應方位如何?
繪出三桿之結點之速度,加速度與時間t之關係。
能作出此時間區段之動畫嗎?

動畫網址 http://www.youtube.com/watch?v=rPgKJmOifzY

第零秒
dyad_draw([53 58 48],[0 0 0],[0.2 0.5 0.3],[0 0.1 0.2])


第一秒 第二秒

第三秒

第四秒

第五秒

本作業會用到的function

dyad

function [vec,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
theta=theta(:);
rho=rho(:);
n=length(rho);i
f nargin <>
tdd=zeros(size(rho));
end
if nargin == 2,td=ones(size(rho));
end
if length(td) == 1
td=ones(size(rho))*td;
endif length(tdd) == 1,
tdd=ones(size(rho))*tdd;
end
td=td(:);
tdd=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 vv aa];
vec=[abs(sum(dyadata));angle(sum(dyadata))/d2g];


dyad_draw
function [truev,truea]=dyad_draw(rho,theta,td,tdd)
% analyze a dyad linkage composing cranks and a dyad with drawing.
% Inputs: rho:length of links
% theta:incling angles, deg.
% td:angular velocity, rad/
% tdd:angular acceleration,rad/s^2
clf;
[vec,data] = dyad(rho,theta,td,tdd);
x=[0;cumsum(real(data(:,1)))];y=[0;cumsum(imag(data(:,1)))];f
or i=1:length(x)-1
linkshape([x(i) y(i)],[x(i+1) y(i+1)],1);
end
for k=1:length(rho)
x0=x(k+1);y0=y(k+1);
vx=x0+real(data(k,2));vy=y0+imag(data(k,2));
ax=x0+real(data(k,3));ay=y0+imag(data(k,3));
line([x0 vx],[y0 vy],'marker','s','linewidth',2);
line([x0 ax],[y0 ay],'marker','s','color','r','linewidth',3)
truev(k)=((vx-x0)^2+(vy-y0)^2)^0.5;
truea(k)=((ax-x0)^2+(ay-y0)^2)^0.5;
end
sdata=sum(data);
ss=[real(sdata(1)) imag(sdata(1))];
vv=[real(sdata(2)) imag(sdata(2))];
aa=[real(sdata(3)) imag(sdata(3))];
line([0 ss(1)],[0 ss(2)],'linestyle',':','linewidth',2)
line([ss(1) ss(1)+vv(1)],[ss(2) ss(2)+vv(2)],...
'marker','d','color','g','linewidth',3)
line([ss(1) ss(1)+aa(1)],[ss(2) ss(2)+aa(2)],...
'marker','d','color','m','linewidth',3)
axis equal;grid on




linkshape
function linkshape(A,B,dd)
% Draw a link
% A,B:Initial final coordinates of link
% d:thickness of link(negative for line link)
if nargin==2,dd=1;end;
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);
Cout=max(d/2,0.2)*exp(j*t');Cin=Cout/2;
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



dyad_run
function dyad_run(rho,theta,td,tdd,time)
%本函式引用dyad_draw function
%最後一項time是時間矩陣,輸入秒數則可以做成動畫
thetaTEMP=theta;
tdTEMP=td;
thetaTEMP=theta;
for n=1:length(time)
for m=1:length(rho)
tdTEMP(m)=td(m)+tdd(m)*(n-1);
thetaTEMP(m)=theta(m)+td(m)*(n-1)+0.5*tdd(m)*(n-1)^2;
end
[v,a]=dyad_draw(rho,thetaTEMP,tdTEMP,tdd)
if n > 1
for k=1:length(rho)
vv(k,n-1)=v(k);
aa(k,n-1)=a(k);
end
end
pause(0.5)
end
for j=1:length(rho)
plot(vv(j,:),'r+-')
plot(aa(j,:),'cx--')
end

2007年4月20日 星期五

hw6

6-1 標出桿號及結數,並計算共計有多少連桿及結數

利用古魯伯公式,計算此機構之可動度,請列出其計算方法
可動度(自由度) M=3(N-1)-(3J-Σfi)=3(N-J-1)+Σf i
連桿總數=N =12
運動結總數=J =3(正常)+2(P處)+2(X處)+2(Q處)+2(Y處)+2(Z處)+2(R處)=15
第i運動結之連結度=fi
Σf=3*2+9*1=15
M= 3

請利用function[df]=gruebler()函數計算其對應之可動度

function [df]=gruebler(nlink,jointype)
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;

[nlink表總桿數
Jointype表行矩陣,表屬於各種型結之數目,其中各元素之內容為:1 旋轉結(R) 2 滑動結(P) 3 複式結(滑動與轉動) (S) 4 球結(B) 5 圓筒結(C)6 平面結(PL) 7 圓柱滾動(CR) 8 凸輪接觸(CP) 9 螺旋結(H)10 球結(滾動與滑動)(BR) 11 點接觸結(SP)。 ]

呼叫方式為:
[df]=gruebler(nlink,jointype)

討論此機構中滑塊及滑槽對可動度之影響
滑槽--造成R處的自由度是2,可旋轉並可延滑槽方向移動
滑塊(第11桿處)--造成自由度為2,可旋轉並可延x方向移動
滑塊(P)--造成自由度為2,可旋轉並可延滑塊方向移動

6-2
各結之自由度如何?
球結=3 旋轉結=1 圓筒結=2
利用古魯伯公式如何計算整個機構之自由度,可以動嗎?
N=6 J=6 Σf=3*3(球結)+2*1(旋轉結)+2*1(圓筒結)=13
M=6(N-J-1)+Σf=7
請利用function[df]=gruebler()函數計算其對應之可動度,並相互印證。

function [df]=gruebler(nlink,jointype)
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;

(此程式與6.1同,只差在乘的倍數3由改成6!)

這裡有所謂楕性自由度嗎?其對整個機構之影響如何?
有,此機構具兩個桿(兩端接中間球結的桿及最右邊圓筒結的那根桿)可自轉,可動度不能算,固存在惰性自由度 =2
也就是此機構真正可動度為7-2=5

6-3
何謂葛拉索機構及非葛拉索機構?
葛拉索機構--曲柄搖桿機構,雙曲柄機構,雙搖桿機構這三種都屬之,因為符合葛拉索定理 (S+g<p+q)當最短桿和最長桿的和小於另兩桿的和,則至少有一桿為可旋轉

非葛拉索機構-- (S+g>p+q) 所有三個活動連桿必屬搖桿或稱為參搖桿機構

第一組
g=7
s=4
p+q=6+5
s+g=p+q=11 為葛拉索變點機構 可前進或後退
驗證:Neutral Linkage
第二組
g=8
s=3.6
p+q=5.1+4.1
11.6=s+g>p+q=9.2 為非葛拉索機構 屬搖桿機構,無法產生完整的迴轉運動
驗證:Non-Grashof Linkage
第三組
g=6.6
s=3.1
p+q=5.4+4.7
9.7=s+g<p+q=10.1 為葛拉索機構 屬於曲柄搖桿型
驗證:Crank-Rocker Linkage

2007年4月11日 星期三

hw5-2

四指同時的圖
食指

中指


小拇指

無名指


第一個程式

function finger(F,th1,th2,th3)

PALMLENGTH=F;

L=6/19*PALMLENGTH; %訂出三節手指與手掌之比例

L1=27/95*PALMLENGTH;

L2=5/19*PALMLENGTH;

Ax=[0 L/3 L/2 2*L/3 L 2*L/3 L/2 L/3 0];

Ay=[0 L/16 4*L/65 L/16 0 -L/16 -4*L/65 -L/16 0];

Bx=[0 L1/3 L1/2 2*L1/3 L1 2*L1/3 L1/2 L1/3 0];

By=[0 L1/20 L1/18 L1/20 0 -L1/20 -L1/18 -L1/20 0];

Cx=[0 L2/3 2*L2/3 L2 2*L2/3 L2/3 0];

Cy=[0 L2/17 L2/15 0 -L2/15 -L2/17 0];

axis equalline(Ax,Ay);

line(Bx+L,By);

line(Cx+L+L1,Cy);

clf

axis equal

AXIS([-15 15 -15 15]);
X1=Ax*cosd(-th1)-Ay*sind(-th1);

Y1=Ax*sind(-th1)+Ay*cosd(-th1);

line(X1,Y1)

th2=180+th1-th2;

X2=Bx*cosd(-th2)-By*sind(-th2)+X1(5);

Y2=Bx*sind(-th2)+By*cosd(-th2)+Y1(5);

line(X2,Y2)

th3=180+th2-th3;

X3=Cx*cosd(-th3)-Cy*sind(-th3)+X2(5);

Y3=Cx*sind(-th3)+Cy*cosd(-th3)+Y2(5);

line(X3,Y3)

axis equal





第二個程式

function finger2(F,th1,th2,th3)

PALMLENGTH=F;

L=6/16*PALMLENGTH %訂出三節手指與手掌之比例
L1=25/90*PALMLENGTH
L2=3/16*PALMLENGTH

Ax=[0 L/3 L/2 2*L/3 L 2*L/3 L/2 L/3 0];
Ay=[0 L/16 4*L/65 L/16 0 -L/16 -4*L/65 -L/16 0];
Bx=[0 L1/3 L1/2 2*L1/3 L1 2*L1/3 L1/2 L1/3 0];
By=[0 L1/20 L1/18 L1/20 0 -L1/20 -L1/18 -L1/20 0];
Cx=[0 L2/3 2*L2/3 L2 2*L2/3 L2/3 0];
Cy=[0 L2/17 L2/15 0 -L2/15 -L2/17 0];

axis equal

line(Ax,Ay);
line(Bx+L,By);
line(Cx+L+L1,Cy);

axis equal

AXIS([-15 15 -15 15]);
X1=Ax*cosd(-th1)-Ay*sind(-th1);
Y1=Ax*sind(-th1)+Ay*cosd(-th1);
line(X1,Y1)

th2=180+th1-th2;

X2=Bx*cosd(-th2)-By*sind(-th2)+X1(5);
Y2=Bx*sind(-th2)+By*cosd(-th2)+Y1(5);
line(X2,Y2)

th3=180+th2-th3;
X3=Cx*cosd(-th3)-Cy*sind(-th3)+X2(5);
Y3=Cx*sind(-th3)+Cy*cosd(-th3)+Y2(5);
line(X3,Y3)
axis equal


第三個程式
function finger3(F,th1,th2,th3)
PALMLENGTH=F;
L=10/19*PALMLENGTH %訂出三節手指與手掌之比例
L1=22/95*PALMLENGTHL2=5/16*PALMLENGTH
Ax=[0 L/3 L/2 2*L/3 L 2*L/3 L/2 L/3 0];
Ay=[0 L/16 4*L/65 L/16 0 -L/16 -4*L/65 -L/16 0];

Bx=[0 L1/3 L1/2 2*L1/3 L1 2*L1/3 L1/2 L1/3 0];
By=[0 L1/20 L1/18 L1/20 0 -L1/20 -L1/18 -L1/20 0];

Cx=[0 L2/3 2*L2/3 L2 2*L2/3 L2/3 0];
Cy=[0 L2/17 L2/15 0 -L2/15 -L2/17 0];

axis equal
line(Ax,Ay);
line(Bx+L,By);
line(Cx+L+L1,Cy);
axis equal

AXIS([-15 15 -15 15]);
X1=Ax*cosd(-th1)-Ay*sind(-th1);
Y1=Ax*sind(-th1)+Ay*cosd(-th1);
line(X1,Y1)

th2=180+th1-th2;
X2=Bx*cosd(-th2)-By*sind(-th2)+X1(5);
Y2=Bx*sind(-th2)+By*cosd(-th2)+Y1(5);
line(X2,Y2)

th3=180+th2-th3;
X3=Cx*cosd(-th3)-Cy*sind(-th3)+X2(5);
Y3=Cx*sind(-th3)+Cy*cosd(-th3)+Y2(5);
line(X3,Y3)
axis equal




第四個程式
function finger4(F,th1,th2,th3)
PALMLENGTH=F;
L=6/15*PALMLENGTH %訂出三節手指與手掌之比例
L1=27/90*PALMLENGTH
L2=5/15*PALMLENGTH

Ax=[0 L/3 L/2 2*L/3 L 2*L/3 L/2 L/3 0];
Ay=[0 L/16 4*L/65 L/16 0 -L/16 -4*L/65 -L/16 0];
Bx=[0 L1/3 L1/2 2*L1/3 L1 2*L1/3 L1/2 L1/3 0];
By=[0 L1/20 L1/18 L1/20 0 -L1/20 -L1/18 -L1/20 0];
Cx=[0 L2/3 2*L2/3 L2 2*L2/3 L2/3 0];
Cy=[0 L2/17 L2/15 0 -L2/15 -L2/17 0];

axis equal
line(Ax,Ay);
line(Bx+L,By);
line(Cx+L+L1,Cy);
axis equal

AXIS([-15 15 -15 15]);
X1=Ax*cosd(-th1)-Ay*sind(-th1);
Y1=Ax*sind(-th1)+Ay*cosd(-th1);
line(X1,Y1)

th2=180+th1-th2;
X2=Bx*cosd(-th2)-By*sind(-th2)+X1(5);
Y2=Bx*sind(-th2)+By*cosd(-th2)+Y1(5);
line(X2,Y2)th3=180+th2-th3;

X3=Cx*cosd(-th3)-Cy*sind(-th3)+X2(5);
Y3=Cx*sind(-th3)+Cy*cosd(-th3)+Y2(5);
line(X3,Y3)
axis equal




畫出來的程式
theta1=linspace(0,90,10)
theta2=linspace(180,90,10)
theta3=linspace(0,270,10)

for n=1:10
finger(9.5,theta1(n),theta2(n),theta3(n))end;


-------
以物理學過的方法解此題 :
在投球時候,會產生加速度
向心加速度an=w^2/r
切線加速度at=a*r
(w--角速度 r--手指長 a--角加速度)

2007年4月10日 星期二

hw5

http://www.youtube.com/watch?v=os_zxVlAFyE

5.1.1
L=30;%先設定手臂長度
L1=26;
L2=6;

arm1x=[0 L/3 L/2 2*L/3 L 2*L/3 L/2 L/3 0];%開始定座標描繪出手的形狀
arm1y=[0 L/16 4*L/65 L/16 0 -L/16 -4*L/65 -L/16 0];
arm2x=[0 L1/3 L1/2 2*L1/3 L1 2*L1/3 L1/2 L1/3 0];
arm2y=[0 L1/20 L1/18 L1/20 0 -L1/20 -L1/18 -L1/20 0];
palmx=[0 L2/3 2*L2/3 L2 2*L2/3 L2/3 0];
palmy=[0 L2/17 L2/15 0 -L2/15 -L2/17 0];
axis equalline(arm1x,arm1y);line(arm2x+L,arm2y);%先前把三部份都訂在原點,現在要平移置連結位置(即加上上一部分的長度)
line(palmx+L+L1,palmy);%加上兩隻手臂長度
5.1.2
function body(L,L1,L2,theta1,theta2,theta3)
axis([-40 40 -40 40]);
arm1x=[0 L/3 L/2 2*L/3 L 2*L/3 L/2 L/3 0];%開始定座標描繪出手的形狀(上臂)
arm1y=[0 L/16 4*L/65 L/16 0 -L/16 -4*L/65 -L/16 0];
arm2x=[0 L1/3 L1/2 2*L1/3 L1 2*L1/3 L1/2 L1/3 0];%(下臂)
arm2y=[0 L1/20 L1/18 L1/20 0 -L1/20 -L1/18 -L1/20 0];
palmx=[0 L2/3 2*L2/3 L2 2*L2/3 L2/3 0];%(手掌)
palmy=[0 L2/17 L2/15 0 -L2/15 -L2/17 0];
axis equalline(arm1x,arm1y);
line(arm2x+L,arm2y);
line(palmx+L+L1,palmy);
axis equalAXIS([-60 60 -60 60]);
X1=arm1x*cosd(-theta1)-arm1y*sind(-theta1);%上臂旋轉
Y1=arm1x*sind(-theta1)+arm1y*cosd(-theta1);
line(X1,Y1)
theta2=180+theta1-theta2;
X2=arm2x*cosd(-theta2)-arm2y*sind(-theta2)+X1(5);%下臂旋轉加上平移至接到上臂(括號內
的5是指第五個座標為連接點)
Y2=arm2x*sind(-theta2)+arm2y*cosd(-theta2)+Y1(5);
line(X2,Y2)theta3=180+theta2-theta3;
X3=palmx*cosd(-theta3)-palmy*sind(-theta3)+X2(5);%手掌旋轉後再平移至接到下臂
Y3=palmx*sind(-theta3)+palmy*cosd(-theta3)+Y2(5);
line(X3,Y3)
axis equal
5.1.3
body(35,30,10,90,-45,-30)
5.1.4
L=30;%先設定手臂長度
L1=26;
L2=6;
arm1x=[0 L/3 L/2 2*L/3 L 2*L/3 L/2 L/3 0];%開始定座標描繪出手的形狀
arm1y=[0 L/16 4*L/65 L/16 0 -L/16 -4*L/65 -L/16 0];
arm2x=[0 L1/3 L1/2 2*L1/3 L1 2*L1/3 L1/2 L1/3 0];
arm2y=[0 L1/20 L1/18 L1/20 0 -L1/20 -L1/18 -L1/20 0];
palmx=[0 L2/3 2*L2/3 L2 2*L2/3 L2/3 0];
palmy=[0 L2/17 L2/15 0 -L2/15 -L2/17 0];
axis equalline(arm1x,arm1y);
line(arm2x+L,arm2y);%先前把三部份都訂在原點,現在要平移置連結位置(即加上上一部分的長
度)
line(palmx+L+L1,palmy);%加上兩隻手臂長度
clf
theta1=linspace(-90,-75,10)%從-75度到-90度,共分十等分
theta2=linspace(-45,-35,10)theta3=linspace(-30,-10,10)
for n=1:10;%FOR迴圈跑十次
axis equalAXIS([-60 60 -60 60]);
X1=arm1x*cosd(-theta1(n))-arm1y*sind(-theta1(n));%上臂旋轉
Y1=arm1y*cosd(-theta1(n))+arm1x*sind(-theta1(n));
line(X1,Y1)theta2(n)=180+theta1(n)-theta2(n);
X2=arm2x*cosd(-theta2(n))-arm2y*sind(-theta2(n))+X1(5)%下臂旋轉再平移置上臂接點;
Y2=arm2y*cosd(-theta2(n))+Y1(5)+arm2x*sind(-theta2(n));
line(X2,Y2)theta3(n)=180+theta2(n)-theta3(n);
X3=palmx*cosd(-theta3(n))-palmy*sind(-theta3(n))+X2(5);%手掌旋轉後平移接至下臂
Y3=palmy*cosd(-theta3(n))+Y2(5)+palmx*sind(-theta3(n));
line(X3,Y3)pause(0.35)%停0.35秒再下一個圖
clf %清除螢幕end;