Utilities for efficient reading of ROS bag files.
Example
use rosbag::{RosBag, Record};
let bag = RosBag::new(path).unwrap();
// create low-level iterator over rosbag records
let mut records = bag.records();
// acquire `BagHeader` record, which should be first one
let header = match records.next() {
Some(Ok(Record::BagHeader(bh))) => bh,
_ => panic!("Failed to acquire bag header record"),
};
// get first `Chunk` record and iterate over `Message` records in it
for record in &mut records {
match record? {
Record::Chunk(chunk) => {
for msg in chunk.iter_msgs() {
println!("{}", msg?.time)
}
break;
},
_ => (),
}
}
// jump to index records
records.seek(header.index_pos).unwrap();
for record in records {
println!("{:?}", record?);
}