本發(fā)明涉及一種機器人示教器,尤其是一種基于腳本和插件的可擴展機器人示教器。
背景技術:
工業(yè)機器人指的是在控制下智能完成預設工作的多關節(jié)或者多自由度的機器裝備。工業(yè)機器人相比于人,具備成本低,效率高,可以克服惡劣環(huán)境等優(yōu)點。目前,工業(yè)機器人已經(jīng)在汽車制造,電子,橡膠塑料,軍工,航天制造,食品工業(yè),醫(yī)藥設備,金屬制品等領域得到應用。
工業(yè)機器人包括三個部分:機器人本體、控制器和示教器。示教器是人機交互設備,監(jiān)測系統(tǒng)狀態(tài),以及收發(fā)控制指令。面對機器人的多應用領域,多工作方式和用戶的需求多樣化,需要開發(fā)多個版本的示教器程序。示教器軟件的開發(fā)效率較低,軟件版本多,難以管理,并且不能及時滿足用戶需求。
技術實現(xiàn)要素:
本發(fā)明要解決的技術問題是現(xiàn)有的示教器通用性差,難以滿足不同版本之間的普適應用,軟件升級效率低,可擴展性差。
為了解決上述技術問題,本發(fā)明提供了一種基于腳本和插件的可擴展機器人示教器,包括基礎模塊和插件庫模塊;
基礎模塊,用于以腳本文件的形式添加或修改插件庫模塊中的各個功能插件,并與機器人控制器進行指令和狀態(tài)通信;
插件庫模塊,用于為基礎模塊提供一個或多個功能插件。
作為本發(fā)明的進一步限定方案,基礎模塊包括通信子模塊、腳本初始化子模塊、主界面子模塊、指令收發(fā)子模塊以及狀態(tài)顯示子模塊;
通信子模塊,用于與機器人控制器建立通信和心跳監(jiān)測,并定時獲取機器人控制器的運行狀態(tài);
腳本初始化子模塊,用于配置腳本文件的運行環(huán)境,注冊函數(shù)到腳本文件的運行環(huán)境中,從而在腳本文件中調用注冊的函數(shù)實現(xiàn)功能插件的加載,同時還連接功能插件與機器人控制器的信號和槽,實現(xiàn)功能插件與機器人控制器的函數(shù)調用;
主界面子模塊,用于提供通信子模塊和腳本初始化子模塊的接口,并讀取各個功能插件的腳本文件;
指令收發(fā)子模塊,用于設置示教指令并將示教指令發(fā)送給機器人控制器,或者接受機器人控制器發(fā)送的反饋指令,并解析出反饋指令的內容;
狀態(tài)顯示子模塊,用于在主界面子模塊上刷新顯示機器人控制器的運行狀態(tài)。
作為本發(fā)明的進一步限定方案,功能插件為基礎功能插件和/或自定義功能插件。
作為本發(fā)明的進一步限定方案,基礎功能插件為工程管理插件、程序編輯插件和/或數(shù)據(jù)管理插件。
本發(fā)明的有益效果在于:采用基礎模塊和插件庫模塊的組合配合,增強了示教器軟件的開發(fā)靈活度,降低開發(fā)工作量;采用自定義功能插件能夠讓用戶自己開發(fā)功能包,增強了示教器的使用靈活性。
附圖說明
圖1為本發(fā)明的示教器整體框架;
圖2為本發(fā)明的示教器基礎模塊組成;
圖3為本發(fā)明的自定義功能插件創(chuàng)建流程;
圖4為本發(fā)明的插件通信機制。
具體實施方式
如圖1-3所示,本發(fā)明公開的基于腳本和插件的可擴展機器人示教器,包括基礎模塊和插件庫模塊;
基礎模塊,用于以腳本文件的形式添加或修改插件庫模塊中的各個功能插件,并與機器人控制器進行指令和狀態(tài)通信,將用戶需要的狀態(tài)顯示到主界面上或者插件上。
插件庫模塊,用于為基礎模塊提供一個或多個功能插件。
基礎模塊包括通信子模塊、腳本初始化子模塊、主界面子模塊、指令收發(fā)子模塊以及狀態(tài)顯示子模塊;
通信子模塊,用于與機器人控制器建立通信和心跳監(jiān)測,并定時獲取機器人控制器的運行狀態(tài);
腳本初始化子模塊,用于配置腳本文件的運行環(huán)境,注冊函數(shù)到腳本文件的運行環(huán)境中,從而在腳本文件中調用注冊的函數(shù)實現(xiàn)功能插件的加載,同時還連接功能插件與機器人控制器的信號和槽,實現(xiàn)功能插件與機器人控制器的函數(shù)調用;
主界面子模塊,用于提供通信子模塊和腳本初始化子模塊的接口,并讀取各個功能插件的腳本文件;
指令收發(fā)子模塊,用于設置示教指令并將示教指令發(fā)送給機器人控制器,或者接受機器人控制器發(fā)送的反饋指令,并解析出反饋指令的內容;
狀態(tài)顯示子模塊,用于在主界面子模塊上刷新顯示機器人控制器的運行狀態(tài)。
功能插件為基礎功能插件和/或自定義功能插件;基礎功能插件為工程管理插件、程序編輯插件和/或數(shù)據(jù)管理插件。
本發(fā)明公開的基于腳本和插件的可擴展機器人示教器,采用基礎模塊加功能插件的軟件架構開發(fā)示教器,并采用腳本文件靈活添加,修改功能插件和機器人指令,狀態(tài)?;A模塊為最基本的示教器軟件包,具備加載各功能插件,與控制器通信,設置和顯示控制器狀態(tài)和命令的功能?;A模塊還提供系統(tǒng)狀態(tài),數(shù)據(jù)管理類的指針給所有功能插件。采用腳本文件靈活配置功能插件,指令和狀態(tài),是在腳本中通過函數(shù)實現(xiàn)功能插件的加載,功能插件之間的通信,動態(tài)配置指令和狀態(tài)結構。示教器升級或者用戶自己開發(fā),只需要開發(fā)功能插件,并在狀態(tài)腳本和指令腳本中添加就可以實現(xiàn)示教器升級。
如圖1和2所示,示教器由基礎模塊和功能插件組成?;A程序包括通信子模塊、腳本初始化子模塊、主界面子模塊、指令收發(fā)子模塊以及狀態(tài)顯示子模塊。
主界面子模塊用于搭建基本的程序框架,可以提供和通信模塊的接口和腳本接口,讀取腳本文件,并且動態(tài)顯示界面。
通信子模塊用于建立通信和心跳監(jiān)測,定時獲取控制器狀態(tài),收發(fā)指令。
腳本初始化子模塊用于配置腳本運行環(huán)境,注冊需要的函數(shù)到腳本環(huán)境中,在腳本中可以調用注冊的函數(shù),實現(xiàn)插件的加載,連接插件與主程序的信號和槽,實現(xiàn)插件與主程序的函數(shù)調用。
指令收發(fā)子模塊,用于設置示教指令格式,并將示教指令發(fā)送給控制器,或者接受控制器發(fā)送的反饋指令,并解析出反饋指令的內容;示教指令和反饋指令均可以通過腳本文件動態(tài)添加或修改。
狀態(tài)顯示子模塊,用于顯示系統(tǒng)各個狀態(tài),將關鍵狀態(tài)和主界面子模塊連接,刷新狀態(tài)信息。
本發(fā)明采用的插件開發(fā)示教器程序的方式,相當于將整個示教器程序作為一個整體,更加便于開發(fā)和維護,而且在不需要動原示教器程序的基礎上,可以自定義插件,放到示教器程序中。插件開發(fā)首先需要讓應用程序感知插件。插件就是實現(xiàn)了一個或者多個接口的動態(tài)庫。接口就是由專有的純虛函數(shù)組成的類。這些純虛函數(shù)實現(xiàn)了基礎程序和插件的通信。因此要實現(xiàn)插件,首先需要讓基礎程序能夠利用接口來使用插件。然后再創(chuàng)建插件。然后再為基礎模塊創(chuàng)建接口類。接口類必須包含一個純虛析構函數(shù),再根據(jù)基礎程序的需求,添加多個純虛函數(shù)。這些純虛函數(shù)實現(xiàn)插件和主程序的通信。最后使用Q_DECLARE_INTERFACE()宏使這個接口與一個關聯(lián)符聯(lián)系起來。
自定義功能插件的創(chuàng)建流程如圖3所示,插件就是上面定義的接口類子類。在插件中實現(xiàn)接口類中定義的虛函數(shù)。在用Qt創(chuàng)建庫工程后,需要修改文件。首先就是修改頭文件,插件類必須繼承接口文件,為繼承的接口使用Q_INTERFACE()宏。并聲明接口函數(shù),在cpp文件中實現(xiàn)接口函數(shù),在cpp文件最后加上Q_EXPORT_PLUGIN2(),讓插件可以被應用程序使用。接口函數(shù)實現(xiàn)主程序和插件的通信,將主程序中的系統(tǒng)狀態(tài)指針傳遞給插件,插件也可以將插件中的指針傳遞給主程序。另一個實現(xiàn)插件通信的方式是Qt的信號和槽機制,如圖4所示。各插件提供出各自的信號和槽,用戶只需要在腳本文件中connect信號和槽實現(xiàn)通信。編譯共享庫后會生成一個庫文件,將庫文件拷貝到主程序所在目錄下使用。示教器程序會被分成多個插件,包括工程管理插件、程序編輯插件、數(shù)據(jù)管理插件等。工程管理插件用于顯示,編輯當前系統(tǒng)下的所有工程。程序編輯界面用于顯示被加載的程序的指令列表,并且可以對指令進行編輯,查看。數(shù)據(jù)管理插件用于顯示,編輯當前工程下的所有變量。接口文件和Qt的信號和槽機制是實現(xiàn)插件通信的關鍵技術。
本發(fā)明中,腳本和插件結合是示教器的關鍵技術,插件的加載,信號和槽的連接,狀態(tài)和指令的編輯都在腳本插件中完成。插件的加載其實是在主程序中實現(xiàn)的,但是在腳本中調用的。在調用之前,必須先在主程序中寫好調用插件的接口,將接口函數(shù)注冊到腳本環(huán)境中,就可以在腳本文件中調用出程序中注冊的函數(shù),注冊函數(shù)可以傳遞參數(shù)。
在進行腳本配置系統(tǒng)狀態(tài)和指令時,在腳本文件中定義好機器人系統(tǒng)的狀態(tài)結構。啟動程序后,控制器會按照腳本中定義的結構發(fā)送系統(tǒng)狀態(tài)給示教器,示教器在接收到狀態(tài)后,讀取腳本文件,得到狀態(tài)的解析方法,依次解析出所有狀態(tài)。采用這樣的方式,只需要修改腳本文件就可以靈活的添加,刪除或者修改系統(tǒng)狀態(tài),對示教器后期的升級非常的方便。同樣,也可以在腳本文件中定義指令,示教器或者控制器發(fā)送指令按照腳本定義的參數(shù)順序發(fā)送參數(shù),解析也按照腳本定義的結構解析參數(shù),實現(xiàn)控制器和示教器的指令收發(fā)。在這里根據(jù)狀態(tài)腳本解析出狀態(tài)是個比較復雜的過程。本發(fā)明采用的方法是,根據(jù)腳本中表的定義以及嵌套關系,創(chuàng)建Qmap,map的鍵是各元素的關鍵字,map的值是一個結構體,結構體中包含當前元素的地址信息,類型信息等。在程序中根據(jù)數(shù)據(jù)管理類提供的getValue接口,傳入關鍵字參數(shù),就可以獲得想要的狀態(tài)信息。指令的處理方式和狀態(tài)類似。