更新时间:2025-02-20 GMT+08:00
分享

Rosbag转OpenData作业(数据回放)

作业输入输出规范

用户完成自定义Rosbag转OpenData算子创建,运行作业容器时Octopus平台向其中注入以下环境变量:

  • rosbag_path: 作为数据源的rosbag存放路径,例如/tmp/data/20220620.bag
  • yaml_path: 启动数据收集任务的yaml文件路径,例如/tmp/Octopus_data_collections.yaml
  • output_dir: rosbag数据包作业运行结果输出目录,例如/tmp/output
  • tmp_dir: 供用户存储作业临时文件的目录,例如/tmp/workspace

用户的作业容器需要解析rosbag,并将转换结果输出到output目录,结果示例如下:

图1 output目录

每个传感器提取的数据保存在单独的文件夹,其中camera和lidar传感器提取的样本文件必须以时间戳命名。任务结束标志文件,_SUCEESS或_FAILURE分别代表任务成功或失败。opendata_to_platform.yaml文件以yaml格式记录该OpenData数据包的元数据,格式如下:

图2 文件格式

sensor_type字段标识传感器类型,可取以下值:camera、lidar、gnss、vehicle、ego_tf、object_array_vision、traffic_light_matched、tag_record、planning_trajectory、predicted_objects、control、routing_path、localization_visualization。具体定义参考数据包格式

图3 示例opendata_to_platform.yaml文件内容

示例代码

以下为主程序文件ros2opendata.py中截取的代码片段,分别运行不同的功能,详见注释。

图4 运行前准备
图5 解析点云消息
图6 解析gnss消息
图7 写opendata_to_platform.yaml文件

构建镜像

Octopus平台依赖算子镜像内的/bin/bash、stdbuf、tee软件,请确保基础镜像内包含上述软件且能通过PATH找到。

  1. Dockerfile示例
    图8 示例

    启动命令:

    python3 /home/main/ros2opendata.py --lidar_calibration_id 5
  2. 构建镜像

    运行命令:

    docker build -f dockerfile -t rosbag2opendata:0.1 .
  3. 本地调试

    准备一个待处理的rosbag,如~/data/20220620.bag,一个示例Octopus_data_collections文件,如~/data/Octopus_data_collections.yaml运行如下命令(基于上述示例镜像):

    docker run -v ${HOME}/data/20220620.bag:/tmp/data/20220620.bag -v 
    ${HOME}/tmp/output:/tmp/output -v ${HOME}/data/Octopus_data_collections.yaml:/tmp/Octopus_data_collections.yaml --env output_dir=/tmp/output --env rosbag_path=/tmp/data/20220620.bag --env yaml_path=/tmp/Octopus_data_collections.yaml --env tmp_dir=/tmp/workspace rosbag2opendata:0.1 /bin/sh -c “/home/main/ros2opendata.py --lidar_calibration_id 5”

    完成后在${HOME}/tmp/output目录查看运行结果文件:

    图9 运行结果

相关文档