張茂玲 楊錦濤
【摘 要】針對(duì)機(jī)器人編程語言和控制程序模塊化的發(fā)展需求,提出一種基于Lua腳本語言的機(jī)器人語言解釋器的實(shí)現(xiàn)方法。用Lua作為整個(gè)系統(tǒng)的構(gòu)建者,對(duì)機(jī)器人語言進(jìn)行詞法、語法分析,調(diào)用控制代碼完成對(duì)機(jī)器人的控制,具有擴(kuò)充性和維護(hù)性強(qiáng),系統(tǒng)開發(fā)效率高,解釋效率高的特點(diǎn)。該解釋器結(jié)合vs2008運(yùn)行,利用robotic toolbox for matlab仿真驗(yàn)證,證明該解釋器可以很好地解釋工業(yè)機(jī)器人語言,為解釋器的構(gòu)建提供了一種新的模式。
【關(guān)鍵詞】Lua;機(jī)器人語言;解釋器;模塊化
0 引言
工業(yè)機(jī)器人的快速發(fā)展,逐漸使人類從繁重、單調(diào)或是危險(xiǎn)的工作中解放出來。為了縮短機(jī)器人的開發(fā)周期,需要一種簡(jiǎn)單易懂的語言對(duì)機(jī)器人進(jìn)行編程,這就是機(jī)器人語言產(chǎn)生的初衷[1],它更符合人的語言習(xí)慣和思維方式,即使不懂編程語言的工作人員也能夠很快的理解和運(yùn)用。這就需要把這種類人思維的指令語言解析成為C/C++能夠理解和運(yùn)用的語言。機(jī)器人語言解釋器的主要功能就是將文本形式的簡(jiǎn)單的機(jī)器人語言,也就是指令代碼轉(zhuǎn)換為程序需要的數(shù)據(jù)結(jié)構(gòu)或格式,以控制機(jī)器人的運(yùn)行,所以解釋器在機(jī)器人軟件系統(tǒng)中起到非常重要的作用,其解釋效率將直接影響工業(yè)機(jī)器人的工作效率。
Lua的設(shè)計(jì)目的就是為了嵌入到應(yīng)用程序中,從而為應(yīng)用程序提供靈活的擴(kuò)展和定制功能。輕量級(jí)Lua語言的官方版本只包括一個(gè)精簡(jiǎn)的核心和最基本的庫(kù)。這使得Lua體積小、啟動(dòng)速度快,在目前所有腳本引擎中,Lua的速度是最快的[2]。這一切都決定了Lua是作為嵌入式腳本的最佳選擇。因此選用Lua腳本語言構(gòu)建解釋器。
與文[3][4]中的解釋器不同的是Lua不僅僅是把參數(shù)傳遞給主程序?;贚ua的解釋器用Lua整合現(xiàn)有資源,構(gòu)造整個(gè)系統(tǒng)的框架,調(diào)用控制模塊來實(shí)現(xiàn)具體功能,降低模塊之間耦合程度,其優(yōu)勢(shì)在于擴(kuò)展性、復(fù)用性較強(qiáng),并且方便實(shí)現(xiàn)更復(fù)雜的結(jié)構(gòu)和邏輯,為將來更高級(jí)的機(jī)器人語言解析提供了可能。腳本語言無需編譯,在解釋器的開發(fā)階段可以實(shí)現(xiàn)快速、實(shí)時(shí)的修改調(diào)試,縮短開發(fā)周期。
1 工業(yè)機(jī)器人控制系統(tǒng)及編程語言設(shè)計(jì)
1.1 工業(yè)機(jī)器人控制系統(tǒng)
操作者在界面利用規(guī)定的機(jī)器人語言指令編寫程序,用解釋器對(duì)機(jī)器人語言進(jìn)行解析,調(diào)用相應(yīng)的控制模塊,控制模塊包括路徑規(guī)劃模塊、速度規(guī)劃模塊、運(yùn)動(dòng)學(xué)模塊和動(dòng)力學(xué)模塊,完成軌跡規(guī)劃、插補(bǔ)、逆運(yùn)動(dòng)學(xué)等運(yùn)算,最后Lua把伺服電機(jī)需要的關(guān)節(jié)角度、關(guān)節(jié)角速度和加速度參數(shù)傳遞給運(yùn)動(dòng)控制器,實(shí)現(xiàn)對(duì)機(jī)器人的控制。
1.2 工業(yè)機(jī)器人編程語言設(shè)計(jì)
機(jī)器人編程語言需要運(yùn)動(dòng)指令和流程控制指令,解釋器的任務(wù)是要對(duì)指令進(jìn)行解析,控制機(jī)器人完成指令動(dòng)作。
2 基于Lua的解釋器設(shè)計(jì)
2.1 Lua簡(jiǎn)介
Lua是一種嵌入式語言,Lua具有與C/C++良好的交互能力,十分簡(jiǎn)潔的API,可以說是目前腳本語言中做的最好的[1]。我們可以把Lua作為C/C++的一個(gè)庫(kù),同樣也可以把C/C++作為L(zhǎng)ua的一個(gè)庫(kù)。Lua與C/C++可以通過一個(gè)虛擬棧來進(jìn)行數(shù)據(jù)交互,十分簡(jiǎn)潔,這一點(diǎn)對(duì)實(shí)現(xiàn)工程的模塊化非常重要。解釋器將C++作為 Lua的一個(gè)庫(kù)來使用;
Lua提供了豐富的字符串處理函數(shù);
靈活的table和function,table是Lua中一種特別的結(jié)構(gòu),類似數(shù)組,但它其中的元素可以是任意類型的,甚至可以是一個(gè)函數(shù)。Function具有參數(shù)變長(zhǎng)機(jī)制,這些為解析工作提供了極大的方便;
Lua具有可移植性,Lua可以運(yùn)行在任何平臺(tái)上,包括:PlayStation、Xbox等等。
由于Lua具有的這些特點(diǎn),它可以作為一種高效便捷的解析工具。
2.2 基于Lua解釋器的體系結(jié)構(gòu)
首先編輯機(jī)器人程序,編輯完成后,調(diào)用Lua讀取文本中的機(jī)器人程序,解析每一句代碼,檢測(cè)詞法語法錯(cuò)誤,有錯(cuò)誤時(shí)拋出錯(cuò)誤類型,無錯(cuò)誤時(shí)分解成指令和參數(shù),根據(jù)不同的指令調(diào)用不同的控制模塊:把示教點(diǎn)位置姿態(tài)信息傳遞給路徑規(guī)劃模塊,得到路徑參數(shù),把速度參數(shù)和路徑參數(shù)傳遞給速度規(guī)劃模塊,把速度規(guī)劃參數(shù)和路徑參數(shù)傳遞給插補(bǔ)模塊,得到笛卡爾空間末端執(zhí)行器插補(bǔ)狀態(tài)參數(shù),最后調(diào)用逆運(yùn)動(dòng)學(xué)求解模塊,推出六個(gè)關(guān)節(jié)運(yùn)行時(shí)間對(duì)應(yīng)的位置、速度、加速度信息,傳遞給伺服驅(qū)動(dòng)控制器完成動(dòng)作。在這里L(fēng)ua不僅是傳統(tǒng)解釋器的作用,而是整個(gè)系統(tǒng)的調(diào)度者,有利于機(jī)器人控制系統(tǒng)的模塊化,這樣一來,假如速度規(guī)劃模塊需要優(yōu)化,我們可以直接把這個(gè)模塊替換成優(yōu)化后的模塊。
2.3 基于Lua的解釋器界面實(shí)現(xiàn)
常用的界面實(shí)現(xiàn)形式是Qt,基于Lua的解釋器研究采用一種新穎的實(shí)現(xiàn)形式——Qtlua,Qtlua庫(kù)旨在用Lua腳本語言使Qt應(yīng)用程序可腳本化,為QtScript模式提供一種新的選擇,因此它具有腳本的特點(diǎn)[2]。很多腳本語言都可以實(shí)現(xiàn)對(duì)Qt的封裝,之所以選擇Lua是因?yàn)長(zhǎng)ua的小巧,可以將解釋器模塊式的嵌入到其他機(jī)器人平臺(tái)中,并且可以方便的進(jìn)行在線維護(hù)和升級(jí)。
3 實(shí)驗(yàn)及結(jié)果
用自己開發(fā)的解釋器軟件RLI(Robot Language Interpreter)結(jié)合vs2008來解析文本,調(diào)用控制模塊生成數(shù)據(jù),利用robotic toolbox for matlab進(jìn)行仿真驗(yàn)證。在編輯時(shí)加入一些不必要的空格和換行、替換控制模塊,以測(cè)試解釋解析的正確性。大量的測(cè)試表明,解釋器能夠正確的解析機(jī)器人語言,調(diào)用相應(yīng)函數(shù),執(zhí)行循環(huán)結(jié)構(gòu),控制機(jī)器人執(zhí)行相應(yīng)動(dòng)作等。當(dāng)機(jī)器人程序編寫有錯(cuò)誤時(shí),可以對(duì)其中的錯(cuò)誤進(jìn)行提示。圖1中的程序描述了工作流程:機(jī)器人從位置點(diǎn)P001移動(dòng)到位置點(diǎn)P002,然后按照弧線-直線-弧線對(duì)工件噴涂,等待工件底座旋轉(zhuǎn),再次噴涂,反復(fù)幾次后停止于位置點(diǎn)P007,移動(dòng)到位置點(diǎn)P008待命。運(yùn)行仿真結(jié)果如圖2所示。
4 結(jié)論
通過Lua腳本語言,可以準(zhǔn)確、快速的解析機(jī)器人語言,可以使機(jī)器人語言的編寫簡(jiǎn)單化,使非專業(yè)人員也可以對(duì)機(jī)器人進(jìn)行編程。Lua腳本語言在機(jī)器人中的運(yùn)用可以實(shí)現(xiàn)機(jī)器人控制程序的模塊化,降低模塊間的耦合度,方便實(shí)現(xiàn)模塊的替換、升級(jí)和擴(kuò)充;可以的大大縮短機(jī)器人解釋器開發(fā)時(shí)調(diào)試的時(shí)間;解釋器可以便捷的添加或刪除指令,簡(jiǎn)化了后期的升級(jí)維護(hù),實(shí)現(xiàn)了解釋器的開放性;Lua具有良好的可移植性,根據(jù)不同平臺(tái)修改cmd中的內(nèi)容后就可以在其他機(jī)器人控制平臺(tái)運(yùn)行,具有廣泛的應(yīng)用范圍。
【參考文獻(xiàn)】
[1]John J.Craig. 機(jī)器人學(xué)導(dǎo)論[M].3版.贠超,等,譯.北京:機(jī)械工業(yè)出版社,2006.
[2]Roberto Ierusalimschy. Programming in Lua[M]. Lua.org, 2013.
[3]曾國(guó).利用LEX與YACC實(shí)現(xiàn)數(shù)控線切割的加工程序編譯器[J].機(jī)電工程,2004(1):58-61.
[4]王浩,謝存禧.工業(yè)機(jī)器人解釋器的研究[J].機(jī)械設(shè)計(jì)與制造,2010(3):146-149.
[責(zé)任編輯:鄧麗麗]