Program Listing for File SimOneIOStruct.h
↰
Return to documentation for file
(
api\Cpp_API_Reference\SimOneIOStruct.h
)
// ==========================================================================
// Copyright (C) 2018 - 2021 Beijing 51WORLD Digital Twin Technology Co., Ltd.
// , and/or its licensors. All rights reserved.
//
// The coded instructions, statements, computer programs, and/or related
// material (collectively the "Data") in these files contain unpublished
// information proprietary to Beijing 51WORLD Digital Twin Technology Co., Ltd.
// ("51WORLD") and/or its licensors, which is protected by the People's
// Republic of China and/or other countries copyright law and by
// international treaties.
//
// The Data may not be disclosed or distributed to third parties or be
// copied or duplicated, in whole or in part, without the prior written
// consent of 51WORLD.
//
// The copyright notices in the Software and this entire statement,
// including the above license grant, this restriction and the following
// disclaimer, must be included in all copies of the Software, in whole
// or in part, and all derivative works of the Software, unless such copies
// or derivative works are solely in the form of machine-executable object
// code generated by a source language processor.
// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND.
// 51WORLD DOES NOT MAKE AND HEREBY DISCLAIMS ANY EXPRESS OR IMPLIED
// WARRANTIES INCLUDING, BUT NOT LIMITED TO, THE WARRANTIES OF
// NON-INFRINGEMENT, MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE,
// OR ARISING FROM A COURSE OF DEALING, USAGE, OR TRADE PRACTICE. IN NO
// EVENT WILL 51WORLD AND/OR ITS LICENSORS BE LIABLE FOR ANY LOST
// REVENUES, DATA, OR PROFITS, OR SPECIAL, DIRECT, INDIRECT, OR
// CONSEQUENTIAL DAMAGES, EVEN IF 51WORLD AND/OR ITS LICENSORS HAS
// BEEN ADVISED OF THE POSSIBILITY OR PROBABILITY OF SUCH DAMAGES.
// ==========================================================================
#pragma once
#include <vector>
#include <map>
#ifndef WITHOUT_HDMAP
#include "SSD/SimVector.h"
#endif
#include <time.h>
#pragma pack(push)
#pragma pack(1)
#define SimOne_Freq 60
struct SimOne_Data
{
long long timestamp = 0;
int frame = 0;
int version = 0;
};
struct SimOne_Data_Vec3f
{
float x;
float y;
float z;
};
// ----------------------------
// SimOne Map (SimOne Output)
// ----------------------------
#define SOSM_CASE_START_EVENT_LABEL "SOSM_CASE_EVENT_START"
#define SOSM_CASE_STOP_EVENT_LABEL "SOSM_CASE_EVENT_STOP"
#define SOSM_MAP_LABEL "SOSM_MAP"
#define SOSM_MAP_OD_LENGT 128
#define SOSM_MAP_ODURL_LENGT 256
#define SOSM_MAP_ODMD5_LENGT 128
#define SOSM_CASENAME_LENGTH 256
#define SOSM_CASEID_LENGT 256
#define SOSM_TASKID_LENGT 256
#define SOSM_ACTORNAME_LENGT 256
#define MAX_PREDICTION_TRAJECTORY_SIZE 20
struct SimOne_Data_Map
{
char openDrive[SOSM_MAP_OD_LENGT];
char openDriveUrl[SOSM_MAP_ODURL_LENGT];
char opendriveMd5[SOSM_MAP_ODMD5_LENGT];
};
// ----------------------------
// SimOne MainVehicle WayPoints (SimOne Output)
// ----------------------------
#define SOSM_WAYPOINTS_LABEL "SOSM_WAYPOINTS"
#define SOSM_WAYPOINTS_SIZE_MAX 100
#define MAX_MAINVEHICLE_NAME_LEN 64
struct SimOne_Data_WayPoints_Entry
{
int index;
float posX;
float posY;
float heading_x;
float heading_y;
float heading_z;
float heading_w;
};
struct SimOne_Data_WayPoints : public SimOne_Data
{
char mainVehicleId[MAX_MAINVEHICLE_NAME_LEN];
int wayPointsSize;
SimOne_Data_WayPoints_Entry wayPoints[SOSM_WAYPOINTS_SIZE_MAX];
};
// ----------------------------
// Vehicle pose control data (SimOne Input)
// ----------------------------
#define SOSM_POSE_CONTROL_PREFIX "SOSM_POSE_CONTROL_"
struct SimOne_Data_Pose_Control : public SimOne_Data
{
float posX;
float posY;
float posZ;
float oriX;
float oriY;
float oriZ;
bool autoZ = false;
};
// ----------------------------
// Vehicle control data (SimOne Input)
// ----------------------------
#define SOSM_CONTROL_PREFIX "SOSM_CONTROL_"
// Vehicle control data (SimOne Input)
// ----------------------------
#define SOSM_DRIVER_CONTROL_PREFIX "SOSM_DRIVER_CONTROL_"
enum ESimOne_Gear_Mode
{
ESimOne_Gear_Mode_Neutral = 0,
ESimOne_Gear_Mode_Drive = 1,
ESimOne_Gear_Mode_Reverse = 2,
ESimOne_Gear_Mode_Parking = 3,
ESimOne_Gear_Mode_1 = 4,
ESimOne_Gear_Mode_2 = 5,
ESimOne_Gear_Mode_3 = 6,
ESimOne_Gear_Mode_4 = 7,
ESimOne_Gear_Mode_5 = 8,
ESimOne_Gear_Mode_6 = 9,
ESimOne_Gear_Mode_7 = 10,
ESimOne_Gear_Mode_8 = 11
};
enum ESimOne_Throttle_Mode
{
ESimOne_Throttle_Mode_Percent = 0,
ESimOne_Throttle_Mode_Torque = 1,
ESimOne_Throttle_Mode_Speed = 2,
ESimOne_Throttle_Mode_Accel = 3,
ESimOne_Throttle_Mode_EngineAV = 4,
ESimOne_Throttle_Mode_WheelTorque = 5
};
enum ESimOne_Brake_Mode
{
ESimOne_Brake_Mode_Percent = 0,
ESimOne_Brake_Mode_MasterCylinderPressure = 1,
ESimOne_Brake_Mode_PedalForce = 2,
ESimOne_Brake_Mode_WheelCylinderPressure = 3,
ESimOne_Brake_Mode_WheelTorque = 4
};
enum ESimOne_Steering_Mode
{
ESimOne_Steering_Mode_Percent = 0,
ESimOne_Steering_Mode_SteeringWheelAngle = 1,
ESimOne_Steering_Mode_Torque = 2,
ESimOne_Steering_Mode_AngularSpeed = 3,
ESimOne_Steering_Mode_WheelAngle = 4,
ESimOne_Steering_Mode_WheelAnglarSpeed = 5
};
enum ESimOne_LogLevel_Type
{
ESimOne_LogLevel_Type_Debug = 0,
ESimOne_LogLevel_Type_Information = 1,
ESimOne_LogLevel_Type_Warning = 2,
ESimOne_LogLevel_Type_Error = 3,
ESimOne_LogLevel_Type_Fatal = 4
};
#define SO_MAX_WHEEL_NUM 20
struct SimOne_Data_Control : public SimOne_Data
{
ESimOne_Throttle_Mode throttleMode = ESimOne_Throttle_Mode_Percent;
float throttle;
ESimOne_Brake_Mode brakeMode = ESimOne_Brake_Mode_Percent;
float brake;
ESimOne_Steering_Mode steeringMode = ESimOne_Steering_Mode_Percent;
float steering;
bool handbrake = false;
bool isManualGear = false;
ESimOne_Gear_Mode gear;
float clutch;
float throttle_input_data[SO_MAX_WHEEL_NUM];
float brake_input_data[SO_MAX_WHEEL_NUM];
float steering_input_data[SO_MAX_WHEEL_NUM];
};
enum ESimOne_Drive_Mode
{
ESimOne_Drive_Mode_API = 0,
ESimOne_Drive_Mode_Driver = 1,
ESimOne_Drive_Mode_API_Lateral = 2,
ESimOne_Drive_Mode_API_Longitudinal = 3
};
struct SimOne_Trajectory_Point
{
float posx;
float posy;
float speed;
float accel;
float theta;
float kappa;
float relative_time;
float s;
};
#define SO_MAX_TRAJECTORY_POINT_NUM 500
struct SimOne_Data_Control_Trajectory : public SimOne_Data
{
int point_num;
SimOne_Trajectory_Point points[SO_MAX_TRAJECTORY_POINT_NUM];
bool isReverse;
};
struct SimOne_Data_ESP_Control : public SimOne_Data
{
int stopDistance;
float velocityLimit;
float steering;
float steerTorque;
float accel;
float accelUpperLimit;
float accelLowerLimit;
float accelUpperComfLimit;
float accelLowerComfLimit;
bool standStill;
bool driveOff;
int brakeMode;
int vlcShutdown;
int gearMode;
};
// ----------------------------
// Vehicle Event Information data (SimOne Input)
// ----------------------------
#define SOSM_VEHICLE_EVENT_PREFIX "SOSM_VEHICLE_EVENT_"
enum ESimone_Vehicle_EventInfo_Type
{
ESimOne_VehicleEventInfo_V2XWarningInfoType_FCW = 0,
ESimOne_VehicleEventInfo_V2XWarningInfoType_ICW = 1,
ESimOne_VehicleEventInfo_V2XWarningInfoType_LTA = 2,
ESimOne_VehicleEventInfo_V2XWarningInfoType_BSW_LCW = 3,
ESimOne_VehicleEventInfo_V2XWarningInfoType_DNPW = 4,
ESimOne_VehicleEventInfo_V2XWarningInfoType_EBW = 5,
ESimOne_VehicleEventInfo_V2XWarningInfoType_AVW = 6,
ESimOne_VehicleEventInfo_V2XWarningInfoType_CLW = 7,
ESimOne_VehicleEventInfo_V2XWarningInfoType_HLW = 8,
ESimOne_VehicleEventInfo_V2XWarningInfoType_SLW = 9,
ESimOne_VehicleEventInfo_V2XWarningInfoType_RLVW = 10,
ESimOne_VehicleEventInfo_V2XWarningInfoType_VRUCW = 11,
ESimOne_VehicleEventInfo_V2XWarningInfoType_GLOSA = 12,
ESimOne_VehicleEventInfo_V2XWarningInfoType_IVS = 13,
ESimOne_VehicleEventInfo_V2XWarningInfoType_TJW = 14,
ESimOne_VehicleEventInfo_V2XWarningInfoType_EVW = 15,
ESimOne_VehicleEventInfo_V2XWarningInfoType_Unknown = 16
};
#define SO_MAX_WARNING_EVENT_NUM 1024
struct SimOne_Data_Vehicle_EventInfo : public SimOne_Data
{
ESimone_Vehicle_EventInfo_Type type;
char warningInfo[SO_MAX_WARNING_EVENT_NUM];
};
// ----------------------------
// Trajectory planning data (SimOne Input, for display)
// ----------------------------
#define SOSM_TRAJECTORY_PREFIX "SOSM_TRAJECTORY_"
#define SOSM_TRAJECTORY_SIZE_MAX 100
#define SO_MAX_TRAFFIC_EVENT_NUM 256
struct SimOne_Data_JudgeEvent {
int hostVehicle;
double time;
char actualValue[SO_MAX_TRAFFIC_EVENT_NUM];
char expectOp[SO_MAX_TRAFFIC_EVENT_NUM];
char expectValue1[SO_MAX_TRAFFIC_EVENT_NUM];
char expectValue2[SO_MAX_TRAFFIC_EVENT_NUM];
char judgeId[SO_MAX_TRAFFIC_EVENT_NUM];
char judgeType[SO_MAX_TRAFFIC_EVENT_NUM];
char requireProperty[SO_MAX_TRAFFIC_EVENT_NUM];
char taskId[SO_MAX_TRAFFIC_EVENT_NUM];
char valueType[SO_MAX_TRAFFIC_EVENT_NUM];
char version[SO_MAX_TRAFFIC_EVENT_NUM];
};
struct SimOne_Data_Trajectory_Entry
{
float posX;
float posY;
float vel;
};
struct SimOne_Data_Trajectory : public SimOne_Data
{
int trajectorySize;
SimOne_Data_Trajectory_Entry trajectory[SOSM_TRAJECTORY_SIZE_MAX];
};
// ----------------------------
// MainVehicle body data(SimOne OutPut)
// ---------------------------
struct SimOne_Data_MainVehicle_Body
{
char mainVehicleId[MAX_MAINVEHICLE_NAME_LEN];
float axisDistance;
//float axisHeight; //vehicle axie height unit: cm
float cmFrontAxisOffset;
float cmHeight;
float cmYOffset;
float chassisHeight;
float chassisWidth;
float frontLeftWheelOffset;
float frontRightWheelOffset;
float frontToFrontAxis;
float rearAxisToRear;
float RearLeftWheelOffset;
float RearRightWheelOffset;
char instanceId[SOSM_ACTORNAME_LENGT];
char actorName[SOSM_ACTORNAME_LENGT];
};
// ----------------------------
// Trajectory planning data (SimOne Input, for display)
// ----------------------------
#define SOSM_TRAJECTORY_PREFIX "SOSM_TRAJECTORY_"
#define SOSM_TRAJECTORY_SIZE_MAX 100
// ----------------------------
// Graph Marker data (SimOne Input, for display)
// ----------------------------
#define SOSM_MARKER_PREFIX "SOSM_MARKER_"
#define SOSM_MARKER_SIZE_MAX 1024
#define SOSM_MARKER_STR_MAX 100
#define SOSM_MARKER_POINTS_MAX 3840
enum ESimone_Marker_Shape_Type
{
ESimone_Marker_Shape_Type_ARROW = 0,
ESimone_Marker_Shape_Type_CUBE = 1,
ESimone_Marker_Shape_Type_SPHERE = 2,
ESimone_Marker_Shape_Type_CYLINDER = 3,
ESimone_Marker_Shape_Type_LINE_STRIP = 4,
ESimone_Marker_Shape_Type_LINE_LIST = 5,
ESimone_Marker_Shape_Type_CUBE_LIST = 6,
ESimone_Marker_Shape_Type_SPHERE_LIST = 7,
ESimone_Marker_Shape_Type_POINTS = 8,
ESimone_Marker_Shape_Type_TEXT_VIEW_FACING = 9,
ESimone_Marker_Shape_Type_MESH_RESOURCE = 10,
ESimone_Marker_Shape_Type_TRIANGLE_LIST = 11,
ESimone_Marker_Shape_Type_OBSTACLES = 12
};
enum ESimOne_Marker_SubType
{
ESimOne_Marker_SubType_Unused = 0,
ESimOne_Marker_OBSTACLE_PEDESTRIAN = 3,
ESimOne_Marker_OBSTACLE_CYCLIST = 4,
ESimOne_Marker_OBSTACLE_CAR = 5,
ESimOne_Marker_OBSTACLE_TRICYCLE = 6,
ESimOne_Marker_OBSTACLE_BIKE = 7
};
enum ESimOne_Marker_Action
{
ESimOne_Marker_ADDMODIFY = 0,
ESimOne_Marker_DELETE = 2,
ESimOne_Marker_DELETEALL = 3
};
struct SimOne_Marker_Quaternion
{
float x;
float y;
float z;
float w;
};
struct SimOne_Marker_Color
{
float r;
float g;
float b;
float a;
};
struct SimOne_Marker_Pose
{
SimOne_Data_Vec3f position;
SimOne_Marker_Quaternion orientation;
};
struct SimOne_Data_Marker_Entry
{
char ns[SOSM_MARKER_STR_MAX];
int32_t id;
ESimone_Marker_Shape_Type type;
// int32_t action;
ESimOne_Marker_Action action;
SimOne_Marker_Pose pose;
SimOne_Data_Vec3f scale;
SimOne_Marker_Color color;
float lifetime;
bool frame_locked;
int points_num;
SimOne_Data_Vec3f points[SOSM_MARKER_POINTS_MAX];
int colors_num;
SimOne_Marker_Color colors[SOSM_MARKER_POINTS_MAX];
// char text[SOSM_MARKER_STR_MAX];
char resource[SOSM_MARKER_STR_MAX];
char mesh_resource[SOSM_MARKER_STR_MAX];
bool mesh_use_embedded_materials;
ESimOne_Marker_SubType sub_type;
int obstacle_id;
};
struct SimOne_Data_Marker : public SimOne_Data
{
int markerSize;
SimOne_Data_Marker_Entry markers[SOSM_MARKER_SIZE_MAX];
};
// ----------------------------
// MianVehicle data (SimOne Output)
// ----------------------------
#define SOSM_POSE_PREFIX "SOSM_POSE_"
#define SOSM_EXTRA_STATES_SIZE_MAX 256
struct SimOne_Data_IMU
{
float accelX;
float accelY;
float accelZ;
float velX;
float velY;
float velZ;
float angVelX;
float angVelY;
float angVelZ;
float rotX;
float rotY;
float rotZ;
};
struct SimOne_Data_Gps : public SimOne_Data
{
float posX;
float posY;
float posZ;
float oriX;
float oriY;
float oriZ;
float velX;
float velY;
float velZ;
float throttle;
float brake;
float steering;
int gear;
float accelX;
float accelY;
float accelZ;
float angVelX;
float angVelY;
float angVelZ;
float wheelSpeedFL;
float wheelSpeedFR;
float wheelSpeedRL;
float wheelSpeedRR;
float engineRpm;
float odometer;
int extraStateSize;
float extraStates[SOSM_EXTRA_STATES_SIZE_MAX];
bool isGPSLost;
char mainCarName[SOSM_ACTORNAME_LENGT];
SimOne_Data_IMU imuData;
};
struct SimOne_Vehicle_Init_State
{
SimOne_Data_Vec3f initPos;
SimOne_Data_Vec3f initRot;
float initSpeed;
};
enum ESimOne_Data_Vehicle_State
{
ESimOne_Data_Vehicle_State_SO_M_SW,
ESimOne_Data_Vehicle_State_S0_Vx_SM,
ESimOne_Data_Vehicle_State_S0_Vy_SM,
ESimOne_Data_Vehicle_State_S0_Vz_SM,
ESimOne_Data_Vehicle_State_SO_M_ENGOUT,
ESimOne_Data_Vehicle_State_SO_My_DR_L1,
ESimOne_Data_Vehicle_State_SO_My_DR_R1,
ESimOne_Data_Vehicle_State_SO_My_DR_L2,
ESimOne_Data_Vehicle_State_SO_My_DR_R2,
ESimOne_Data_Vehicle_State_SO_My_DR_L3,
ESimOne_Data_Vehicle_State_SO_My_DR_R3,
ESimOne_Data_Vehicle_State_SO_F_Pedal,
ESimOne_Data_Vehicle_State_SO_Pbk_Con,
ESimOne_Data_Vehicle_State_SO_My_Bk_L3,
ESimOne_Data_Vehicle_State_SO_My_Bk_R3,
ESimOne_Data_Vehicle_State_SO_ClutchTr,
ESimOne_Data_Vehicle_State_SO_X_L1,
ESimOne_Data_Vehicle_State_SO_Y_L1,
ESimOne_Data_Vehicle_State_SO_Z_L1,
ESimOne_Data_Vehicle_State_SO_X_L2,
ESimOne_Data_Vehicle_State_SO_Y_L2,
ESimOne_Data_Vehicle_State_SO_Z_L2,
ESimOne_Data_Vehicle_State_SO_X_R1,
ESimOne_Data_Vehicle_State_SO_Y_R1,
ESimOne_Data_Vehicle_State_SO_Z_R1,
ESimOne_Data_Vehicle_State_SO_X_R2,
ESimOne_Data_Vehicle_State_SO_Y_R2,
ESimOne_Data_Vehicle_State_SO_Z_R2,
ESimOne_Data_Vehicle_State_SO_X_L3,
ESimOne_Data_Vehicle_State_SO_Y_L3,
ESimOne_Data_Vehicle_State_SO_Z_L3,
ESimOne_Data_Vehicle_State_SO_X_R3,
ESimOne_Data_Vehicle_State_SO_Y_R3,
ESimOne_Data_Vehicle_State_SO_Z_R3,
ESimOne_Data_Vehicle_State_SO_Xctc_L1,
ESimOne_Data_Vehicle_State_SO_Yctc_L1,
ESimOne_Data_Vehicle_State_SO_Zctc_L1,
ESimOne_Data_Vehicle_State_SO_Xctc_L2,
ESimOne_Data_Vehicle_State_SO_Yctc_L2,
ESimOne_Data_Vehicle_State_SO_Zctc_L2,
ESimOne_Data_Vehicle_State_SO_Xctc_R1,
ESimOne_Data_Vehicle_State_SO_Yctc_R1,
ESimOne_Data_Vehicle_State_SO_Zctc_R1,
ESimOne_Data_Vehicle_State_SO_Xctc_R2,
ESimOne_Data_Vehicle_State_SO_Yctc_R2,
ESimOne_Data_Vehicle_State_SO_Zctc_R2,
ESimOne_Data_Vehicle_State_SO_AVy_L1,
ESimOne_Data_Vehicle_State_SO_Kappa_L1,
ESimOne_Data_Vehicle_State_SO_Alpha_L1,
ESimOne_Data_Vehicle_State_SO_Fz_L1,
ESimOne_Data_Vehicle_State_SO_My_WC_L1,
ESimOne_Data_Vehicle_State_SO_Fx_L1,
ESimOne_Data_Vehicle_State_SO_Fy_L1,
ESimOne_Data_Vehicle_State_SO_Jnc_L1,
ESimOne_Data_Vehicle_State_SO_JncR_L1,
ESimOne_Data_Vehicle_State_SO_Mz_L1,
ESimOne_Data_Vehicle_State_SO_AVy_L2,
ESimOne_Data_Vehicle_State_SO_Kappa_L2,
ESimOne_Data_Vehicle_State_SO_Alpha_L2,
ESimOne_Data_Vehicle_State_SO_Fz_L2,
ESimOne_Data_Vehicle_State_SO_My_WC_L2,
ESimOne_Data_Vehicle_State_SO_Fx_L2,
ESimOne_Data_Vehicle_State_SO_Fy_L2,
ESimOne_Data_Vehicle_State_SO_Jnc_L2,
ESimOne_Data_Vehicle_State_SO_JncR_L2,
ESimOne_Data_Vehicle_State_SO_Mz_L2,
ESimOne_Data_Vehicle_State_SO_AVy_R1,
ESimOne_Data_Vehicle_State_SO_Kappa_R1,
ESimOne_Data_Vehicle_State_SO_Alpha_R1,
ESimOne_Data_Vehicle_State_SO_Fz_R1,
ESimOne_Data_Vehicle_State_SO_My_WC_R1,
ESimOne_Data_Vehicle_State_SO_Fx_R1,
ESimOne_Data_Vehicle_State_SO_Fy_R1,
ESimOne_Data_Vehicle_State_SO_Jnc_R1,
ESimOne_Data_Vehicle_State_SO_JncR_R1,
ESimOne_Data_Vehicle_State_SO_Mz_R1,
ESimOne_Data_Vehicle_State_SO_AVy_R2,
ESimOne_Data_Vehicle_State_SO_Kappa_R2,
ESimOne_Data_Vehicle_State_SO_Alpha_R2,
ESimOne_Data_Vehicle_State_SO_Fz_R2,
ESimOne_Data_Vehicle_State_SO_My_WC_R2,
ESimOne_Data_Vehicle_State_SO_Fx_R2,
ESimOne_Data_Vehicle_State_SO_Fy_R2,
ESimOne_Data_Vehicle_State_SO_Jnc_R2,
ESimOne_Data_Vehicle_State_SO_JncR_R2,
ESimOne_Data_Vehicle_State_SO_Mz_R2,
ESimOne_Data_Vehicle_State_SO_AVy_L3,
ESimOne_Data_Vehicle_State_SO_Kappa_L3,
ESimOne_Data_Vehicle_State_SO_Alpha_L3,
ESimOne_Data_Vehicle_State_SO_Fz_L3,
ESimOne_Data_Vehicle_State_SO_My_WC_L3,
ESimOne_Data_Vehicle_State_SO_Fx_L3,
ESimOne_Data_Vehicle_State_SO_Fy_L3,
ESimOne_Data_Vehicle_State_SO_Jnc_L3,
ESimOne_Data_Vehicle_State_SO_JncR_L3,
ESimOne_Data_Vehicle_State_SO_Mz_L3,
ESimOne_Data_Vehicle_State_SO_AVy_R3,
ESimOne_Data_Vehicle_State_SO_Kappa_R3,
ESimOne_Data_Vehicle_State_SO_Alpha_R3,
ESimOne_Data_Vehicle_State_SO_Fz_R3,
ESimOne_Data_Vehicle_State_SO_My_WC_R3,
ESimOne_Data_Vehicle_State_SO_Fx_R3,
ESimOne_Data_Vehicle_State_SO_Fy_R3,
ESimOne_Data_Vehicle_State_SO_Jnc_R3,
ESimOne_Data_Vehicle_State_SO_JncR_R3,
ESimOne_Data_Vehicle_State_SO_Mz_R3,
ESimOne_Data_Vehicle_State_SO_Steer_L3,
ESimOne_Data_Vehicle_State_SO_Steer_R3,
ESimOne_Data_Vehicle_State_SO_Steer_SW,
ESimOne_Data_Vehicle_State_SO_TimePassed,
ESimOne_Data_Vehicle_State_SO_ConverterTorqueIn,
ESimOne_Data_Vehicle_State_SO_ConverterTorqueOut,
ESimOne_Data_Vehicle_State_SO_CurrentGearRatio,
ESimOne_Data_Vehicle_State_SO_GearBoxOutputSpeed,
ESimOne_Data_Vehicle_State_SO_TransmissionInputSpeed,
ESimOne_Data_Vehicle_State_SO_AntiTorquex_F,
ESimOne_Data_Vehicle_State_SO_AntiTorquey_F,
ESimOne_Data_Vehicle_State_SO_AntiTorquez_F,
ESimOne_Data_Vehicle_State_SO_AntiTorquex_R,
ESimOne_Data_Vehicle_State_SO_AntiTorquey_R,
ESimOne_Data_Vehicle_State_SO_AntiTorquez_R,
ESimOne_Data_Vehicle_State_SO_My_Bk_L1,
ESimOne_Data_Vehicle_State_SO_WheelAngle_L1,
ESimOne_Data_Vehicle_State_SO_SuspSpringForcex_L1,
ESimOne_Data_Vehicle_State_SO_SuspSpringForcey_L1,
ESimOne_Data_Vehicle_State_SO_SuspSpringForcez_L1,
ESimOne_Data_Vehicle_State_SO_My_Bk_R1,
ESimOne_Data_Vehicle_State_SO_WheelAngle_R1,
ESimOne_Data_Vehicle_State_SO_SuspSpringForcex_R1,
ESimOne_Data_Vehicle_State_SO_SuspSpringForcey_R1,
ESimOne_Data_Vehicle_State_SO_SuspSpringForcez_R1,
ESimOne_Data_Vehicle_State_SO_My_Bk_L2,
ESimOne_Data_Vehicle_State_SO_WheelAngle_L2,
ESimOne_Data_Vehicle_State_SO_SuspSpringForcex_L2,
ESimOne_Data_Vehicle_State_SO_SuspSpringForcey_L2,
ESimOne_Data_Vehicle_State_SO_SuspSpringForcez_L2,
ESimOne_Data_Vehicle_State_SO_My_Bk_R2,
ESimOne_Data_Vehicle_State_SO_WheelAngle_R2,
ESimOne_Data_Vehicle_State_SO_SuspSpringForcex_R2,
ESimOne_Data_Vehicle_State_SO_SuspSpringForcey_R2,
ESimOne_Data_Vehicle_State_SO_SuspSpringForcez_R2
};
#define SOSM_VEHICLE_EXTRA_STATE_MAX_SIZE 600
struct SimOne_Data_Vehicle_Extra
{
int dataSize;
float extra_states[SOSM_VEHICLE_EXTRA_STATE_MAX_SIZE];
};
// ----------------------------
// Obstacle GroundTruth data (SimOne Output)
// ----------------------------
#define SOSM_OBSTACLE_PREFIX "SOSM_OBSTACLE_"
#define SOSM_OBSTACLE_SIZE_MAX 255
enum ESimOne_Obstacle_Type
{
ESimOne_Obstacle_Type_Unknown = 0,
ESimOne_Obstacle_Type_Pedestrian = 4,
ESimOne_Obstacle_Type_Pole = 5,
ESimOne_Obstacle_Type_Car = 6,
ESimOne_Obstacle_Type_Static = 7,
ESimOne_Obstacle_Type_Bicycle = 8,
ESimOne_Obstacle_Type_Fence = 9,
ESimOne_Obstacle_Type_RoadMark = 12,
ESimOne_Obstacle_Type_TrafficSign = 13,
ESimOne_Obstacle_Type_TrafficLight = 15,
ESimOne_Obstacle_Type_Rider = 17,
ESimOne_Obstacle_Type_Truck = 18,
ESimOne_Obstacle_Type_Bus = 19,
ESimOne_Obstacle_Type_SpecialVehicle = 20,
ESimOne_Obstacle_Type_Motorcycle = 21,
ESimOne_Obstacle_Type_Dynamic = 22,
ESimOne_Obstacle_Type_GuardRail = 23,
ESimOne_Obstacle_Type_SpeedLimitSign = 26,
ESimOne_Obstacle_Type_BicycleStatic = 27,
ESimOne_Obstacle_Type_RoadObstacle = 29
};
struct Rotation
{
float yaw; // Obstacle Rotation Z on Opendrive (by radian)
float pitch; // Obstacle Rotation Y on Opendrive (by radian)
float roll; // Obstacle Rotation X on Opendrive (by radian)
};
struct Prediction
{
uint32_t trajectorySize; // point number of prediction trajectory
float trajectoryInterval; // time interval between two adjacent points of prediction trajectory. unit is second.
SimOne_Data_Vec3f trajectory[MAX_PREDICTION_TRAJECTORY_SIZE]; // Obstacle prediction trajectory. Positions on Opendrive (by meter)
float speed[MAX_PREDICTION_TRAJECTORY_SIZE]; // point speed of prediction trajectory
Rotation rotation[MAX_PREDICTION_TRAJECTORY_SIZE]; // Obstacle prediction trajectory. Rotation on Opendrive
};
struct SimOne_Data_Obstacle_Entry
{
int id; // Obstacle global unique ID
int viewId; // Obstacle view ID in Sim-One observer.
ESimOne_Obstacle_Type type; // Obstacle Type
float theta; // [deprecated] Please use oriZ for obstacle heading angle instead
float posX; // Obstacle Position X on Opendrive (by meter), this point is the centroid of the obstacle.
float posY; // Obstacle Position Y on Opendrive (by meter), this point is the centroid of the obstacle.
float posZ; // Obstacle Position Z on Opendrive (by meter), this point is the centroid of the obstacle.
float oriX; // Obstacle Rotation X on Opendrive (by radian)
float oriY; // Obstacle Rotation Y on Opendrive (by radian)
float oriZ; // Obstacle Rotation Z on Opendrive (by radian)
float velX; // Obstacle Velocity X on Opendrive (by meter)
float velY; // Obstacle Velocity Y on Opendrive (by meter)
float velZ; // Obstacle Velocity Z on Opendrive (by meter)
float length; // Obstacle length
float width; // Obstacle width
float height; // Obstacle height
float accelX; // Obstacle Acceleration X on Opendrive (by meter)
float accelY; // Obstacle Acceleration Y on Opendrive (by meter)
float accelZ; // Obstacle Acceleration Z on Opendrive (by meter)
Prediction prediction;
char actorCarName[SOSM_ACTORNAME_LENGT]; // encoding: utf-8
};
struct SimOne_Data_Obstacle : public SimOne_Data
{
int obstacleSize; // Obstacle size
SimOne_Data_Obstacle_Entry obstacle[SOSM_OBSTACLE_SIZE_MAX]; // Obstacle, 255 max
};
struct SimOne_Data_CaseInfo
{
char caseName[SOSM_CASENAME_LENGTH]; // Case name
char caseId[SOSM_CASEID_LENGT]; // Case ID
char taskId[SOSM_TASKID_LENGT]; // Task ID
};
enum ESimOne_Case_Status
{
ESimOne_Case_Status_Unknown = 0,
ESimOne_Case_Status_Stop = 1,
ESimOne_Case_Status_Running = 2,
ESimOne_Case_Status_Pause = 3
};
#define SOSM_SIGNAL_LIGHTS_PREFIX "SOSM_SIGNAL_LIGHTS_"
enum ESimOne_Signal_Light
{
ESimOne_Signal_Light_None = 0,
ESimOne_Signal_Light_RightBlinker = 1,
ESimOne_Signal_Light_LeftBlinker = (1 << 1),
ESimOne_Signal_Light_DoubleFlash = (1 << 2),
ESimOne_Signal_Light_BrakeLight = (1 << 3),
ESimOne_Signal_Light_FrontLight = (1 << 4),
ESimOne_Signal_Light_HighBeam = (1 << 5),
ESimOne_Signal_Light_BackDrive = (1 << 6)
};
struct SimOne_Data_Signal_Lights : public SimOne_Data
{
uint32_t signalLights = 0;
};
#define SOSM_ENVIRONMENT "SOSM_ENVIRONMENT"
struct SimOne_Data_Environment
{
float timeOfDay = 1200;
// Simulate Reality
bool simulateReality = true;
float longitude = 121.4737;
float latitude = 31.2304;
int timeZone = 8;
int date = 20230921;
// Sun
float sunIntensity = 5;
float sunAzimuth = 0;
float sunInclination = 30;
float sunSize = 1;
// Moon
float moonIntensity = 0.12;
float moonAzimuth = 15;
float moonInclination = 35;
float moonSize = 0.7;
float moonPhase = 0;
float moonColorA = 0.87;
int moonColorR = 178;
int moonColorG = 197;
int moonColorB = 239;
// Weather
// Cloud
float cloudDensity = 3;
float cloudHeight = 1;
float cloudThickness = 1;
// Fog Wind
float fogDensity = 3;
float windDensity = 3;
float windDirection = 180;
// Rain
float rainDensity = 3;
float raindropDensity = 2000;
float raindropParticle = 1;
// Snow
float snowDensity = 3;
float snowflakeDensity = 2000;
float snowflakeParticle = 1;
// Thunder
float thunderLightning = 0;
float thunderInterval = 7;
float thunderBrightness = 14;
// Dust
float dustDensity = 0;
float dustDensityCoefficient = 300;
float dustParticle = 0;
// Material
// Coverage
float wetness = 0;
float snowCoverage = 0;
float dustCoverage = 0;
// Damage & Dirty
float roadDirtyLevel = 0;
float lineDamageLevel = 0;
float signDirtyLevel = 0;
float signDamageLevel = 0;
};
enum ESimOneCaseControl_State
{
ESimOneCaseControl_State_None = 0,
ESimOneCaseControl_State_Play = 1,
ESimOneCaseControl_State_Pause = 2,
ESimOneCaseControl_State_Stop = 3,
ESimOneCaseControl_State_SkipAndPause = 4,
ESimOneCaseControl_State_SkipAndPlay = 5,
};
struct SimOneCaseControl {
ESimOneCaseControl_State caseControlState;
int skipStep;
};
// ----------------------------
// Sensor Configuration API.
// ----------------------------
enum ESimOne_Node_Type
{
ESimOne_Node_Type_Vehicle = 0,
ESimOne_Node_Type_Camera = 1,
ESimOne_Node_Type_LiDAR = 2,
ESimOne_Node_Type_MMWRadar = 3,
ESimOne_Node_Type_UltrasonicRadar = 4,
ESimOne_Node_Type_AllUltrasonicRadar = 5,
ESimOne_Node_Type_GNSSINS = 6,
ESimOne_Node_Type_PerfectPerception = 7,
ESimOne_Node_Type_V2X = 8,
ESimOne_Node_Type_SensorFusion = 9
};
enum ESimOne_Sensor_Data_Type
{
ESimOne_Sensor_Data_Type_ImageWithGroundTruth = 0,
ESimOne_Sensor_Data_Type_PointCloudWithGroundTruth = 1,
ESimOne_Sensor_Data_Type_RadarDetections = 2,
ESimOne_Sensor_Data_Type_UltrasonicRadar = 3,
ESimOne_Sensor_Data_Type_ObstacleDetection = 4,
ESimOne_Sensor_Data_Type_GroundTruth = 5,
ESimOne_Sensor_Data_Type_V2X = 6,
ESimOne_Sensor_Data_Type_V2XNFS = 7
};
enum ESimOne_V2X_MessageFrame_PR {
ESimOne_V2X_MessageFrame_PR_NOTHING,
ESimOne_V2X_MessageFrame_PR_bsmFrame,
ESimOne_V2X_MessageFrame_PR_mapFrame,
ESimOne_V2X_MessageFrame_PR_rsmFrame,
ESimOne_V2X_MessageFrame_PR_spatFrame,
ESimOne_V2X_MessageFrame_PR_rsiFrame,
ESimOne_V2X_MessageFrame_PR_ipprFrame,
ESimOne_V2X_MessageFrame_PR_rsvFrame,
ESimOne_V2X_MessageFrame_PR_bsiFrame
/* Extensions may appear below */
};
#define SENSOR_IDTYPE_MAX 64
struct SimOne_Data_SensorConfiguration
{
int id;
char mainVehicleId[SENSOR_IDTYPE_MAX];
char sensorId[SENSOR_IDTYPE_MAX];
char sensorType[SENSOR_IDTYPE_MAX];
float x;
float y;
float z;
float roll;
float pitch;
float yaw;
int hz;
};
#define SOSM_SENSOR_CONFIGURATION_LABEL "SOSM_SENSOR_CONFIGURATION"
#define SOSM_SENSOR_CONFIGURATION_SIZE_MAX 100
struct SimOne_Data_SensorConfigurations
{
int dataSize;
SimOne_Data_SensorConfiguration data[SOSM_SENSOR_CONFIGURATION_SIZE_MAX];
};
// ----------------------------
// Sensor Detections data (SimOne Output)
// ----------------------------
#define SOSM_SENSOR_DETECTIONS_PREFIX "SOSM_SENSOR_DETECTIONS_"
#define SOSM_SENSOR_DETECTIONS_OBJECT_SIZE_MAX 256
#define SOSM_SENSOR_LANE_OBJECT_SIZE_MAX 256
#define SOSM_SENSOR_Boundary_OBJECT_SIZE_MAX 250
#define SOSM_SENSOR_DETECTIONS_CORNERPOINT_SIZE_MAX 8
struct SimOne_Data_SensorDetections_Entry
{
int id;
ESimOne_Obstacle_Type type;
float posX;
float posY;
float posZ;
float oriX;
float oriY;
float oriZ;
float length;
float width;
float height;
float range;
float velX;
float velY;
float velZ;
float accelX;
float accelY;
float accelZ;
float probability;
float relativePosX;
float relativePosY;
float relativePosZ;
float relativeRotX;
float relativeRotY;
float relativeRotZ;
float relativeVelX;
float relativeVelY;
float relativeVelZ;
float bbox2dMinX = 0;
float bbox2dMinY = 0;
float bbox2dMaxX = 0;
float bbox2dMaxY = 0;
int cornerPointSize = 0;
SimOne_Data_Vec3f cornerPoints[SOSM_SENSOR_DETECTIONS_CORNERPOINT_SIZE_MAX];
char name[SOSM_ACTORNAME_LENGT];
};
struct SimOne_Data_SensorDetections : public SimOne_Data
{
int objectSize = 0; // Detection Object size
SimOne_Data_SensorDetections_Entry objects[SOSM_SENSOR_DETECTIONS_OBJECT_SIZE_MAX]; // Detection Objects, 256 max
};
struct SimOne_Data_SensorFusionObstacles : public SimOne_Data
{
int obstacleSize; // Detected obstacle size
SimOne_Data_SensorDetections_Entry obstacle[SOSM_SENSOR_DETECTIONS_OBJECT_SIZE_MAX]; // Detected obstacles, 256 max
};
enum ESimOne_Lane_Type {
ESimOne_Lane_Type_none = 0,
ESimOne_Lane_Type_driving = 1,
ESimOne_Lane_Type_stop = 2,
ESimOne_Lane_Type_shoulder = 3,
ESimOne_Lane_Type_biking = 4,
ESimOne_Lane_Type_sidewalk = 5,
ESimOne_Lane_Type_border = 6,
ESimOne_Lane_Type_restricted = 7,
ESimOne_Lane_Type_parking = 8,
ESimOne_Lane_Type_bidirectional = 9,
ESimOne_Lane_Type_median = 10,
ESimOne_Lane_Type_special1 = 11,
ESimOne_Lane_Type_special2 = 12,
ESimOne_Lane_Type_special3 = 13,
ESimOne_Lane_Type_roadWorks = 14,
ESimOne_Lane_Type_tram = 15,
ESimOne_Lane_Type_rail = 16,
ESimOne_Lane_Type_entry = 17,
ESimOne_Lane_Type_exit = 18,
ESimOne_Lane_Type_offRamp = 19,
ESimOne_Lane_Type_onRamp = 20,
ESimOne_Lane_Type_mwyEntry = 21,
ESimOne_Lane_Type_mwyExit = 22
};
enum ESimOne_Boundary_Type {
ESimOne_Boundary_Type_none = 0,
ESimOne_Boundary_Type_solid = 1,
ESimOne_Boundary_Type_broken = 2,
ESimOne_Boundary_Type_solid_solid = 3,
ESimOne_Boundary_Type_solid_broken = 4,
ESimOne_Boundary_Type_broken_solid = 5,
ESimOne_Boundary_Type_broken_broken = 6,
ESimOne_Boundary_Type_botts_dots = 7,
ESimOne_Boundary_Type_grass = 8,
ESimOne_Boundary_Type_curb = 9
};
enum ESimOne_Boundary_Color {
ESimOne_Boundary_Color_standard = 0,
ESimOne_Boundary_Color_blue = 1,
ESimOne_Boundary_Color_green = 2,
ESimOne_Boundary_Color_red = 3,
ESimOne_Boundary_Color_white = 4,
ESimOne_Boundary_Color_yellow = 5
};
struct SimOne_LineCurve_Parameter{
float C0;
float C1;
float C2;
float C3;
SimOne_Data_Vec3f firstPoints;
SimOne_Data_Vec3f endPoints;
int length = 0;
};
struct SimOne_Data_LaneLineInfo
{
int lineID = 0;
ESimOne_Boundary_Type lineType = ESimOne_Boundary_Type_none;
ESimOne_Boundary_Color lineColor = ESimOne_Boundary_Color_standard;
float linewidth;
SimOne_Data_Vec3f linePoints[SOSM_SENSOR_Boundary_OBJECT_SIZE_MAX];
SimOne_LineCurve_Parameter linecurveParameter;
};
struct SimOne_Data_LaneInfo : public SimOne_Data
{
int id = 0;
ESimOne_Lane_Type laneType = ESimOne_Lane_Type_none;
int laneLeftID = 0;
int laneRightID = 0;
int lanePredecessorID[SOSM_SENSOR_LANE_OBJECT_SIZE_MAX];
int laneSuccessorID[SOSM_SENSOR_LANE_OBJECT_SIZE_MAX];
SimOne_Data_LaneLineInfo l_Line;
SimOne_Data_LaneLineInfo c_Line;
SimOne_Data_LaneLineInfo r_Line;
SimOne_Data_LaneLineInfo ll_Line;
SimOne_Data_LaneLineInfo rr_Line;
};
enum SimOne_RoadMark_Type {
RoadMarkType_UnKnown = 0,
RoadMarkType_Graphics = 1,
RoadMarkType_StopLine = 2,
RoadMarkType_CrossWalk = 3
};
enum SimOne_RoadMark_SubType {
MarkSubType__UnKnown = 0,
RoadMarkType_StraightAheadArrow = 1,
RoadMarkType_LeftOrRightTurnArrow = 2,
RoadMarkType_LeftOrUTurnArrow = 3,
RoadMarkType_LeftTurnArrow = 4,
RoadMarkType_LeftChangeArrow = 5,
RoadMarkType_RightChangeArrow = 6,
RoadMarkType_RightTurnArrow = 7,
RoadMarkType_StraightOrLeftTurnArrow = 8,
RoadMarkType_StraightOrLeftOrRightTurnArrow = 9,
RoadMarkType_StraightOrRightTurnArrow = 10,
RoadMarkType_StraightOrUTurnArrow = 11,
RoadMarkType_UTurnArrow = 12
};
// ----------------------------
// Millimeter-wave Radar data (SimOne Output)
// ----------------------------
#define SOSM_ROADMARK_SIZE_MAX 256
#define SOSM_PIX_SIZE_MAX 64
struct RoadMark_Entry {
int id;
SimOne_RoadMark_Type type;
SimOne_RoadMark_SubType subtype;
SimOne_Data_Vec3f center;
SimOne_Data_Vec3f rotation;
SimOne_Data_Vec3f size;
int pointSize;
SimOne_Data_Vec3f bbox3d[SOSM_PIX_SIZE_MAX];
SimOne_Data_Vec3f pixs2d[SOSM_PIX_SIZE_MAX];
};
struct SimOne_Data_RoadMarkInfo : public SimOne_Data
{
int detectNum;
RoadMark_Entry roadMarks[SOSM_ROADMARK_SIZE_MAX];
};
enum ESimOne_Client_Type {
ESimOne_Client_Type_None = 0,
ESimOne_Client_Type_Web = 1,
ESimOne_Client_Type_TrafficProvider = 2,
ESimOne_Client_Type_VehicleDynamic = 3,
ESimOne_Client_Type_BridgeIO = 4,
ESimOne_Client_Type_SimOneDLL = 5,
ESimOne_Client_Type_Observer = 6,
ESimOne_Client_Type_Sensor = 7,
ESimOne_Client_Type_Traffic = 8
};
// ----------------------------
// Image data (SimOne Output)
// ----------------------------
#define SOSM_IMAGE_PREFIX "SOSM_IMAGE_"
//#define SOSM_IMAGE_WIDTH_MAX 1920
//#define SOSM_IMAGE_HEIGHT_MAX 1200
#define SOSM_SIMONE_IMAGE_WIDTH_MAX 3840
#define SOSM_SIMONE_IMAGE_HEIGHT_MAX 2160
#define SOSM_SIMONE_IMAGE_DATA_SIZE_MAX SOSM_SIMONE_IMAGE_WIDTH_MAX*SOSM_SIMONE_IMAGE_HEIGHT_MAX*3
enum ESimOne_Image_Format
{
ESimOne_Image_Format_RGB = 0
};
struct SimOne_Data_Image : public SimOne_Data
{
int width;
int height;
ESimOne_Image_Format format;
int imageDataSize;
char imageData[SOSM_SIMONE_IMAGE_DATA_SIZE_MAX];
};
// ----------------------------
// Point cloud data (SimOne Output)
// ----------------------------
struct SimOne_Data_Point_XYZI
{
float x;
float y;
float z;
float intensity;
};
#define SOSM_POINT_CLOUD_PREFIX "SOSM_POINT_CLOUD_"
#define SOSM_SIMONE_POINT_DATA_SIZE_MAX 3686400 // Max Memory Size
struct SimOne_Data_Point_Cloud : public SimOne_Data
{
int width;
int height;
int pointStep;
int pointCloudDataSize;
char pointCloudData[SOSM_SIMONE_POINT_DATA_SIZE_MAX];
};
// ----------------------------
// Millimeter-wave Radar data (SimOne Output)
// ----------------------------
#define SOSM_RADAR_PREFIX "SOSM_RADAR_"
#define SOSM_RADAR_SIZE_MAX 256
struct SimOne_Data_RadarDetection_Entry {
int id;
int subId;
ESimOne_Obstacle_Type type;
float posX;
float posY;
float posZ;
float velX;
float velY;
float velZ;
float accelX;
float accelY;
float accelZ;
float oriX;
float oriY;
float oriZ;
float length;
float width;
float height;
float range;
float rangeRate;
float azimuth;
float vertical;
float snrdb;
float rcsdb;
float probability;
char name[SOSM_ACTORNAME_LENGT];
};
struct SimOne_Data_RadarDetection : public SimOne_Data
{
int detectNum;
SimOne_Data_RadarDetection_Entry detections[SOSM_RADAR_SIZE_MAX];
};
// ----------------------------
// Ultrasonic Radar data (SimOne Output)
// ----------------------------
#define SOSM_MUCHULTRASONICRADAR_PREFIX "SOSM_MUCHULTRASONICRADAR_"
#define SOSM_OSIULTRASONICRADAR_PREFIX "SOSM_OSIULTRASONICRADAR_"
#define SOSM_ULTRASONICRADAR_SIZE_MAX 100
struct SimOne_Data_UltrasonicRadarDetection_Entry {
float obstacleRanges = 0;
float x = 0;
float y = 0;
float z = 0;
};
struct SimOne_Data_UltrasonicRadar : public SimOne_Data {
char sensorId[SENSOR_IDTYPE_MAX];
int obstacleNum;
SimOne_Data_UltrasonicRadarDetection_Entry obstacleDetections[SOSM_OBSTACLE_SIZE_MAX];
};
struct SimOne_Data_UltrasonicRadars : public SimOne_Data
{
int ultrasonicRadarNum;
SimOne_Data_UltrasonicRadar ultrasonicRadars[SOSM_ULTRASONICRADAR_SIZE_MAX];
};
#ifndef WITHOUT_HDMAP
#define SOSM_V2X_MSGFRAME_SIZE_MAX 20000 // Max Memory Size
struct SimOne_Data_V2XNFS : public SimOne_Data
{
int V2XMsgFrameSize;
char MsgFrameData[SOSM_V2X_MSGFRAME_SIZE_MAX];
};
#endif
// ----------------------------
// HDMap data
// ----------------------------
// ----------------------------
// Prediction data (SimOne Output)
// ----------------------------
#define SOSM_PREDICTION_PREFIX "SOSM_PREDICTION_"
struct SimOne_Data_Traffic_Info
{
int id;
float x;
float y;
float speed;
float orientation;
};
struct SimOne_Data_Position_Info : public SimOne_Data
{
float mean_x;
float mean_y;
float var_x;
float var_y;
float covar_xy;
};
struct SimOne_Data_Prediction : public SimOne_Data
{
std::map<int, SSD::SimVector<SimOne_Data_Position_Info>> ped_predictions;
std::map<int, SSD::SimVector<SimOne_Data_Position_Info>> veh_predictions;
float ped_delta_t;
float veh_delta_t;
};
#define MAX_MAINVEHICLE_NUM 10
struct SimOne_Data_MainVehicle_Info
{
int size;
char id_list[MAX_MAINVEHICLE_NUM][MAX_MAINVEHICLE_NAME_LEN];
char type_list[MAX_MAINVEHICLE_NUM][MAX_MAINVEHICLE_NAME_LEN];
};
struct SimOne_Data_MainVehicle_Status
{
char mainVehicleId[MAX_MAINVEHICLE_NAME_LEN];
int mainVehicleStatus;
};
// ----------------------------
// TrafficLight data (SimOne Output)
// ----------------------------
#define SOSM_TRAFFICLIGHT_PREFIX "SOSM_TRAFFICLIGHT_"
#define SOSM_TRAFFICLIGHT_SIZE_MAX 100
enum ESimOne_TrafficLight_Status
{
ESimOne_TrafficLight_Status_Invalid = 0,
ESimOne_TrafficLight_Status_Red = 1,
ESimOne_TrafficLight_Status_Green = 2,
ESimOne_TrafficLight_Status_Yellow = 3,
ESimOne_TrafficLight_Status_RedBlink = 4,
ESimOne_TrafficLight_Status_GreenBlink = 5,
ESimOne_TrafficLight_Status_YellowBlink = 6,
ESimOne_TrafficLight_Status_Black = 7
};
struct SimOne_Data_TrafficLight
{
bool isMainVehicleNextTrafficLight = false;
int opendriveLightId = 0;
int countDown = 0;
ESimOne_TrafficLight_Status status = ESimOne_TrafficLight_Status_Invalid;
};
struct SimOne_Data_TrafficLights : public SimOne_Data
{
int trafficlightNum = 0;
SimOne_Data_TrafficLight trafficlights[SOSM_TRAFFICLIGHT_SIZE_MAX];
};
// ----------------------------
// SimOneDriver status data (SimOne Output)
// ----------------------------
#define SOSM_DRIVER_PREFIX "SOSM_DRIVER_"
enum ESimOne_Driver_Status
{
ESimOne_Driver_Status_Unknown = 0,
ESimOne_Driver_Status_Controlling = 1,
ESimOne_Driver_Status_Disabled = 2
};
struct SimOne_Data_Driver_Status : public SimOne_Data
{
ESimOne_Driver_Status driverStatus;
};
// ----------------------------
// Vehicle control mode (SimOne Output)
// ----------------------------
#define SOSM_CONTROLMODE_PREFIX "SOSM_CONTROLMODE_"
enum SimOne_Control_Mode
{
ESimOne_Control_Mode_Unknown = 0,
ESimOne_Control_Mode_Manual = 1,
ESimOne_Control_Mode_API = 2,
ESimOne_Control_Mode_Auto = 3
};
struct SimOne_Data_Control_Mode : public SimOne_Data
{
SimOne_Control_Mode controlMode;
};
// ----------------------------
// Scenario event
// ----------------------------
#define ENABLE_SCENARIO_EVENT
#define SCENARIO_EVENT_PREFIX "SCENARIO_EVENT_"
struct SimOne_Data_ScenarioEvent_ReaderStatus
{
int readerState = 0;
};
struct SimOne_Data_ScenarioEvent_WriterStatus
{
int writeState = 0;
};
struct SimOne_Data_ScenarioEvent : public SimOne_Data_ScenarioEvent_WriterStatus
{
char event[64];
char data[64];
};
#pragma pack(pop)