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

"rosbag record -a" in C++?

asked 2015-09-01 04:29:53 -0500

ZOORCK gravatar image

updated 2015-09-23 08:51:51 -0500

lucasw gravatar image

I want to implement a node which is able to start recording every topic. It should record everything like the command line rosbag record -a. is there a possibility to use that command or something similar in a node which is implemented in c++?

edit retag flag offensive close merge delete


why not to use rosbag? it is a functional requirement? motivation?

yasagitov gravatar image yasagitov  ( 2015-09-01 06:45:04 -0500 )edit

I want to use Rosbag but there are only examples like but i wanted to record every topic and not single messages. the reason why i wanted to start that with a node was that it should start in the right moment

ZOORCK gravatar image ZOORCK  ( 2015-09-01 07:43:25 -0500 )edit

You can call rosbag with parameters from launch file. See question

yasagitov gravatar image yasagitov  ( 2015-09-01 08:02:46 -0500 )edit

thank you thats a great idea.

ZOORCK gravatar image ZOORCK  ( 2015-09-01 08:22:34 -0500 )edit

4 Answers

Sort by » oldest newest most voted

answered 2015-09-01 09:20:34 -0500

Rosbag has an API: That is the best way to use it instead of using system commands.

edit flag offensive delete link more



It looks like it is up to the user to continuously monitor for new topics and subscribe to all of them as they appear, substantially re-implementing rosbag record -a.

lucasw gravatar image lucasw  ( 2015-09-23 08:49:47 -0500 )edit

Well, that is what he says he wants!

Javier V. Gómez gravatar image Javier V. Gómez  ( 2015-09-23 09:06:14 -0500 )edit

answered 2016-02-22 06:45:41 -0500

gpldecha gravatar image

I have implemented a rosbag record node , have a look here if people would be interested in a C++ example.

edit flag offensive delete link more

answered 2015-11-03 09:04:15 -0500

lucasw gravatar image

Copying my answer from (which wasn't really answering it for python, it really belongs here)

The best solution to programmatic rosbag recording I've found is to wrap rosbag::Recorder in a C++ node. There isn't a way to shutdown recording in Recorder, but there can be a subscriber in the recorder wrapper node which calls ros::shutdown which will cleanly close the current recording bag file, and then the the node can be set to respawn=true. The exclude list can be passed in as a parameter and then useful other parameters set like below, or have params override defaults as desired:

  recorder_options_.exclude_regex = some_string_from_ros_param;
  ROS_INFO_STREAM("exclude list \"" << recorder_options_.exclude_regex << "\"");

  recorder_options_.record_all = true;    
  recorder_options_.trigger = false;
  recorder_options_.regex = false;
  recorder_options_.do_exclude = true;
  recorder_options_.quiet = false;
  recorder_options_.append_date = true;
  recorder_options_.verbose = false;
  recorder_options_.buffer_size = 1048576 * 512;
  recorder_options_.chunk_size = 1024 * 768;
  recorder_options_.limit = 0; // 0 is unlimited
  recorder_options_.split = true;
  recorder_options_.max_size = 1024 * 1024 * 1024;
  recorder_options_.min_space = 1024 * 1024 * 1024;
  recorder_options_.min_space_str = "Recording space is running out";
edit flag offensive delete link more

answered 2015-09-01 07:49:10 -0500

ZOORCK gravatar image

I solved it i used

#include <stdlib.h> .... int i; i=system("rosbag record -a");

maybe there are better solutions but this was the easiest one. sorry for posting that question.

edit flag offensive delete link more



how do you stop the recording in cpp?

ysl208 gravatar image ysl208  ( 2018-11-28 13:56:02 -0500 )edit

Question Tools

1 follower


Asked: 2015-09-01 04:29:53 -0500

Seen: 6,105 times

Last updated: Feb 22 '16