rosserial和rosbridge

1、rosserial

rosserial用于非ros设备与ros设备进行通信的一种协议,比如ros与arduino通信。
r o s s e r i a l { 客 户 端 → 无 R O S 环 境 服 务 器 端 → R O S 环 境 rosserial\left\{ \begin{matrix} 客户端→无ROS环境 \\ 服务器端→ROS环境 \end{matrix} \right. rosserial{ROSROS

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。
rosserial和rosbridge_第1张图片

参考

我的AI之路(25)–ROSBridge:机器人与外部系统之间的通讯解决方案
rosbridge_suite入门教程-rosbridge_suite介绍

你可能感兴趣的:(ROS)