BAG file utility for MEssage, Tf, and TIme.
Bagmetti is a collection of utility scripts for filtering and modifying existing bag files. You can use Bagmetti, for example, when:
rosbag record -atakes up too much storage and you want a more lightweight bag file with fewer topics
- you want to exclude certain TF transformations
- creating a bag file for only a certain time range
- you want to rename existing TF frame names
But what about...
Yes, there are existing alternatives, but sometimes they aren't good enough.
rosbag filter only accepts one argument for filtering messages.
The argument is a Python one-liner. When you have multiple topics and TF
transformations to consider, this becomes a huge string full of
rosbag filter also makes it harder to track down what was used for
filtering a certain bag file. Depending on your shell configuration the
command you executed can be lost, and even if you have the command history you may
not be able to tell what expression was used last. What's more, one-line
expressions are hard to read.
Bagmetti lets you manage filtering rules in a YAML file. Therefore, you could put it in the same directory as the bag file so that you can later look back at what was used to filter the original bag file.
rosbag play -s 42 -u 60 foo.bag
Problem: The format is
start time + delta
You can specify what time to start and how long to play instead of what time to end. Most of the times you know the start and end time of the section you want to cut out. In these cases it's more intuitive to specify the start and end time, and Bagmetti let's you do that.
rosbag play foo.bag some_topic:=new_topic_name
Problem: Can't rename TF transformations
You can rename topic names using the remapping command line arguments or
<remap from="some_topic" to="new_topic_name" /> in launch files. However,
you can't rename TF transformations with this method. Also, often times you
forget to do this, and it could be a pain in the neck to specify these
remapping arguments every time.
Filter in or out certain messages from a bag file and output to a different bag file.
rosrun bagmetti filter.py <bag file path> <output file path> <config file path>
Rename topic names and TF transformations.
rosrun bagmetti rename.py <bag file path> <output file path> <config file path>
Config File Format
Formats are different depending on what script you use (don't worry; they're really simple and written in YAML).
Also check out the sample config files.
- Unit tests
- Python expression feature for
topic: -: # Exclude if message matches the expression - name: /imu/data expr: msg.linear_acceleration.x < 1.5 - velodyne_points tf: +: # Include if transformation matches the expression - name: map -> odom expr: tf.translation.x > 0.5
Naoki Mizuno (firstname.lastname@example.org)