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