[ROS] 录制 PointCloud2 到 rosbag 文件

in 工作记录 with 0 comment

雷达获取到的点云数据, 如何录制到Rosbag文件?

作为一个Javaer我对这个问题进行了搜索,却很难找到答案。
我只好对自己的需求先进行整理。

啥是ROS?

ROS 作为一个机器人操作系统(Robot Operating System),有一套自己的生态。

啥是PointCloud?

ROS中定义的一种数据格式,每个点都有基本的xyz坐标,很多点就能构成类似图像的效果。

PointCloud和PointCloud2什么区别?

PointCloud2是PointCloud格式的升级版,PointCloud很多播放软件直接不做支持了,PointCloud2格式才支持,优先使用PointCloud2。
(别问我怎么知道PointCloud播放支持不好的!)

.bag文件?

一种文件格式,可以持久化ROS中各种结构的数据。

我的问题变成了:

用代码的方式写数据进 ".bag" 文件,应该用那个库?

这里有答案: http://wiki.ros.org/rosbag

The rosbag package provides a command-line tool for working with bags as well as code APIs for reading/writing bags in C++ and Python.

不能指望我会C++,只能用Python了。

Python库Writing示例:

https://ternaris.gitlab.io/rosbags/topics/rosbag1.html#writing-rosbag1

Rosbags, 托管在gitlab上,只有37个Star,调试成功之路几乎必然是艰辛的。

Python版本要求: image.png

不要指望在搜索引擎上找到关于此库什么, 请仔细阅读文档。 同时Rosbags的issues中搜索相关PointCloud的issues, 这是重要的参考!

示例代码

参考 issues/27

https://gitlab.com/ternaris/rosbags/-/issues/27

issues/27写很全面了,花了很多时间才走到这里,却发现只是完成了一件普通的事。

Java的库实在太丰富了,调这种用的人少的库,还是按以前的思维,总想着利用搜索引擎走捷径,结果反而花了大量的时间,收获却很少,越是人少的库,就越应该认真读文档,查阅 issues,必要的时候甚至向作者提问。

即使是Java的很多库,都应该仔细阅读文档,一些稍微复杂的问题,花上几个小时在文档上,往往比直接到处乱搜有效。