夏飛虎 葉瑛歆 胡天亮 張承瑞
(①山東大學機械工程學院,山東 濟南 250061;②高效與潔凈機械制造教育部重點實驗室(山東大學),山東 濟南 250061)
?
基于Protobuf的機器人示教器軟件設(shè)計與實現(xiàn)*
夏飛虎①②葉瑛歆①②胡天亮①②張承瑞①②
(①山東大學機械工程學院,山東 濟南 250061;②高效與潔凈機械制造教育部重點實驗室(山東大學),山東 濟南 250061)
為提高工業(yè)機器人示教器數(shù)據(jù)通信性能,改善示教器人機界面設(shè)計,提出了一種基于以太網(wǎng)通信和嵌入式Windows CE開發(fā)的機器人示教器軟件設(shè)計方案。該方案在通信實現(xiàn)上基于Google Protobuf定義Socket傳輸數(shù)據(jù)協(xié)議,簡化了機器人示教器與控制器之間傳輸數(shù)據(jù)組包和解析;在界面設(shè)計上運用Windows CE系統(tǒng)的優(yōu)勢,實現(xiàn)了開發(fā)簡單、反應速度快、可擴展性好的人機界面;在軟件設(shè)計方面基于動態(tài)鏈接庫的映射機制實現(xiàn)了模塊化的軟件結(jié)構(gòu),提高了軟件系統(tǒng)的獨立性和開放性。最后通過在SCARA機器人上的測試,驗證了示教器軟件的可用性。
Google Protobuf;工業(yè)機器人;示教器;軟件設(shè)計
機器人示教器是實現(xiàn)人機交互的工具,是機器人控制系統(tǒng)的重要組成部分。在應用上,示教器有兩種類型,一種是作為控制器顯示和鍵盤延伸的輸入輸出設(shè)備,另一種是帶有獨立CPU的通信型示教器。通信型示教器系統(tǒng)大多基于單片機和嵌入式計算機。相比于單片機,嵌入式計算機具有的系統(tǒng)開發(fā)和擴展方便、通信穩(wěn)定、開放性高等優(yōu)點使其能更好滿足示教器越來越豐富的功能需求。但基于嵌入式計算機開發(fā)機器人示教器涉及兩臺相互獨立的計算機之間進行通信,如何保證通信的速率、穩(wěn)定性和數(shù)據(jù)傳輸?shù)臏蚀_性是通信型示教器開發(fā)中的重要問題。
通信型示教器與控制器常用的通信方式有兩種:串口通信[1-2]、以太網(wǎng)通信[3]以及串口與以太網(wǎng)混合通信[4]。串口通信方式實現(xiàn)簡單,但其傳輸速率和傳輸距離均不如以太網(wǎng)通信[5]。串口與以太網(wǎng)混合通信方式根據(jù)對通信要求的不同,通過采用串口與PLC通信,同時使用以太網(wǎng)與運動控制通信,能很好地改善通信性能,但通信系統(tǒng)過于復雜。以太網(wǎng)通信方式將PLC通信和運動控制通信集中通過以太網(wǎng)實現(xiàn),在簡化了通信系統(tǒng)的同時能保證通信性能,但多種數(shù)據(jù)同時傳輸使得傳輸數(shù)據(jù)協(xié)議的制定較為復雜。因此,設(shè)計一種簡單的傳輸數(shù)據(jù)協(xié)議來開發(fā)通過以太網(wǎng)方式通信的示教器具有重要意義。
針對以上問題,本文在課題組前期開發(fā)的基于實時以太網(wǎng)的運動視覺一體化機器人控制器平臺的基礎(chǔ)上[6-9],提出了一種基于嵌入式Windows CE的工業(yè)機器人示教器設(shè)計方案。該方案采用基于Socket的TCP/IP網(wǎng)絡(luò)通信模式,通過以太網(wǎng)實現(xiàn)示教器與控制器之間所有數(shù)據(jù)的通信,充分利用Windows CE系統(tǒng)圖形界面友好、反應速度快、可擴展性好的優(yōu)點和以太網(wǎng)具有的速率高、穩(wěn)定性好、傳輸距離遠等優(yōu)勢。同時,基于Google Protobuf提供的序列化框架,設(shè)計了一種機器人示教器與控制器之間數(shù)據(jù)傳輸協(xié)議,使傳輸數(shù)據(jù)的定義變得簡潔高效。在示教器軟件設(shè)計上,通過動態(tài)鏈接庫機制和多線程、模塊化的軟件結(jié)構(gòu)實現(xiàn)了示教器的開放性。并以SCARA機器人為樣機搭建了示教器性能測試平臺,驗證示教器軟件的正確性和可操作性。
如圖1所示,機器人控制系統(tǒng)由機器人示教器、機器人控制器和機器人本體組成。本文以課題組前期研發(fā)的運行實時拓展軟件Kithara拓展的Windows7系統(tǒng)的工業(yè)PC為控制器,采用標準以太網(wǎng)卡與示教器集成。示教器為運行Windows CE 6.0系統(tǒng)的嵌入式計算機。
示教器系統(tǒng)的軟件結(jié)構(gòu)采用模塊化、多線程的策略進行開發(fā),包括兩個部分:運行在示教器上的人機交互(HMI)模塊及以太網(wǎng)通信模塊和運行在控制器上的以太網(wǎng)通信模塊,其結(jié)構(gòu)如圖2所示。控制器上的以太網(wǎng)通信模塊以動態(tài)鏈接庫(DLL)的形式加載到控制器主程序,采用C++語言開發(fā)。HMI模塊是示教器程序的主控模塊,為提高界面開發(fā)效率采用C#語言開發(fā);以太網(wǎng)通信模塊以C#引用(using)的形式加載到HMI模塊中。在示教器軟件運行過程中主要實現(xiàn)3個任務:界面顯示和觸屏消息的刷新,按鍵消息的響應和通信數(shù)據(jù)的交互。任務的并行執(zhí)行采用多線程的方式,即開辟3個線程分別對應負責3個任務,界面線程為主線程,按鍵處理線程和通信線程為兩個支線程。界面主線程負責掃描界面輸入與刷新界面輸出;通信線程調(diào)用以太網(wǎng)通信模塊中的函數(shù)完成與控制器的通信和與HMI的交互;按鍵處理線程負責將按鍵的輸入向HMI的傳遞。
示教器的軟件設(shè)計主要實現(xiàn)人機交互和以太網(wǎng)通信兩個功能。
人機交互功能是通過一系列的人機界面、輸入輸出操作實現(xiàn)的。示教器為用戶提供了按鍵和觸屏兩種輸入方式,用來實現(xiàn)參數(shù)設(shè)置、指令輸入、程序編輯等功能。界面為用戶提供了機器人位姿狀態(tài)、報警信息顯示,操作窗口等功能,隨著機器人應用場合更加廣泛,示教器還能方便擴展功能,如集成機器人視覺后的視覺圖像顯示等。Windows CE是一種模塊化的、具有強大通信能力的嵌入式操作系統(tǒng),專門用來支持各種便攜式的個人計算設(shè)備,非常適合用于示教器開發(fā)。
圖3列出了示教器界面的結(jié)構(gòu)。主界面是HMI的初始界面,主要實現(xiàn)機器人位姿、報警信息顯示,手動操作,示教器系統(tǒng)信息顯示,坐標系選擇以及調(diào)用其它界面的功能選擇操作等功能。設(shè)置界面,包含機器人機構(gòu)參數(shù),伺服參數(shù),用戶自定義的運動速度、加速度、加加速度、工況參數(shù),機器人坐標系等的設(shè)置、修改和查看。自動模式是機器人在搬運、碼垛等工況下的工作模式,通過設(shè)置機器人運動軌跡中的幾個固定的示教點,自動生成機器人運動軌跡,完成相應工作任務。自動模式界面,包括示教點的設(shè)置、修改、查看以及自動模式下的相應按鍵。編輯模式界面是機器人的運動軌跡程序編輯界面,包含了機器人軌跡編程的特定語言,程序編輯、程序代碼執(zhí)行,鍵盤等。文件管理界面,是進行示教程序管理的界面,包含了文件讀寫、修改、存儲等操作。
機器人示教器和控制器軟件系統(tǒng)作為兩個獨立的進程使用客戶端/服務器模式[10]實現(xiàn),控制器為服務器,示教器為客戶端。示教器與控制器通過網(wǎng)線連接,以太網(wǎng)通信的具體實現(xiàn)采用套接字(socket)來完成。在示教器和控制器上分別設(shè)計了一個以太網(wǎng)通信模塊,封裝socket實現(xiàn)函數(shù)和數(shù)據(jù)傳輸協(xié)議,完成示教器和控制器之間的數(shù)據(jù)信息的交互。具體有以下3個方面的作用:
(1)網(wǎng)絡(luò)檢測。檢測網(wǎng)絡(luò)出現(xiàn)的異常,維護網(wǎng)絡(luò)的穩(wěn)定可靠,使其能正常通信。
(2)數(shù)據(jù)傳輸。接收數(shù)據(jù)并解析到相應的接收數(shù)據(jù)緩沖區(qū),或?qū)⒁掳l(fā)的數(shù)據(jù)寫入相應的下發(fā)數(shù)據(jù)緩沖區(qū)并下發(fā)。
(3)數(shù)據(jù)交互。提供接口函數(shù)給主線程,使其方便地從通信模塊中讀寫數(shù)據(jù)。數(shù)據(jù)傳輸協(xié)議采用Protobuf提供的語法格式來定義。
3.1Protobuf簡介
Google Protobuf(簡稱Protobuf)是Google提供的一個開源序列化框架,一種支持多種語言、跨平臺的結(jié)構(gòu)化數(shù)據(jù)串行化方法,可用于分布式應用之間的數(shù)據(jù)通信、數(shù)據(jù)存儲或者異構(gòu)環(huán)境下的數(shù)據(jù)交換[11]。Protobuf最大的特點是以二進制流存儲,以一種高效、簡潔、可擴展的數(shù)據(jù)格式對結(jié)構(gòu)化數(shù)據(jù)進行編碼[12]。開發(fā)人員按照特定的語法定義結(jié)構(gòu)化的數(shù)據(jù)格式,然后使用Protobuf編譯器生成用來讀寫該數(shù)據(jù)的類的代碼,通過將這些類的文件添加到項目中,調(diào)用相關(guān)方法來完成數(shù)據(jù)的讀寫和序列化與反序列化工作。
3.2數(shù)據(jù)傳輸協(xié)議
機器人示教器與控制器之間的傳輸數(shù)據(jù)主要包括參數(shù)數(shù)據(jù)、指令數(shù)據(jù)和狀態(tài)數(shù)據(jù),集成機器視覺后還包括視覺圖像數(shù)據(jù),如圖4所示。參數(shù)數(shù)據(jù)包括機器人的機構(gòu)參數(shù)、伺服電動機的伺服參數(shù)和用戶自定義的用戶參數(shù);指令數(shù)據(jù)是指通過示教器發(fā)送給控制器用來控制機器人運動的命令,根據(jù)類型的不同又分為觸發(fā)性指令和長效指令;狀態(tài)數(shù)據(jù)包括機器人關(guān)節(jié)坐標、末端坐標以及運動報警信息等。可以看出,這些數(shù)據(jù)類型中既有機器人運動狀態(tài)等周期性數(shù)據(jù),也有運動指令等隨機性數(shù)據(jù),因此必須制定一套數(shù)據(jù)傳輸協(xié)議以確保信息傳輸?shù)母咝蚀_。Protobuf的特點使其非常適合網(wǎng)絡(luò)數(shù)據(jù)傳輸,因此,本文基于Protobuf設(shè)計了機器人示教器與控制器之間的數(shù)據(jù)傳輸協(xié)議。
Protobuf將傳輸數(shù)據(jù)定義在.proto文件中,傳輸數(shù)據(jù)的結(jié)構(gòu)在該文件中以message格式定義。每個數(shù)據(jù)結(jié)構(gòu)擁有一個或多個字段,每個字段都由一個字段修飾符、字段值類型、字段名和字段標識符組成。修飾符用于指定該字段是必選字段(required)、可選字段(optional)或者是重復字段(repeated),重復字段通常被用來當做數(shù)組使用;值類型指定了字段的數(shù)據(jù)類型,可以是基本數(shù)據(jù)類型,也可以是枚舉(enum)、message等類型;字段名是字段的ID,不允許重名;標識符用于標識該字段序列化時在二進制流中的位置。下面列舉了一個名為PosData的message定義的例子,其含有3個字段。
message PosData
{
enum DataType
{
DOWNLOAD = 0;
UPLOAD = 1;
UNDEFINE = 2;
}
required DataType dataType = 1 [default = UNDEFINE];
optional double feedPos = 2;
repeated double absPos = 3;
}
定義好的.proto文件通過編譯器生成指定語言數(shù)據(jù)類的代碼,C++生成.pb.h和.pb.cc文件,C#生成.cs文件。.proto文件中的每個message都會對應地生成一個C++類或C#類,類中針對message中的每個字段都會生成一系列的函數(shù)用于方便地對字段進行讀寫操作。以feedPos為例,會生成下列函數(shù):
// optional double feedpos = 2;
inline bool has_feedpos () const;
inline void clear_feedpos ();
static const int kfeedPosFieldNumber = 2;
inline ::google::protobuf:: double feedpos () const;
inline void set_feedpos (::google::protobuf:: double value);
基于Protobuf數(shù)據(jù)規(guī)則,本文在RobotData.proto文件中定義了機器人的傳輸數(shù)據(jù)。該文件中包含兩個一級message,分別為數(shù)據(jù)頭DataHead和數(shù)據(jù)區(qū)DataInfo。數(shù)據(jù)頭中定義了數(shù)據(jù)區(qū)的數(shù)據(jù)模式、數(shù)據(jù)狀態(tài)和數(shù)據(jù)長度,如圖5所示。數(shù)據(jù)區(qū)中定義了機器人運動參數(shù)、運動指令和運動狀態(tài)以及擴展的視覺信息等數(shù)據(jù),這些數(shù)據(jù)在DataInfo中分別定義成不同的message,實現(xiàn)數(shù)據(jù)的結(jié)構(gòu)化存放。數(shù)據(jù)的結(jié)構(gòu)化存放滿足了周期性數(shù)據(jù)和隨機性數(shù)據(jù)在傳輸中的不同需求,也使數(shù)據(jù)讀寫和后期擴展更加方便。數(shù)據(jù)頭和數(shù)據(jù)區(qū)共同構(gòu)成了數(shù)據(jù)協(xié)議,以整體的形式在以太網(wǎng)中傳輸,如圖6所示。
數(shù)據(jù)頭中定義的數(shù)據(jù)區(qū)的數(shù)據(jù)模式是指數(shù)據(jù)是下發(fā)模式還是上傳模式,下發(fā)模式是指從示教器往控制器發(fā)送數(shù)據(jù),上傳模式是指控制器往示教器發(fā)送數(shù)據(jù)。下發(fā)模式的數(shù)據(jù)主要是隨機性數(shù)據(jù),上傳模式的數(shù)據(jù)既有機器人位姿、關(guān)節(jié)位置等周期性,又有報警、錯誤信息等非周期性數(shù)據(jù)。數(shù)據(jù)狀態(tài)用于校驗數(shù)據(jù)類型,不同的場合會有不同的數(shù)據(jù)需求,如某些緊急情況下會發(fā)送緊急數(shù)據(jù)。數(shù)據(jù)包長度在數(shù)據(jù)發(fā)送前通過Protobuf提供的函數(shù)獲得,在數(shù)據(jù)包反序列化時使用。數(shù)據(jù)發(fā)送前先要根據(jù)數(shù)據(jù)區(qū)的內(nèi)容寫數(shù)據(jù)頭;數(shù)據(jù)接收后也先要解析數(shù)據(jù)頭,再根據(jù)數(shù)據(jù)頭解析數(shù)據(jù)區(qū)。
3.3數(shù)據(jù)交互接口
以太網(wǎng)中傳輸?shù)臄?shù)據(jù)是Protobuf格式數(shù)據(jù),要將其轉(zhuǎn)換成示教器界面層或控制器運動內(nèi)核層(RunTime)使用的數(shù)據(jù)還必須通過自定義的數(shù)據(jù)交互接口來完成。數(shù)據(jù)交互接口中包括了Protobuf數(shù)據(jù)定義類(RobotData.pb.h、RobotData.pb.cc)、Protobuf數(shù)據(jù)收發(fā)類(TcpComm.h、TcpComm.cpp)、用戶數(shù)據(jù)定義類(DataInfo.h、DataInfo.cpp)、用戶數(shù)據(jù)讀寫類(DataComm.h、DataComm.cpp)等四個類,類關(guān)系圖如圖7所示。圖中編號為數(shù)據(jù)傳輸流程,①~⑤為數(shù)據(jù)接收讀取流程,⑥~⑩為數(shù)據(jù)寫入發(fā)送流程。
Protobuf數(shù)據(jù)收發(fā)類中封裝了與以太網(wǎng)通信的接口函數(shù),用戶數(shù)據(jù)讀寫類封裝了與示教器界面或控制器非實時層交互的接口函數(shù)。用戶數(shù)據(jù)定義類的作用是充當了一個數(shù)據(jù)緩沖區(qū),示教器在下發(fā)數(shù)據(jù)之前先通過用戶數(shù)據(jù)讀寫類中的寫函數(shù)將要下發(fā)的數(shù)據(jù)寫入數(shù)據(jù)緩沖區(qū),再周期性地傳遞給用戶Protobuf數(shù)據(jù)定義類,完成下發(fā);示教器在周期性地接收數(shù)據(jù)后將接收的Protobuf數(shù)據(jù)讀入數(shù)據(jù)緩沖區(qū),HMI或RunTime再通過用戶數(shù)據(jù)讀寫類中的讀函數(shù)讀取所需的數(shù)據(jù)。
3.4數(shù)據(jù)傳輸流程
Protobuf定義的數(shù)據(jù)協(xié)議在Socket通訊中的基本原理是[13]:發(fā)送端在發(fā)送之前將要傳輸?shù)南磎essage格式打包并序列化;接收端在收到消息時,反序列化并解包。Protobuf提供的API定義了序列化和反序列化的函數(shù),如表1所示。
表1Protobuf序列化與反序列化函數(shù)
操作函數(shù)C++序列化SerializeToArray()C++反序列化ParseFromArray()C#序列化Serializer.Serialize()C#反序列化Serializer.Deserialize()
常用的Socket通信應用類型有兩類:用于面向連接的TCP(Transmission control protocol,傳輸控制協(xié)議)服務應用和用于無連接的UDP(user data protocol,用戶數(shù)據(jù)報協(xié)議)服務應用[14]。TCP通信在正式收發(fā)數(shù)據(jù)前,必須和對方建立可靠地連接,因此準確性高。機器人示教器與控制器之間的通信必須保證數(shù)據(jù)的嚴格準確,因此采用基于面向連接的TCP協(xié)議的Socket通信。控制器為Socket服務器端,示教器為Socket客戶端,在獨立的線程中通過定時器實現(xiàn)每200 ms完成一次數(shù)據(jù)接收與發(fā)送,通信工作流程如圖8所示。
在實驗室的機器人控制平臺上,以SCARA機器人為實例,進行了以下兩個方面的試驗,試驗平臺如圖9所示。
(1)示教器與控制器之間以太網(wǎng)通信準確性和穩(wěn)定性的試驗。模擬示教器正常使用情況下數(shù)據(jù)的發(fā)送和接收情況,如從示教器設(shè)置參數(shù),下發(fā)指令,從控制器獲取機器人位姿、報警信息等,觀察數(shù)據(jù)的準確性和網(wǎng)絡(luò)的穩(wěn)定性。結(jié)果表明,以太網(wǎng)通信準確穩(wěn)定。
(2)示教器、控制器與機器人聯(lián)機試驗。試驗過程中用示教器改變機器人的位姿、設(shè)定機器人運動速度和指定運動軌跡,觀察機器人的實際響應情況及示教器的狀態(tài)顯示等。結(jié)果表明,通過示教器可以方便快捷的使機器人按照指定的方式穩(wěn)定的運動。
在嵌入式WinCE平臺下開發(fā)機器人示教器,能充分利用系統(tǒng)支持的豐富軟硬件資源,使示教器軟件開發(fā)更加方便,人機界面更加友好,性能更加完善。使用以太網(wǎng)實現(xiàn)示教器與控制器之間的通信,解決了傳輸速率的問題,提高了通信效率,同時提高了通信的穩(wěn)定性和數(shù)據(jù)傳輸?shù)臏蚀_性?;贕oogle Protobuf定義傳
輸數(shù)據(jù)協(xié)議,簡化了數(shù)據(jù)協(xié)議,可在不改變軟件結(jié)構(gòu)的情況下修改數(shù)據(jù),實現(xiàn)數(shù)據(jù)與算法的分離。
[1]洪鷹,王樂. 基于嵌入式計算機的機器人示教器研究[J]. 計算機工程與應用,2013,49(1):78-81.
[2]周偉,徐方. 基于Wince的機器人示教盒的設(shè)計與開發(fā)[J]. 機械設(shè)計與制造, 2012(3):9-11.
[3]趙鳳申,李愛芹,吳文祥. 工業(yè)機器人嵌入式示教盒設(shè)計[J].電焊機, 2011,41(12): 9-12.
[4]何競擇,贠超,張棟,等. 拋光機器人示教控制系統(tǒng)設(shè)計[J]. 制造業(yè)自動化, 2011,33(13): 5-8.
[5]常春國,史金飛,羅翔,等. Windows與Linux串口通信和網(wǎng)絡(luò)通信的比較研究[J]. 中國制造業(yè)信息化:學術(shù)版, 2006(7): 49-52,65.
[6]Wang K, Zhang C, Ding X, et al. A new real-time Ethernet for numeric control[C].Intelligent Control and Automation (WCICA), 2010 8th World Congress on. IEEE, 2010: 4137-4141.
[7]郎需林,靳東,張承瑞,等. 基于實時以太網(wǎng)的 DELTA 并聯(lián)機械手控制系統(tǒng)設(shè)計[J]. 機器人, 2013, 35(5): 576-581.
[8]姬帥,張承瑞,孫書仁,等. 基于實時以太網(wǎng)的開放式運動控制系統(tǒng)[J]. 山東大學學報:工學版, 2014, 44(5): 7-13.
[9]孫好春,張承瑞,胡天亮. 基于 SMP 的總線式軟運動控制引擎設(shè)計[J]. 農(nóng)業(yè)機械學報, 2014, 45(3): 288-292.
[10]Xue M, Zhu C. The socket programming and software design for communication based on client/server[C].Circuits, Communications and Systems, 2009. PACCS'09. Pacific-Asia Conference on. IEEE, 2009: 775-777.
[11]Feng J, Li J. Google Protocol Buffers research and application in online game[C].Conference Anthology, IEEE. IEEE, 2013: 1-4.
[12]Sumaray A, Makki S K. A comparison of data serialization formats for optimal efficiency on a mobile platform[C].Proceedings of the 6th International Conference on Ubiquitous Information Management and Communication. ACM, 2012: 48.
[13]李紀欣,王康,周立發(fā),等. Google Protobuf在Linux Socket通訊中的應用[J]. 電腦開發(fā)與應用, 2013,26(4): 1-5.
[14]張允剛,劉常春,劉偉,等.基于Socket和多線程的遠程監(jiān)控系統(tǒng)[J]. 控制工程, 2006, 13(2): 175-177.
如果您想發(fā)表對本文的看法,請將文章編號填入讀者意見調(diào)查表中的相應位置。
Design and implementation of the robot handheld’s software based on Protobuf
XIA Feihu①②, YE Yingxin①②, HU Tianliang①②, ZHANG Chengrui①②
(①School of Mechanical Engineering, Shandong University,Jinan 250061,CHN;②Key Laboratory of High Efficiency and Clean Mechanical Manufacturing, Shandong University, Jinan 250061, CHN)
To improve the data communication performance and the human-machine interface design of the industrial robot handheld, a software design method of the robot handheld based on Ethernet and Windows CE is proposed. In the implementation of communication, Socket data transmission protocol is defined based on Google Protobuf, which simplifies the packaging and parsing of transmission data between robot handheld and the controller. In interface design, the use of Windows CE system simplifies the development, also fast response and good extensibility of human-machine interface are achieved. In software design, mapping mechanism based on dynamic link library is used to realize the modularized software architecture, which increases independence and openness of the software system. Through the test on SCARA robot, feasibility of handheld software is validated.
Google Protobuf; industrial robot; handheld; software design
TP242.2
A
夏飛虎,男,1989年生,碩士研究生,研究領(lǐng)域為機器人控制系統(tǒng)。
(編輯譚弘穎)(2016-01-05)
160537
數(shù)控一代機械產(chǎn)品創(chuàng)新的區(qū)域應用示范工程(2014BAF09B01)科技部國家支撐計劃