Post-processing analysis engine for ROS2 rosbag data
Project description
bagx
One command to check if your rosbag data is ready — for SLAM, Nav2, Autoware, or MoveIt.
pip install bagx
bagx eval your_bag.db3
bagx analyzes your rosbag and gives you:
- Exact IMU noise values to paste into your SLAM config
- Sync delay warnings so you know when to enable deskew
- "Use LiDAR-only" when your IMU is too noisy for LIO
The problem
You recorded a rosbag. You run SLAM. It diverges. Now you spend hours asking:
- "Is my IMU noise too high for LIO?" →
bagx evaltells you - "What noise value should I set in the SLAM config?" → bagx gives you the exact number
- "Are my LiDAR and IMU actually synchronized?" →
bagx syncshows the delay - "Where did the data quality drop?" →
bagx anomalypinpoints the exact timestamp - "Which of my 10 bags is the best for benchmarking?" →
bagx batch evalranks them all - "Is my odometry fast enough for Nav2?" → bagx checks rate and warns if too slow
- "Are all Autoware sensing topics alive?" → bagx verifies camera, LiDAR, GNSS rates
Example: catching a real problem
$ bagx eval ouster_os0-32.db3
Overall Score: 76.6/100
Recommendations:
✔ IMU accel noise 0.087 m/s² — good for LIO, set imu_acc_noise_density to 0.087
⚠ IMU gyro noise 0.022 rad/s — consider lowering IMU integration weight
⚠ IMU rate 50Hz is low — 200Hz+ recommended for tightly-coupled LIO
⚠ LiDAR↔IMU sync delay 23ms — enable per-point deskew in SLAM
Without bagx, you'd discover these issues after hours of failed SLAM runs.
Install
pip install bagx
Works without ROS2 — reads .db3 files directly via SQLite.
Commands
| Command | One-liner |
|---|---|
bagx eval bag.db3 |
Is this bag ready? Auto-detects SLAM / Nav2 / Autoware / MoveIt |
bagx compare A.db3 B.db3 |
Which sensor config is better? |
bagx sync bag.db3 /imu /lidar |
Are my sensors synchronized? |
bagx anomaly bag.db3 |
Where did sensor quality drop? |
bagx scenario bag.db3 |
Find GNSS-lost and high-dynamics segments |
bagx export bag.db3 --ai |
Export to Parquet/JSON for ML |
bagx batch eval *.db3 --csv |
Rank an entire dataset |
bagx ask bag.db3 "question" |
Ask questions via LLM |
Tested on public datasets
| Dataset | IMU | Sync | Score | Insight |
|---|---|---|---|---|
| Newer College | 84 | 100 | 92 | Best data, ideal for SLAM benchmarking |
| Livox MID-360 | 97 | 70 | 84 | Great IMU, but 25ms sync — needs deskew |
| NTU VIRAL | 60 | 100 | 80 | IMU too noisy for LIO, use LiDAR-only |
| Ouster OS0-32 | 80 | 74 | 77 | 50Hz IMU too slow, add external IMU |
Auto-detects your framework
bagx recognizes topic patterns and gives framework-specific advice:
$ bagx eval nav2_robot.db3
Nav2 topics detected
✔ Odometry (/odom) at 50Hz — good for Nav2
⚠ LaserScan (/scan) at 5Hz — 10Hz+ recommended for costmap updates
⚠ cmd_vel at 8Hz — control loop may be too slow
$ bagx eval autoware_vehicle.db3
Autoware topics detected
✔ LiDAR (/sensing/lidar/points) at 10Hz
✔ Camera (/sensing/camera/image) at 30Hz
✔ GNSS (/sensing/gnss/fix)
$ bagx eval moveit_arm.db3
MoveIt topics detected
✔ JointState (/joint_states) at 500Hz — good for motion planning
Links
Project details
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
File details
Details for the file bagx-0.1.3.tar.gz.
File metadata
- Download URL: bagx-0.1.3.tar.gz
- Upload date:
- Size: 65.5 kB
- Tags: Source
- Uploaded using Trusted Publishing? Yes
- Uploaded via: twine/6.1.0 CPython/3.13.7
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
ec251e6424f6663dd7e1794c104629c415eb7d6bced8f34183481a058333c700
|
|
| MD5 |
990c794277bc4e8f557354b9ca5e3d33
|
|
| BLAKE2b-256 |
935efa74137a1d5277d80542a505c68204ab6626de749c327601391e342f9b71
|
Provenance
The following attestation bundles were made for bagx-0.1.3.tar.gz:
Publisher:
publish.yml on rsasaki0109/bagx
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
bagx-0.1.3.tar.gz -
Subject digest:
ec251e6424f6663dd7e1794c104629c415eb7d6bced8f34183481a058333c700 - Sigstore transparency entry: 1170482653
- Sigstore integration time:
-
Permalink:
rsasaki0109/bagx@09ef3f65a8080c61cf0c6b2de47afbf99706f247 -
Branch / Tag:
refs/tags/v0.1.3 - Owner: https://github.com/rsasaki0109
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
publish.yml@09ef3f65a8080c61cf0c6b2de47afbf99706f247 -
Trigger Event:
push
-
Statement type:
File details
Details for the file bagx-0.1.3-py3-none-any.whl.
File metadata
- Download URL: bagx-0.1.3-py3-none-any.whl
- Upload date:
- Size: 45.6 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? Yes
- Uploaded via: twine/6.1.0 CPython/3.13.7
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
a1330fd0f2c2c6702547a0c23e0fc756b7ea6e516cc3d991a070184b3990a5c2
|
|
| MD5 |
ab91b602a54bf8685e3badd06d32874f
|
|
| BLAKE2b-256 |
c8e8eb6df5e108520afa602855001200b38bfcabda07753177418f97d20f0eba
|
Provenance
The following attestation bundles were made for bagx-0.1.3-py3-none-any.whl:
Publisher:
publish.yml on rsasaki0109/bagx
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
bagx-0.1.3-py3-none-any.whl -
Subject digest:
a1330fd0f2c2c6702547a0c23e0fc756b7ea6e516cc3d991a070184b3990a5c2 - Sigstore transparency entry: 1170482691
- Sigstore integration time:
-
Permalink:
rsasaki0109/bagx@09ef3f65a8080c61cf0c6b2de47afbf99706f247 -
Branch / Tag:
refs/tags/v0.1.3 - Owner: https://github.com/rsasaki0109
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
publish.yml@09ef3f65a8080c61cf0c6b2de47afbf99706f247 -
Trigger Event:
push
-
Statement type: