[ROS] rosbridge CBOR-RAW 格式中"bytes"是如何解码?

2022-12-30 09:57:42 +08:00
 coala

这里的 3.1.4 CBOR-RAW encoding ( cbor-raw ) 章节介绍了 CBOR-RAW 格式

https://github.com/RobotWebTools/rosbridge_suite/blob/ros2/ROSBRIDGE_PROTOCOL.md

我按照 CBOR 格式解开一个例子数据

"a365746f706963722f636f6e6e65637465645f636c69656e7473636d7367a364736563731a63abf3fd656279746573581a010000000a0000003137322e31372e302e31d8f3ab6307c87615656e736563731a3765560e626f70677075626c697368"

https://cbor.me/ --可解析 SBOR

{
 "topic": "/connected_clients",
 "msg": {
   "secs": 1672213501,
   "bytes": h'010000000A0000003137322E31372E302E31D8F3AB6307C87615',
   "nsecs": 929388046
 },
 "op": "publish"
}

bytes 按照 rosbag 解码的思路行不通, 这个 bytes 应该如何解析?

983 次点击
所在节点    程序员
4 条回复
Shatyuka
2022-12-30 10:08:59 +08:00
NessajCN
2022-12-30 12:06:42 +08:00
"bytes"那条给你的是 ROS serialization format,
https://wiki.ros.org/roscpp/Overview/MessagesSerializationAndAdaptingTypes#Deserializing_from_Memory
你如果想自己解码的话就照着给定的 type(rosbridge_msgs/ConnectedClients)调方法,类似
ros::serialization::Serializer<rosbridge_msgs::ConnectedClients>::read(stream, my_value);
(没试过,不一定准)
coala
2022-12-30 15:21:14 +08:00
@NessajCN 感谢, 我主要不会 C++ , 因为 rosjava 很久没人维护, 我今天找了 python 和 JS 的库在试了.
yenkn
2022-12-31 02:32:32 +08:00
竟然能在 V2EX 看到 ROS 的问题,楼上说的没错,这个 bytes 就是 ROS 的 serialization format ,本质上只是按顺序把数据一个个序列化,java 的话可以看一下 https://github.com/rosjava/rosjava_bootstrap ,把 msg 文件生成成 java 类之后直接调用对应类的 serialize/deserialize 函数应该就可以直接按照 msg 定义解析二进制数据了,JS 的话可以看看 https://github.com/foxglove/rosmsg-serialization

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/905505

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX