greenhouse/rosbags/docs/examples/save_images_rosbag2.py
apoorva 0c9504b343 Add 'rosbags/' from commit 'c80625df279c154c6ec069cbac30faa319755e47'
git-subtree-dir: rosbags
git-subtree-mainline: 48df1fbdf4490f3cbfa3267c998d1a0fc98378ca
git-subtree-split: c80625df279c154c6ec069cbac30faa319755e47
2023-03-28 18:21:08 +05:30

44 lines
1.3 KiB
Python

"""Save multiple images in rosbag2."""
import numpy
from rosbags.rosbag2 import Writer
from rosbags.serde import serialize_cdr
from rosbags.typesys.types import builtin_interfaces__msg__Time as Time
from rosbags.typesys.types import sensor_msgs__msg__CompressedImage as CompressedImage
from rosbags.typesys.types import std_msgs__msg__Header as Header
TOPIC = '/camera'
FRAMEID = 'map'
# Contains filenames and their timestamps
IMAGES = [
('homer.jpg', 42),
('marge.jpg', 43),
]
def save_images() -> None:
"""Iterate over IMAGES and save to output bag."""
with Writer('output') as writer:
conn = writer.add_connection(TOPIC, CompressedImage.__msgtype__, 'cdr', '')
for path, timestamp in IMAGES:
message = CompressedImage(
Header(
stamp=Time(
sec=int(timestamp // 10**9),
nanosec=int(timestamp % 10**9),
),
frame_id=FRAMEID,
),
format='jpeg', # could also be 'png'
data=numpy.fromfile(path, dtype=numpy.uint8),
)
writer.write(
conn,
timestamp,
serialize_cdr(message, message.__msgtype__),
)