基於ROS的分布式機器人遠程控制平台
1 結構說明
HiBot架構主要使用C/S架構,其中HibotServer為服務器,Muqutte為消息服務器中間件,HiBotClient為運行在機器人上的客戶端。主要實現了機器人任務的遠程部署、監控、控制三大功能,機器人平台依賴於ROS。其架構如下圖所示 下面是對這三個重要組成部分的說明
1.1 HiBotServer
Web服務器則使用Jersey框架[13],Jersey是開源的RESTful 框架,基於RESTful的Web Service相比傳統的web Service具有占用資源少、實現簡單等優點。因此,HiBot提供RESTful API,使得各種設備接入HiBot進而進行機器人的操控變得更加簡單。
1.2 Muqutte
HiBot選擇輕量級的MQTT協議作為推送服務器與客戶端之間的通信協議,推送服務器的中間代理(broker)則選用了開源推送代理服務器Moquette[12] (https://github.com/andsel/moquette) ,Moquette是基於事件驅動的服務器,支持websocket連接、權限驗證、數據加密、服務質量保證等功能。我們在Moquette-0.8版本上進行定制,引入數據庫對重要數據進行存儲,加入客戶端列表功能。
1.3 HiBotClient
HiBot客戶端,主要負責接收並執行遠程任務部署、監控、控制命令。 客戶端構建在ROS之上,任務的執行依賴於ROS環境,客戶端最核心的工作是接收執行來自服務器的相關命令。客戶端主要包括消息解析模塊、邏輯處理模塊、數據請求和響應模塊以及任務池模塊。當服務器有消息推送到客戶端時,首先消息解析模塊解析該條消息並將其提交給邏輯處理模塊中相應的功能模塊,這些功能模塊通過任務池中的任務進行操作來完成消息的執行工作,最終數據請求及分發模塊會將執行結果數據上傳至web服務器。
2 RESTFul接口
服務器接口采用RESTful格式,形式為 http://ip:port/HiBotServer/api/v1 + 具體請求操作
2.1 客戶端操作
- 查看客戶端列表
GET
http://ip:port/HiBotServer/api/v1/client/list # 可選參數 # startPage # pageSize # 例 http://localhost:8080/HiBotServer/api/v1/client/list?startPage=2&pageSize=10
- 查看客戶端詳情
GET
http://ip:port/HiBotServer/api/v1/client/id/<id> # id 客戶端id # 例 http://localhost:8080/HiBotServer/api/v1/client/id/1
2.2 任務/應用操作
- 任務詳細信息
GET
http://ip:port/HiBotServer/api/v1/task/id/<id> # id 任務id # 例 http://ip:port/HiBotServer/api/v1/task/id/1
- 任務推送(推拉結合)
GET
http://ip:port/HiBotServer/api/v1/task/publish/taskId/<taskId>/clientIds/<clientIds> # taskId 任務id # clientIds 客戶端id,以逗號相隔 # 例 http://localhost:8080/HiBotServer/api/v1/task/publish/taskId/1/clientIds/1,2,3
- 任務推送(直接推送任務二進制包)
GET
http://ip:port/HiBotServer/api/v1/task/publishFile/clientId/<clientId>/filePath/<filePath> # clientId 客戶端id # filePath 文件路徑 # 例 http://localhost:8080/HiBotServer/api/v1/task/publishFile/clientId/1/filePath/myros.zip
- 完成任務(由客戶端調用)
GET
http:///ip:port//HiBotServer/api/v1/task/finishTask/clientId/<clientId> # clientId 客戶端id #例 http://localhost:8080/HiBotServer/api/v1/task/finishTask/clientId/1
2.3 任務節點操作
- 向客戶端發送上傳任務節點信息請求-1
GET
http://ip:port/HiBotServer/api/v1/node/publish/clientIdMac/<clientIdMac> # clientIdMac 客戶端網卡/別名 # 例 http://127.0.0.1:8080/HiBotServer/api/v1/node/publish/clientIdMac/1
- 向客戶端發送上傳任務節點信息請求-2
GET
http://ip:port/HiBotServer/api/v1/node/publish/clientId/<clientId> # clientId 客戶端id # 例 http://127.0.0.1:8080/HiBotServer/api/v1/node/publish/clientId/1
- 查看客戶端的任務node情況
GET
http://ip:port/HiBotServer/api/v1/node/clientId/<clientId> # clientId 客戶端id # 例 http://127.0.0.1:8080/HiBotServer/api/v1/node/clientId/1
- 向客戶端上傳節點信息(客戶端接口)
POST
http://ip:port/HiBotServer/api/v1/node/uploadNodeList # form:data
開源代碼位置:https://gitee.com/smarft/HiBot
