A Python library to read and parse ROS 2 MCAP bag files without a ROS 2 runtime.
Project description
mcap-ros2idl-support
A Python library to read and parse ROS 2 MCAP bag files without a ROS 2 runtime. It extracts schemas from rosbag2 messages and decodes their CDR payloads.
Features
- Read-only parsing of MCAP/rosbag2 files without needing a ROS 2 runtime
- Treats each struct as a Python
dictinstead of generating dynamic classes
Project structure
The repository is organized as follows:
mcap_ros2idl_support/– core Python packagecdr/– helpers for reading and writing CDR streamsros2idl_parser/– parser forros2idlschema definitionsrosmsg/– parser for classic.msgmessage definitionsrosmsg2_serialization/– utilities for decoding CDR payloads into dictionariesdecode_factory.py– integrates parsers and CDR readers with the MCAP decoder
examples/– example CLI demonstrating how to iterate decoded messagestests/– unit tests for the library
Installation
Requires Python ≥3.10.
Install the Python package:
pip install .
Development
-
Create and activate a virtual environment:
python -m venv .venv source .venv/bin/activate
-
Install project and development dependencies:
pip install -e '.[dev]'
-
Build the Rust Python bindings using
maturin:maturin develop --manifest-path rust/mcap-rs/Cargo.toml
-
Install and run
pre-commit:pre-commit install pre-commit run --files <file> [<file> ...]
To check the entire repository, use:
pre-commit run --all-files
-
Run tests with
pytest:pytest
Usage
python examples/cli.py --mcap-file sample.mcap
Use the --enum-as-string flag to return enumeration values as strings:
python examples/cli.py --mcap-file sample.mcap --enum-as-string
Building the wheel
-
Clean old artifacts:
rm -rf dist
-
Install the build backend:
python -m pip install --upgrade build
-
Build the wheel:
python -m build
-
(Optional) Verify the wheel locally:
python -m pip install dist/mcap_ros2idl_support-<version>-py3-none-any.whl
-
(Optional) Upload to PyPI:
python -m pip install --upgrade twine python -m twine upload dist/*
Design notes
- Uses Foxglove’s
@foxglove/ros2idl-parserto handle.idlfiles in addition to classic.msgdefinitions. - Only reading is supported; writing MCAP files is out of scope.
- Enumerations defined in IDL can be returned as their string values by
enabling
enum_as_string. - The goal is to enable parsing MCAP bags without any ROS 2 dependencies to make offline analysis easier.
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 mcap_ros2idl_support-0.1.0.tar.gz.
File metadata
- Download URL: mcap_ros2idl_support-0.1.0.tar.gz
- Upload date:
- Size: 35.7 kB
- Tags: Source
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.1.0 CPython/3.10.12
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
058a3dcaceabbd85d81bf86859c5340bda1ab0ddfd639fcf0d44d687ce4bd13a
|
|
| MD5 |
98e173471ebfd041d9591bb804e33c7a
|
|
| BLAKE2b-256 |
f2006ee484f74413fe5f50bd4a2abe36190a989808038558072ee66d45bbd995
|
File details
Details for the file mcap_ros2idl_support-0.1.0-py3-none-any.whl.
File metadata
- Download URL: mcap_ros2idl_support-0.1.0-py3-none-any.whl
- Upload date:
- Size: 43.6 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.1.0 CPython/3.10.12
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
c243ff7e665c75eb6cbc8f82b7485c928bf539107bfca6494ceb36c018ee3c34
|
|
| MD5 |
2a1cfd6d167e11b2d35cc4bbe0831030
|
|
| BLAKE2b-256 |
a00b84f030b1316323912cb9fdf9433a534fd51344c5ac720853af880ebf8583
|