ROS Resources: Documentation | Support | Discussion Forum | Index | Service Status | ros @ Robotics Stack Exchange
Ask Your Question

Recording large high speed data sets in ROS

asked 2019-09-24 12:20:23 -0500

DirkvdM gravatar image

updated 2019-09-24 14:57:55 -0500

I would like to record Ethernet traffic on a system carrying ROS messages at about 1.5 Gigabits per second up to 30Tbytes. (Band width 1.5 Gigabits/second Total volume 30 Tbytes) The data rate seems too high to capture by using Rosbag and subscribing to all the topics in real time. Which topics will be interesting is not known ahead of time.

The typical sustained disk write speed on a high end laptop is only 520 MBps. You can use SSD drives for faster speeds but they top out at about 2 Tera bytes. Specialized hardware like the Galleon XSR-10g ( will allow us to capture the ethernet traffic but decoding it becomes a challenge.

Using ROSbag and subscribing to topics also increase the amount of Ethernet traffic unless the Ethernet traffic is routed using UDP.

I am curious how other people has managed large / high speed data logging on ROS

edit retag flag offensive close merge delete


Not an answer, but an observation:

1.5 Gigabits per second up to 30Tbytes

I wasn't around at the time, but I don't believe these sort of nrs were considered when rosbag was designed and implemented. It's not surprising that it can't keep up (although at those traffic volumes and bandwidths I would say special tuning of OS storage layers and network stack would probably also be needed).

My suggestion would be to look into some of the alternative "ros message recording" implementations that have been created. There are some that use a nosql db as a backend. rosbag in ROS 2 uses a sql db by default (sqlite), but has pluggable backends.

And to clarify: bandwidth is 1.5 gbit/s with total volume 30 TB?

Can you say something about the type of messages that you're recording?

gvdhoorn gravatar image gvdhoorn  ( 2019-09-24 13:44:04 -0500 )edit

2 Answers

Sort by ยป oldest newest most voted

answered 2019-09-24 14:17:34 -0500

kscottz gravatar image

My suggestion isn't a fix so much as a suggestion that your hardware architecture may not be well suited to your application. There is an old joke, a guy meets with his doctor, he says, "doctor it hurts when I go like this" and the guy proceeds to twists is arm halfway around and starts swinging his forearm around violently. The doctor responds, "The solution is simple, don't do that." You're probably better off trying a different way than squeezing your hardware as hard as you can.

I would suggest not pushing your hardware beyond about 80% of its capacity. I would first look at your topics, do you really need all of them? Can things like images have their resolution lowered, preferably in hardware. If you're still stuck perhaps you can split up your bags a bit. You can run rosbag on multiple hosts each with their own physical disks. I would suggest looking at this tutorial on how to accomplish that.

edit flag offensive delete link more

answered 2019-09-24 13:39:27 -0500

duck-development gravatar image

I think you know already the answer. Because each node only communicate between each other, there is no central data storage.

So you have to communicate to each other, to get the messege, or record all traffic.

So you may use the network traffic recording and may this plugin/filter for Wireshark help you to filter the message. You look for. As you know it afterwards.

As a robot consists of drifferent parts, you normally look only at one part and try to fix it and then look at the next part. And one part generate normal not mutch data(as log it is not video streams or velodymes) but you also know which data you need befor the test.

edit flag offensive delete link more

Question Tools



Asked: 2019-09-24 12:20:23 -0500

Seen: 847 times

Last updated: Sep 24 '19