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