本文来源:
这篇文档概述了rosbridge v2.0 协议规范。V2.0协议包含了自 rosbridge v1.0发布以来出现的许多需求,并进行了少量修改,以便于更大的可扩展性。在其核心,协议仍然包含相同的操作,其语义与以前的版本相同。主要的变化在于消息的结构,从消息信息中分离出控制信息;主要新增的是碎片、压缩和日志记录。
本文档概述了协议规范,但也涉及rosbridge服务器实现的预期方向。rosbridge 2.0服务器实现的架构是为了便于添加和修改协议操作。此外,rosbridge v2.0服务器将JSON处理与websockets服务器解耦,允许用户任意更改他们正在使用的特定websockets服务器实现。
rosbridge 传递的消息是JSON对象。唯一需要的字段是“OP”字段,它指定该消息的操作,每个“OP”然后指定它自己的消息语义。
rosbridge 协议是一组“OP”代码,它定义了多个操作,以及每个操作的语义。
rosbridge 服务器是一个接受Websockets连接并实现rosbridge 协议的服务器。
rosbridge 的全部源代码位于rosbridge_suite 包中。该包链接:https://github.com/robotwebtools/rosbridge_suite,在文档的第4.5节详细介绍了rosbridge_suite 包的各个部分。
1. The rosbridge transport
在基本情况下,一个rosbridge消息是一个带有一个称为“OP”的字符串字段的JSON对象。例如:{ "op": "Example" }
——》OP字段表示的是消息的类型。OP有不同值的消息表示 不同的处理。只要JSON对象的消息带有OP字段,那么就是一个有效的 rosbridge 消息。
当然,消息还可以提供任意字符串或整型ID:
{ "op": "Example",
"id": "fred"
}
如果一个带有ID的消息被发送给 服务器 ,那么相关的响应消息通常也包含该ID。此操作引起的日志消息也将包含ID。
在语义上,ID不是它所在的特定消息的标识符,而是用于交互的标识符,它包括来回消息中的许多操作,因此,ID可以用于同一事件的多个消息中。
2. The rosbridge protocol
rosbridge协议定义了许多不同的操作。它们如下:
(1)Message compression / transformation:
fragment - a part of a fragmented message
png - a part of a PNG compressed fragmented message
(2)Rosbridge status messages:
set_status_level - a request to set the reporting level for rosbridge status messages
status - a status message
(3)Authentication:
auth - a set of authentication credentials to authenticate a client connection
(4)ROS operations:
advertise – advertise that you are publishing a topic
unadvertise – stop advertising that you are publishing topic publish - a published ROS-message
subscribe - a request to subscribe to a topic
unsubscribe - a request to unsubscribe from a topic call_service - a service call
service_response - a service response
通常,客户端采取的操作(例如发布和订阅)具有操作码,这些操作码是动作(subscrib