楊 杏,陳富林,周 霏
(南京航空航天大學機電學院,南京 210016)
基于Qt的工業(yè)機器人語言系統(tǒng)的設計
楊 杏,陳富林,周 霏
(南京航空航天大學機電學院,南京 210016)
工業(yè)機器人語言系統(tǒng)是機器人控制系統(tǒng)的重要組成部分,在研究和分析了工業(yè)機器人語言系統(tǒng)的構(gòu)成和特點的基礎(chǔ)上,提出了基于Qt和正則表達式的工業(yè)機器人的語言系統(tǒng)設計方案。該語言系統(tǒng)包括了機器人編程語言、編輯器和解釋器。自定義了動作級機器人編程語言;在此基礎(chǔ)上詳細設計了基于Qt圖形化界面的機器人編輯器,給出了編輯器各部分功能的具體實現(xiàn);最后基于正則表達式詳細設計了機器人解釋器。該套機器人語言系統(tǒng)運用在工業(yè)機器人示教器上,具有良好的可可移植性。
語言系統(tǒng);機器人編程語言;解釋器;Qt;正則表達式
作為對工業(yè)機器人進行有效控制和利用的前提,機器人語言系統(tǒng)在整個機器人控制系統(tǒng)中占有十分重要的地位,它直接影響著工業(yè)機器人的基本作業(yè)和離線編程等,從而影響到用戶對機器人的控制效率[1]。機器人語言系統(tǒng)一般以軟件形式嵌入在示教器硬件中,軟硬件結(jié)合完成對機器人的控制。
由于工業(yè)機器人示教裝置和作業(yè)要求的多樣性,機器人語言系統(tǒng)也是各種各樣。這也就導致了機器人語言系統(tǒng)在不同的控制器和操作系統(tǒng)上的可移植性和可擴展性較差。而Qt是一個多平臺的C++圖形用戶界面應用程序架構(gòu)。利用Qt編寫出來的應用程序,在幾乎不用修改的情況下,就可以同時在多種平臺和系統(tǒng)中運行,大大增加了機器人語言系統(tǒng)的可移植性。它提供了關(guān)于圖形用戶界面的應用程序所需的一切功能。它基于完全面向?qū)ο蟮腃++,擴展性非常強,并且允許利用組件編程。
正是由于Qt優(yōu)越的跨平臺性,所以本文設計和實現(xiàn)了一套基于Qt和正則表達式的工業(yè)機器人語言系統(tǒng)。利用Qt將三個模塊組合在一起構(gòu)成了一個集成環(huán)境,并移植嵌入示教器中。以示教器界面呈現(xiàn)給使用者,使對機器人的控制變得簡單而高效。
1.1 語言系統(tǒng)結(jié)構(gòu)和示教器
機器人語言系統(tǒng)不僅要能夠支持機器人編程、控制,還應該要支持機器人與外圍設備、傳感器的接口、和計算機的通信等,機器人語言系統(tǒng)如圖1所示。
工業(yè)機器人語言系統(tǒng)以示教器為載體,示教器生成的空間點與機器人編程語言一起構(gòu)成了機器人源程序。機器人源程序經(jīng)過解釋器的翻譯生成主控制器所能識別的命令,從而控制機器人本體的運動。
示教器采用嵌入式ARM板,外接LCD觸摸屏,并移植嵌入式Linux操作系統(tǒng)。通過RS232與主控制器通信。它提供美觀實用的人機界面:示教時,操作示教界面的按鈕向主控制器發(fā)送驅(qū)動各關(guān)節(jié)軸的命令,使機械手到達相應的示教點,并記錄示教點的位姿;再現(xiàn)模式時,通過機器人編程語言系統(tǒng)和記錄的示教點構(gòu)成的源程序再現(xiàn)示教的軌跡。
1.2 機器人編程語言設計
機器人編程語言是機器人運動和控制的結(jié)合點,是實現(xiàn)人與機器人通訊的主要方法[2],也是研究機器人語言系統(tǒng)的起點。本文所使用的編程語言是自定義的指令系統(tǒng),為動作級語言,一個命令對應一個動作,語言簡單,便于示教編程[3]。
機器人指令可以簡單分為運動控制指令、程序控制指令、輸入輸出指令等。對于本文研究的工業(yè)機器人有如下幾條指令代碼:
(1)運動控制指令:MOVL、MOVC、MOVJ等指令
(2)控制指令:IF、THEN、ELSE、ENDIF、WAIT、JUMP、CALL、TIMER等指令
(3)輸入輸出指令:DIN、DOUT等指令
程序段是為了完成某個動作要求所需指令的組合[4],程序段格式如表1所示。
表1 機器人編程語言程序段格式
在程序段中,字與字之間以空格分隔,以“;”作為一個程序段的結(jié)束符。每個程序段完成一個功能或者動作,若干程序段按照一定的結(jié)構(gòu)構(gòu)成機器人程序塊。
機器人語言編程工作界面的設計是示教盒界面設計中最重要的一部分,操作人員通過此界面完成對工業(yè)機器人的示教編程工作[5]?;赒t設計的界面如圖2所示,此界面功能的實現(xiàn)主要靠四部分來完成,最上面的列表框用來顯示機器人編程工作文件的內(nèi)容,中間的編輯框是用來編輯當前的編程語句,最下面的按鈕組用來對上面的兩部分進行相應的控制操作。右邊的按鈕組用來對機器人語言進行調(diào)試和運行。
圖2 程序編輯器界面
2.1 工作內(nèi)容列表框的設計
列表框使用的是QListWidget部件,QListWidget可以顯示一個清單,清單中的每個項目是QListWidget-Item的一個實例,通過QListWidgetItem來操作[6],可以對清單中的每個項目進行添加、刪除、查找和替換。
2.2 語句編輯框的實現(xiàn)
編輯框使用了Qt的編輯框控件類(QLineEdit),通過text()函數(shù)獲取QLineEdit中的內(nèi)容。在語句編輯框中設置了一個檢驗器來限制輸入的范圍。Qt提供了三個內(nèi)置檢驗器類[7]:QIntValidator、QDoubleValidator、QRegExpValidator。在這里使用檢驗器類QRegExpValidator,讓它帶一個正則表達式來限制機器人語言輸入,即只能按照定義好的程序段格式輸入。避免輸入未定義的語句,有效防止錯誤的產(chǎn)生。QRegExp regExp("(N\d+)(\s)(MOVL)(\s)(\d+)(\s)(\d+)(\s)((OPEN)|(CLOSE));");//程序段格式的正則表達式
ui->lineEdit->setValidator (new QRegExpValidator(regExp,this));//調(diào)用檢驗器
2.3 編輯操作按鈕的實現(xiàn)
(1)添加按鈕的實現(xiàn)
添加按鈕是語句編輯框的默認按鈕。默認按鈕就是當用戶按下Enter鍵能夠按下對應的按鈕[8]。當編輯框沒有內(nèi)容時,添加按鈕是灰色的不能和用戶發(fā)生交互操作,只有當行編輯器中的文本發(fā)生變化時就會調(diào)用槽enableAddButton()。enableAddButtond的實現(xiàn)如下:
ui->Add_pushButton->setEnabled(ui->line-Edit->hasAcceptableInput());//如果有文本輸入就調(diào)用使能函數(shù)。
輸入完成后,當用戶單擊添加按鈕或者按下Enter時,會調(diào)用Add_PushButton_Slot()私有槽。私有槽的實現(xiàn)是將行編輯器中的文本內(nèi)容取出來,產(chǎn)生新的一個項目,并加入到清單(QListWidget)中。
QString AddName=ui->lineEdit->text();//將編輯框內(nèi)的文本取出來;
QListWidgetItem*item=new QListWidgetItem;
item->setText(AddName);//把文本內(nèi)容添加到項目QListWidgetItem中
ui->listWidget->addItem(item);//將新產(chǎn)生的項目加入到清單QListWidget中
ui->lineEdit->clear();//當前編輯框清空(2)刪除按鈕的實現(xiàn)
主要實現(xiàn)刪除QListWidget中的一個Item,利用takeItem的類函數(shù)實現(xiàn)。QListWidgetItem*item=ui ->listWidget->takeItem(ui->listWidget->currentRow());
delete item;
(3)刪除全部按鈕實現(xiàn)
主要實現(xiàn)刪除QListWidget中的全部Items,即此按鈕可以刪除全部顯示在工作列表框中的所有內(nèi)容
(4)軟鍵盤實現(xiàn)
在觸摸屏上的激活方式只限于單擊,因此也就需要設計一套輸入字母和數(shù)值的方法[9]。在此使用的是軟鍵盤的方法,當用戶需要輸入字母或數(shù)字時,點擊輸入框時,將彈出軟鍵盤對話框,用戶可以點擊軟鍵盤的字母或數(shù)字輸入數(shù)據(jù),點關(guān)閉后將回到先前的對話框中,并將輸入數(shù)據(jù)顯示出來。需要輸入的編輯框都重載了鼠標單擊函數(shù)(相當于觸摸屏點擊),在重載函數(shù)里實現(xiàn)了軟鍵盤的彈出功能。如圖3所示。
圖3 軟鍵盤界面
解釋器負責將自定義的機器人語言翻譯成機器人目標平臺能識別的指令系統(tǒng)。傳統(tǒng)解釋過程為輸入的機器人程序進行譯碼和數(shù)據(jù)處理的過程,解釋程序首先要識別出源程序中的每個單詞,再分析每個語句及其語義,最后根據(jù)指令的語義執(zhí)行相關(guān)動作。即解釋過程分為詞法分析、語法分析、語義分析、信息提取、錯誤記錄和處理等過程[10]。
傳統(tǒng)的解釋過程復雜,實時性不好。針對這一問題本文設計的解釋器基于正則表達式。由于在程序編輯器模塊對輸入的機器人語言進行了限制,大大降低了錯誤代碼的產(chǎn)生,也可以省去詞法分析和語法分析的復雜過程,只對代碼進行語義分析。對于一行正確輸入的代碼,只需要按照一定的匹配模式,進行關(guān)鍵詞歸約,并根據(jù)關(guān)鍵詞進入相應的解釋子程序,方便快捷的完成機器人指令程序的解釋[11]。解釋器流程圖如圖4所示。
首先利用正則表達式建立關(guān)鍵字表,然后依次從列表框中讀入一條語句,利用剛剛建立的關(guān)鍵詞表對整條語句進行匹配,如果匹配成功則根據(jù)關(guān)鍵字類型來調(diào)用相應的分析函數(shù);如果匹配不成功則錯誤檢查確定行號錯誤還是參數(shù)錯誤。
3.1 建立關(guān)鍵詞表
利用正則表達式為每條語句建立一個關(guān)鍵詞表,只有嚴格按照正則表達式所規(guī)定的格式的語句才能被完全匹配。
增加機器人語言只需要在此多建立相對應的正則表達式即可,方便進行語言的擴展,使得解釋器具有良好的靈活性。
3.2 匹配并解釋
對于每一種指令類型,都要設計其各自的語義檢查和目標代碼生成的接口。此函數(shù)中包含大量的 if else if語句來根據(jù)不同的匹配語句調(diào)用相應的解釋函數(shù),函數(shù)的主要結(jié)構(gòu)如下。
對于運動控制、輸入輸出、等待等簡單指令,只需要按照其指令及參數(shù)做相應的簡單處理即可。
3.3 流程控制指令的解釋方法
對于流程控制指令等,常還需要進行解釋程序段的跳轉(zhuǎn)等?,F(xiàn)以條件分支指令說明流程控制指令的解釋方法。
IF IN/OUT 5 1/0 JUMP/CALL;
此指令用于判別輸入輸出口的狀態(tài)(“0”和“1”),若為輸入輸出口的狀態(tài)符合語句定義,則執(zhí)行后面的操作,否則跳過此程序行。后面的操作可為跳轉(zhuǎn)或子程序調(diào)用,所以,條件分支指令語義分析的核心任務是檢測輸入輸出口的狀態(tài)、跳轉(zhuǎn)或子程序調(diào)用的處理。在語義分析程序讀到“IF”指令后,讀進下一個符號判斷是檢測輸入還是輸出口,然后讀取下一個符號決定檢測第幾個輸入或輸出口,根據(jù)檢測結(jié)果判斷是否執(zhí)行下面的操作。
若條件輸入輸出口的狀態(tài)滿足要求,再根據(jù)條件表達式后的第一個字符進行相應的處理。
若為“JMUP”,讀進下一個符號即標號,利用正則表達式對標號進行匹配,若找到則從標簽處開始解釋,否則進行錯誤處理;
若為“CALL”,則讀進下一個符號即子程序名,利用正則表達式對子程序號進行匹配,若找到保留當前程序解釋的斷點同時開始解釋子程序,若沒找到則進行錯誤處理。
條件分支指令解釋的流程圖如圖5所示。
圖5 條件分支指令處理流程圖
將開發(fā)好的Qt應用程序移植到示教器中,示教器界面如圖6所示,輸入完成后單擊測試框中的自動按鈕完成測試。
圖6 示教器界面
示教生成了10個點,其中0號點為初始位置,1號點為抓取工件的位置,5、6點為兩個放置工件的位置。傳感器5號通道為1時應該將工件放置在5號位置,否則將工件放置到6號位置。
實驗表明基于Qt的機器人語言系統(tǒng)能夠很好的完成對機器人的控制,滿足工業(yè)機器人實時性的要求。同時由于Qt程序能在不同的平臺和操作系統(tǒng)上運行,所以該套機器人語言系統(tǒng)能夠適用于多個平臺和系統(tǒng),具有較好的可移植性。
[1]郭顯金.工業(yè)機器人編程語言的設計與實現(xiàn)[D].武漢:華中科技大學,2013.
[2]別衛(wèi)春,朱志紅,葉伯生,等.HNC-IR機器人語言解釋系統(tǒng)的研究與實踐[J].機電一體化,2000(3):27-30.
[3]張瑋光,劉俊玲,趙新,等.微操作機器人編程語言[J].中南大學學報(自然科學版),2007,38(1):558-559.
[4]陳生翰.不銹鋼廚具拉伸成型工序機器人控制軟件設計與實現(xiàn)[D].廣州:華南理工大學,2011.
[5]王彥.碼垛機器人示教盒系統(tǒng)軟硬件設計[D].上海:上海交通大學,2010.
[6]丁林松,黃麗琴.Qt4圖形設計與嵌入式開發(fā)[M].北京:人民郵電出版社,2009.
[7]閆鋒欣.C++GUIQt4[M].北京:電子工業(yè)出版社,2008.
[8]蔡志明.精通Qt4編程[M].北京:電子工業(yè)出版社,2008.
[9]謝芬,潘麗,劉守印.基于QT/E的嵌入式Linux系統(tǒng)的軟鍵盤實現(xiàn)[J].電子設計工程,2012,20(5):177-179.
[10]何嘉健,李偉光.基于GRETA正則表達式的機器人解釋器的研究[J].組合機床與自動化加工技術(shù),2012(1):17-24.
[11]任松濤.NC代碼編譯器的設計與實現(xiàn)[D].西安:西北工業(yè)大學,2007.
(編輯 李秀敏)
Design of the Industry Robot Language System Based on Qt
YANG Xing,CHEN Fu-lin,ZHOU Fei
(Collage of Mechanical and Electronic Engineering,NanJing University of Aeronautics and Astronautics,Nanjing 210016,China)
Industrial robot language system is an important part of the robot control system,research and analysis the structure and characteristics of robot language system.The design scheme of industrial robot language system is put forward based on Qt and Regular Expression.Robot programming language,the editor and the interpreter are included in the language system.On the basis of the custom action level robot programming language,detailed design a graphical interface editor based on Qt.Editor function of each part are given specific implementation.Then detailed design robot interpreter based on Regular Expression.The set of robot language system has good extensibility.
robot language system;robot programming language;interpreter;Qt;regular expression
TH166;TG506
A
1001-2265(2015)03-0071-04 DOI:10.13462/j.cnki.mmtamt.2015.03.019
2014-07-09;
2014-08-12
楊杏(1990—),男,江蘇泰興人,南京航空航天大學碩士研究生,研究方向為機器人及自動控制,(E-mail)yxxb@163.com。