徐 浩, 鞠文清, 錢 夔, 潘昱辰, 朱晟宇, 李嵩爽
(南京工程學院 自動化學院,江蘇 南京 211167)
近年來,隨著人工智能、傳感器技術和計算機技術的快速發展,移動機器人即時定位與地圖構建[1](Simultaneous Localization and Mapping,SLAM)、目標檢測、路徑規劃等算法日趨成熟,移動機器人的應用場景日漸多元化。如今,危險環境下的作業(如隧道探測、變電站巡檢等工作)往往由移動機器人進行,為確保移動機器人的作業效率和安全,往往需要對其工作狀態和周遭環境進行監控。在此背景下,迫切需要能夠遠程操控并監控機器人的人機交互軟件[2]。
針對此需求,黎振勝等[3]基于LabVIEW 操作者框架設計了一種移動機器人遠程人機交互平臺并驗證了該平臺對移動機器人的遠程控制效果。徐建明等[4]采用Xenomai(一種實時操作系統)內核和開放實時以太通信網絡協議(Ethernet for Control Automation Technology,EtherCAT)主站技術設計軟件驅動層,并將搭建的EtherCAT主站運行在ROS(Robot Operating System,機器人操作系統)節點中,最后利用客戶機/服務器(Client/Server,C/S)架構設計了遠程客戶端人機界面,實現了移動機器人的遠程控制和自主導航功能。Webviz、Foxglove[5]等開源項目通過WebSocket等技術實現了機器人視頻消息和點云信息的可視化功能驗證。但以上研究均未能解決跨平臺開發和部署問題,也未能實現敏捷開發和控制功能的服務化調用,且大多需要專用工業總線或實時以太網等特殊設備和系統的支持,非專業人員操作十分困難[6]。
為解決以上問題,本文設計了一種基于ROS網橋的跨平臺網絡化人機交互系統,通過ROS網橋中的WebSocket通道協議進行跨平臺的信息交互,解決了傳統人機交互系統不能跨平臺通信的問題。通過Node.js[7]在Linux平臺上創建了服務端,利用Bootstrap框架和jQuery組件建立了交互前端的網絡化控制系統架構。最終實現了遠程監控和控制移動機器人的目的,從而實現人機交互技術的網絡化、服務化和智能化。
為了能夠使用戶舒服、高效并且安全地與機器人互動,使機器人交互技術朝著智能化和服務化的方向發展,本文開發了一款跨平臺的人機交互系統。該系統的主要功能是實現跨平臺遠程監控功能。
所設計的系統總體結構如圖1所示,該系統的硬件層主要由移動機器人底盤、傳感器設備(如激光雷達、深度相機、慣性測量單元(Inertial Measurement Unit,IMU)等和網絡設備組成。
ROS_Web服務層主要包括Roslibjs、Ros2djs、Ros3djs、Web_video_server、Rosbrigde等功能包,實現了ROS與Web端的話題、服務數據交互和模型可視化功能。ROS_Web服務層擴展了ROS的應用范圍,將ROS系統中話題通信和Web技術跨平臺的優勢相結合,從而提高了整體系統的可視化和交互性能。
應用服務層主要包括運動控制硬件驅動、路徑規劃、機器人導航,以及2D SLAM和3D SLAM等移動機器人本地服務,通過LeGO-LOAM(Lightweight and Ground-Optimized Lidar Odometry and Mapping)、A*等算法實現開放環境下移動機器人的三維地圖構建、多點導航和巡航功能。
前端界面采用了Bootstrap框架,通過HTML5、層疊樣式表(Cascading Style Sheets,CSS)和JavaScript技術實現。Bootstrap框架是一個在jQuery的基礎上進行了個性化完善的前端框架,并且兼容大部分jQuery插件,能夠更好地向用戶呈現簡潔、美觀的人機交互界面。
后端服務器使用Node.js的Express框架來搭建,主要負責響應前端請求并對數據或文件進行存取。Node.js是一個基于Chorme V8引擎的JavaScript環境,使用事件驅動、非阻塞式輸入輸出(Input/Output,I/O)系統模型,讓JavaScript運行在服務端的開發平臺,用于搭建響應速度快、易于擴展的網絡應用。Express是基于Node.js的Web開發框架,具有上手容易、性能高、擴展性強的優點。
常見的通信協議有超文本傳輸協議(Hyper Text Transfer Protocol,HTTP)和WebSocket協議兩種,而HTTP是非持久性的協議,客戶端想獲取服務端的處理進度只能通過使用Ajax進行輪詢或者采用長輪詢(Long Poll)的方式,但是前者對服務器壓力大,后者則會因為一直等待Response(響應)造成阻塞[8]。
WebSocket是一種在單個傳輸控制協議(Transmission Control Protocol,TCP)連接上進行全雙工通信的協議。WebSocket的優勢在于:
① 傳輸效率高。在對移動機器人進行遠程監控和控制時需要有很好的實時性,因此對傳輸效率提出了較高的要求,而WebSocket通信協議通信數據的標頭信息只有2 B,有效降低了數據冗余,極大地降低了數據傳輸的延遲。
② 實用場景廣。在移動機器人工作時往往有大量的數據產生,如激光點云信息和遠程監控圖像等,WebSocket的消息傳輸優勢能夠滿足機器人在各種場景下的需求。
③ 較強的平臺通用性。在機器人系統ROS中,Rosbridge作為機器人和服務器進行通信的核心功能包,同樣采用了WebSocket通信協議,能夠實現ROS與其他平臺的數據傳輸。
ROS提供了豐富的消息類型,開發人員可以根據具體需求自定義消息。本設計采用JavaScript對象表示法(JavaScript Object Notation,JSON)消息作為數據傳輸格式,它采用完全獨立于編程語言的文本格式來對數據進行存儲和表示,并且層次鮮明。同時,考慮到機器人數據傳輸的效率,本設計采用基于WebSocket協議的ROS網橋通信方式來完成ROS消息和網頁消息的相互轉換,ROS功能包能夠以黑盒應用程序編程接口(Application Programming Interface,API)的形式在網頁端對外發布并且能接收網頁端的指令[9]。
為了實現ROS程序和非ROS程序通信的目的,利用了Rosbridge提供的JSON接口,將ROS系統的數據消息進行序列化,轉換成JSON[10]格式后實現與Web交互的功能。
Rosbridge有3個比較重要的屬性:Rosapi、Rosbridge_server和Rosbridge_library。其中,Rosapi的主要作用是連接WebSocket的客戶端API;Rosbridge_server主要負責通信的傳輸層,其主要功能是開啟WebSocket服務端,等待客戶端的連接請求;Rosbridge_library主要提供ROS消息和JSON消息相互轉換的Python API,它幾乎包含了ROS的全部核心消息類型,并能根據具體的ROS消息對其進行相應的序列化轉換。以相機的圖像消息為例,經過Rosbridge轉換的JSON消息如表1所示[11]。

表1 Rosbridge消息格式轉換表
基于ROS網橋的通信鏈路如圖2所示,用戶使用Web應用中的功能模塊時,后端將相應的節點啟動請求通過WebSocket傳輸到Rosbridge,Rosbridge負責啟動ROS系統中的具體控制算法和硬件驅動,以此開啟傳感器和主控設備。然后,機器人將自身傳感器(如激光雷達、相機、IMU等)數據傳輸到ROS系統中,經過數據處理算法集成后發布相應話題,Rosbridge將這些話題和服務轉換成JSON格式,最后利用WebSocket完成與Web應用端的信息交換。相反地,用戶也能通過Rosbridge向ROS端發布話題[12]。

圖2 基于ROS網橋的通信鏈路
在消息的通信鏈路確定后,需要完成軟件框架設計,如圖3所示。網頁客戶端采用HTML5技術展現主體內容,網頁風格和各組件的布局由CSS組件決定,基于Three.js和PlaneVisualizer等JavaScript庫能夠實現三維圖形的渲染以及界面的縮放、旋轉等功能。Node.js服務器提供了地圖保存、數據存取、節點啟動等服務。Node.js服務器基于Express框架搭建,Express提供了Web應用程序框架,可以創建路由和處理HTTP請求,用戶能夠通過POST請求與服務器進行交互,服務器借助Body-parser解析HTTP請求的中間件后利用Child_process生成子進程,通過FS文件系統訪問并執行能夠啟動移動機器人各項組件和服務的腳本文件,以此完成移動機器人的數據管理、運動控制、SLAM建圖、機器導航等服務調用。在SLAM建圖、機器導航過程中,移動機器人通過Rosbridge服務的WebSocket接口將用戶請求的數據交給網頁客戶端顯示。Rosnodejs實現了服務器與ROS通信以及話題的訂閱和發布功能。用戶能夠使用泛平臺硬件對機器人的運動過程進行監控。整體項目部署在移動機器人的工控機上,用戶無須安裝其他插件或依賴,具有模塊化、無依賴、輕量化的特點,并且能夠實現跨平臺操作, 解決了傳統人機交互系統跨平臺開發和部署困難的問題。

圖3 軟件框架
運動控制模塊的主要功能是實現移動機器人的遠程運動控制。圖4為運動控制模塊的原理圖。該模塊主要利用Keyboardteleopjs[13]功能包,首先通過Java-Script對瀏覽器中鍵盤按鍵進行識別,發布相對應的Twist消息。然后,Rosbridge客戶端使用JSON命令將Twist消息通過WebSocket接口傳遞給服務器。在服務器解析命令后,通過控制器實現對機器人的運動控制。

圖4 運動控制模塊原理圖
本設計在人機交互界面上增加了視頻監控模塊,能夠完整顯示視頻流。設計視頻監控模塊的主要目的是防止用戶遠程操作機器人時發生碰撞事故,此模塊能夠大幅提高用戶操作時的安全性。
本模塊采用JSON格式對圖像顯示參數進行預描述。圖像參數在JSON格式中可以看作各種“鍵/值”對的集合,根據設計要求,本模塊主要涉及的“鍵/值”對參數包括圖像的ID、端口地址、圖顯示的尺寸、訂閱的ROS話題等。視頻監控功能的實現基于ROS中的Web_video_server[14]功能包,在通信建立后,Web_video_server首先會打開本地端口并等待傳入的HTTP請求,一旦用戶通過HTTP發出ROS主題的視頻流請求,該功能包就會訂閱相應主題并創建視頻編碼器實例,然后將原始的視頻數據包提供給客戶端,最后通過WebSocket接口進行傳輸,從而實現Web瀏覽器中的圖像顯示功能。此外,為了滿足用戶對不同類型圖像的需求,該模塊通過訂閱不同的圖像話題實現了對彩色圖像和深度圖像的顯示,用戶可以通過界面上的按鈕自由選擇。
本設計采用RS-LiDAR-16三維激光雷達來提供點云數據,網頁端需具備3D可視化功能。因此,本設計利用Ros3djs作為Rosbridge客戶端。與視頻監控模塊類似,本模塊也采用JSON數據格式進行傳輸,其參數包括端口地址、點云顯示的尺寸、訂閱的ROS話題等。首先需要創建ROS3d.viewer視圖對象,用于放置視圖內容, 建立ROSlib.tfclient客戶端,用于訂閱相應的TF數據,并建立ROS3d.ponitcloud2客戶端,用于獲取點云數據;當ROS系統接收到建圖請求后,服務器主動推送點云數據和TF數據,通過Tf2_web_republisher將TF數據通過ROSbridge接口發送給ROS3djsclient和ROSlib.tfclient,在接收到TF數據后,對ROS3d.viewer對象和ROS3d.ponitcloud2對象進行更新,最終實現瀏覽器中的點云顯示[15]。
本文設計的基于ROS網橋的跨平臺網絡化人機交互系統主要是實現移動機器人的遠程監控和運動控制。
實驗環境如圖5所示,其由一臺配置了Ubuntu的Linux系統工控機、Robuster移動機器人底盤、Intel 3D相機、RS-LiDAR-16激光雷達、一臺配置Windows 10的系統主機組成。工控機作為服務器端,Windows系統主機作為客戶端,用于遠程消息的監控。為保證監控平臺能夠跨平臺通信,需要2臺主機處在同一局域網下。為了測試本文所述設計的效果,具體實驗步驟如表2所示。

表2 實驗步驟

圖5 實驗環境圖
本文設計的人機交互界面如圖6所示,圖6主體部分左側是RS-LiDAR-16激光雷達的點云顯示情況,右側是RealSense 3D相機彩色圖像的顯示情況。節點關系分析如下:Robuster對應的節點/Robuster_mr可以與/Rosbridge_websocket、/Web_video_server節點通信,并將Cmd_vel話題發布到Robuster_mr上,實現了對Robuster的運動控制。與此同時,相機話題被發布到/Web_video_server服務器上,實現了遠程在客戶端上訂閱相機的實時圖像信息的功能。

圖6 人機交互界面
表3為本文設計的人機交互系統和傳統人機交互系統特性的對照。實驗結果表明,與傳統的人機交互系統相比,該方案擺脫了只能運行在特定單一平臺上的限制,能夠在泛平臺實現移動機器人監控,與傳統人機交互系統框架式開發不同的是,本系統采用服務化開發模式,后續功能的開發無須改動整體框架,只需調用相應服務,各模塊耦合度較低,方便解耦、移植和功能擴展,使人機交互系統更智能且面向服務。另外,本方案集成部署在移動機器人平臺上,用戶能夠直接通過瀏覽器控制和監控機器人,實現人機交互系統的輕量化和集成化。總體來說,本設計的跨平臺人機交互系統能夠較為準確地對移動機器人進行運動控制和狀態監控,并且有效可行。

表3 人機交互系統特性對照表
本文設計了一種基于ROS網橋的跨平臺網絡化人機交互系統。首先,利用HTML5、CSS、JavaScript技術構建了面向ROS的遠程監控平臺,設計了基于ROS網橋的通信鏈路,實現了跨平臺數據交換。然后,在此基礎上采用模塊化開發方式開發了人機交互界面,主要功能包括運動控制、圖像監控、點云顯示等。最后將系統應用于Robuster機器人,檢驗了本系統的跨平臺運動控制、點云顯示和視頻監控功能。所設計的系統具有跨平臺、可移植性強等特點,為人機交互技術的網絡化、服務化和智能化提供了基礎。另外,基于本文設計的人機交互框架,未來將結合生物電子技術,實現跨模態的人機交互。