Design of robot off-line programming system based on dynamic list
李 靜1,李 君2,郝衛(wèi)東2LI Jing1, LI Jun2, HAO Wei-dong2(1.桂林電子科技大學(xué)信息科技學(xué)院,桂林 541004;2.桂林電子科技大學(xué) 機(jī)電工程學(xué)院,桂林 541004)
?
基于動態(tài)鏈表的機(jī)器人離線編程系統(tǒng)設(shè)計
Design of robot off-line programming system based on dynamic list
李靜1,李君2,郝衛(wèi)東2
LI Jing1,LI Jun2,HAO Wei-dong2
(1.桂林電子科技大學(xué)信息科技學(xué)院,桂林 541004;2.桂林電子科技大學(xué) 機(jī)電工程學(xué)院,桂林 541004)
摘要:機(jī)器人離線編程系統(tǒng)主要是實現(xiàn)程序的編輯轉(zhuǎn)換和離線仿真分析,不同類型的系統(tǒng)其系統(tǒng)架構(gòu)很相似,且系統(tǒng)與C/C++有很好的兼容性。采用C/C++語言,對系統(tǒng)架構(gòu)和重要模塊進(jìn)行編程設(shè)計,可以提高系統(tǒng)的二次開發(fā)能力和程序的可移植能力。針對系統(tǒng)的數(shù)據(jù)處理特點,提出了采用動態(tài)鏈表進(jìn)行數(shù)據(jù)操作的方法,實現(xiàn)了語言指令到機(jī)器人可執(zhí)行文件的轉(zhuǎn)換。在MFC框架中,完成了離線編程仿真系統(tǒng)的設(shè)計。通過用戶界面輸入機(jī)器人語言程序,在仿真界面中輸出了仿真效果圖,仿真結(jié)果表明,所設(shè)計的系統(tǒng)能實現(xiàn)機(jī)器人的離線編程和仿真。通過串口模塊,將機(jī)器人可執(zhí)行文件發(fā)送給機(jī)器人控制系統(tǒng),控制川崎FS30N機(jī)器人進(jìn)行了焊接實驗。
關(guān)鍵詞:焊接機(jī)器人;離線編程系統(tǒng);架構(gòu)設(shè)計;動態(tài)鏈表
工業(yè)機(jī)器人具有良好的可編程性,其編程能力決定了工業(yè)機(jī)器人功能的靈活性和智能性。離線編程系統(tǒng)能夠進(jìn)示教編程的不足,具有顯著的優(yōu)點[1]。離線編程系統(tǒng)在很大程度上滿足了工業(yè)生產(chǎn)的需求,但是實用化程度不深,在人機(jī)界面的人性化設(shè)計、軌跡規(guī)劃算法、系統(tǒng)魯棒性及二次開發(fā)能力等技術(shù)需要進(jìn)步研究[2,3]。主流的離線編程系統(tǒng)有:基于VC++與OpenGL的離線編程系統(tǒng)[4];借助MATLAB的數(shù)值計算和繪圖功能開發(fā)的具有維可視化功能的離線編程系統(tǒng)[5];通過Solidworks 等維建模軟件的API接口進(jìn)行二次開發(fā)的離線編程系統(tǒng)[6,7]。這些編程系統(tǒng)的功能和系統(tǒng)架構(gòu)都很類似,而且與C和C++都有很好的兼容性。
本文將對系統(tǒng)進(jìn)行功能模塊劃分,優(yōu)化系統(tǒng)架構(gòu)。針對模塊的順序執(zhí)行特性和數(shù)據(jù)量不確定的特點,提出了采用動態(tài)鏈表進(jìn)行數(shù)據(jù)操作的方法,并結(jié)合設(shè)計的軌跡規(guī)劃模塊,實現(xiàn)了語言指令到機(jī)器人可執(zhí)行文件的轉(zhuǎn)化。在MFC框架中,完成了離線編程系統(tǒng)的設(shè)計。
圖1 離線編程系統(tǒng)工作流程圖
程序模塊主要是程序編制功能,具有程序管理、程序編輯、指令集管理、自主編程、程序檢測及程序轉(zhuǎn)換功能,每個功能的實現(xiàn)都離不開數(shù)據(jù)的讀取、轉(zhuǎn)換和存儲,程序的數(shù)據(jù)處理能力將直接影響到系統(tǒng)的整體性能[8]。程序模塊的執(zhí)行是按照定規(guī)則順序單向執(zhí)行的,且數(shù)據(jù)量不確定,因此適合采用動態(tài)鏈表進(jìn)行數(shù)據(jù)的存儲和轉(zhuǎn)換。數(shù)據(jù)處理流程如圖2所示。
圖2 數(shù)據(jù)處理流程圖
圖中,語言指令通過用戶界面或自動編程系統(tǒng)輸入,根據(jù)指令解析法則對指令集進(jìn)行語法分析和詞法分析,并生成指令序列和相應(yīng)的路徑點數(shù)據(jù)序列。根據(jù)指令序列分配動態(tài)內(nèi)存建立動態(tài)鏈表,將存儲路徑點信息的指針賦給動態(tài)鏈表中的指針變量Robot_Route,將指令字符串指針賦給指針變量Robot_Instruction,將結(jié)構(gòu)體指針變量R_TCBNext賦NULL值,將結(jié)構(gòu)體的指針賦給上個結(jié)點的結(jié)構(gòu)體指針變量R_TCBNext,將結(jié)構(gòu)體中的數(shù)據(jù)指針Robot_Memory賦NULL值。所建立的動態(tài)鏈表的表頭指針存放在變量Robot_Head中,鏈表最后個結(jié)點的指針變量R_TCBNext的值為NULL。
遍歷建立的動態(tài)鏈表,將結(jié)構(gòu)體指針Robot_Cur和Robot_List指向鏈表頭指針Robot_Head,讀取結(jié)構(gòu)體中變量Robot_Instruction,如果存放的是控制指令,則讀取變量Robot_Cur->R_TCBNext,若為NULL,則遍歷結(jié)束,否則將結(jié)構(gòu)體指針Robot_List指向Robot_Cur->R_ TCBNext;如果存放的是運(yùn)動指令,則調(diào)用軌跡規(guī)劃函數(shù),將Robot_Route中的路徑信息轉(zhuǎn)化為各關(guān)節(jié)轉(zhuǎn)角序列,并存放在內(nèi)存中,并將存放數(shù)據(jù)的內(nèi)存指針賦給結(jié)構(gòu)體變量Robot_Cur->Robot_Memory,如果變量Robot_ Cur->R_TCBNext的值為NULL,則遍歷結(jié)束,否則將結(jié)構(gòu)體指針Robot_List指向Robot_Cur->R_TCBNext。在進(jìn)行程序的編寫和調(diào)試中,程序的修將調(diào)用鏈表的插入和刪除函數(shù)對動態(tài)鏈表進(jìn)行更,在編譯修后的程序時將只對插入的結(jié)點進(jìn)行計算,可以縮短程序編譯和修的時間,提高工作效率。
軌跡規(guī)劃完成后,所有信息都存放在動態(tài)鏈表中。機(jī)器人可執(zhí)行文件可以通過遍歷鏈表的方式生成。機(jī)器人運(yùn)動仿真也可以通過遍歷鏈表的方式進(jìn)行。通過運(yùn)動仿真和誤差分析后的機(jī)器人可執(zhí)行文件將以txt文件的形式保存。
軌跡規(guī)劃的作用是按照運(yùn)動指令類型生成結(jié)點之間的路徑,其過程是在相鄰結(jié)點之間通過插補(bǔ)算法生成位姿點數(shù)據(jù)鏈,逆運(yùn)動學(xué)計算后進(jìn)行關(guān)節(jié)空間的軌跡規(guī)劃生成各關(guān)節(jié)轉(zhuǎn)角數(shù)據(jù)鏈。算法功能樹如圖3所示。
圖3 軌跡規(guī)劃算法功能樹
圖中,將軌跡規(guī)劃分為運(yùn)動指令和自動編程指令。運(yùn)動指令適用于點、直線、圓弧等簡單軌跡的描述。自定義指令可以描述復(fù)雜的軌跡,而且可以通過指令讀取維模型軟件等方式生成的軌跡點數(shù)據(jù)包,實現(xiàn)復(fù)雜軌跡的軌跡規(guī)劃。軌跡規(guī)劃程序流程圖如圖4所示。
圖4 軌跡規(guī)劃流程圖
在軌跡規(guī)劃計算過程中,以指針作為函數(shù)間參數(shù)傳遞的載體,數(shù)據(jù)的存取與轉(zhuǎn)化通過動態(tài)鏈表進(jìn)行操作,接口函數(shù)便可設(shè)計為如下的形式:
INT16* Robot_Track(struct Robot_tcb*);
函數(shù)中輸入?yún)?shù)為動態(tài)鏈表的結(jié)構(gòu)體指針,返回值為軌跡規(guī)劃后的數(shù)據(jù)塊指針。函數(shù)內(nèi)部通過函數(shù)指針調(diào)用插補(bǔ)算法、離散算法、逆運(yùn)動學(xué)計算等函數(shù)。為了便于函數(shù)的添加、編寫、調(diào)用,函數(shù)設(shè)計為統(tǒng)形式:
void* (*C_Track)(void*);
函數(shù)的數(shù)據(jù)量和數(shù)據(jù)類型是變化的,所以只能在函數(shù)中調(diào)用malloc()函數(shù)分配動態(tài)內(nèi)存,在完成軌跡規(guī)劃計算后再釋放分配的內(nèi)存資源,實現(xiàn)內(nèi)存資源的重復(fù)利用。采用統(tǒng)的函數(shù)類型和動態(tài)數(shù)據(jù)處理可以更方便的添加新的算法函數(shù)和對算法函數(shù)的修,更有利于對系統(tǒng)的進(jìn)和研究。
MFC集成了微軟公司提供的許多類庫,通過調(diào)用庫中的類可以實現(xiàn)絕大部分所需的功能,而且所開發(fā)的系統(tǒng)與MATLAB、Solidworks等軟件能完全兼容。所設(shè)計的離線編程系統(tǒng)用戶界面如圖5所示。
圖5 用戶界面
系統(tǒng)所采用的機(jī)器人語言是詹少坤等人開發(fā)的ZSK機(jī)器人語言[8]。運(yùn)動指令包括關(guān)節(jié)運(yùn)動指令MOVJ,直線運(yùn)動指令MOVL,圓弧運(yùn)動插補(bǔ)指令MOVC,點運(yùn)動指令MOVP以及用于復(fù)雜軌跡編程的指令MOVT等。系統(tǒng)具有程序編輯、離線仿真、串口通信、坐標(biāo)系參數(shù)設(shè)置等功能。機(jī)器人指令通過Edit編輯框控件輸入。在點擊“坐標(biāo)系設(shè)置”按鈕后,可以對工件坐標(biāo)系和工具坐標(biāo)系進(jìn)行參數(shù)設(shè)置。點擊主界面“仿真系統(tǒng)”按鈕,可以進(jìn)行離線仿真操作。點擊主界面的“保存”按鈕,將調(diào)用文件類CFile的成員函數(shù),將機(jī)器人可執(zhí)行文件以txt文檔的形式保存。在通信模塊中,設(shè)置串口參數(shù),并打開串口資源,點擊“下載”按鈕將彈出文檔打開對話框,打開保存的機(jī)器人可執(zhí)行文件,可執(zhí)行文件中的內(nèi)容將通過函數(shù)WriteFile下載至機(jī)器人控制柜控制機(jī)器人運(yùn)動。
該離線編程系統(tǒng)是針對FS30L機(jī)器人開發(fā)的,在離線編程系統(tǒng)的工件坐標(biāo)系設(shè)置界面中輸入?yún)?shù),在離線編程系統(tǒng)的輸入編輯框中依次輸入直線、圓弧、點、控制指令的代碼。點擊“編譯”按鈕,彈出編譯成功后,點擊“離線仿真”按鈕,在彈出的界面中點擊“開始”按鈕,離線仿真界面將顯示仿真結(jié)果。
圖6為關(guān)節(jié)轉(zhuǎn)角曲線圖,圖中的曲線連續(xù)且平滑,說明各關(guān)節(jié)運(yùn)動平穩(wěn),速度和加速度小,機(jī)器人在運(yùn)動過程中沒用強(qiáng)烈的柔性和剛性沖擊。圖7為末端執(zhí)行器端點軌跡圖,圖中顯示的圖形與輸入的運(yùn)動指令所要求的運(yùn)動軌跡相同。表明,離線編程系統(tǒng)的設(shè)計是合理的。將通過離線編程和誤差分析驗證的機(jī)器人可執(zhí)行文件保存為txt文檔。連接好電腦與機(jī)器人控制柜的串口設(shè)備,設(shè)置串口通信參數(shù),打開串口資源,點擊“下載”按鈕,將保存的txt文檔發(fā)送給控制柜,控制柜讀取數(shù)據(jù)控制機(jī)器人進(jìn)行焊接運(yùn)動。機(jī)器人焊接實驗現(xiàn)場效果圖如圖8所示。
實驗結(jié)果表明,機(jī)器人的焊接運(yùn)動與離線仿真結(jié)果相同,且焊縫的焊接質(zhì)量能滿足生產(chǎn)要求。
圖6 關(guān)節(jié)轉(zhuǎn)角曲線圖
圖7 末端執(zhí)行器端點軌跡圖
針對機(jī)器人離線編程系統(tǒng),提出了采用動態(tài)鏈表進(jìn)行數(shù)據(jù)操作的方法,實現(xiàn)了語言指令到機(jī)器人可執(zhí)行文件的轉(zhuǎn)換,對機(jī)器人軌跡規(guī)劃模塊的程序設(shè)計進(jìn)行了優(yōu)化。以FS30N機(jī)器人為控制對像,在MFC框架中開發(fā)了離線編程系統(tǒng),系統(tǒng)以ZSK語言為機(jī)器人編程語言,通過仿真界面輸出程序仿真結(jié)果,將通過仿真驗證和誤差分析的機(jī)器人可執(zhí)行文件發(fā)送給機(jī)器人控制柜控制機(jī)器人進(jìn)行焊接實驗,實驗結(jié)果顯示機(jī)器人的實際焊接運(yùn)動與仿真結(jié)果相同,且焊接質(zhì)量符合生產(chǎn)要求。
圖8 機(jī)器人焊接實驗圖
參考文獻(xiàn):
[1] Pan Z, Polden J,Larkin N, Duin SV, Norrish J.Recent Progress on Programming Methods for Industrial Robots[J].Robot Comput Integr Manuf,2011,28(2):87-94.
[2] 孟國軍.工業(yè)機(jī)器人離線編程系統(tǒng)關(guān)鍵技術(shù)的研究[M].華中科技大學(xué),2011.
[3] Weidong Zhu, Weiwei Qu, Lianghong Cao, Di Yang , Yinglin Ke.An off-line programming system for robotic drilling in aerospace manufacturing[J].Int J Adv Manuf Technol 2013,68:2535-2545.
[4] 祁若龍,周維佳,劉金國,肖磊.VC 平臺下機(jī)器人虛擬運(yùn)動控制及3D 運(yùn)動仿真的有效實現(xiàn)方法[J].機(jī)器人,2013,35.(5):594-599.
[5] Carmelo Mineo,Stephen Gareth Pierce, Pascual Ian Nicholson, Ian Cooper.Robotic path planning for non-destructive testing – A custom MATLAB toolbox approach[J].Robotics and Computer-Integrated Manufacturing,2016,37:1-12.
[6] 宋鵬飛,和瑞林,苗金鐘,單東日.基于Solidworks的工業(yè)機(jī)器人離線編程系統(tǒng)[J].制造業(yè)自動化,2013,35(5):1-4.
[7] 趙鳳申.基于UG/Open的機(jī)器人復(fù)雜曲線離線編程系統(tǒng)設(shè)計[J].制造業(yè)自動化,2012,34(1):109-112.
[8] 詹少坤.基于開放式焊接機(jī)器人系統(tǒng)的離線編程方式研究[M].哈爾濱工業(yè)大學(xué),2009.
分析與探討
作者簡介:李靜(1983 -),女,陜西澄城縣人,講師,工學(xué)碩士,研究方向為機(jī)器人技術(shù)、電子技術(shù)應(yīng)用及開關(guān)電源等。
收稿日期:2015-12-19
中圖分類號:TP242
文獻(xiàn)標(biāo)識碼:A
文章編號:1009-0134(2016)03-0057-04