◆常賽賽 楊洋 樊玉琦
基于ROS通信的運(yùn)行管理系統(tǒng)的設(shè)計與實現(xiàn)
◆常賽賽1楊洋2樊玉琦1
(1.合肥工業(yè)大學(xué) 計算機(jī)與信息學(xué)院 安徽 230601;2.中國科學(xué)院 等離子體物理研究所 安徽 230088)
針對十三五遙操作(RH)控制系統(tǒng)的設(shè)計,文章基于開源機(jī)器人操作系統(tǒng)ROS設(shè)計了一個低成本、易移植的針對多機(jī)器人運(yùn)作的運(yùn)行管理系統(tǒng)。本系統(tǒng)采用了模塊化設(shè)計方法,將系統(tǒng)分為操作計劃、操作執(zhí)行、數(shù)據(jù)管理三個部分。系統(tǒng)實現(xiàn)了對任務(wù)的創(chuàng)建、執(zhí)行、存儲等功能,并將任務(wù)命令通過ROS的Actionlib機(jī)制發(fā)送給其他系統(tǒng),再實時接收命令的反饋消息。系統(tǒng)通過UR機(jī)械臂和DH-3手爪測試可以穩(wěn)定運(yùn)行,滿足系統(tǒng)的基本需求。
ROS通信;Qt;MySQL;運(yùn)行管理
十三五遙操作(RH)控制系統(tǒng)的設(shè)計是中國聚變工程實驗堆(CFETR)中的一個關(guān)鍵問題,它采用了模塊化設(shè)計方法,這樣有利于保證RH控制系統(tǒng)的可維護(hù)性和易拓展性[1]。RH控制系統(tǒng)分上層和底層控制系統(tǒng)。上層控制系統(tǒng)包含所有與RH用戶接觸的操作接口和與RH控制器之間通訊的中間件。而底層控制系統(tǒng)包含所有RH設(shè)備、工具、傳感器的控制器。運(yùn)行管理系統(tǒng)(OMS)位于上層控制系統(tǒng)中,屬于“任務(wù)監(jiān)控”組件,是上層控制系統(tǒng)中用于人機(jī)交互的關(guān)鍵模塊。OMS是一個圖形用戶界面軟件,用于開發(fā)和執(zhí)行控制遠(yuǎn)程維護(hù)任務(wù)序列。
文章的主要研究工作是采用Qt、MySQL、C++語言開發(fā)了一套運(yùn)行在Ubuntu系統(tǒng)上基于 ROS平臺的運(yùn)行管理系統(tǒng)。通過一系列的實驗,證明了該方案的可行性。
(1)ROS
ROS 產(chǎn)生于斯坦福大學(xué)與 Willow Garage 公司的一個機(jī)器人項目,是一個針對機(jī)器人開發(fā)的系統(tǒng),可以依托在其他操作系統(tǒng)下運(yùn)作。ROS的主要目標(biāo)是為機(jī)器人研發(fā)提供代碼復(fù)用的支持,像 Linux 操作系統(tǒng)一樣提供常用的軟件包與算法包方便用戶的安裝與調(diào)用[2-3]。它有許多進(jìn)程的概念,并且提供了進(jìn)程通信的功能。ROS的節(jié)點是可執(zhí)行程序的最小單位,節(jié)點和節(jié)點之間可以相互通信[4-5]。具體的通信方式有Topic(話題)、Service(服務(wù))、Parameter Service(參數(shù)服務(wù)器)、Actionlib (動作服務(wù)器)[6-8]。一個節(jié)點可以同時使用多種通信方式收發(fā)消息。本系統(tǒng)的ROS版本是ROS melodic,ROS的節(jié)點間通信都必須通過ROS Master才能找到要通信的對象。系統(tǒng)使用到了Topic和Actionlib兩種通信機(jī)制。
(2)Qt
Qt是一個跨平臺的C++開發(fā)環(huán)境,也是面向?qū)ο蟮能浖_發(fā)環(huán)境,方便擴(kuò)展,易于組件編程。它提出了一種信號與槽機(jī)制,可以替代之前的回調(diào)機(jī)制,并具有更加靈活、方便等特點。Qt使用的不是標(biāo)準(zhǔn)的C++語言,而是進(jìn)行了一定程度“擴(kuò)展”的C++語言,比如信號與槽的關(guān)鍵詞signals和slot等[9]。
(3)MySQL
MySQL是一種開源的關(guān)系數(shù)據(jù)庫系統(tǒng),使用結(jié)構(gòu)化查詢語言(SQL)進(jìn)行數(shù)據(jù)庫管理,它具有功能強(qiáng)、使用簡便、管理方便、運(yùn)行速度快、安全可靠性強(qiáng)等優(yōu)點,用戶可利用許多語言編寫訪問MySQL數(shù)據(jù)庫的程序[10]。
系統(tǒng)設(shè)計使用Qt做界面開發(fā),MySQL作為底層數(shù)據(jù)庫,通過ROS的多種通信機(jī)制實現(xiàn)對命令的管理以及命令狀態(tài)的實時監(jiān)控。
系統(tǒng)采用ROS的Topic和Actionlib通信機(jī)制。其中接收任務(wù)執(zhí)行時發(fā)生的事件和產(chǎn)生的數(shù)據(jù)不需要進(jìn)行消息反饋,但應(yīng)保證接收的實時性,故采用ROS的Topic通信機(jī)制來實現(xiàn)這一功能。ROS的在發(fā)送命令時系統(tǒng)要求能夠檢測命令的執(zhí)行狀態(tài)、執(zhí)行時期的反饋信息甚至可能會由于某些原因取消命令。而ROS中Service是一個請求和應(yīng)答的交互模式,客戶端和服務(wù)端在一次命令發(fā)送后互相得到的信息有限,無法滿足系統(tǒng)發(fā)送命令的需求。Actionlib通信機(jī)制中客戶端和服務(wù)端有多個交互信息能夠很好滿足這一點。
系統(tǒng)使用Topic來實時接收UR機(jī)器人關(guān)節(jié)信息,用Actionlib來發(fā)送命令。Actionlib 發(fā)送的命令需要經(jīng)過其他系統(tǒng)的處理以及機(jī)器人對命令的執(zhí)行,有時需要等待較長時間才能收到結(jié)果反饋。為提高CPU利用率,防止Actionlib占用大量CPU處理時間,在系統(tǒng)中引入多線程概念。利用Qt的QThread將Actionlib通信單獨放在一個線程中,保證系統(tǒng)在使用Actionlib來發(fā)送命令接收命令狀態(tài)的同時不會影響到Topic接收大量UR機(jī)械臂關(guān)節(jié)信息以及主線程的運(yùn)行。
為滿足設(shè)計需求,系統(tǒng)需要使用兩種數(shù)據(jù),一個是任務(wù)的基本數(shù)據(jù),包括任務(wù)使用到的設(shè)備信息、設(shè)備執(zhí)行動作的介紹以及向設(shè)備傳輸?shù)臄?shù)據(jù)等。另一個是任務(wù)數(shù)據(jù),包括任務(wù)表以及任務(wù)步驟明細(xì)表。每一個任務(wù)創(chuàng)建時都會有它專屬的任務(wù)表和步驟明細(xì)表,里面包括了任務(wù)的整個流程以及每一個步驟的命令數(shù)據(jù)。系統(tǒng)的體系機(jī)構(gòu)圖如圖1所示。
圖1 運(yùn)行管理系統(tǒng)體系結(jié)構(gòu)圖
根據(jù)系統(tǒng)功能需求和性能需求的分析,將運(yùn)行管理系統(tǒng)分為任務(wù)創(chuàng)建、任務(wù)執(zhí)行、數(shù)據(jù)管理三個功能模塊,各個模塊之間功能相對獨立,數(shù)據(jù)可相互調(diào)用。系統(tǒng)的功能結(jié)構(gòu)圖如圖2所示。
任務(wù)創(chuàng)建模塊負(fù)責(zé)制定任務(wù)和操作步驟,這些任務(wù)和操作步驟需要明確地描述任務(wù)的結(jié)構(gòu)和執(zhí)行順序。任務(wù)執(zhí)行模塊向命令控制系統(tǒng)或虛擬現(xiàn)實場景發(fā)送命令,去執(zhí)行所創(chuàng)建的任務(wù)。數(shù)據(jù)管理模塊負(fù)責(zé)存儲任務(wù)預(yù)先制定的數(shù)據(jù),并保存任務(wù)執(zhí)行時的一些數(shù)據(jù)。每個模塊中都包含數(shù)據(jù)顯示區(qū)以及模塊中的功能按鈕。
任務(wù)創(chuàng)建模塊中可以根據(jù)實際情況的需求創(chuàng)建多個不同的任務(wù)。如圖3所示,點擊創(chuàng)建任務(wù)按鈕可看到已有的任務(wù)列表如圖5所示,并創(chuàng)建任務(wù)。由圖4中下拉框可以選擇查看并修改已創(chuàng)建的任務(wù)。
圖2 運(yùn)行管理系統(tǒng)功能結(jié)構(gòu)圖
圖3 任務(wù)創(chuàng)建界面
任務(wù)創(chuàng)建成功后會生成任務(wù)表和任務(wù)步驟明細(xì)表。任務(wù)表的結(jié)構(gòu)設(shè)計如表1所示。
表1 任務(wù)表設(shè)計
本系統(tǒng)根據(jù)任務(wù)表中任務(wù)的上級id和所屬層級來判斷任務(wù)的執(zhí)行順序以及任務(wù)結(jié)構(gòu)。每一個最小的子任務(wù)由步驟明細(xì)表中的一個或多個步驟組成,每一個步驟在執(zhí)行時都將作為一道命令發(fā)布。每個任務(wù)都需要劃分出多個層次,甚至要切換不同的場景執(zhí)行任務(wù)。因此本系統(tǒng)采用樹形結(jié)構(gòu)來展示各級任務(wù)。在任務(wù)表中task_id表示任務(wù)的序列號,task_name表示任務(wù)的名稱,parent_id表示任務(wù)的上級id,task_layer表示任務(wù)的所屬層級。首先判斷一個節(jié)點是否為根節(jié)點,再采用遞歸的方法逐級尋找其子節(jié)點直到它的葉子節(jié)點,最終根據(jù)任務(wù)名稱來樹形顯示整個任務(wù)。在創(chuàng)建任務(wù)時根據(jù)任務(wù)的需求設(shè)置好每一個任務(wù)的上級id以及所屬層級。在任務(wù)執(zhí)行模塊中以樹形結(jié)構(gòu)展示任務(wù),使得任務(wù)結(jié)構(gòu)層次分明、執(zhí)行順序等更加明朗。樹形結(jié)構(gòu)的遞歸設(shè)計如圖4所示。
圖4 遞歸設(shè)計圖
步驟明細(xì)表的結(jié)構(gòu)設(shè)計如表2所示,任務(wù)表和步驟明細(xì)表由兩個表中的task_id連接。在步驟明細(xì)表中可以設(shè)置任務(wù)具體執(zhí)行步驟,以便在任務(wù)執(zhí)行時將數(shù)據(jù)發(fā)送出去。
表2 步驟明細(xì)表設(shè)計
在步驟明細(xì)表中,系統(tǒng)任務(wù)基本數(shù)據(jù)應(yīng)從數(shù)據(jù)庫導(dǎo)入,同時又需要規(guī)范要發(fā)送的數(shù)據(jù),以防止用戶在制定任務(wù)命令時數(shù)據(jù)內(nèi)容和格式不符合系統(tǒng)要求。系統(tǒng)允許操作人員在創(chuàng)建任務(wù)步驟明細(xì)表時用下拉框來選擇每一個子任務(wù)的步驟明細(xì)內(nèi)容。系統(tǒng)中使用Qt的QTableview顯示數(shù)據(jù)庫中的數(shù)據(jù),QTableview可以顯示數(shù)據(jù)庫中數(shù)據(jù)表的數(shù)據(jù),但是QTableview單元格無法提供下拉框的功能。故使用Qt中QItemDelegate做代理,根據(jù)需求設(shè)置不同列的單元格以下拉框的形式顯示對應(yīng)的內(nèi)容。比如在步驟明細(xì)表中主體確定,那主體后面的action_name以及action_data都只能選擇與主體對應(yīng)的數(shù)據(jù)。
任務(wù)執(zhí)行模塊是運(yùn)行管理系統(tǒng)中的核心模塊。如圖5所示,它負(fù)責(zé)命令的發(fā)送、命令的狀態(tài)顯示、接收任務(wù)執(zhí)行過程中的事件以及重要數(shù)據(jù)的保存。
圖5 任務(wù)執(zhí)行界面
系統(tǒng)要與運(yùn)行管理系統(tǒng)同等級別的兩個系統(tǒng)建立連接,這兩個系統(tǒng)分別是虛擬現(xiàn)實場景(VR,Virtual Reality)和命令控制系統(tǒng)(C&C,Command & control)。命令控制系統(tǒng)負(fù)責(zé)解析本系統(tǒng)發(fā)送的命令后發(fā)送給真實機(jī)器人,虛擬現(xiàn)實場景需要訂閱命令控制系統(tǒng)或真實機(jī)械臂的數(shù)據(jù)來模擬現(xiàn)實場景。
運(yùn)行管理系統(tǒng)(OMS,Operation Management System)、C&C和VR的ROS通信結(jié)構(gòu)圖如圖6所示。OMS的ROS節(jié)點名稱是/oms,C&C的ROS節(jié)點名稱為/cc,VR的ROS節(jié)點名稱為/ros_vrep。其中/vr/action_topics是OMS和VR之間發(fā)布的Actionlib消息,/cc/action_topics是OMS和C&C之間發(fā)布的Actionlib消息。/send_event和/send_data是C&C向OMS發(fā)布的Topic名稱,分別傳輸執(zhí)行時的事件和UR機(jī)械臂的關(guān)節(jié)數(shù)據(jù)。/ur_coppeliasim_command/URScript則是C&C向VR發(fā)送的真實機(jī)器人的數(shù)據(jù)。
圖6 ROS通信結(jié)構(gòu)圖
任務(wù)執(zhí)行時,首先在下拉框中選擇要加載的任務(wù),點擊加載任務(wù),任務(wù)會以樹形結(jié)構(gòu)顯示在左邊的窗口中。雙擊某一個子任務(wù)會在中間的窗口中顯示其子任務(wù)的所有步驟明細(xì)。點擊下一條按鈕則會依次顯示子任務(wù)的每一個步驟,即要發(fā)送的命令信息。點擊發(fā)送按鈕即可通過ROS的Actionlib通信機(jī)制發(fā)送。若接收信息的服務(wù)端沒有與本系統(tǒng)建立連接則會彈出相應(yīng)的提示,并終止發(fā)送數(shù)據(jù)。VR需要預(yù)先加載場景命令來打開預(yù)先創(chuàng)建的現(xiàn)實場景,而C&C也要預(yù)先加載場景命令來準(zhǔn)備場景中可能會用到的機(jī)械臂等機(jī)器的接口和數(shù)據(jù)格式。故發(fā)送場景按鈕點擊后會同時發(fā)送給這兩個系統(tǒng),而發(fā)送命令按鈕點擊后只將命令發(fā)送給命令控制系統(tǒng)去解析并控制機(jī)器人執(zhí)行命令。OMS與其他系統(tǒng)的接口如表3所示。
表3 系統(tǒng)接口表
發(fā)送命令的接口解釋如下:
接口說明:用于客戶端向服務(wù)端發(fā)送服務(wù)命令
接口類型:action
服務(wù)名稱:/sys_name ,如“cc”,“oms”
接口參數(shù):
head:
rosTime 當(dāng)前時間
source 源系統(tǒng),即發(fā)送命令系統(tǒng)
target 目標(biāo)系統(tǒng),即接收命令的系統(tǒng)
subject 動作主體,如gripper,ur,cc
action 動作,如loadModel,moveTo ,setMode
actionData 動作參數(shù)
qualifierData 輔助參數(shù)
---
result 命令是否完成
---
feedback 0執(zhí)行中 1.暫停 …
C&C和VR都使用QLineText作為反饋與結(jié)果的顯示框。反饋框中,‘1’表示命令已發(fā)送成功,‘0’表示已執(zhí)行。結(jié)果框中,‘1’表示命令執(zhí)行錯誤,‘0’表示命令執(zhí)行成功。訂閱事件框來顯示一些任務(wù)執(zhí)行中需要人為判斷的事件。訂閱數(shù)據(jù)框中顯示UR機(jī)械臂的6個關(guān)節(jié)的實時關(guān)節(jié)數(shù)據(jù),點擊記錄按鈕便可以記錄UR機(jī)械臂示教時或者執(zhí)行時的關(guān)節(jié)數(shù)據(jù)。這兩個窗口中的數(shù)據(jù)訂閱均來自命令控制系統(tǒng)。
數(shù)據(jù)管理模塊中使用了MySQL數(shù)據(jù)庫來進(jìn)行存儲數(shù)據(jù)信息。包含的是系統(tǒng)中的基本表,包括主體動作表、動作基本表、關(guān)節(jié)位置表、手爪位置表、任務(wù)名稱表等。此模塊中主要是對基本表做增、刪、改、查操作,以及存儲示教或?qū)嶋H運(yùn)行時產(chǎn)生的數(shù)據(jù)。各個基本表在編輯數(shù)據(jù)時相互獨立,但在任務(wù)創(chuàng)建時可根據(jù)數(shù)據(jù)表的內(nèi)容互相調(diào)用。在添加數(shù)據(jù)時,如果要在表的中間插入數(shù)據(jù),就點擊要插入行的下一行,再點擊添加命令會出現(xiàn)目標(biāo)位置的空白行,方便操作人員添加數(shù)據(jù)。數(shù)據(jù)管理模塊的界面如圖7所示。
圖7 數(shù)據(jù)管理界面
本文提出一種基于ROS通信的運(yùn)行管理系統(tǒng),可在Ubuntu18.04系統(tǒng)上安裝ROS melodic和MySQL后運(yùn)行。任務(wù)數(shù)據(jù)可由本地導(dǎo)入或者建立自己的數(shù)據(jù)庫去使用。系統(tǒng)滿足了十三五RH控制系統(tǒng)中運(yùn)行管理系統(tǒng)模塊的基本功能需求,包括任務(wù)的創(chuàng)建、多方式通信、數(shù)據(jù)存儲等,為RH組提供了一個便利、穩(wěn)定的運(yùn)行管理系統(tǒng)。實際使用中運(yùn)行管理系統(tǒng)將需要更多的功能以及不同操作人員對權(quán)限的需求,接下來考慮增加用戶權(quán)限管理、任務(wù)發(fā)布以及任務(wù)分析等模塊。本系統(tǒng)的創(chuàng)建也提高了使用多機(jī)器人操作的工作效率,具有一定的應(yīng)用價值。
[1]魏江華.一種基于上垂直窗口的包層RH遙操作系統(tǒng)的設(shè)計研究[D].中國科學(xué)院大學(xué),2015.
[2]張鵬,高放,雙豐.基于ROS的全向移動機(jī)器人控制系統(tǒng)的設(shè)計與實現(xiàn)[J].組合機(jī)床與自動化加工技術(shù),2018(07):89-92+96.
[3]王輝. 基于ROS的機(jī)器人路徑導(dǎo)航系統(tǒng)的設(shè)計與實現(xiàn)[D].中國科學(xué)院大學(xué)(中國科學(xué)院沈陽計算技術(shù)研究所),2019.
[4]賈鵬飛,王容川,徐林森,陳丹惠,李開霞.基于ROS和CANopen協(xié)議的控制器實時通信系統(tǒng)構(gòu)建[J].中國科學(xué)技術(shù)大學(xué)學(xué)報,2018,48(09):703-710.
[5]謝萌. 基于ROS的車輛遠(yuǎn)程控制和定位導(dǎo)航仿真[D].中國科學(xué)技術(shù)大學(xué),2019.
[6]宋庭新,李軻.基于OPC UA的智能制造車間數(shù)據(jù)通信技術(shù)及應(yīng)用[J].中國機(jī)械工程,2020,31(14):1693-1699.
[7]丁承君,馮玉伯,高雪,等.基于ROS的臨場可重構(gòu)排爆機(jī)器人系統(tǒng)架構(gòu)研究[J].現(xiàn)代制造工程,2019(01):64-68.
[8]Willow Garage. Robot Operating System [EB/OL] . http: / /www.ros.org /,2015-5.
[9]徐睿,韋璐.基于QT的數(shù)字邏輯虛擬實驗平臺設(shè)計[J].軟件,2016,37(01):101-104.
[10]蘭旭輝,熊家軍,鄧剛.基于MySQL的應(yīng)用程序設(shè)計[J].計算機(jī)工程與設(shè)計,2004(03):442-443+468.
[11]李慧霞,高梓豪. 室內(nèi)智能移動機(jī)器人規(guī)則物體識別與抓取[J].軟件,2016,37(02):89-92.
中國聚變堆主機(jī)關(guān)鍵系統(tǒng)綜合研究設(shè)施(2018-000052-73-01-001228)