第三章 系統架構規劃與方法
3.2 軟體架構
圖 3-4 軟體架構圖
PC
機台上工件 CNC
Ethernet
Ethernet Servo CCD
圖 3-4 顯示整個軟體的結構,描述整個機械視覺加工補正系統各個功 能模組間的關係。系統包括了 HMI(Human Machine Interface)、Dxf Data Import、CCD Image Data Import、Database、OpenGL Graphic、OpenCV Image Process、NC Code Optimize 與 CNC Controller。
HMI(Human Machine Interface):人機介面,人與機器間的圖形介面。
負責使用者與程式指令間的圖形溝通架構。
Dxf Data Import:外部異質資料輸入模組,連接系統與外部 CAD 的異 質資料,使用的是 DXF 格式。
CCD Image Data Import:負責機械視覺取像的部分,CCD 硬體必須藉 由這個模組與系統溝通,模組建構在 CCD 原廠提供的 SDK(System
Development Kit)上。
Database:資料庫,所有外部傳入的資料或者計算完成的資料,負責 儲存的模組。
OpenGL Graphic:將圖形資料自 Database 中取出,並在視窗中繪出 圖型。
OpenCV Image Process:專門做為機械視覺影像處理的部分,包括模 式比對部分的功能,都是屬於這個模組。
NC Code Optimize:從資料庫將資料取出並計算加工補正的值,並產 生新的加工資料。
CNC Controller:將最終的結果傳至控制器的功能。
圖 3-5 機械視覺與加工補正系統流程圖
圖 3-5 機械視覺與加工補正系統流程圖說明整個樣本檔產生,樣本比對與 補正值計算的流程。
流程圖從左邊”Start”開始,”Is Create Template”判斷是否需產 生比對樣板(template),因為每一次模式比對都需要一個樣本檔。如需產 生樣本檔則進入”Create Template”,然後儲存樣本檔”Save Template File”,提供稍後模式比對之用。
“Snap Image File”當機台透過 NC 程式移動到定位點預定位置,補 正程式透過 CCD 的 SDK 程式,抓取一張預訂定位點的影像。”Image
Filtering”依據環境干擾的狀況採取對應的過濾對策。然後進行模式比對”
Pattern Match”,”Is match?”模式比對有可能因為位置差異過大而無 法取得結果,此時需手動移動機台,使 CCD 到達可視範圍內然後”Is Continue?”判斷跳回繼續重複一次”Snap Image File””、 ”Image Filtering”、 ”Pattern Match”流程。但是有可能有一種狀況是目標的 影像干擾太大,影響比對精度,或者是樣本不對需重新建立樣本檔,此時
Get Offset Data
Output modified NC Code Snap Image File
當樣本比對成功後,“Get Offset Data”取得樣本的偏置量。 ” Calculate Coordinate Transform Data”依照偏置量計算出工件的位移與 旋轉量。“Tool path Optimum”根據每一點的 CCD 取得的偏置量,計算 NC 程式補償所需的值。“Output Modified NC Code”當每一個單節的 NC 程 式重新計算出來後,即時的輸入控制器,此時已完成補正的目的。
機械視覺加工補正系統的軟體,以 Microsoft Fundamental Class(MFC) 的 Single Document Interface(SDI)為視窗架構。繪圖採用 OpeGL Library 為視窗繪圖架構。Dxflib 作為異質資料轉換函式庫。而 OpenCV 則是機械 視覺函式庫,整個機械視覺加工補正系統的核心部分。透過 OpenCV 的模 式比對功能,獲得補正的資料。
3.2.1 基於 MFC 之 SDI 介面
MFC (Microsoft Foundation Class Library)中的各種類別結合起來 構成了一個應用程式框架,這是一種相對 Win32 SDK 來說更為簡單的方法,
它的目的就是讓工程師在此基礎上來建立 Windows 下的應用程式。因為總 體上,MFC 框架定義了應用程式的輪廓,並提供了使用者介面的標準實作 方法,工程師所要做的就是通過預定義的介面把具體應用程式特有的東西 填入這個輪廓。Microsoft Visual C++提供了相應的工具來完成這個工 作:AppWizard 可以用來生成初步的框架檔(代碼和資源等);資源編輯器 用於?明直觀地設計使用者介面;ClassWizard 用來協助添加代碼到框架檔;
最後,編譯,則通過類別函式庫實做了應用程式特定的邏輯目的。
圖 3-6 MFC SDI 結構圖
Machine Vision Compensation System
Convert To NC
View All Pan View Scale
圖 3-7 系統功能圖
圖 3-8 顯示機械視覺加工補正系統,在 MFC SDI 架構下的功能魚骨圖。檔 案(File)主功能下分開啟檔案(Open File),開啟已產生的舊檔。存檔(Save File),儲存新檔或修正的檔案。Dxf 輸入(Dxf Import),以 Dxf 格式輸 入異質資料庫。退出系統(Exit)。
主功能 CAD Data 用來管理輸入的 CAD 資料,刪除資料(Delete Item) 刪除 Dxf 輸入中某些不需要的輸入的資料。主功能 NC 下,加工參數
(Parameter)的設定 ,這包括了刀號、刀長補證號碼、刀半徑補正方式,
刀半徑補正號碼、主軸轉速、加工進給率等加工參數。主功能圖層(Layer),
圖層顯示(Show Layer)顯示異質資料輸入的圖層架構。刪除圖層(Delete Layer),刪除某一些異質資料庫輸入後,某些不需要的圖層。主功能視覺 (View),用來觀看輸入的資料,全部(All)表示顯示全部,移動(Pan)移動 資料顯示的位置,顯示比例(View Scale)用來調整顯示的大小比例。
3.2.2 OpenGL
OpenGL(Open Graphics Library)是個定義了一個跨程式語言、跨平 台的程式介面(Application programming interface)的規格,它用於產生 二維、三維圖像。這個介面由近三百五十個不同的函式組成,用來從簡單 的圖元繪製複雜的三維景象。OpenGL 常用於 CAD、虛擬實境、科學視覺化 程式和電子遊戲開發。
ATI Technologies、Dell Computer、Evans & Sutherland、Hewlett-Packard、
IBM、Intel、Matrox、NVIDIA、SGI 和 Sun Microsystems(Microsoft 曾 是創立成員之一,但已於 2003 年 3 月結束)。
選取使用 OpenGL 的理由是,OpenGL 用於繪圖時期使用 3D 卡氏座標,
右手定則。如圖 3-5 所示,觀測者自螢幕外直視螢幕,螢幕往右邊為 x 軸 正方向,螢幕往上為 y 軸正方向。整個座標系與數學座標系一致。未考慮 Windows GDI+或者是 DirectX,原因是 Windows GDI+ 螢幕 X 向右為正,Y 軸向下為正,DirectX 座標使用卡氏座標左手定則兩者皆與常用數學座標 系相違背,應用上較不方便。
圖 3-8 OpenGL 座標
3.2.3 DXF
ASCII 版本的 DXF 可以用文字編輯器讀取。基本的 DXF 檔案結構如 下:
‧ HEADER 部分 - 一般通用的繪圖資料。每一個參數有它的變數名稱與 相關數值。
‧ CLASSES 部分 - 包括應用程序定義的類別的資料,這些實例將顯示在 BLOCKS、ENTITIES 以及 OBJECTS 部分。通常不包括用於充分用於與其 它應用程序交互的信息。
‧ TABLES 部分 - 這部分包括命名條目的定義。
‧ Application ID (APPID) table
‧ Block Record(BLOCK_RECORD)table
‧ Dimension Style (DIMSTYPE) table
‧ Layer (LAYER) table
‧ Linetype (LTYPE) table
‧ Text style (STYLE) table
‧ User Coordinate System (UCS) table
‧ View (VIEW) table
‧ Viewport configuration (VPORT) table
‧ BLOCKS 部分- 這部分包括 Block Definition 實體用於定義每個 Block 的組成。
‧ ENTITIES 部分 - 這部分是繪圖實體,包括 Block References 在內。
‧ OBJECTS 部分 -- 包括非圖形對象的數據,供 AutoLISP 以及 ObjectARX 應用程序所使用。
‧ THUMBNAILIMAGE 部分 -- 包括 DXF 文件的預覽圖。
‧ END OF FILE
圖 3-9 dxflib 函式架構
dxflib 是一個開放源碼的 C++函式庫。是一個用來讀寫 DXF 檔的 C++
函式庫。當讀 DXF 檔的時候,dxflib 分析檔並且呼叫使用者自己定義的函 數來添加實體、圖層、等。需要注意的是,dxflib 並不保存任何實體或者 資訊。它只是從 DXF 檔中分析可以識別的實體以及其他的物件。
使用 dxflib 函式庫讀 DXF 檔並不需要知道所有的 DXF 格式資訊。當然,
像實體、屬性、層、段等基本概念還是需要瞭解的。如果是用 dxflib 庫寫 DXF 檔,則需要知道 DXF 檔是如何組成的。dxflib 完全基於 C/C++標準函 式庫實作,不依賴任何其他的函式庫。
‧ Andrew Mustun (RibbonSoft) - Main developer and project coordinator
‧ Robert J. Campbell Jr. - Initial writer implementation
‧ Christian Ahmels (Fraunhofer Institut fuer Integrierte Schaltungen IIS) - Support for Traces and Solids
‧ Andreas Tscharner (Metromec Software AG) - Patches for Windows / Splines with Knot values
3.2.4 OpenCV
OpenCV(Open Source Computer Vision Library),自 1999 年起是由 英特爾(Intel)公司發起並參與開發的一個跨平台的機械視覺函式庫,以 BSD 許可證授權發行。可以在商業和研究領域中免費使用。
基本 OpenCV 的特點可以如下幾點描述:
‧ 以 BSD 許可證授權發行,可以在商業和研究領域中免費使用。
‧ OpenCV 是由英特爾公司發起並參與開發。OpenCV 可用於開發實時的圖 像處理、計算機視覺以及模式識別程序。
‧ 最基本的程式全部由 C 寫,但是也完全支援 C++的程式介面。
‧ OpenCV 可用於解決如下領域的問題:
人機互動、 物體識別、圖像分割、人臉識別、動作識別、運動跟蹤、機 器人。
圖 3-10 OpenCV 基本架構
OpenCV 包括了 5 大部分的功能,圖 3-4 表示其中四大基本功能。CV 包含基本影像處理功能,及高階電腦視覺演算法。ML 是機械學習函式庫,
MLL(Machine Learning Library),ML 包含了許多的統計分類與叢集 (cluster)工具。HighGUI 涵蓋了影像搜尋及載入錄影檔與影像檔的 I/O 程 序與功能。CXCORE 包含基本的資料結構與內容。
圖 OpenCV 並未包括 CvAux,CvAux 包括兩個已作廢的區域,一個是 embedded HMM face recognition,另一個是實驗性質的演算法
background\foreground segmentation。
本研究在主要集中在樣本比對(template Matching)或者稱模式比對 (Pattern Match)的功能 cvMatchTemplate(),功能上是依次計算樣本 (Template File)與待測影像圖片的重疊區域的相似度,並將結果存入映射 圖像 CvArr* result 中。
IplImage* 是 OpenCV 中定義的影像資料格式,所有輸入、輸出與解 果的儲存均是以此格式定義。
例如:
IplImage* img;
IplImage* temp;
IplImage* ret;
cvMatchTemplate()函式定義如下:
void cvMatchTemplate(
const CvArr* img, const CvArr* temp CvArr* result, Int method);
img:樣本比對的目標影像。
temp:比對用的樣本檔。
result:比對結果資料。
method: 所使用的演算法。
使用 cvMinMaxLoc()函式取得結果資料中的最大值,函式定義如下:
void cvMinMaxLoc (
const CvArr* arr, double* min_val, double* max_val,
CvPoint* min_loc = NULL, CvPoint* max_loc = NULL, const CvArr* mask = NULL );
從 result 中提取最大值,亦即相似度最大,以及最大值的位置,也就 是 result 中該最大值 max_val 的座標位置 max_loc,即比對樣本滑行時樣 本左上角的座標。
3.2.5 控制器與控制器 API
一般 PC base 控制均會提供 API(Application Interface),提供給使 用者開發客製的應用程式,客製的應用程式與控制器間的資料交換與溝通 須使用這個控制器提供的 API。
在研究中使用了新代控制器。新代控制提供了兩種的 API,第一種是 微軟 DotNet 架構的 API “OpenCNC”,第二種是 C 架構的 OCAPI。這兩者 均透過控制器的通訊架構 Dipole,在 CNC 控制器與 IPC 間傳遞資料與命令。
由於 CCD 使用的 API 為 C++的架構,而介面是採用了 MFC SDI,所以使 用 OCAPI 是必要的選擇。當然 C++的架構還有執行效率的考量。