Ask Your Question
1

How to play and pause bagfile within the program?

asked 2017-01-07 11:34:28 -0500

baozhang gravatar image

Hello.

I would like to play and pause bagfile by joypad.

When I type "rosbag play example.bag" in a ternimal, example.bag is played and when I press space key, the bagfile is paused.

I could play example.bag within the program, however, couldn't pause it.

Will you please tell me how to do it or are there other ways to realize it?

edit retag flag offensive close merge delete

3 Answers

Sort by ยป oldest newest most voted
0

answered 2019-09-20 05:59:45 -0500

Christian Rauch gravatar image

The rosbag player provides a pause_playback service of type std_srvs/SetBool.

Since the play will be started as anonymous node, the service will be available as /play_<unique_number>/pause_playback.

To pause the playback, call the service with data: true:

rosservice call /play_<unique_number>/pause_playback "data: true" 
success: True
message: "Playback is now paused"

and to un-pause, with data: false:

rosservice call /play_<unique_number>/pause_playback "data: false" 
success: True
message: "Playback is now resumed"
edit flag offensive delete link more
0

answered 2018-06-05 16:06:11 -0500

You can do this using the rosbag API but it's not the easiest thing in the world, there are a range of examples here. If you back file only contains one or a small number of topics then you can hard code those in.

The rosbag API allows you to open the bag file view it's contents and extract messages in whatever order you want. Using this could you could create your own playback node which can play, pause and rewind. Alternatively you could play the bag file back in non-real time, so you could spend as long as you want processing a message without missing any of the following messages.

Hope this helps.

edit flag offensive delete link more
0

answered 2018-06-05 15:54:09 -0500

malharjajoo gravatar image

Hi,

I'm in a similar scenario, where I have recorded a ROS Bag and then want to use it but want to stop at some selected images, do some processing, then only proceed. Sadly, I don't see a way using ROS.

But you can do this -

  1. Play the ROS bag.
  2. convert it to a video using ROS video_recorder ( See this )
  3. Change your program (using something like openCV) to open the video file and using something like cv::waitKey(0) to pause the video from within your program.

Hope this helps.

edit flag offensive delete link more

Your Answer

Please start posting anonymously - your entry will be published after you log in or create a new account.

Add Answer

Question Tools

1 follower

Stats

Asked: 2017-01-07 11:34:28 -0500

Seen: 519 times

Last updated: Sep 20