以下為協同產品設計實習 2017 Spring 期中考週的四個實習查驗題目. 完成後, 請各組員依照指示完成期中自評與互評.

(一) Fossil Server 實習查驗

本實習查驗題目必須在期中考當天 0810-0900 時段中完成.

請各組利用電腦輔助設計室中的電腦, 重新建立一台以 https 為連結協定的 Fossil Server (起始 Timeline 必須為期中考當天日期與時間為準), 並以"[a or b]g[1 ~8] 期中報告" (例如: 甲班第1組為 ag1 期中報告, 依此類推) 為 server 標題, 每一組員以學號為帳號, 各組員分別在 Wiki 中以 [學號] 期中學習心得" (例如: 4012345 期中學習心得) 為 Wiki 頁面標題, 概述上課至今的心得與自評成績.

完成後, 請報上各組 Serve 的 ip 位址進行查驗.

(二) 四連桿機構協同 Trace Point 查驗

本實習查驗題目必須在期中考當天 0910-1000 時段中完成.

請參考 電腦輔助設計實習第十週上課內容, 在各組網誌中, 以子模組 (Github Submodule) 的設定, 擷取各組員倉儲中的 T 點軌跡座標檔 (請以 midterm1.csv, midterm2.csv .... 依序命名) 後進行網際協同繪圖.

各組組員請依學號遞增排序, 排序第1者負責分析 Length=50 的 T 點軌跡圖, 其餘組員則依序將 Length -5, 分別在各組網誌中列出所有組員所完成的四連桿 T 點運動軌跡圖. (例如: 第2位組員負責 Length=45 的四連桿分析, 第3位則負責 Length=40 ....)

(長 30 mm 的連桿為馬達輸入桿, Trace Point 為 T 點)

參考的網際程式如下:














(三) Fourbar Walker OnShape 零件協同繪圖與組立查驗

本實習查驗題目必須在期中考當天 1010-1100 時段中完成.

請各組依照下列基本尺寸規劃, 以協同方式在 OnShape 環境中完成四連桿四足行走機構, 並分別拍攝協同規劃與實際操作影片, 將影片送到 1) Youtube 2) Vimeo 以及各組的 Fossil Server.

機械設計工程系-協同產品設計實習課程: 期中四連桿四足行走機構題目 from 虎尾科大機械設計工程 on Vimeo.

(四) 分組協同零件展示

本實習查驗題目必須在期中考當天 1110-1145 時段中完成, 1145-1200 將以所指定的 Ethercalc 即時表單, 取各學員的期中自評成績.

請各組於完成四足行走機構後, 轉為 STL 格式, 利用下列 viewer, 將機構展示在各組的網誌中.

利用 Madeleine 程式庫, 擷取位於 ./../data/spikeball.stl 位置的零件 stl 格式檔案:

select stl file: or drop stl file

參考用 fourbar.py:

from math import pi, cos, sin, sqrt, acos

radian = 180/pi
degree = pi/180

#PLAP
def plap(ax, ay, ac, bac, bx, by, pos):
    if pos == 0:
        cx= ac*cos(bac - acos((ax**2 - 2*ax*bx + ay**2 - 2*ay*by + bx**2 + by**2 + abs(ax - bx)**2 - abs(ay - by)**2)/(2*sqrt(ax**2 - 2*ax*bx + ay**2 - 2*ay*by + bx**2 + by**2)*abs(ax - bx)))) + ax 
        cy= ac*sin(bac - acos((ax**2 - 2*ax*bx + ay**2 - 2*ay*by + bx**2 + by**2 + abs(ax - bx)**2 - abs(ay - by)**2)/(2*sqrt(ax**2 - 2*ax*bx + ay**2 - 2*ay*by + bx**2 + by**2)*abs(ax - bx)))) + ay
    else:
        cx= ac*cos(bac + acos((ax**2 - 2*ax*bx + ay**2 - 2*ay*by + bx**2 + by**2 + abs(ax - bx)**2 - abs(ay - by)**2)/(2*sqrt(ax**2 - 2*ax*bx + ay**2 - 2*ay*by + bx**2 + by**2)*abs(ax - bx)))) + ax 
        cy= ac*sin(bac + acos((ax**2 - 2*ax*bx + ay**2 - 2*ay*by + bx**2 + by**2 + abs(ax - bx)**2 - abs(ay - by)**2)/(2*sqrt(ax**2 - 2*ax*bx + ay**2 - 2*ay*by + bx**2 + by**2)*abs(ax - bx)))) + ay
    return cx, cy

#PLLP
def pllp(ax, ay, ac, cb, bx, by, pos):
    if pos == 0:
        cx =  -((ay - by)*(-ac**2*ay + ac**2*by + ax**2*ay + ax**2*by - 2*ax*ay*bx - 2*ax*bx*by + ay**3 - ay**2*by + ay*bx**2 - ay*by**2 + ay*cb**2 + bx**2*by + by**3 - by*cb**2 - sqrt((-ac**2 + 2*ac*cb + ax**2 - 2*ax*bx + ay**2 - 2*ay*by + bx**2 + by**2 - cb**2)*(ac**2 + 2*ac*cb - ax**2 + 2*ax*bx - ay**2 + 2*ay*by - bx**2 - by**2 + cb**2))*(ax - bx)) + (ac**2 - ax**2 - ay**2 + bx**2 + by**2 - cb**2)*(ax**2 - 2*ax*bx + ay**2 - 2*ay*by + bx**2 + by**2))/(2*(ax - bx)*(ax**2 - 2*ax*bx + ay**2 - 2*ay*by + bx**2 + by**2))
        cy =  (-ac**2*ay + ac**2*by + ax**2*ay + ax**2*by - 2*ax*ay*bx - 2*ax*bx*by + ay**3 - ay**2*by + ay*bx**2 - ay*by**2 + ay*cb**2 + bx**2*by + by**3 - by*cb**2 + sqrt((-ac**2 + 2*ac*cb + ax**2 - 2*ax*bx + ay**2 - 2*ay*by + bx**2 + by**2 - cb**2)*(ac**2 + 2*ac*cb - ax**2 + 2*ax*bx - ay**2 + 2*ay*by - bx**2 - by**2 + cb**2))*(-ax + bx))/(2*(ax**2 - 2*ax*bx + ay**2 - 2*ay*by + bx**2 + by**2))
    else:
        cx =  -((ay - by)*(-ac**2*ay + ac**2*by + ax**2*ay + ax**2*by - 2*ax*ay*bx - 2*ax*bx*by + ay**3 - ay**2*by + ay*bx**2 - ay*by**2 + ay*cb**2 + bx**2*by + by**3 - by*cb**2 + sqrt((-ac**2 + 2*ac*cb + ax**2 - 2*ax*bx + ay**2 - 2*ay*by + bx**2 + by**2 - cb**2)*(ac**2 + 2*ac*cb - ax**2 + 2*ax*bx - ay**2 + 2*ay*by - bx**2 - by**2 + cb**2))*(ax - bx)) + (ac**2 - ax**2 - ay**2 + bx**2 + by**2 - cb**2)*(ax**2 - 2*ax*bx + ay**2 - 2*ay*by + bx**2 + by**2))/(2*(ax - bx)*(ax**2 - 2*ax*bx + ay**2 - 2*ay*by + bx**2 + by**2))
        cy =  (-ac**2*ay + ac**2*by + ax**2*ay + ax**2*by - 2*ax*ay*bx - 2*ax*bx*by + ay**3 - ay**2*by + ay*bx**2 - ay*by**2 + ay*cb**2 + bx**2*by + by**3 - by*cb**2 + sqrt((-ac**2 + 2*ac*cb + ax**2 - 2*ax*bx + ay**2 - 2*ay*by + bx**2 + by**2 - cb**2)*(ac**2 + 2*ac*cb - ax**2 + 2*ax*bx - ay**2 + 2*ay*by - bx**2 - by**2 + cb**2))*(ax - bx))/(2*(ax**2 - 2*ax*bx + ay**2 - 2*ay*by + bx**2 + by**2))
    return cx, cy

class fourbar(object):

    '''
    (ax, ay) motor coord
    (bx, by) rocker base coord
    bac motor angle
    ac link1 length
    cd link2 length
    db link3 length
    ce triangle side1
    ed triangle side2
    '''
    def __init__(self, ax, ay, bx, by, bac, ac, cd, db, ce, ed):

        self.ax = ax
        self.ay = ay
        self.bx = bx
        self.by = by
        self.bac = bac
        self.ac = ac
        self.cd = cd
        self.db = db
        self.ce = ce
        self.ed = ed

    @property
    def cx(self):
        return plap(self.ax, self.ay, self.ac, self.bac, self.bx, self.by, pos=0)[0]

    @property
    def cy(self):
        return plap(self.ax, self.ay, self.ac, self.bac, self.bx, self.by, pos=0)[1]

    @property
    def dx(self):
        return pllp(self.cx, self.cy, self.cd, self.db, self.bx, self.by, pos=0)[0]

    @property
    def dy(self):
        return pllp(self.cx, self.cy, self.cd, self.db, self.bx, self.by, pos=0)[1]

    @property
    def ex(self):
        return pllp(self.cx, self.cy, self.ce, self.ed, self.dx, self.dy, pos=0)[0]

    @property
    def ey(self):
        return pllp(self.cx, self.cy, self.ce, self.ed, self.dx, self.dy, pos=0)[1]

'''    
# 利用 fourbar 物件建立案例
f = fourbar(ax = -60, ay = 0, bx = 0, by = 0, bac = 50*degree, ac = 30, cd = 50, db = 60, ce = 50, ed = 50)

# 利用 fourbar 物件案例的方法求各點座標
#f.cx, f.cy 為 C 點座標
#f.dx, f.dy 為 D 點座標
#f.ex, f.ey 為 E 點座標
'''

Brython 四連桿 E 點運動軌跡繪圖程式: