
# 消息topic格式规范
 #### Vehicle
对于车辆自身基本数据录制的消息格式，需遵循一定规范，其中部分字段为必选，其他请根据实际需要自由选取。
表1vehicle消息格式规范 
| 格式名称        | 说明   |
|:---|:---|
| VehicleInfo | 车辆信息 |
   
![](https://support.huaweicloud.com/usermanual-octopus/public_sys-resources/notice_3.0-zh-cn.png)
消息格式中部分参数为必选，如使用该数据类型，则不可缺少该参数字段，否则会导致数据上传Octopus平台失败。
```
/***********************************
    content: Octopus 输入数据格式
    version: 0.1
************************************/
syntax = "proto3";
package Octopusdata;
message VehicleFrame {
uint64 stamp_secs = 1;                    #必选。时间戳，单位：秒
uint64 stamp_nsecs = 2;                   #必选。时间戳，单位：纳秒
uint32 autonomy_status = 3;               #非必选。自动驾驶状态
sint32 gear_value = 4;                    #必选。只应从枚举常量中赋值
float vehicle_speed = 5;                  #必选。行驶速度，如果齿轮是倒挡，值为负。
float steering_angle = 6;                 #必选。转向，以角度表示。顺时针或向右为正，0为垂直或直角。
float yaw_rate = 7;                      #Unit: deg/s
float interior_temperature = 8;          #Unit: Celsius
float outside_temperature = 9;           #Unit: Celsius
float brake = 10;                        #必选。刹车制动按压百分比 （0代表不按，1代表完全按下）。
        uint64 timestamp = 11;                     #必选。时间戳。              
int32 turn_left_light=12;                  #必选。左转灯。
int32 turn_right_light=13;                 #必选。右转灯。
float longitude_acc=14;                    #必选。纵向加速度。
float lateral_acc=15;                      #必选。横向加速度。
       
}
message VehicleInfo {
    repeated VehicleFrame vehicle_info = 1;
}
```
 #### Camera
采集的camera数据通过转换工具可以保存为".jpg"图片数据。
 #### Lidar
采集的点云数据通过转换工具可以保存为标准的pcd格式数据。
 #### Gnss
对于卫星导航系统数据录制的消息格式，需遵循一定规范，其中部分字段为必选，其他请根据实际需要自由选取。
表2gnss消息格式规范 
| 格式名称       | 说明   |
|:---|:---|
| GnssPoints | GPS点 |
   
![](https://support.huaweicloud.com/usermanual-octopus/public_sys-resources/notice_3.0-zh-cn.png)
消息格式中部分字段为必选，如使用该数据类型，则不可缺少该参数字段，否则会导致数据上传Octopus平台失败。
```
/***********************************
    content: Octopus 输入数据格式
    version: 1.0
************************************/
syntax = "proto3";
package Octopusdata;
message GnssPoint {
uint64 stamp_secs = 1;     #必选。时间戳，单位：秒
uint64 stamp_nsecs = 2;    #必选。时间戳，单位：纳秒
        float latitude = 3;        #必选。纬度
        float longitude = 4;       #必选。经度
        float elevation = 5;       #必选。海拔高度，单位：米
        uint64 timestamp = 6;      #必选。时间戳
}
message GnssPoints {
    repeated GnssPoint gnss_points = 1;
}
```
 #### Radar
雷达采集的点云数据通过转换工具可以保存为标准的pcd格式数据。
 #### Ego_tf
对于自车角度位置数据录制的消息格式，需遵循一定规范，其中部分字段为必选，其他请根据实际需要自由选取。
表3ego_tf消息格式规范 
| 格式名称             | 说明   |
|:---|:---|
| LocalizationInfo | 主车信息 |
   
![](https://support.huaweicloud.com/usermanual-octopus/public_sys-resources/notice_3.0-zh-cn.png)
消息格式中部分字段为必选，如使用该数据类型，则不可缺少该参数字段，否则会导致数据上传Octopus平台失败。
```
/***********************************
    content: Octopus 输入数据格式
    version: 1.0
************************************/
syntax = "proto3";
package Octopusdata;
message LocalizationInfoFrame {
uint64 timestamp = 1;                    #必选。时间戳。
uint64 stamp_secs = 2;                   #必选。时间戳，单位：秒
uint64 stamp_nsecs = 3;                  #必选。时间戳，单位：纳秒
float pose_position_x = 4;               #必选。自车x轴坐标
        float pose_position_y = 5;               #必选。自车y轴坐标    
        float pose_position_z = 6;               #必选。自车z轴坐标
float pose_orientation_x = 7;            #必选。自车四元数x值
        float pose_orientation_y = 8;            #必选。自车四元数y值
        float pose_orientation_z = 9;            #必选。自车四元数z值
float pose_orientation_w = 10;           #必选。自车四元数w值
float pose_orientation_yaw=11;           #必选。朝向角，单位：rad
float velocity_linear=12;                #必选。速度，单位：m/s
float velocity_angular=13;               #必选。角速度，单位：rad/s
float acceleration_linear=14;            #必选。加速度，单位：m^2/s
float acceleration_angular=15;           #必选。角加速度，单位：rad^2/s
}
message LocalizationInfo {
    repeated LocalizationInfoFrame localization_info = 1;
}
```
 #### Object_array_vision
对于目标推理数据录制的消息格式，需遵循一定规范，其中部分字段为必选，其他请根据实际需要自由选取。
表4object_array_vision消息格式规范 
| 格式名称          | 说明   |
|:---|:---|
| TrackedObject | 感知目标 |
   
![](https://support.huaweicloud.com/usermanual-octopus/public_sys-resources/notice_3.0-zh-cn.png)
消息格式中部分字段为必选，如使用该数据类型，则不可缺少该参数字段，否则会导致数据上传Octopus平台失败。
```
/***********************************
    content: Octopus 输入数据格式
    version: 1.0
************************************/
syntax = "proto3";
package Octopusdata;
message Object {
uint64 id = 1;                       #必选。目标推理数据object数组id
string label = 2;                    #必选。标记物体类型
float pose_position_x = 3;           #必选。目标物x轴坐标
        float pose_position_y = 4;           #必选。目标物y轴坐标
        float pose_position_z = 5;           #必选。目标物z轴坐标
float pose_orientation_x = 6;        #必选。目标物四元数x值
        float pose_orientation_y = 7;        #必选。目标物四元数y值
        float pose_orientation_z = 8;        #必选。目标物四元数z值
float pose_orientation_w = 9;        #必选。目标物四元数w值
float pose_orientation_yaw = 10;     #必选。朝向角，单位：rad
float dimensions_x = 11;             #必选。目标物x方向尺寸（长）
float dimensions_y = 12;             #必选。目标物y方向尺寸（宽）
float dimensions_z = 13;             #必选。目标物z方向尺寸（高）
float speed_vector_linear_x = 14;    #必选。目标物x方向速度
        float speed_vector_linear_y = 15;    #必选。目标物y方向速度
        float speed_vector_linear_z = 16;    #必选。目标物z方向速度
        float relative_position_x = 17;      #必选。目标物相对于主车x方向位置
        float relative_position_y = 18;      #必选。目标物相对于主车y方向位置
        float relative_position_z = 19;      #必选。目标物相对于主车z方向位置
}
message TrackedObjectFrame {
uint64 timestamp = 1;                #必选。时间戳
uint64 stamp_secs = 2;               #必选。时间戳，单位：秒
uint64 stamp_nsecs = 3;              #必选。时间戳，单位：纳秒
repeated Object objects = 4;         #必选。object数组
}
message TrackedObject {
    repeated TrackedObjectFrame tracked_object = 1;
}
```
 #### Tag_record
对于标签记录数据录制的消息格式，需遵循一定规范，其中部分字段为必选，其他请根据实际需要自由选取。
表5tag_record消息格式规范 
| 格式名称             | 说明   |
|:---|:---|
| ScenarioSegments | 场景片段 |
   
```
/***********************************
    content: Octopus 输入数据格式
    version: 1.0
************************************/
syntax = "proto3";
package Octopusdata;
message ScenarioSegment {
 uint32 scenario_id = 1;                 #必选。场景id
 string source = 2;                      #必选。片段的来源
 uint64 start = 3;                       #必选。片段的开始时间（时间戳）
 uint64 end = 4;                         #必选。片段的结束时间（时间戳）
}
message ScenarioSegments {
 repeated ScenarioSegment segments = 1;
}
```
 #### Control
对于控制数据的消息格式，需遵循一定规范，其中部分字段为必选，其他请根据实际需要自由选取。
表6control消息格式规范 
| 格式名称           | 说明   |
|:---|:---|
| ControlCommand | 控制命令 |
   
```
/***********************************
    content: Octopus 输入数据格式
    version: 1.0
************************************/
syntax = "proto3";
package Octopusdata;
message CommandFrame {
    uint64 stamp_secs = 1;
    uint64 stamp_nsecs = 2;
    uint64 timestamp = 3;                        #必选，时间戳
    float acceleration=4;                        #必选，加速度值
    float front_wheel_angle=5;                   #必选，方向盘转角
    int32 gear=6;
}
message ControlCommand {
     repeated CommandFrame command_frame = 1;
}
```
 #### Predicted_objects
对于预测路径数据的消息格式，需遵循一定规范，其中部分字段为必选，其他请根据实际需要自由选取。
表7predicted_objects消息格式规范 
| 格式名称                | 说明    |
|:---|:---|
| PredictionObstacles | 预测障碍物 |
   
```
/***********************************
    content: Octopus 输入数据格式
    version: 1.0
************************************/
syntax = "proto3";
package Octopusdata;
message PathPoint {
    float x = 1;          #必选，预测轨迹点x坐标
    float y = 2;          #必选，预测轨迹点y坐标
    float z = 3;          #必选，预测轨迹点z坐标
    float theta = 4;
    float kappa = 5;
    int32 lane_id= 6;
    float v=7;
    float a=8;
    float relative_time=9;
}
message PredictionTrajectory {
   repeated PathPoint path_point = 1;   #必选，预测轨迹多个点
}
message Obstacle {
    uint64 obstacle_timestamp = 1; 
    int32 id=2;                 #必选，预测目标的id
    float x = 3;  #非必选，预测目标的x坐标
    float y = 4;  #非必选，预测目标的y坐标
    float z = 5;  #非必选，预测目标的z坐标
    repeated PredictionTrajectory prediction_trajectory = 6;   #必选，预测目标的多条轨迹
}
message PerceptionObstacle {
   uint64 stamp_secs = 1;
   uint64 stamp_nsecs = 2;
   uint64 timestamp = 3;   #必选，预测目标的时间戳
   repeated Obstacle obstacle_info= 4;  #必选，多个目标的预测信息
}
message PredictionObstacles {
   repeated PerceptionObstacle perception_obstacle= 4;  #必选，多条帧数据
}
```
 #### Planning_trajectory
对于规划路径数据的消息格式，需遵循一定规范，其中部分字段为必选，其他请根据实际需要自由选取。
表8planning_trajectory消息格式规范 
| 格式名称           | 说明   |
|:---|:---|
| PlanTrajectory | 规划路径 |
   
```
/***********************************
    content: Octopus 输入数据格式
    version: 1.0
************************************/
syntax = "proto3";
package Octopusdata;
message TrajectoryPoint {
    float x = 1;   #必选，轨迹点x坐标
    float y = 2;   #必选，轨迹点y坐标
    float z = 3;   #必选，轨迹点z坐标
    float theta = 4;
    float kappa = 5;
    int32 lane_id=6;
    float v=7;   #必选，速度
    float a=8;   #必选，加速度
    float relative_time=9;  #必选，相对时间
}
message Trajectory {
    uint64 stamp_secs = 1;
    uint64 stamp_nsecs = 2;
    uint64 timestamp = 3;    #必选，时间戳
    float total_path_length = 4;
    float total_path_time=5;
    int32 gear=6;      #非必选，档位
    int32 trajectory_type=7;
    int32 vehicle_signal=8;
    repeated TrajectoryPoint trajectory_points = 9;  #必选，轨迹
}
message PlanTrajectory {
     repeated Trajectory trajectory_info= 1;
}
```
 #### Routing_path
对于全局规划路径数据的消息格式，需遵循一定规范，其中部分字段为必选，其他请根据实际需要自由选取。
表9routing_path消息格式规范 
| 格式名称          | 说明   |
|:---|:---|
| RoutingFrames | 规划路径 |
   
```
/*********************************** 
    content: Octopus 输入数据格式 
    version: 1.0 
************************************/ 
syntax = "proto3";
message Point{
    float x = 1;
    float y = 2;
    float z = 3;
}
message Path{
    uint64 id = 1;
    repeated Point path_point = 2;
}
message RoutingPath{
    uint64 timestamp = 1;
    uint64 stamp_secs = 2;
    uint64 stamp_nsecs = 3;
    repeated Path routing_path_info = 4;
}
message RoutingFrames{
    repeated RoutingPath routing_frame = 4;
}
```
 #### Traffic_light_info
对于交通灯数据的消息格式，需遵循一定规范，其中部分字段为必选，其他请根据实际需要自由选取。
表10traffic_light_info消息格式规范 
| 格式名称             | 说明  |
|:---|:---|
| TrafficLightInfo | 交通灯 |
   
```
/***********************************
    content: Octopus 输入数据格式
    version: 1.0
************************************/
syntax = "proto3";
package Octopusdata;
message Light {
uint64 id = 1;
uint64 color = 2;
uint64 state = 3;
uint64 type = 4;
    float location_x = 5;
    float location_y = 6;
    float location_z = 7;
}
message Lights {
    uint64 timestamp = 1;
    uint64 stamp_secs = 2;
uint64 stamp_nsecs = 3;
    repeated Light lights = 4;
}
message TrafficLightInfo {
    repeated Lights trafficlight_info = 1;
}
```
