Как читать данные из rosbag2 в ros2 - PullRequest
2 голосов
/ 18 февраля 2020

Я пишу программу для чтения данных из rosbag напрямую, без воспроизведения в ros2. Пример кода приведен ниже. Целью этого кода является то, что он проверяет наличие ros2 topi c и получает только сообщение в этой топике c. Я не могу получить данные из сумки. При печати консоль печатает шестнадцатеричные значения.

auto read_only_storage = factory.open_read_only(bag_file_path, storage_id);
while(read_only_storage->has_next())
{
    auto msg = read_only_storage->read_next();
    if(msg->topic_name == topic)
    {
        cout << msg->serialized_data<<endl;
    }
}

Любая помощь в этом отношении была бы полезна.

1 Ответ

1 голос
/ 13 марта 2020

Вы должны десериализовать данные "msg-> serialized_data". Если вы используете сериализованный формат данных "cdr", пожалуйста, посмотрите код ниже.

    // deserialization and conversion to ros message
    my_pkg::msg::Msg msg;
    auto ros_message = std::make_shared<rosbag2_introspection_message_t>();
    ros_message->time_stamp = 0;
    ros_message->message = nullptr;
    ros_message->allocator = rcutils_get_default_allocator();
    ros_message->message = &msg;
    auto type_support = rosbag2::get_typesupport("my_pkg/msg/Msg", "rosidl_typesupport_cpp");

    rosbag2::SerializationFormatConverterFactory factory;
    std::unique_ptr<rosbag2::converter_interfaces::SerializationFormatDeserializer> cdr_deserializer_;
    cdr_deserializer_ = factory.load_deserializer("cdr");

    cdr_deserializer_->deserialize(msg, type_support, ros_message);

Полный код: https://github.com/Kyungpyo-Kim/ROS2BagFileParsing

...