#python #camera #synchronization #ros #lidar
#питон #камера #синхронизация #розенкранц #лидар
Вопрос:
У меня есть 2 пакета с данными, один с данными камеры, другой с данными лидара, и я хочу синхронизировать темы, перечисленные ниже, чтобы получить что-то вроде набора данных китти.
Темы | Типы | Количество сообщений | Частота |
---|---|---|---|
/os_cloud_node/точки | sensor_msgs/PointCloud2 | 3111 | 20.115842 |
/cam/realsense_d435_1/цвет/изображение | sensor_msgs/Изображение | 1488 | 12.216965 |
Я попытался синхронизировать данные с помощью частоты (сценарии ниже). Я знаю, что мое упрощение сильно искажает результат этих операций, и мои данные очень быстро расходятся.
Как я должен сделать это правильно, используя метки времени? Я действительно не знаю, как их сравнивать, когда они появляются с разной частотой и в очень малых количествах.
camera_loader.py
import rosbag from helper import convert2image bag = rosbag.Bag('data/cam2.bag') print("# File content:") print(bag.get_type_and_topic_info()) messages = bag.read_messages(topics=["/cam/realsense_d435_1/color/image_raw"]) name=0 for msg in messages: tittle="raw_images/" f"{name:06d}" ".png" name=name 1 print(tittle) i =convert2image(msg.message) i.save(tittle)
lidar_loader.py
import rosbag import open3d as o3d from helper import convert2pointcloud bag = rosbag.Bag('data/lidar2.bag') print("# File content:") print(bag.get_type_and_topic_info()) messages = bag.read_messages(topics=["/os_cloud_node/points"]) name=0 counter=0 for msg in messages: if counter % 2 == 0: tittle = "lidar_points/" f"{name:06d}" ".pcd" print(tittle) name = name 1 pcd = convert2pointcloud(msg) o3d.io.write_point_cloud(tittle, pcd, write_ascii=False, compressed=False, print_progress=False) counter=counter 1