rosserial和rosbridge

1、rosserial

rosserial用於非ros設備與ros設備進行通信的一種協議,比如ros與arduino通信。
rosserial{ROSROS rosserial\left\{ \begin{matrix} 客戶端→無ROS環境 \\ 服務器端→ROS環境 \end{matrix} \right.

USB(通用串行總線)基於串口,但嚴格來說不是串口。串口一般指COM口。

2、rosbridge/rosbridge_server

rosbridge_suite(包含rosbridge的元包)
├── rosbridge_library
├── rosapi
├──rosbridge_server
│ ├── rosbridge_tcp
│ ├── rosbridge_udp
│ └── rosbridge_websocket

2.1 rosbridge

通常的理解是rosbridge是一個可用於非ros系統和ros系統進行通信的功能包,爲非ROS程序提供了一個使用ROS功能的JSON API;有許多前端與rosbridge接口,包括一個WebSocket服務器,用於Web瀏覽器進行交互。

rosbridge包含兩個部分:

rosbridge協議
rosbridge實現

2.2 rosbridge協議

rosbridge協議是用於向ROS(並且在理論上,任何其他機器人中間件)發送基於JSON的命令的規範。
訂閱主題的協議示例:

{ "op": "subscribe",
  "topic": "/cmd_vel",
  "type": "geometry_msgs/Twist"
}

規範是編程語言和傳輸方式無關,想法是任何語言或傳輸可以發送JSON形式的rosbridge協議與ROS交互。

2.3 rosbridge實現

rosbridge_suite包是一個包含rosbridge的元包,用於實現rosbridge協議和提供WebSocket傳輸層。
rosbridge_suite包含如下幾個包:

  1. rosbridge_library: 核心rosbridge包。rosbridge_library負責獲取JSON字符串並將命令發送到ROS,反之亦然。

  2. rosapi:通過服務調用使某些ROS actions可訪問。 這包括獲取和設置參數,獲取主題列表等。

  3. rosbridge_server: 雖然rosbridge_library提供了JSON ROS轉換,但它將傳輸層留給其他人。

    Rosbridge_server提供了一個WebSocket連接,所以瀏覽器可以“與rosbridge交談”。
    Roslibjs是一個瀏覽器的JavaScript庫,可以通過rosbridge_server與ROS交談。
    

“如果融資多、人力資源充裕、工期不緊張並且有特殊大數據傳輸要求,完全可以不使用ROSBridge,自己用C++開發一個TCP/WebSocket Sever部署在Linux上,作爲機器人本體上的ROS與機器人後端控制系統之間的通訊的橋樑。如果創業公司需要快速出產品、人手又少、沒多少錢燒,那麼基於現有的ROSBridge來實現機器人後端控制系統與機器人之間的通訊還是比較好的選擇。”——我的AI之路(25)–ROSBridge:機器人與外部系統之間的通訊解決方案
比如百度Apollo的CyberRT?

2.4 rosbridge_server

rosbridge_server
├── CMakeLists.txt
├── launch #啓動
│ ├── rosbridge_tcp.launch #啓動TCP服務器,調用rosbridge_tcp.py
│ ├── rosbridge_udp.launch #啓動UDP服務器,調用rosbridge_udp.py
│ └── rosbridge_websocket.launch #啓動WEBSOCKET服務器,調用rosbridge_websocket.py
├── package.xml
├── scripts
│ ├── rosbridge_tcp -> ./rosbridge_tcp.py
│ ├── rosbridge_tcp.py #ros TCP節點, 利用SocketServer實現TCP通訊
│ ├── rosbridge_udp -> rosbridge_udp.py
│ ├── rosbridge_udp.py #ros UPD節點,利用reactor.listenUDP實現UDP通訊
│ ├── rosbridge_websocket -> rosbridge_websocket.py
│ └── rosbridge_websocket.py #ros websocket節點,利用tornado.web實現websocket通訊
├── setup.py
└── src

“關於上面的TCP/UDP/Websocket三種通訊協議的實現該選用哪種好,我覺得這個需要根據你的系統的具體通訊需求來做選擇,只需要短連接、可靠、單向、一對一(或者少量一對多)傳輸數據的話選用TCP即可,只需要單向、非可靠、一對多(一對一當然可以啦)傳輸數據的話選用UDP就行,對於要求頻繁雙向傳輸數據、尤其需要最好保持長連接的通訊需求,當然使用WebSocket是最好的選擇。”——我的AI之路(25)–ROSBridge:機器人與外部系統之間的通訊解決方案
但rosbridge只實現了WebSocket Server端,只能作爲Server運行;如果需要一種基於Java實現的,實現了WebSocket Client的框架,可以考慮rosbridgeclient

3、關係

ros和arduino之間直接一般採用rosserial進行串口通訊;ros與網頁/後端控制系統/服務器通信一般用rosbridge。
在這裏插入圖片描述

參考

我的AI之路(25)–ROSBridge:機器人與外部系統之間的通訊解決方案
rosbridge_suite入門教程-rosbridge_suite介紹

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章