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

rosbag reverse

asked 2011-10-05 11:48:59 -0500

Kyle Strabala gravatar image

updated 2014-01-28 17:10:30 -0500

ngrennan gravatar image

In the C++ API for rosbag, you can open a rosbag and then step forwards through messages using the following loop (taken from the rosbag API website):

BOOST_FOREACH(rosbag::MessageInstance const m, view)

Is there a way to reverse through the messages?

I have tried the following:

for(rosbag::View::iterator iter = view.end(); iter != view.begin(); --iter)

but the compiler complains that ‘class rosbag::View::iterator’ has no member named ‘decrement’

I tried to add a "decrement" function to view.h/cpp in the rosbag API based on the "increment" function, but my C++ isn't good enough to figure out what is going on.

Any suggestions? Thanks, Kyle.

edit retag flag offensive close merge delete

1 Answer

Sort by » oldest newest most voted
5

answered 2011-10-05 14:31:30 -0500

Kyle Strabala gravatar image

I found a workaround that works for me. Still, I wish there was a decrement function to step through the messages.

#include <rosbag/bag.h>
#include <rosbag/view.h>
#include <rosbag/query.h>

...

// Open rosbag file
rosbag::Bag input_bag;
input_bag.open(input_bag_path.c_str(), rosbag::bagmode::Read);

// Setup View
std::vector<std::string> topics;
topics.push_back(image_topic_name);
rosbag::View view(input_bag, rosbag::TopicQuery(topics));

// Make a vector with instances of the View::iterator class pointing to each message
std::vector<rosbag::View::iterator> iters;
for(rosbag::View::iterator iter = view.begin(); iter != view.end(); ++iter)
{
    rosbag::View::iterator new_iter(iter);
    iters.push_back( new_iter );
}

// Reverse iterate through the message pointers
for(std::vector<rosbag::View::iterator>::reverse_iterator r_iter = iters.rbegin(); r_iter != iters.rend(); ++r_iter)
{
    sensor_msgs::Image::ConstPtr image_msg = (*(*r_iter)).instantiate<sensor_msgs::Image>();
    ...
}
edit flag offensive delete link more

Question Tools

Stats

Asked: 2011-10-05 11:48:59 -0500

Seen: 3,345 times

Last updated: Jan 28 '14