roboto.formats.mcap.reader
Module Contents
END_OF_STREAM
Sentinel returned by McapReader.next_decoded() when the stream is exhausted.
A decoded message value can legitimately be None (a JSON null payload), so exhaustion cannot be signaled with None without making a real null-valued message indistinguishable from end-of-stream. Callers test result is END_OF_STREAM to detect exhaustion and treat every other value – None included – as a delivered message.
McapEnvelopeTimestamp
Bases: NamedTuple
The pair of timestamps an MCAP message envelope carries.
Every MCAP message records two times in nanoseconds: 1. log_time, when the message was written to the file, and 2. publish_time, when its producer published it.
Both fields are math.inf when the reader is exhausted.
McapReader
Reader for processing MCAP files with field projection.
Provides an iterator interface for reading decoded messages from MCAP files, filtered by log time and optionally by topic, and projected to selected fields. Handles JSON, msgpack, and the ROS/CDR encodings (ros1msg / ros2msg / ros2idl / omgidl).
Parameters
stream IO[bytes]fields collections.start_time Optional[int]end_time Optional[int]log_time_order booltopic_name Optional[str]Properties
McapReader.field_paths
Get the path of each field being projected, in the order the fields were given at initialization.
Returns
One tuple per field, its path_in_schema:
the path components from the schema root to the field.
McapReader.has_next
Check if there are more messages available to read.
Returns
True if there are more messages to read, False otherwise.
McapReader.next()
Read and return the next decoded message.
Advances the reader to the next message and returns it as a DecodedMessage object, or None if no more messages are available.
Returns
DecodedMessage containing the next message data, or None if no more messages.
Usage
while reader.has_next:
message = reader.next()
if message:
data = message.to_dict()
print(f"Message at {data.get('log_time')}: {data}")McapReader.next_decoded()
Read and return the next message’s raw decoded value, advancing the reader.
The raw value is what the format decoder produced – a dict for JSON-encoded messages, and nested dict / sequence / scalar values for ROS/CDR encodings – with no projection applied. Callers that want projected dictionary output use next() and DecodedMessage.to_dict() instead.
A decoded value of None is a real message (a JSON null payload) and is delivered as such. Exhaustion is signaled with the dedicated END_OF_STREAM sentinel instead, so callers must test result is END_OF_STREAM rather than result is None to detect the end.
Returns
The decoded message value, or END_OF_STREAM if no more messages are available.
Properties
McapReader.next_envelope_timestamp
Get the envelope timestamps of the next message to be read.
Returns
The next message’s log_time and publish_time in nanoseconds, or both math.inf if no more messages.
McapReader.next_message_is_time_aligned()
Check if the next message has the specified timestamp.
Used for time-aligned reading when merging data from multiple readers.
Parameters
timestamp Union[int, float]Timestamp to check against in nanoseconds.
Returns
True if the next message has the specified timestamp, False otherwise.