Skip to main content

mcap-ros2-support-fast

High-performance pure Python ROS2 message serialization and deserialization for MCAP files.

No dependencies on ROS2 or a ROS2 environment.

Installation

uv add mcap-ros2-support-fast

Usage

Decoding Messages

from small_mcap import read_message_decoded
from mcap_ros2_support_fast.decoder import DecoderFactory

decoder_factory = DecoderFactory()

with open("recording.mcap", "rb") as f:
    for msg in read_message_decoded(f, decoder_factories=[decoder_factory]):
        print(f"{msg.channel.topic}: {msg.decoded_message}")

For a schema constant such as uint8 STATE_ACTIVE=1, decoded messages expose the same read-only class and instance access used by ROS2 Python messages:

message = msg.decoded_message
assert type(message).STATE_ACTIVE == 1
assert message.STATE_ACTIVE == 1

Constants are metadata and are not serialized as message fields.

Encoding Messages

from small_mcap import McapWriter
from mcap_ros2_support_fast import ROS2EncoderFactory

encoder_factory = ROS2EncoderFactory()

with open("output.mcap", "wb") as f:
    writer = McapWriter(f, encoder_factory=encoder_factory)
    writer.start(profile="ros2")

    schema_id = 1
    writer.add_schema(
        schema_id,
        "geometry_msgs/msg/Point",
        "ros2msg",
        b"float64 x\nfloat64 y\nfloat64 z",
    )
    channel_id = 1
    writer.add_channel(channel_id, "/point", "cdr", schema_id)

    point = {"x": 1.0, "y": 2.0, "z": 3.0}
    writer.add_message_encode(channel_id, log_time=0, data=point, publish_time=0)

    writer.finish()

Benchmarks

Median runtime from the non-slow pytest-benchmark suite on the included nuScenes dataset (data/data/nuScenes-v1.0-mini-scene-0061-ros2.mcap, 30,900 messages).

Read Performance

Messages mcap-ros2-support-fast rosbags pybag mcap-ros2
10 5.46 ms 7.47 ms 25.56 ms 365.70 ms
100 36.44 ms 67.04 ms 110.68 ms 1324.51 ms
1000 127.68 ms 234.15 ms - 4210.95 ms

Note: pybag is skipped at 1000 messages because it cannot decode diagnostic_msgs/DiagnosticArray.

Read Summary (median time):

  • 33-67x faster than reference mcap-ros2
  • 1.37-1.84x faster than rosbags
  • 3.04-4.68x faster than pybag (10-100 msgs; pybag skipped at 1000 due to decoder limitations)

Write Performance (Read + Write)

Messages mcap-ros2-support-fast rosbags pybag mcap-ros2
10 17.36 ms 18.33 ms 56.32 ms 928.81 ms
100 119.05 ms 129.59 ms 253.93 ms 3132.39 ms
1000 397.07 ms 460.15 ms - 9193.86 ms

Read+Write Summary (median time):

  • 23.2-53.5x faster than reference mcap-ros2
  • 1.06-1.16x faster than rosbags
  • 2.13-3.24x faster than pybag (10-100 msgs; pybag skipped at 1000 due to decoder limitations)

Write-Only Performance

Messages mcap-ros2-support-fast rosbags pybag mcap-ros2
10 11.34 ms 10.91 ms 30.67 ms 576.93 ms
100 66.75 ms 53.50 ms 104.61 ms 794.56 ms
1000 224.47 ms 177.82 ms - 1357.78 ms

Write-Only Summary (median time):

  • 6.0-50.9x faster than reference mcap-ros2
  • 0.96-1.26x similar to rosbags (rosbags remains slightly faster for write-only)
  • 1.57-2.71x faster than pybag (10-100 msgs; pybag skipped at 1000 due to decoder limitations)

Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

mcap_ros2_support_fast-0.7.0.tar.gz (17.7 kB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

mcap_ros2_support_fast-0.7.0-py3-none-any.whl (23.3 kB view details)

Uploaded Python 3

File details

Details for the file mcap_ros2_support_fast-0.7.0.tar.gz.

File metadata

  • Download URL: mcap_ros2_support_fast-0.7.0.tar.gz
  • Upload date:
  • Size: 17.7 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: uv/0.11.32 {"installer":{"name":"uv","version":"0.11.32","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":{"name":"Ubuntu","version":"24.04","id":"noble","libc":null},"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":true}

File hashes

Hashes for mcap_ros2_support_fast-0.7.0.tar.gz
Algorithm Hash digest
SHA256 3b0e8c92764904785638a3f464478461c8ab717a15bdbb9a58227142af1b0c94
MD5 1303d748b5382ae8d83b7eb643ea7140
BLAKE2b-256 7f83e537b862f43c38fa08c335939ebd49025813ccf8ab35425dd219e4e6bf00

See more details on using hashes here.

File details

Details for the file mcap_ros2_support_fast-0.7.0-py3-none-any.whl.

File metadata

  • Download URL: mcap_ros2_support_fast-0.7.0-py3-none-any.whl
  • Upload date:
  • Size: 23.3 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: uv/0.11.32 {"installer":{"name":"uv","version":"0.11.32","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":{"name":"Ubuntu","version":"24.04","id":"noble","libc":null},"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":true}

File hashes

Hashes for mcap_ros2_support_fast-0.7.0-py3-none-any.whl
Algorithm Hash digest
SHA256 2c9f106a070f7b5908e2f0fc055ea7040a3373fc235ccd3e42812b14c3cd23fb
MD5 48a7d053d6b95d21f539fb3f8d897fa6
BLAKE2b-256 11d87207c01634bb510c389f1dccce885f58636f254a64854511b85b65401701

See more details on using hashes here.

Release history Release notifications | RSS feed

0.8.0

2 files

This release

0.7.0 This release

2 files

0.6.0

2 files

0.5.0

2 files

0.4.0

2 files

0.3.0

2 files

0.2.0

2 files

0.1.2

2 files

0.1.0

2 files

Anthropic, PBC Visionary sponsor Bloomberg Visionary sponsor Hudson River Trading Visionary sponsor Meta Visionary sponsor NVIDIA Visionary sponsor Microsoft Sustainability sponsor Depot Continuous Integration AWS Cloud computing and Security Sponsor Datadog Monitoring Fastly CDN Google Download Analytics Sentry Error logging StatusPage Status page