2007年5月16日 星期三

作業九

我本週有上課。

請就教科書中第四章第五節之偏置機構作另類分析,分析過程可採你所知的方式(包括講義中所列的方法)。運動中分以曲桿驅動及滑塊驅動的方式,並說明運動的 界限或範圍。設此機構之曲桿長Rcm , 連桿Lcm,滑塊之偏置量為10cm等數據作分析。其中,R=10+(學號末二碼),L=R+5 。

我的學號:b94202029
曲桿長R=39;
連桿長L=44;
滑塊偏置量e=10;

首先網路講義對於sldlink的解說有誤: r(1)為固定桿長,其長度會變化,故可設為0。 r(4)為偏置量,不是可有可無,當有偏置量時必須輸入。

另外網路講義中sld_angle_limits的程式碼沒有把所有狀況都寫進去:
第二桿為驅動桿的第2種情況沒有寫入程式碼中
應該加入以下程式碼(請插在case 0 中,if和第1個else if 中間)
------------------------------------------------------------------------------------------
elseif r3+r4>=r2 & r4>=r3 % 網路講義中的(2) 此部份是網路的程式碼中遺漏的部份
Qstart=asin((r4-r3)/r2);
Qstop=pi-asin((r4-r3)/r2);
------------------------------------------------------------------------------------------

網路講義介紹drawsldpaths的部份,其呼叫方式、輸入參數與程式內容部份,引數都不一樣。正確的應該是:
drawsldpaths(r6,th6,r,th1,td2,tdd2,sigma,npts,driver,mode)
r6:外加固定桿長度
th6:外加固定桿角度
r:各桿件長度
th1:地桿水平角度
td2:驅動桿角速度
tdd2:驅動桿角加速度
sigma:分支型or閉合型
npts:分割點數目
driver:=0,曲桿
驅動;=1,結合桿驅動;=2,滑塊驅動
mode:
=0,畫簡單位置圖;=1 畫所有圖表;=2畫所有圖表,但用簡單位置圖。
而固定桿就只能在曲桿上,無法挑選。

最後,move_sldpaths程式碼內有很多個"符號,造成無法執行。但現在已經修改過了。
但這個程式也無法做出連續的連桿動作。關於這部份我會在底下討論運動情形時詳述。

------------------------------------------------------------------------------------------------
我們先來檢視這個滑塊機構的極限運動情形。現在設:
r=[0 39 44 10];
theta1=0;

使用sld_angle_limits,找出驅動桿極限運動情形,並用drawsldlimits畫出其位置:
注意:當驅動桿為第二及第三桿時,其Qstart與Qstop分別表示驅動桿之最小及最大角度;但當驅動件為滑塊時,其不再是角度,而是其對應之桿一最小及最大長度,亦即r1min與r1max。
-----------------------------------------------------------------------------------------------
驅動桿為曲桿情形:

r=[0 39 44 10];
theta1=0;
driver=0;
[Qstart, Qstop]=sld_angle_limits(r,theta1,driver)

Qstart =
-60.6679
Qstop =
240.6679

sigma=1;
drawsldlimits(r,theta1,sigma,driver);

sigma=-1;
drawsldlimits(r,theta1,sigma,driver);



驅動桿為結合桿情形:

driver=1;
[Qstart, Qstop]=sld_angle_limits(r,theta1,driver)

Qstart =
-41.2306
Qstop =
221.2306

sigma=1;
drawsldlimits(r,theta1,sigma,driver);

sigma=-1;
drawsldlimits(r,theta1,sigma,driver);




驅動桿為滑塊之情形:

r=[0 39 44 10];
theta1=0;
driver=2;
[r1min, r1max]=sld_angle_limits(r,theta1,driver)

r1min =
-82.3954
r1max =
82.3954

sigma=1;
drawsldlimits(r,theta1,sigma,driver);

sigma=-1;
drawsldlimits(r,theta1,sigma,driver);


-----------------------------------------------------------------------------------------------
由以上觀察可得知:在極限角度下的滑塊桿件的狀態不會跟滑塊桿件是分支型或閉合型有關!其實sld_angle_limits的input本來就沒有sigma,所以只是把極限狀況畫出來的drawsldlimits,在正常的滑塊分析上,可能可以被改寫成不需要輸入sigma。
-----------------------------------------------------------------------------------------------


到目前為止,我們已經知道了在曲桿、結合桿、滑塊為驅動桿時,驅動桿的極限角度(或位置)以及整組桿件的狀態。
接下來我們要分析的是這個桿件如何運動。首先要釐清一點:不管是用曲桿、結合桿、滑塊當作驅動桿,整個桿件組做完一次完整的運動的歷程是不會改變的。但是這個運動歷程會和這個桿件是分支型還是閉合型有關。有關這部份,我的作業八裡面就有提過。所以以下我只挑選用曲桿作為驅動桿,討論分支型與閉合型下的桿件運動。
(此處的運動是指桿件行進的軌跡,不是桿件的速度與加速度。不同的驅動桿和不同的輸入都會造成整個桿件的速度與加速度不同。)

我先討論sigma=1的情形。畫出曲桿在各個角度下時,整個桿件的狀態:
-----------------------------------------------------------------------------------------------
以下有呼叫drawsldlinks程式者,此程式內容有更動:我將axis([-90,90,-30,30])加在axis equal之前一行,以固定整個座標軸的大小。但座標軸隨著桿件而平移是無可避免之事。
------------------------------------------------------------------------------------------------
r=[0 39 44 10];
theta1=0;
driver=0;
sigma=1;

[Qstart, Qstop]=sld_angle_limits(r,theta1,driver)
[values]=drawsldlinks(r,theta1,Qstart,sigma,driver);
pause;
pause(0.05);
clf;

for theta2=(-60):1:240;
[values]=drawsldlinks(r,theta1,theta2,sigma,driver);
pause(0,05);
clf;
end

[values]=drawsldlinks(r,theta1,Qstop,sigma,driver);



------------------------------------------------------------------------------------------------

這是從Qstart開始到Qstop停止的影片。注意到滑塊一開始是往右邊移動,後來就開始往左移動,不斷往左移動直到影片結束。那如果曲桿的的運動是從Qstart開始到Qstop、再從Qstop開始到Qstart、再從Qstart開始到Qstop......一直下去,這樣的情況下整個桿件會怎麼移動?
上一段提到滑塊在曲桿角度接近Qstop時,一直都是往左移動。所以到了Qstop的瞬間,滑塊的速度方向是往左,此時結合桿施加給滑快的力完全沒有平行方向的分量,所以滑塊在水平方向的速度在這一瞬間不會改變,也就是說滑塊在曲桿角度經過Qstop的時候會繼續往左移動。這正代表當整個桿件從Qstop開始回到Qstart的時候,桿件的狀態是sigma=-1而不是sigma=1!!老師的move_sldpaths程式的錯誤就是在這裡。

sigma=-1的情況就不用討論,只是和sigma=1的情況左右相反罷了。

所以我只要把從Qstop開始回到Qstart的運動寫下,再用while使他做無限迴圈,就可以製造出這個連桿的運動動畫。
------------------------------------------------------------------------------------------------
以下有呼叫drawsldlinks程式者,程式有更動,更動內容在上面已經提過
------------------------------------------------------------------------------------------------
r=[0 39 44 10];
theta1=0;
driver=0;

[Qstart, Qstop]=sld_angle_limits(r,theta1,driver)

% k矩陣的row1:從k(1,1)到k(1,303)是儲存逆時針旋轉的角度值,從k(1,304)到k(1,606)是儲存逆時針旋轉的角度值。
% k矩陣的row2:從k(1,1)到k(1,303)是儲存逆時針旋轉的mode,從k(1,1)到k(1,303)是儲存逆時針旋轉的mode。
k=[Qstart linspace(-60,240,301) Qstop linspace(240,-60,301) ; linspace(1,1,302) linspace(-1,-1,302)];

while 1
for l=1:604;

clf;
theta2=k(1,l);
sigma=k(2,l);
[values]=drawsldlinks(r,theta1,theta2,sigma,driver);
pause(0.01);

end
end



------------------------------------------------------------------------------------------------
作業八和作業九的最後一題,我都得到「連桿在極限角度時將在閉合與分支之間切換型態」的結論,故我大膽推測:可能所有的四連桿都有這樣的性質!!

另外,可用drawsldpaths程式,輸出速度、加速度、角速度、角加速度隨角度變化圖,另外還可附上桿件運動路徑。由於運動路徑已經可以很清楚的從上面的影片看出,所以我就只把速度、加速度、角速度、角加速度隨角度變化圖附上。
------------------------------------------------------------------------------------------------
設角速度=180/pi,角加速度=0,npts=50。

driver=0,sigma=1:
drawsldpaths(0,0,[0 39 44 10],0,180/pi,0,1,50,0,2);

driver=0,sigma=-1:
drawsldpaths(0,0,[0 39 44 10],0,180/pi,0,-1,50,0,2);

driver=1,sigma=1:
drawsldpaths(0,0,[0 39 44 10],0,180/pi,0,1,50,1,2);

driver=1,sigma=-1:
drawsldpaths(0,0,[0 39 44 10],0,180/pi,0,-1,50,1,2);

driver=2,sigma=1:
drawsldpaths(0,0,[0 39 44 10],0,180/pi,0,1,50,2,2);

driver=2,sigma=-1:
drawsldpaths(0,0,[0 39 44 10],0,180/pi,0,-1,50,2,2);

1 則留言:

不留白老人 提到...

分析得很好,內容也相當充實