Skip to main content

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

Project description

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}")

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)

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

mcap_ros2_support_fast-0.5.0.tar.gz (17.5 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.5.0-py3-none-any.whl (23.2 kB view details)

Uploaded Python 3

File details

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

File metadata

  • Download URL: mcap_ros2_support_fast-0.5.0.tar.gz
  • Upload date:
  • Size: 17.5 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: uv/0.11.19 {"installer":{"name":"uv","version":"0.11.19","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.5.0.tar.gz
Algorithm Hash digest
SHA256 559babb771abaa9a77516e448c4c54df9efc4fbdafe79e2a9a5e2a09f7d038f4
MD5 45bee75e2ff322f2ef2b2af02ff4a1d6
BLAKE2b-256 9030572cf0a4bd567ff2f5c2693a2579473bcff6a258b54bc88ca7d03a824649

See more details on using hashes here.

File details

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

File metadata

  • Download URL: mcap_ros2_support_fast-0.5.0-py3-none-any.whl
  • Upload date:
  • Size: 23.2 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: uv/0.11.19 {"installer":{"name":"uv","version":"0.11.19","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.5.0-py3-none-any.whl
Algorithm Hash digest
SHA256 c01cd2655c6467def30aa32003c9c85905e1cf99850fa2389ee97ca8aff39875
MD5 684dd9649180a414ef2d5cc368353d09
BLAKE2b-256 cbbba8e6a30ef939dc64a73db8b40ca184e6cc49e04ea34fd75d119c78725d35

See more details on using hashes here.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page