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