ROSlink是由沙特蘇丹王子大學(xué)教授,同時(shí)也是硅步機(jī)器人研發(fā)總監(jiān)的Anis Koubaa博士首先提出來(lái)的。為了使大家了解ROSlink,從本期開始,我們將分三期對(duì)ROSlink進(jìn)行介紹。
本期為第一期,主要介紹ROSlink的基本概念及ROSlink提出的背景和要解決的問(wèn)題。
作為物聯(lián)網(wǎng)(IoT)的一種新形式,機(jī)器人與互聯(lián)網(wǎng)的融合現(xiàn)在正成為一種新興趨勢(shì)。這種結(jié)合對(duì)于推動(dòng)通過(guò)互聯(lián)網(wǎng)虛擬化、控制和監(jiān)控的新型云機(jī)器人應(yīng)用至關(guān)重要。ROSlink是一種將應(yīng)用機(jī)器人操作系統(tǒng)(ROS)的機(jī)器人與物聯(lián)網(wǎng)相結(jié)合的新協(xié)議。提出ROSlink背后的動(dòng)機(jī)正是由于通過(guò)互聯(lián)網(wǎng)監(jiān)控和控制機(jī)器人的ROS功能的欠缺。盡管ROS允許使用相同ROS主控器從工作站控制機(jī)器人,但這種解決方案不具有可擴(kuò)展性,且僅僅局限于局域網(wǎng)。近期工作中提出的解決方案依賴于集中式ROS主控器或機(jī)器人端Web服務(wù)器,同樣具有類似的限制性。受到MAVlink協(xié)議的啟發(fā),本文提出的ROSlink協(xié)議通過(guò)云定義了機(jī)器人和終端用戶之間的輕量級(jí)異步通信協(xié)議。ROSlink利用代理云服務(wù)器將使用了ROS的機(jī)器人與用戶相連接,并允許他們之間的互連。ROSlink性能已在云上進(jìn)行測(cè)試,顯示較為高效可靠。
1.簡(jiǎn)介
云機(jī)器人是機(jī)器人領(lǐng)域的一個(gè)新興趨勢(shì),旨在通過(guò)物聯(lián)網(wǎng)(IoT)和云計(jì)算技術(shù)來(lái)從兩個(gè)角度推廣機(jī)器人的應(yīng)用:(i)虛擬化:通過(guò)Web和Web服務(wù)技術(shù)提供對(duì)機(jī)器人的無(wú)縫鏈接,(ii)遠(yuǎn)程大腦:將密集型計(jì)算從機(jī)器人卸載到云資源,以克服機(jī)器人的計(jì)算、存儲(chǔ)及能量限制。
如今,機(jī)器人操作系統(tǒng)(ROS)代表了開發(fā)機(jī)器人應(yīng)用的一個(gè)事實(shí)上的標(biāo)準(zhǔn)。ROS作為中間件,除了重復(fù)使用開源項(xiàng)目庫(kù)之外,還為硬件和機(jī)器人資源(如傳感器和執(zhí)行器)提供了幾個(gè)級(jí)別的軟件抽象。它的設(shè)計(jì)目的是降低開發(fā)大型服務(wù)機(jī)器人的難度,降低機(jī)器人軟件構(gòu)建的復(fù)雜性。盡管ROS廣泛使用于開發(fā)服務(wù)機(jī)器人應(yīng)用程序,但它缺乏通過(guò)互聯(lián)網(wǎng)對(duì)機(jī)器人進(jìn)行控制和監(jiān)視的原生支持。在同一局域網(wǎng)(LAN)上的遠(yuǎn)程工作站中編寫ROS節(jié)點(diǎn)(即程序)是可行的,機(jī)器人機(jī)器和工作站都使用ROS主站統(tǒng)一資源標(biāo)識(shí)符(URI),但是控制來(lái)自遠(yuǎn)程位置的ROS節(jié)點(diǎn)具有挑戰(zhàn)性。為解決這個(gè)局限性,已經(jīng)有許多研究工作提出了對(duì)基于客戶端-服務(wù)器架構(gòu)的關(guān)注。
解決該問(wèn)題的一項(xiàng)里程碑式的工作是ROSBridge協(xié)議。它基于安裝在機(jī)器人端的Websockets服務(wù)器,該服務(wù)器允許根據(jù)ROS主題和服務(wù)發(fā)送機(jī)器人的內(nèi)部狀態(tài),并接收命令到Websockets客戶端來(lái)進(jìn)行處理。這種方法實(shí)現(xiàn)了ROS與互聯(lián)網(wǎng)的有效結(jié)合; 然而,事實(shí)上Websockets服務(wù)器在機(jī)器人機(jī)器上的運(yùn)行要求機(jī)器人擁有一個(gè)公共IP地址以供Websockets客戶端訪問(wèn),并不對(duì)所有機(jī)器人可行,或者在同一局域網(wǎng)上。當(dāng)機(jī)器人位于網(wǎng)絡(luò)地址轉(zhuǎn)換(NAT)域后面時(shí),也可以使用NAT,但這種選擇在實(shí)際部署中可能會(huì)很麻煩。在文獻(xiàn)中作者提出了一種Web服務(wù)ROS,它可以在機(jī)器人中定義一個(gè)Web服務(wù)服務(wù)器,可通過(guò)網(wǎng)絡(luò)進(jìn)行訪問(wèn)。但是這個(gè)方法具有與ROSBridge一樣的局限性,即服務(wù)器位于機(jī)器人端。
本文填補(bǔ)了這一空白,并提出了一種通信協(xié)議ROSlink,該協(xié)議克服了上述的限制,(i)實(shí)現(xiàn)了機(jī)器人端客戶端的規(guī)范,(ii)用了一個(gè)云服務(wù)器,即位于公共IP服務(wù)器機(jī)器上的代理服務(wù)器。這個(gè)想法受到MAVlink協(xié)議的啟發(fā),機(jī)器人通過(guò)網(wǎng)絡(luò)客戶端將其數(shù)據(jù)以序列化的消息發(fā)送到作為服務(wù)器的地面站,地面站接收這些消息、對(duì)其進(jìn)行處理并將控制命令發(fā)送給機(jī)器人。這樣,機(jī)器人就不再需要一個(gè)公共的IP地址,仍然可以在代理服務(wù)器后訪問(wèn)。
本文主要完成了兩項(xiàng)工作。首先,我們提出ROSlink這種新的通信協(xié)議,它定義了一種三層架構(gòu)。ROSlink Bridge客戶端在機(jī)器人端運(yùn)行;ROSlink Proxy作為地面站的服務(wù)器,以及通過(guò)ROSlink協(xié)議與機(jī)器人進(jìn)行交互的用戶端的客戶端應(yīng)用程序。其次,通過(guò)對(duì)地面Turtlebot機(jī)器人和AR.Parrot無(wú)人機(jī)進(jìn)行實(shí)驗(yàn)研究,驗(yàn)證了我們提出的ROSlink協(xié)議。我們展示了ROSlink的有效性和可行性。
2 背景和目標(biāo)
2.1 背景
本文研究的動(dòng)機(jī)是為了將ROS與物聯(lián)網(wǎng)進(jìn)行整合。ROS本身不支持通過(guò)互聯(lián)網(wǎng)監(jiān)控和控制機(jī)器人。事實(shí)上,如圖1(a)所示,ROS允許使用相同的ROS主控器從工作站控制機(jī)器人,但該解決方案不具有可擴(kuò)展性,而局限于在局域網(wǎng)使用。典型的情況是每個(gè)機(jī)器人啟動(dòng)自己的ROS主控節(jié)點(diǎn),如果用戶將自己的ROS網(wǎng)絡(luò)設(shè)置配置為使用機(jī)器人正在運(yùn)行的同一ROS主控,則用戶可以從他們的工作站控制機(jī)器人。這種標(biāo)準(zhǔn)方法本身不允許通過(guò)互聯(lián)網(wǎng)控制機(jī)器人,因?yàn)闄C(jī)器人通常沒(méi)有公共IP地址。在某些情況下可以考慮在NAT后面使用端口轉(zhuǎn)發(fā),但在其他情況下可能無(wú)法實(shí)現(xiàn),例如通過(guò)3G / 4G進(jìn)行連接。
一種可能的解決方案如圖1(b)所示,是對(duì)所有機(jī)器人使用一個(gè)ROS主節(jié)點(diǎn),主節(jié)點(diǎn)在具有互聯(lián)網(wǎng)公共IP地址的中央服務(wù)器上運(yùn)行。所有用戶都將連接到相同的ROS 主控器,并通過(guò)發(fā)布和訂閱它們的主題和服務(wù)來(lái)訪問(wèn)任何一臺(tái)機(jī)器人。然而這個(gè)解決方法也有幾項(xiàng)局限。第一,一些ROS主題、服務(wù)和節(jié)點(diǎn)可能因具有相同名稱而互相沖突。這就需要我們?cè)谠O(shè)計(jì)ROS節(jié)點(diǎn)、服務(wù)和主題的命名空間(namespace)時(shí)小心謹(jǐn)慎,避免沖突。機(jī)器人數(shù)量較多時(shí),這個(gè)方法會(huì)變得很復(fù)雜。第二個(gè)問(wèn)題是缺乏可擴(kuò)展性,當(dāng)給定時(shí)間綁定了多個(gè)機(jī)器人時(shí),ROS主控器可能會(huì)過(guò)載。除了考慮到一些ROS主題太占帶寬這個(gè)已知的網(wǎng)絡(luò)問(wèn)題外,還沒(méi)有一個(gè)可行的解決方案能將個(gè)人用戶映射到他們的機(jī)器人,因?yàn)樗兄黝}對(duì)所有用戶都是可見(jiàn)的。
我們的方法是設(shè)計(jì)ROSlink,一種輕量級(jí)通信協(xié)議,靈感來(lái)自MAVlink ,允許ROS機(jī)器人與其用戶進(jìn)行基于云的交互,如圖1(c)所示。我們的想法是在ROS頂部為每一個(gè)機(jī)器人添加一個(gè)ROSlink Bridge(橋),這樣該橋可以使用JSON序列化消息發(fā)送機(jī)器人的所有狀態(tài)。ROSlink Bridge是一個(gè)ROS節(jié)點(diǎn),用于訪問(wèn)ROS中所有感興趣的主題和服務(wù),并將選定的信息發(fā)送到使用JSON格式序列化的ROSlink消息中。這些消息被發(fā)送到ROSlink云代理服務(wù)器,該服務(wù)器處理消息并將消息轉(zhuǎn)發(fā)給機(jī)器人的單個(gè)用戶和/或多個(gè)用戶。另外,用戶通過(guò)使用ROSlink JSON消息的ROSlink云代理向機(jī)器人發(fā)送命令,命令由ROSlink Bridge進(jìn)行處理,從而執(zhí)行相應(yīng)的ROS操作。基于云的ROSlink方法具有三個(gè)主要優(yōu)點(diǎn):(1)獨(dú)立于機(jī)器人的ROS主控器節(jié)點(diǎn),(2)確保用戶和機(jī)器人之間通過(guò)云無(wú)縫通信,(3)提供對(duì)機(jī)器人、用戶和底層服務(wù)的有效管理。
(a) 標(biāo)準(zhǔn)方法:ROS機(jī)器人和ROS用戶之間的典型連接。
用戶連接到機(jī)器人的ROS主控器,控制和監(jiān)視其狀態(tài),通常在一個(gè)局域網(wǎng)內(nèi)。
(b) 中心方法:所有的機(jī)器人和用戶都連接到了一個(gè)中心ROS主控器。
此方法不具有可擴(kuò)展性,無(wú)法對(duì)機(jī)器人和用戶提供有效管理。
(c) ROSlink方法:基于云的解決方法,ROS機(jī)器人和用戶通過(guò)云進(jìn)行交互。
ROSlink云給用戶和機(jī)器人提供管理、面向服務(wù)的接口和實(shí)時(shí)數(shù)據(jù)流服務(wù)。
圖1:ROS操作方法
2.2 綜述
ROSlink的主要目標(biāo)是通過(guò)互聯(lián)網(wǎng)控制和監(jiān)控使用ROS的機(jī)器人。 在文獻(xiàn)中,大多數(shù)相關(guān)工作集中在使用雙層客戶端/服務(wù)器方法上,服務(wù)器在機(jī)器人中實(shí)現(xiàn),客戶端在用戶應(yīng)用程序中實(shí)現(xiàn)。事實(shí)上,這些研究大多是基于ROSBridge和ROSJS框架的實(shí)例來(lái)構(gòu)建遙控機(jī)器人。ROSBridge代表了ROS系統(tǒng)遠(yuǎn)程控制機(jī)器人可以遠(yuǎn)程控制的里程碑。然而,這種方法的缺點(diǎn)是:(1)以機(jī)器人為中心的方法,由于服務(wù)器集中在機(jī)器人本身,所以限制了系統(tǒng)的可擴(kuò)展性;(2)在互聯(lián)網(wǎng)上部署非常困難,因?yàn)楫?dāng)機(jī)器人位于局域網(wǎng)內(nèi)時(shí),需要擁有公共IP地址或通過(guò)NAT轉(zhuǎn)發(fā)端口訪問(wèn)。
為了克服這些局限性,我們提出采用三層客戶機(jī)/服務(wù)器模型的ROSlink,其中客戶端在機(jī)器人和用戶中實(shí)現(xiàn),而服務(wù)器位于公共領(lǐng)域并充當(dāng)代理將機(jī)器人與其用戶相連。 ROSlink克服了上述的兩個(gè)問(wèn)題。首先,機(jī)器人內(nèi)部不再設(shè)服務(wù)器,因此不再采用以機(jī)器人為中心的方法。相比之下,機(jī)器人通過(guò)ROSlink Bridge組件實(shí)現(xiàn)客戶端,ROSlink Bridge組件是一個(gè)ROS節(jié)點(diǎn),一方面與ROS進(jìn)行交互,另一方面通過(guò)網(wǎng)絡(luò)接口(UDP,TCP, 或Websockets)向外部發(fā)送ROS數(shù)據(jù)。此外,該模型的ROSlink服務(wù)器端在一個(gè)名為ROSlink 代理的公共服務(wù)器中實(shí)現(xiàn),該服務(wù)器充當(dāng)機(jī)器人和用戶之間的中介。機(jī)器人和用戶向代理服務(wù)器發(fā)送消息,代理服務(wù)器相應(yīng)地將其發(fā)送給另一端。
ROSlink通過(guò)定義通信協(xié)議(受MAVlink協(xié)議啟發(fā))定義ROS的完整抽象,該協(xié)議通過(guò)ROS主題/服務(wù)提供有關(guān)機(jī)器人的所有信息,而不會(huì)將ROS生態(tài)系統(tǒng)暴露給用戶。用戶不需要熟悉ROS就能夠使用ROSlink為機(jī)器人發(fā)送命令。 ROSlink為用戶與機(jī)器人進(jìn)行交互定義了一組界面,以及一組用在它們之間進(jìn)行交換的消息。
ROSlink消息是基于ROS主題/服務(wù)參數(shù)構(gòu)建的,用以獲取或提交數(shù)據(jù)來(lái)執(zhí)行操作。消息用JSON字符串表示。JSON格式可選用于數(shù)據(jù)交換,因?yàn)樗桥c平臺(tái)及語(yǔ)言無(wú)關(guān)的數(shù)據(jù)表示格式。此外,與XML相比,它是一個(gè)更輕量級(jí)的解決方案,更適合于資源受限和帶寬受限的平臺(tái)。這將允許客戶端應(yīng)用程序開發(fā)人員選擇任何編程語(yǔ)言(C ++、Java、Javascript、Python等)來(lái)開發(fā)與ROSlink交互的客戶端應(yīng)用程序,來(lái)命令和監(jiān)視使用ROS的機(jī)器人。
總之,ROSlink不同于以前的工作,特別是與ROSBridge在以下這些方面的區(qū)別:
-ROSlink在機(jī)器人和用戶應(yīng)用程序中實(shí)現(xiàn)客戶端,并在中間代理中實(shí)現(xiàn)服務(wù)器,而ROSBridge在機(jī)器人中實(shí)現(xiàn)Websocket服務(wù)器,在用戶應(yīng)用程序中實(shí)現(xiàn)Websocket客戶端。
-ROSBridge基于Websocket協(xié)議,而ROSlink可以使用任何傳輸層協(xié)議(TCP,UDP和Websockets)來(lái)實(shí)現(xiàn)。在本文中,我們使用UDP和Websockets接口來(lái)實(shí)現(xiàn)ROSlink。
-ROSlink不像以前的研究那樣依賴于ROSBridge,而是在ROS和非ROS用戶之間定義自己的通信協(xié)議。