2/4/07

6.8 桿上任意點之動態分析

桿上任意點之位置


四連桿之運動,其各連接點之路徑及運動狀態均可利用f4bar.m程式解析。但在桿上或桿外延伸點之分析則必須就該剛體之對應關係進行探討。就某一連桿而言,由於屬剛體性質,故只要知道其中兩點之運動狀態,即可就剛體本身之角速度及角加速度分析得其結果。下圖是以一個連接於第三桿上之點A位置為例:


圖6.2 四連桿之關係位置及各桿名稱

四連桿機構之運動已可以從f4bar.m函數求得其相關位置、速度及加速度,這些值可以在計算各桿之延伸點時引用。但這些點僅是桿間之連結點,如PQR等三點,至於桿上其他點或由各桿延伸到任意點之特性則必須以另外方法求證。理論上,各桿上之點如PQR為已知,則在任意桿上之位置之運動狀況應可求得。

在剛體中,由於點間無相對運動,故剛體上之任何點除位置不同外,其角速度及角加速度應相同。基於此原理,我們應可據以運算任一桿上之點或該桿所帶動之各點。圖6.2中,設A點為第三桿上之點,且其與桿QP間之夾角為γ(圖中為α),A點之位置向量可表示如下:

ra = r2 + r6 (6.37)
θ6= θ3 + γ (6.38)

以複數表示,點A之位置向量rA為:

ra=r2+r6ejθ6=r2+r6ej(θ3+γ)
=r2+r6ejθ3e
=r2+r6[cos(θ3+γ)+jsin(θ3+γ)] (6.39)

桿上任意點之速度與加速度


A點之速度及加速度分別表示如下:

ra'=r2'+jr6ω3ejθ3e
=r2'+r6ω3[-sin(θ3+γ)+jcos(θ3+γ)] (6.40)

ra"=r2"+r6(jα3-ω3²)ej(θ3+γ)
=r2"+r6(jα3-ω3²)[cos(θ3+γ)+jsin(θ3+γ)] (6.41)

函數body之程式參數


上面公式6.37-6.41計算任意桿上之延伸點之位置、速度及加速度等,可以利用MATLAB程式body函數計算,其呼叫型式如下:

  [val]=body(r6,alpha,values,link)

輸入參數:
  • r6:桿r6之長度
  • alpha: 與QP間之夾角,以度表示,亦可有正負值。
  • values:四連桿參數,如同f4bar.m之輸出。
  • link: 增加點之所屬桿序
  • val: 共五點,屬複數型式,代表最初點、點A及最終點之位置向量、點A之速度及加速度向量,以桿3為例,則為:[Q A P A' A"]。


body程式內容(之一)



function [val]=body(r6,alph,values,link)
%
%function [val]=body(r,alph,values,link)
%Find kinematics of an arbitrary point in a linkage
%Inputs:
% r6 = length of point from link's origin,Q
%alph= angle in deg. between the base link and r
%values= vetor output from the call of f4bar.m
%link =the link that the point lays on, 1-4
%outputs:(in complex form)
%val(1):initial position,(say Q, for link 2)
%val(3):middle position,(say P, for link 2)
%val(2):final position,or position of A
%val(4):velocity of A
%val(5):acceleration of A
%
r2=values(link,1);
d2g=pi/180;
switch link
case 2 % on the crank
val(1)=0;v0=0; a0=0;
val(3)=values(2,1);
case 3 % on the coupler
val(1)=values(2,1);
val(3)=values(1,1)+values(4,1);
v0=values(1,5);
a0=values(3,5);
case 4 % on the rocker
val(1)=values(1,1);
val(3)=values(1,1)+values(4,1);
v0=0; a0=0;
case 1 % on the frame
val(1)=0; v0=0; a0=0;
val(3)=values(1,1);
end
th6=(values(link,2)+alph)*d2g;
efact=exp(j*th6);
w6=values(link,3);
a6=values(link,4);
val(2)=val(1)+r6*efact;
val(4)=v0+j*r6*w6*efact;
val(5)=a0+(j*r6*a6-r6*w6*w6)*efact;



draw4link程式內容(之二)


本程式以線繪四連桿之連接之情形,主動桿使用藍色表示,搖桿為綠色,地桿為黑色,另一桿為藍色。本程式使用f4bar.m執行後之資料作為輸入,並設定其主動桿。

function h=draw4link(values,linkdrive)
%function draw4link(values,b,linkdrive)
%draw the positions of four-bar links
% values are data from f4bar.m
%linkdrive: 0 for crank, 1 for coupler
%clf;
if nargin<2, linkdrive=0;end
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;
h(1)=line([0 rx(1)],[0 ry(1)],'color','k','LineWidth',4);
h(4)=line([rx(1) rx(3)],[ry(1) ry(3)],'color','g','LineWidth',1.5);
if linkdrive==0
h(2)=line([0 rx(2)],[0 ry(2)],'color','b','LineWidth',2);
h(3)=line([rx(2) rx(3)],[ry(2) ry(3)],'color','r',...
'LineWidth',1.5,'marker','o');
else
h(2)=line([0 rx(2)],[0 ry(2)],'color','r','LineWidth',1.5);
h(3)=line([rx(2) rx(3)],[ry(2) ry(3)],'color','b',...
'LineWidth',2,'marker','o');
end
text(0,0,' O');text(rx(1),ry(1),' R');
text(rx(2),ry(2),' P');text(rx(3),ry(3),' Q');
axis equal
grid on


linkplate程式內容(之三)


如前所介紹,linkplate可以繪出桿之延伸部份,故利用body所得到第延長桿之座標可以利用此函數繪出。其輸入為對應點之座標及接點處之圓直徑dd,後者若為負值則會直接在圖形模式下繪出其外形。

function [x,y]=linkplate(x0,y0,dd)
% Drawing for multiple links
% Inputs:
% x0,y0:coordinates of points,the points
% must be specified in counterclockwise.
% dd:dia. of circle
% Example
% [x,y]=linkplate([0.5 2 3 2],[1 3 2 0.5],-1);
nn=length(x0);d=abs(dd)/2;x0=x0(:);y0=y0(:);
T=[x0 y0];T=sortrows(T,[-2,1]);
x2=[T(2:end,1);T(1,1)];
y2=[T(2:end,2);T(1,2)];
V=(x2-x0)+(y2-y0)*i;
D=abs(V);th=angle(V);
t=linspace(pi/2,2.5*pi,20);
Cout=max(d,0.2)*exp(j*t');Cin=Cout/2;
M=[];
for k=1:nn,
P=[Cin;Cout(1:10);D(k)+[Cout(11:20);Cin;Cout(20)]];
xx=real(P);yy=imag(P);tx=th(k);
x=xx*cos(tx)-yy*sin(tx)+x0(k);
y=xx*sin(tx)+yy*cos(tx)+y0(k);
if dd<0, line(x,y);end
end


執行例



>> [val,form]=f4bar([5 2 4 3],0,60,10,0,-1,0)
val =
Columns 1 through 3
5 0 0
1 + 1.7321i 60 10
3.796 + 1.261i 18.376 -2.8801
-0.20397 + 2.9931i 93.899 4.5735
Columns 4 through 6
0 10 + 17.321i 1 + 1.7321i
0 -0.93284 + 13.689i 4.796 + 2.9931i
28.802 -100 - 173.21i 0
57.491 -167.81 - 74.331i 0
form =
1

>> draw4link(val,0) %繪出四連桿之結構
ans =
168 170 171 169

>> [vals]=body(3,30,val,3);%接於第三桿,其長度為3與第三桿夾角為30度。
>> [x,y]=linkplate(real(vals(1:3)),imag(vals(1:3)),-1);

執行結果:

利用linkplate函數繪出之複雜外形

上述呼叫linkplate函數若不合意,亦可使用patch這個指令,這是內建指令,其型式為:

  patch(x,y,'r')

後一項輸入為顏色,可以更換為其他顏色,如'b','k','g'等。故linkplate 若改為patch,即:

patch(real(vals(1:3))',imag(vals(1:3))','r')



利用patch指令繪製之三角形

同理,若設定在桿二,長度為6,夾角為30,其結果為:

>> [vals]=body(6,30,val,2);% 落點在桿2
>> abs(vals)
ans =
0 6 2 60 600

上述介紹之函數,未來均可以在四連桿中使用,讀多熟悉其功能及運作。