徐 浩, 鞠文清, 錢 夔, 潘昱辰, 朱晟宇, 李嵩爽
(南京工程學院 自動化學院,江蘇 南京 211167)
近年來,隨著人工智能、傳感器技術和計算機技術的快速發(fā)展,移動機器人即時定位與地圖構建[1](Simultaneous Localization and Mapping,SLAM)、目標檢測、路徑規(guī)劃等算法日趨成熟,移動機器人的應用場景日漸多元化。如今,危險環(huán)境下的作業(yè)(如隧道探測、變電站巡檢等工作)往往由移動機器人進行,為確保移動機器人的作業(yè)效率和安全,往往需要對其工作狀態(tài)和周遭環(huán)境進行監(jiān)控。在此背景下,迫切需要能夠遠程操控并監(jiān)控機器人的人機交互軟件[2]。
針對此需求,黎振勝等[3]基于LabVIEW 操作者框架設計了一種移動機器人遠程人機交互平臺并驗證了該平臺對移動機器人的遠程控制效果。徐建明等[4]采用Xenomai(一種實時操作系統(tǒng))內核和開放實時以太通信網(wǎng)絡協(xié)議(Ethernet for Control Automation Technology,EtherCAT)主站技術設計軟件驅動層,并將搭建的EtherCAT主站運行在ROS(Robot Operating System,機器人操作系統(tǒng))節(jié)點中,最后利用客戶機/服務器(Client/Server,C/S)架構設計了遠程客戶端人機界面,實現(xiàn)了移動機器人的遠程控制和自主導航功能。Webviz、Foxglove[5]等開源項目通過WebSocket等技術實現(xiàn)了機器人視頻消息和點云信息的可視化功能驗證。但以上研究均未能解決跨平臺開發(fā)和部署問題,也未能實現(xiàn)敏捷開發(fā)和控制功能的服務化調用,且大多需要專用工業(yè)總線或實時以太網(wǎng)等特殊設備和系統(tǒng)的支持,非專業(yè)人員操作十分困難[6]。
為解決以上問題,本文設計了一種基于ROS網(wǎng)橋的跨平臺網(wǎng)絡化人機交互系統(tǒng),通過ROS網(wǎng)橋中的WebSocket通道協(xié)議進行跨平臺的信息交互,解決了傳統(tǒng)人機交互系統(tǒng)不能跨平臺通信的問題。通過Node.js[7]在Linux平臺上創(chuàng)建了服務端,利用Bootstrap框架和jQuery組件建立了交互前端的網(wǎng)絡化控制系統(tǒng)架構。最終實現(xiàn)了遠程監(jiān)控和控制移動機器人的目的,從而實現(xiàn)人機交互技術的網(wǎng)絡化、服務化和智能化。
為了能夠使用戶舒服、高效并且安全地與機器人互動,使機器人交互技術朝著智能化和服務化的方向發(fā)展,本文開發(fā)了一款跨平臺的人機交互系統(tǒng)。該系統(tǒng)的主要功能是實現(xiàn)跨平臺遠程監(jiān)控功能。
所設計的系統(tǒng)總體結構如圖1所示,該系統(tǒng)的硬件層主要由移動機器人底盤、傳感器設備(如激光雷達、深度相機、慣性測量單元(Inertial Measurement Unit,IMU)等和網(wǎng)絡設備組成。
ROS_Web服務層主要包括Roslibjs、Ros2djs、Ros3djs、Web_video_server、Rosbrigde等功能包,實現(xiàn)了ROS與Web端的話題、服務數(shù)據(jù)交互和模型可視化功能。ROS_Web服務層擴展了ROS的應用范圍,將ROS系統(tǒng)中話題通信和Web技術跨平臺的優(yōu)勢相結合,從而提高了整體系統(tǒng)的可視化和交互性能。
應用服務層主要包括運動控制硬件驅動、路徑規(guī)劃、機器人導航,以及2D SLAM和3D SLAM等移動機器人本地服務,通過LeGO-LOAM(Lightweight and Ground-Optimized Lidar Odometry and Mapping)、A*等算法實現(xiàn)開放環(huán)境下移動機器人的三維地圖構建、多點導航和巡航功能。
前端界面采用了Bootstrap框架,通過HTML5、層疊樣式表(Cascading Style Sheets,CSS)和JavaScript技術實現(xiàn)。Bootstrap框架是一個在jQuery的基礎上進行了個性化完善的前端框架,并且兼容大部分jQuery插件,能夠更好地向用戶呈現(xiàn)簡潔、美觀的人機交互界面。
后端服務器使用Node.js的Express框架來搭建,主要負責響應前端請求并對數(shù)據(jù)或文件進行存取。Node.js是一個基于Chorme V8引擎的JavaScript環(huán)境,使用事件驅動、非阻塞式輸入輸出(Input/Output,I/O)系統(tǒng)模型,讓JavaScript運行在服務端的開發(fā)平臺,用于搭建響應速度快、易于擴展的網(wǎng)絡應用。Express是基于Node.js的Web開發(fā)框架,具有上手容易、性能高、擴展性強的優(yōu)點。
常見的通信協(xié)議有超文本傳輸協(xié)議(Hyper Text Transfer Protocol,HTTP)和WebSocket協(xié)議兩種,而HTTP是非持久性的協(xié)議,客戶端想獲取服務端的處理進度只能通過使用Ajax進行輪詢或者采用長輪詢(Long Poll)的方式,但是前者對服務器壓力大,后者則會因為一直等待Response(響應)造成阻塞[8]。
WebSocket是一種在單個傳輸控制協(xié)議(Transmission Control Protocol,TCP)連接上進行全雙工通信的協(xié)議。WebSocket的優(yōu)勢在于:
① 傳輸效率高。在對移動機器人進行遠程監(jiān)控和控制時需要有很好的實時性,因此對傳輸效率提出了較高的要求,而WebSocket通信協(xié)議通信數(shù)據(jù)的標頭信息只有2 B,有效降低了數(shù)據(jù)冗余,極大地降低了數(shù)據(jù)傳輸?shù)难舆t。
② 實用場景廣。在移動機器人工作時往往有大量的數(shù)據(jù)產生,如激光點云信息和遠程監(jiān)控圖像等,WebSocket的消息傳輸優(yōu)勢能夠滿足機器人在各種場景下的需求。
③ 較強的平臺通用性。在機器人系統(tǒng)ROS中,Rosbridge作為機器人和服務器進行通信的核心功能包,同樣采用了WebSocket通信協(xié)議,能夠實現(xiàn)ROS與其他平臺的數(shù)據(jù)傳輸。
ROS提供了豐富的消息類型,開發(fā)人員可以根據(jù)具體需求自定義消息。本設計采用JavaScript對象表示法(JavaScript Object Notation,JSON)消息作為數(shù)據(jù)傳輸格式,它采用完全獨立于編程語言的文本格式來對數(shù)據(jù)進行存儲和表示,并且層次鮮明。同時,考慮到機器人數(shù)據(jù)傳輸?shù)男?本設計采用基于WebSocket協(xié)議的ROS網(wǎng)橋通信方式來完成ROS消息和網(wǎng)頁消息的相互轉換,ROS功能包能夠以黑盒應用程序編程接口(Application Programming Interface,API)的形式在網(wǎng)頁端對外發(fā)布并且能接收網(wǎng)頁端的指令[9]。
為了實現(xiàn)ROS程序和非ROS程序通信的目的,利用了Rosbridge提供的JSON接口,將ROS系統(tǒng)的數(shù)據(jù)消息進行序列化,轉換成JSON[10]格式后實現(xiàn)與Web交互的功能。
Rosbridge有3個比較重要的屬性:Rosapi、Rosbridge_server和Rosbridge_library。其中,Rosapi的主要作用是連接WebSocket的客戶端API;Rosbridge_server主要負責通信的傳輸層,其主要功能是開啟WebSocket服務端,等待客戶端的連接請求;Rosbridge_library主要提供ROS消息和JSON消息相互轉換的Python API,它幾乎包含了ROS的全部核心消息類型,并能根據(jù)具體的ROS消息對其進行相應的序列化轉換。以相機的圖像消息為例,經過Rosbridge轉換的JSON消息如表1所示[11]。
表1 Rosbridge消息格式轉換表
基于ROS網(wǎng)橋的通信鏈路如圖2所示,用戶使用Web應用中的功能模塊時,后端將相應的節(jié)點啟動請求通過WebSocket傳輸?shù)絉osbridge,Rosbridge負責啟動ROS系統(tǒng)中的具體控制算法和硬件驅動,以此開啟傳感器和主控設備。然后,機器人將自身傳感器(如激光雷達、相機、IMU等)數(shù)據(jù)傳輸?shù)絉OS系統(tǒng)中,經過數(shù)據(jù)處理算法集成后發(fā)布相應話題,Rosbridge將這些話題和服務轉換成JSON格式,最后利用WebSocket完成與Web應用端的信息交換。相反地,用戶也能通過Rosbridge向ROS端發(fā)布話題[12]。
圖2 基于ROS網(wǎng)橋的通信鏈路
在消息的通信鏈路確定后,需要完成軟件框架設計,如圖3所示。網(wǎng)頁客戶端采用HTML5技術展現(xiàn)主體內容,網(wǎng)頁風格和各組件的布局由CSS組件決定,基于Three.js和PlaneVisualizer等JavaScript庫能夠實現(xiàn)三維圖形的渲染以及界面的縮放、旋轉等功能。Node.js服務器提供了地圖保存、數(shù)據(jù)存取、節(jié)點啟動等服務。Node.js服務器基于Express框架搭建,Express提供了Web應用程序框架,可以創(chuàng)建路由和處理HTTP請求,用戶能夠通過POST請求與服務器進行交互,服務器借助Body-parser解析HTTP請求的中間件后利用Child_process生成子進程,通過FS文件系統(tǒng)訪問并執(zhí)行能夠啟動移動機器人各項組件和服務的腳本文件,以此完成移動機器人的數(shù)據(jù)管理、運動控制、SLAM建圖、機器導航等服務調用。在SLAM建圖、機器導航過程中,移動機器人通過Rosbridge服務的WebSocket接口將用戶請求的數(shù)據(jù)交給網(wǎng)頁客戶端顯示。Rosnodejs實現(xiàn)了服務器與ROS通信以及話題的訂閱和發(fā)布功能。用戶能夠使用泛平臺硬件對機器人的運動過程進行監(jiān)控。整體項目部署在移動機器人的工控機上,用戶無須安裝其他插件或依賴,具有模塊化、無依賴、輕量化的特點,并且能夠實現(xiàn)跨平臺操作, 解決了傳統(tǒng)人機交互系統(tǒng)跨平臺開發(fā)和部署困難的問題。
圖3 軟件框架
運動控制模塊的主要功能是實現(xiàn)移動機器人的遠程運動控制。圖4為運動控制模塊的原理圖。該模塊主要利用Keyboardteleopjs[13]功能包,首先通過Java-Script對瀏覽器中鍵盤按鍵進行識別,發(fā)布相對應的Twist消息。然后,Rosbridge客戶端使用JSON命令將Twist消息通過WebSocket接口傳遞給服務器。在服務器解析命令后,通過控制器實現(xiàn)對機器人的運動控制。
圖4 運動控制模塊原理圖
本設計在人機交互界面上增加了視頻監(jiān)控模塊,能夠完整顯示視頻流。設計視頻監(jiān)控模塊的主要目的是防止用戶遠程操作機器人時發(fā)生碰撞事故,此模塊能夠大幅提高用戶操作時的安全性。
本模塊采用JSON格式對圖像顯示參數(shù)進行預描述。圖像參數(shù)在JSON格式中可以看作各種“鍵/值”對的集合,根據(jù)設計要求,本模塊主要涉及的“鍵/值”對參數(shù)包括圖像的ID、端口地址、圖顯示的尺寸、訂閱的ROS話題等。視頻監(jiān)控功能的實現(xiàn)基于ROS中的Web_video_server[14]功能包,在通信建立后,Web_video_server首先會打開本地端口并等待傳入的HTTP請求,一旦用戶通過HTTP發(fā)出ROS主題的視頻流請求,該功能包就會訂閱相應主題并創(chuàng)建視頻編碼器實例,然后將原始的視頻數(shù)據(jù)包提供給客戶端,最后通過WebSocket接口進行傳輸,從而實現(xiàn)Web瀏覽器中的圖像顯示功能。此外,為了滿足用戶對不同類型圖像的需求,該模塊通過訂閱不同的圖像話題實現(xiàn)了對彩色圖像和深度圖像的顯示,用戶可以通過界面上的按鈕自由選擇。
本設計采用RS-LiDAR-16三維激光雷達來提供點云數(shù)據(jù),網(wǎng)頁端需具備3D可視化功能。因此,本設計利用Ros3djs作為Rosbridge客戶端。與視頻監(jiān)控模塊類似,本模塊也采用JSON數(shù)據(jù)格式進行傳輸,其參數(shù)包括端口地址、點云顯示的尺寸、訂閱的ROS話題等。首先需要創(chuàng)建ROS3d.viewer視圖對象,用于放置視圖內容, 建立ROSlib.tfclient客戶端,用于訂閱相應的TF數(shù)據(jù),并建立ROS3d.ponitcloud2客戶端,用于獲取點云數(shù)據(jù);當ROS系統(tǒng)接收到建圖請求后,服務器主動推送點云數(shù)據(jù)和TF數(shù)據(jù),通過Tf2_web_republisher將TF數(shù)據(jù)通過ROSbridge接口發(fā)送給ROS3djsclient和ROSlib.tfclient,在接收到TF數(shù)據(jù)后,對ROS3d.viewer對象和ROS3d.ponitcloud2對象進行更新,最終實現(xiàn)瀏覽器中的點云顯示[15]。
本文設計的基于ROS網(wǎng)橋的跨平臺網(wǎng)絡化人機交互系統(tǒng)主要是實現(xiàn)移動機器人的遠程監(jiān)控和運動控制。
實驗環(huán)境如圖5所示,其由一臺配置了Ubuntu的Linux系統(tǒng)工控機、Robuster移動機器人底盤、Intel 3D相機、RS-LiDAR-16激光雷達、一臺配置Windows 10的系統(tǒng)主機組成。工控機作為服務器端,Windows系統(tǒng)主機作為客戶端,用于遠程消息的監(jiān)控。為保證監(jiān)控平臺能夠跨平臺通信,需要2臺主機處在同一局域網(wǎng)下。為了測試本文所述設計的效果,具體實驗步驟如表2所示。
表2 實驗步驟
圖5 實驗環(huán)境圖
本文設計的人機交互界面如圖6所示,圖6主體部分左側是RS-LiDAR-16激光雷達的點云顯示情況,右側是RealSense 3D相機彩色圖像的顯示情況。節(jié)點關系分析如下:Robuster對應的節(jié)點/Robuster_mr可以與/Rosbridge_websocket、/Web_video_server節(jié)點通信,并將Cmd_vel話題發(fā)布到Robuster_mr上,實現(xiàn)了對Robuster的運動控制。與此同時,相機話題被發(fā)布到/Web_video_server服務器上,實現(xiàn)了遠程在客戶端上訂閱相機的實時圖像信息的功能。
圖6 人機交互界面
表3為本文設計的人機交互系統(tǒng)和傳統(tǒng)人機交互系統(tǒng)特性的對照。實驗結果表明,與傳統(tǒng)的人機交互系統(tǒng)相比,該方案擺脫了只能運行在特定單一平臺上的限制,能夠在泛平臺實現(xiàn)移動機器人監(jiān)控,與傳統(tǒng)人機交互系統(tǒng)框架式開發(fā)不同的是,本系統(tǒng)采用服務化開發(fā)模式,后續(xù)功能的開發(fā)無須改動整體框架,只需調用相應服務,各模塊耦合度較低,方便解耦、移植和功能擴展,使人機交互系統(tǒng)更智能且面向服務。另外,本方案集成部署在移動機器人平臺上,用戶能夠直接通過瀏覽器控制和監(jiān)控機器人,實現(xiàn)人機交互系統(tǒng)的輕量化和集成化??傮w來說,本設計的跨平臺人機交互系統(tǒng)能夠較為準確地對移動機器人進行運動控制和狀態(tài)監(jiān)控,并且有效可行。
表3 人機交互系統(tǒng)特性對照表
本文設計了一種基于ROS網(wǎng)橋的跨平臺網(wǎng)絡化人機交互系統(tǒng)。首先,利用HTML5、CSS、JavaScript技術構建了面向ROS的遠程監(jiān)控平臺,設計了基于ROS網(wǎng)橋的通信鏈路,實現(xiàn)了跨平臺數(shù)據(jù)交換。然后,在此基礎上采用模塊化開發(fā)方式開發(fā)了人機交互界面,主要功能包括運動控制、圖像監(jiān)控、點云顯示等。最后將系統(tǒng)應用于Robuster機器人,檢驗了本系統(tǒng)的跨平臺運動控制、點云顯示和視頻監(jiān)控功能。所設計的系統(tǒng)具有跨平臺、可移植性強等特點,為人機交互技術的網(wǎng)絡化、服務化和智能化提供了基礎。另外,基于本文設計的人機交互框架,未來將結合生物電子技術,實現(xiàn)跨模態(tài)的人機交互。