gpt4 book ai didi

ros - 为什么 ROSBag record 每秒只能记录来自任何传感器的 10 个事件?

转载 作者:行者123 更新时间:2023-12-04 07:26:34 33 4
gpt4 key购买 nike

作为 Cartographer 教程 (https://google-cartographer-ros.readthedocs.io/en/latest/demos.html) 的一部分提供的示例 ROSBags 的消息频率约为每秒 1507 条 LiDAR 消息,以及每秒 250 条来自 IMU 的消息。我有一个 IMU 每秒广播大约 100 条消息,还有一个使用 Velodyne 自己的驱动程序 (VLP16_points.launch) 广播消息的 Velodyne VLP-16。对于这两个传感器,rosbag record 似乎每秒最多只能记录 10 条消息。我怎样才能增加这个录音频率?

最佳答案

我怀疑它实际上是一个时间限制器的函数(例如,传递给进行记录的计时器回调的频率,就像您可能期望的那样),它实际上是一个缓冲区瓶颈。
在丢帧以写入或处理已经存在的数据之前,它只需要写入磁盘的数据或订阅者缓冲区中的数据。
除了使用他们的 C++ api 编写您自己的节点并分析问题本身(如果非常必要,也是一个有效且不太困难的选项),还有一些命令行内置参数控制缓冲区大小(下面,强调添加)。
我还建议以 kB/s 为单位计算您想要的记录速率;如果您知道一个激光雷达 msg 的大小、您想要存储的数量以及生成它们的速率 ( rostopic hz/rostopic bw ),则可以很好地估计您实际询问的内容。

-b SIZE, --buffsize=SIZE

Use an internal buffer of SIZE MB (Default: 256, 0 = infinite). Thisis the message queue of the recorder object, before messages are beingpassed on to the bag. Lowering this value might result in messagesbeing dropped before they reach the recording process.

$ rosbag record -b 1024 /chatter

--chunksize=SIZE

Advanced. Record to chunks of SIZE KB (Default: 768). This is a bufferwithin the bag file object. Lowering this value will result in morewrites to disk.

$ rosbag record --chunksize=1024 /chatter


http://wiki.ros.org/rosbag/Commandline#record

来自评论的编辑:
当原始主题 msg 转换为文本并存储时,上述两个选项会影响序列化消息的缓冲区。如果超出, there should be ROS_WARN msgs在您的终端中。 ( If not, you can enable them. )
如果您没有看到任何关于丢帧的 ROS_WARN 消息,那么问题可能是正常的 ros 消息丢失。 Refering to previous questions ,您可以 enable topic statistics查看是否由于队列大小而丢弃了任何消息。
从源代码来看,对于命令行工具,每个订阅的主题只有一个 100 的 msg 缓冲区( ops.queue_size = 100; )。如果这是问题,最简单的解决方案是将源包从 github 复制到您的工作区,并修改队列大小。但我怀疑这不是真正的问题。
如果您录制的主题超过 10 个,则假设可能存在另一个问题,默认情况下是 "only" launches 10 'async spinner' threads ;但所有其他提到的潜在问题更有可能是根本原因。

关于ros - 为什么 ROSBag record 每秒只能记录来自任何传感器的 10 个事件?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/68185021/

33 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com