夏盛明
福州理工學院計算與信息科學學院,福建福州 350000
智能機器人的普及應用加速了智能機器人相關技術行業的快速發展。在智能家居應用領域,市場上比較普遍的諸如教育類型機器人、清潔機器人、巡邏機器人等。隨著應用的普及,生活中使用智能機器人工作的場景越來越多,智能機器人控制系統的應用更加廣泛。機器人操作系統(robot operation system,ROS)[1-3]是一個機器人系統開發與研究平臺,大多數的開源機器人控制系統都使用ROS系統作為機器人高層控制算法的運行平臺。ROS系統是一個具有松耦合消息服務的分布式系統,系統內部各節點之間采用異步消息機制進行相互間通信,部署新的機器人功能節點時,只需要功能節點與系統內其他節點通過消息進行數據交互,簡化了軟件系統的集成工作。ROS系統主要基于Linux系統運行。在一些移動機器人的嵌入式系統平臺中實現了通過message pipe[4]與ROS系統通信。客戶端也可通過網絡服務訪問ROS系統中的各項功能節點服務,例如直接采用ROS Message[5]訪問ROS系統資源。但是,采用這種方式將使得智能機器人系統網絡服務處于一個開放訪問的狀態,系統的安全性將無法得到保障,缺乏對客戶端有效的組織和管理,因此需要開發一個智能機器人遠程協作系統,協助客戶端對智能機器人的遠程管理、參數設置、命令發布等。為了簡化討論,本文只涉及了智能機器人運動最基礎的功能,包括建圖、導航、定位、物體識別等。智能機器人系統的整體架構如圖1所示。

智能機器人系統底層是硬件層,包含了機器人硬件所集成的各類傳感器,例如慣性導航單元、超聲波測距儀、光學攝像頭、激光掃描儀、電驅、運動部件等等。在硬件層之上是實時操作系統層(real time operating system,RTOS),通常使用uC/OS-II[6-9],RT-Thread[10-12]開源嵌入式實時系統去驅動底層硬件,獲取傳感器數據等。在RTOS系統層之上是Linux系統層,Linux系統層運行著基本的系統服務,諸如網絡服務、消息中間件服務、驅動管理等。在Linux系統層之上是ROS系統,ROS系統運行著智能機器人各類算法應用,例如建圖、定位、導航以及智能機器人的遠程協作系統。ROS系統是一個開放的機器人系統開發平臺,擁有豐富的機器人控制算法應用,ROS系統中各模塊通過發布/訂閱機制,使用異步消息進行相互通信。遠程協作系統位于ROS系統中,通過消息與其他智能機器人算法模塊進行通信,通過互聯網絡與客戶端進行通信,進而實現客戶端遠程控制機器人運動。具體實現為遠程協作系統使用基于ROS服務,與ROS系統中各個智能機器人算法應用模塊通信,同時使用google的遠程方法調用框架(google remote procedure calls, gRPC)[13-14]實現網絡服務通信,為客戶端提供智能機器人遠程網絡訪問支持。
gRPC是一個現代開源高性能遠程程序調用框架,是google公司開發的用于網絡節點間開發數據傳輸服務的網絡框架,支持多種不同類型語言開發,支持雙向通信,可以在分布式網絡環境中運行,可以有效地連接網絡服務,適用于分布式計算場景,將設備、移動應用程序和瀏覽器與后端服務連接起來,例如金融系統運用[15]、呼叫平臺[14]系統等。通過使用gRPC可以實現支持不同語言編寫的客戶端通信,實現松耦合的系統架構,在分布式系統中應用[16-17]越來越廣泛。
遠程協作系統可實現用戶通過客戶端管理智能機器人的運動。遠程協作系統與智能機器人算法模塊通過ROS Message消息框架進行通信。ROS Message消息框架是一種異步消息傳輸框架。ROS系統平臺內的節點通過發布一個消息主題,用于固定頻率發布消息,其他節點則通過訂閱這個消息主題接收消息;同時,ROS系統平臺內的節點也可訂閱消息主題,用于接收其他節點發布的命令消息、控制參數等。消息的發布和接收可以是一對多的關系,即單個消息發布節點對應多個消息接收節點。對ROS系統中的建圖、定位、導航等機器人運動相關算法模塊,遠程協作系統需要訪問這些模塊服務,需要訂閱這些模塊發布的消息主題,也需要能夠向這些模塊的控制消息主題發布命令消息,進而控制機器人運動。遠程協作系統與ROS系統模塊、客戶端的消息服務架構如圖2所示。每個模塊可能發布不止一個消息主題,圖2簡化了ROS系統模塊使用的消息主題,使用一個消息主題代表模塊發布的消息主題集合,使用一個控制主題代表模塊接收命令的消息主題集合。

遠程協作系統可對接收到的消息進行數據緩存。通過異步方式的消息傳遞,遠程協作系統與ROS系統中模塊維持著松耦合的關系。通過此消息架構,遠程協作系統可以獲得來自模塊發布的攝像頭圖像、地圖圖像、定位位置、運動姿態、障礙物信息等。
遠程協作系統需要提供支持客戶端網絡訪問的功能。遠程協作系統與客戶端可通過網絡進行通信,網絡可以是無線局域網(Wi-Fi)。客戶端與遠程協作系統數據通信的方式為雙向通信,遠程協作系統可以將智能機器人的狀態數據發送給客戶端,客戶端將命令發送給遠程協作系統。對于管理ROS系統模塊命令數據消息,遠程協作系統將進行消息數據結構封裝,進而發送給ROS系統中模塊進行處理。
一些智能機器人系統的控制協議棧自身支持網絡通信,例如Ardupilot[18-20]飛控系統協議棧,可通過Mavlink[21-22]消息協議與遠程地面控制系統進行通信。在Ardupilot中,控制協議棧系統將對Mavlink消息進行解析,獲得遠程控制命令,控制參數,進行相應的智能無人系統控制。在這一過程中,Ardupilot 飛控系統協議棧運行在實時系統環境下,對遠程地面控制系統發出的命令可以很快做出響應。由于需要對無人系統進行實時控制,主要用于底層姿態控制、速度控制、位置控制等,并不支持人工智能高層應用,通常工作在智能機器人控制系統的底層,在其上可以添加智能應用層用于高層控制,而遠程協作系統基于ROS 系統服務,主要為ROS系統中各個模塊提供可遠程訪問的功能,由于ROS系統模塊可提供較為復雜的計算機視覺應用,例如SLAM[23](同步定位與建圖)、3D重建、物體識別、物體追蹤等,遠程協作系統處于智能機器人系統的高層控制中,通常用于人工智能領域相關應用的通信服務。
遠程協作系統與客戶端通過設計網絡協議實現網絡通信。網絡協議包括了客戶端對智能機器人發出的各類控制命令和設置的系統參數,獲取智能機器人運行狀態數據、攝像頭圖像、姿態數據、位移數據、地圖數據、電池數據等。存在多種方式實現網絡上不同系統間的數據交互,例如可使用TCP/IP網絡、Web服務、HTTP REST服務等。使用TCP/IP網絡,需要智能機器人控制系統實現消息數據格式封裝、加密傳輸數據、解析傳輸數據、緩存傳輸數據等功能,工作量較大。Web服務基于XML格式數據傳輸,傳輸數據效率不高,對二進制數據支持不夠友好。HTTP REST服務傳輸需要定義服務標識、數據格式、數據封裝與解析,對雙向數據通信的傳輸支持有限。本文選擇基于gRPC網絡框架服務實現遠程協作系統的網絡通信功能,可使用Protobuf 定義協議消息所需數據結構以及服務接口,對于C++語言,通過Protoc可自動生成協議定義的方法與消息數據結構代碼,提升了系統開發工作效率,對協議的修改只需修改Protobuf定義的文件內容,并不需要修改生成代碼,Protobuf主要用在分布式系統節點間網絡服務交互的數據與服務的定義用途上[24]。
遠程協作系統使用了網絡gRPC數據傳輸框架與ROS消息服務,將ROS系統中智能機器人控制模塊狀態數據傳輸給客戶端,同時也將客戶端發送的命令與設置參數發送給ROS系統。遠程協作系統通過使用gRPC框架與ROS系統消息服務,為客戶端實現遠程控制智能機器人運動提供了網絡服務支持。遠程協作系統具體架構如圖3所示。

遠程協作系統消息服務架構分為3層,從下至上分別是系統框架服務層、傳輸服務層、算法應用層。
系統框架服務層包括了gRPC框架與ROS消息服務。遠程協作系統使用gRPC框架開發訪問協議與客戶端通信,使用ROS消息服務與視覺算法應用層節點之間傳輸數據。
傳輸服務層為視覺算法應用層提供網絡數據傳輸服務與ROS系統消息服務。傳輸服務層包括了網絡服務節點與ROS消息服務節點。網絡服務節點管理與客戶端的通信,對網絡傳輸數據進行封裝與解析。ROS消息服務節點用于監聽ROS系統消息服務發布的消息數據,并傳遞給視覺算法應用層,或將從視覺算法應用層獲得的數據發布到ROS消息服務系統中。
算法應用層對從ROS消息服務節點獲得的ROS系統發布的服務消息進行解析、格式轉換、數據封裝,通過傳輸服務層的網絡服務節點發送給客戶端。算法應用層對從網絡服務節點獲得的遠程客戶端發送的命令參數進行解析、格式轉換、數據封裝,通過ROS消息服務節點發布到ROS消息服務系統中。
遠程協作系統與客戶端數據通信方式采用了異步方式與同步方式結合。異步方式即發送數據方在發送的數據信息完成后立即返回,不會等待接收方的執行結果,接收方在處理完成消息數據后,才會把處理結果通過回調的方式反饋給發送方。異步方式一般用于狀態數據傳輸,例如攝像頭圖像、位置信息、姿態信息等;同步方式即發送方將數據發送給接收方,并等待接收方將數據處理完成后返回。同步方式一般用于控制命令或參數設置等。
遠程協作系統在異步處理消息的情況下,通過在ROS消息服務框架下注冊回調函數用于消息的接收。每當ROS消息到來,回調函數將被調用一次用于接收消息后進行處理或發送。當存在ROS消息服務頻率過大的情況時,遠程協作系統將對這類消息進行緩存后批量處理,可將多個消息緩存后合并進行處理或發送給客戶端,例如攝像頭圖像、姿態狀態數據等。但對一些消息只取最新獲得的數據進行發送,例如電池狀態信息、心跳消息等。
遠程協作系統在同步數據傳輸過程中,數據傳輸量較小,接收方處理時間較短,發送方很快可以獲得數據的發送與處理結果。同時,發送方維持著一個計時器,用于判斷在網絡狀態不佳的情況下,數據傳輸是否超出響應時間范圍,進而判斷數據傳輸是否失敗,是否需要重傳數據。
遠程協作系統與客戶端之間的網絡服務采用雙向連接方式。客戶端與遠程協作系統都存在網絡服務節點,即Service Node。客戶端先向遠程協作系統發起建立TCP連接請求,告知自身的網絡IP地址與端口信息,當收到請求后,遠程協作系統完成客戶端的連接請求,建立從客戶端到遠程協作系統的數據連接。通過這一步驟,遠程協作系統獲得了客戶端的網絡IP 地址,隨后發起向客戶端的TCP連接請求,客戶端收到連接請求后,完成遠程協作系統的連接。至此,數據網絡服務的雙向連接建立完成。采用此種通信方式,客戶端發送參數,控制命令鏈路與遠程協作系統的發送傳感器數據鏈路完全區分。遠程協作系統可主動推送智能機器人系統上的各類傳感器數據,例如攝像頭數據、慣性導航單元數據,這類數據發送量較大,發送頻率較高,單獨作為一個網絡鏈路發送,簡化客戶端處理數據連接流程,也簡化了網絡數據通信的處理實現機制。

數據采用加密傳輸機制。為了提升智能機器人系統網絡安全性,防止未經授權認證的用戶監聽系統數據或與遠程協作系統連接,遠程協作系統在網絡上采用gRPC,使用SSL加密傳輸的方式進行傳輸數據[25]。目前,遠程協作系統只支持與處于相同的局域網絡客戶端連接,如圖4所示,遠程協作系統為了實現客戶端對ROS服務開放性訪問的安全性,在運行ROS系統平臺的Linux系統中,存在一個gRPC Service Node進程服務用于實現gRPC服務端功能,該進程擁有較高的系統權限,只能由Linux系統管理員管理。gRPC Service Node進程通過ROS系統消息服務API可注冊ROS系統中的消息主題,獲取ROS系統中發布的消息,同時也可通過向ROS系統中注冊消息發布主題,向ROS系統中傳遞來自客戶端的命令消息。gRPC Service Node進程會鑒別來自客戶端的gRPC client連接請求的身份,只有在客戶端身份認證通過后,連接才會建立,隨后數據通信也采用SSL加密傳輸機制,防止信息泄露。遠程協作系統連接客戶端gRPC Service Node 的過程與此類似。通過這一方式,避免了任意用戶對ROS系統服務的訪問,提升了系統的安全性。
系統通過protobuf定義服務端與客戶端通信接口,在protobuf中定義了各類服務的結構體與遠程方法調用的函數接口。
服務端:

[1]注冊ROS系統中的消息主體(發布與接收)[2]監聽來自客戶端的連接請求a)接收到連接,認證客戶端身份, 如果身份認證通過,建立連接,b)否則,關閉客戶端連接請求[3]向客戶端建立同步命令傳輸網絡連接[4] Loop 接收客戶端的命令消息,轉發給ROS系統處理 向客戶端推送系統狀態信息,客戶端命令執行結果 end[5]客戶端連接退出[6]服務端關閉客戶端連接
客戶端

[1]發起與服務端連接[2]通過身份認證[3]Loop 發送命令 接收ROS系統消息 end [4]客戶端關閉連接
本文介紹了應用于智能機器人的遠程協作系統的設計與實現方案。遠程協作系統為人工智能系統的應用提供了支持。通過遠程協作系統,實現了客戶端遠程對智能機器人運動進行管理。該系統可支持不同類型的客戶端,例如,基于PC電腦的地面站系統或基于Android、IOS等移動平臺的應用,在智能家居等領域具有一定的應用參考價值。