这里的 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 应该如何解析?
1
Shatyuka 2022-12-30 10:08:59 +08:00 1
|
2
NessajCN 2022-12-30 12:06:42 +08:00 1
"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); (没试过,不一定准) |
3
coala OP @NessajCN 感谢, 我主要不会 C++ , 因为 rosjava 很久没人维护, 我今天找了 python 和 JS 的库在试了.
|
4
yenkn 2022-12-31 02:32:32 +08:00 1
竟然能在 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
|