每星期創意性機構設計課程筆記整理

  • 設計程序

設計程序

參照顏教授創意性設計方法 (Creative design methodology) 的流程,希望可以透過程式化將此流程由電腦協助完成。

利用 PMKS 的表示法可以讓連桿拓樸判斷更順利。

過程中一律忽略尺寸,目的是獲得新的機構類型。

一般化 (Gerneralization)

首先分析一個現有的機械裝置。

將各桿件的連接關係以運動鍊 (Kinematic chain) 方式呈現,必須符合以下特性:

  • 自由度不變
  • 桿件數不變
  • 全為迴轉對

使用拓樸構造特性描述此機構,包含桿件與接頭功用,紀錄功用可以在排列組合時維持其本來目的。

數目合成 (Number synthesis)

取得全部桿件數與全部接頭數,進行桿件類型反推:

$$N_{L}(桿件數)=\sum_{m=2}^{m_{max}}N_{L_{m}}$$

$$2N_{J}(接頭數)=\sum_{m=2}^{m_{max}}mN_{L_{m}}$$

其中,最大連桿數可以從這兩個條件求得(其餘為不合理):

$$ m_{max} = \begin{cases} N_{J}-N_{L}+2 & (N_{L}\leq N_{J}\leq 2N_{L}-3);\ N_{L}-1 & (2N_{L}-3\leq N_{J}\leq \frac{N_{L}(N_{L}-1)}{2}) \end{cases} $$

由最大接頭類型,列出每種連桿數和接頭的可能性,當桿件的接頭超過 2 和 3,會變成一種以上的組合。

例如:

$$ \begin{cases} x+y+z=8;\ 2x+3y+4z=20;\ x\geq 0,\quad y\geq 0,\quad z\geq 0 \end{cases} $$

寫了一個手算解題的小工具,不過用 Scipy 解題顯然更有效率一點。

f1 = (1, 1, 1, 8) #x + y + z = 8
f2 = (2, 3, 4, 20) #2x + 3y + 4z = 20

q = f2[2]/f1[2] #消去 z.
f3 = tuple(f2[i]-f1[i]*q for i in range(len(f1)))
#(-2.0, -1.0, 0.0, -12.0)
#-2x + -y = -12
#x = -y/2 + 6

y = (1., 0.)
x = (y[0]/f3[0], f3[3]/f3[0])

#1(-t/2+6) + 1(t) + z = 8
#z = -1(-t/2+6) - 1(t) + 8
z = (
    (-x[0]*f1[0]-y[0]*f1[1])/f1[2],
    (-x[1]*f1[0]-y[1]*f1[1]+f1[3])/f1[2]
)

for name, s in zip(['x', 'y', 'z'], [x, y, z]):
    print("{} = {}t + {}".format(name, s[0], s[1]))

print('-'*7)

#使用係數 t
fx = lambda t: x[0]*t+x[1]
fy = lambda t: y[0]*t+y[1]
fz = lambda t: z[0]*t+z[1]

for t in range(10):
    a = (fx(t), fy(t), fz(t))
    for name, an in zip(['x', 'y', 'z'], a):
        print("{} = {}".format(name, an))
    for i, f in enumerate([f1, f2, f3]):
        print(f[0]*a[0]+f[1]*a[1]+f[2]*a[2]==f[-1])
    print('-'*7)

接著進行不同接頭的排列組合,並排除同構 (isomorphic) 結果。

排列後畫出圖譜,可以得知是否有新的結構產生。

由於一般化後都為迴轉對,若出現 3 桿件的呆鍊迴路,會導致此運動鍊的自由度減少,應以排除該結果。

特殊化 (Specialization)

這裡需注意設計需求 (design requirement) 與設計限制 (design constraint),拿捏不當可能產生一些無用的解。

此處為逆向產生原有的機構。

首先把之前的拓樸構造特性分析連桿的角色與要求,例如定義原本的固定桿、搖臂、減震器等。

最後對圖譜結果排列組合,即可產生新的連桿類型。

其中一組解應為原本現有的機構類型。


Comments

comments powered by Disqus