from mcap.reader import make_reader
from mcap_ros2.decoder import DecoderFactory
from tqdm import tqdm
import pandas as pd
mcap_file = "hoge.mcap"
target_status_name = "hoge_monitor: hoge_monitor"
statuses = []
with open(mcap_file, "rb") as f:
reader = make_reader(f, decoder_factories=[DecoderFactory()])
for schema, channel, message, ros_msg in tqdm(reader.iter_decoded_messages(), dynamic_ncols=True):
if channel.topic != "/diagnostics":
continue
for status in ros_msg.status:
if status.name == target_status_name:
dic = {
"sec": ros_msg.header.stamp.sec,
"nanosec": ros_msg.header.stamp.nanosec,
"level": status.level,
"message": status.message,
"hardware_id": status.hardware_id
}
for value in status.values:
dic[value.key] = value.value
statuses.append(dic)
df = pd.DataFrame(statuses)