API 功能支持 ¶
本文档主要介绍 API 功能支持具体内容。
-
API 调用示例参考 调用示例 ([SimOne 安装目录]\SimOne\SimOneAPI )
| API 类型 | API 接口 | 功能 |
|---|---|---|
|
1. 基础服务类
主要提供车辆选择、仿真工作模式设置和热区数据获取的功能。 |
ServiceAPI |
选择车辆:
选择具体的目标车辆进行控制,并订阅其状态更新
设置仿真工作模式: 根据需要选择帧同步(保证实时性和稳定性)或非帧同步(提高运行效率)模式 获取热区数据: 通过主动 API 调用或自动回调函数获取车辆及其周边环境的实时数据 |
|
2. 传感器类
为开发者提供了从 SimOne 仿真环境中获取各种传感器数据的能力。 |
SensorAPI |
获取目标级或物理级信息:
包括图像信息、激光雷达点云、毫米波雷达及超声波雷达目标级信息等
获取传感器真值数据: 既能满足感知算法接入测试,也能满足跳过感知,直接从决策算法接入的开环测试需求 环境信息配置与管理 :涉及获取和设置与仿真环境相关信息(如天气、光照和地面条件等),对于创建特定测试场景非常关键。 |
| StreamingAPI | 获取物理级传感器流式传输 :实时获取和自动回调图像及点云数据,支持多种格式。 | |
| V2XAPI | V2X 消息处理 :获取特定车辆 UPER 编码的 V2X 消息及更新通知。 | |
|
3. 控制通信类
通过控制信号输入驱动被测车辆运行,实现复杂交通场景模拟。 |
PNCAPI |
车辆状态与初始化
:涵盖选择测试车辆、初始化状态信息、设置起始位置和重置车辆状态的操作。
预警信息与控制策略 :包括设置和接收预警信息、控制车辆动作,以及规划控制输出的必要接口,确保测试车辆按照算 法进行动态响应。 |
|
4. 高精地图运行时类
为决策算法提供厘米级高精度地图信息,包括路网和交通元素,支持包括路径规划和定位在内的 多种 API 调用。 |
HDMapAPI |
地图与车道分析
:提供高精地图加载及车道详细信息查询,强化定位和路由能力。
环境识别与判断 :集成交通灯、标志、停车位等环境要素的识别,辅助决策及判断。 |
|
5. 评价算法类
获取用户自定义评价功能所需要的基本仿真数据以及评价需要的用户规控算法内部相关信号。 |
EvaluationAPI | 存取评价数据 :存取用户自定义的评价功能所需的数据,用于用户自定义的评价算法。 |
1. 基础服务类 ¶
1.1 ServiceAPI ¶
1.1.1 选择车辆并初始化 ¶
注意
该操作可以设定是否使用同步帧功能
1、帧同步(保证实时性和稳定性)
2、非帧同步(提高运行效率)
| 事件 | API |
|---|---|
| 初始化 SimOne API | SIMONE_API bool InitSimOneAPI(const char* mainVehicleId = "0", bool isFrameSync = false, const char *serverIP = "127.0.0.1", int port = 23789, void(*startCase)()=0, void(*endCase)()=0, int registerNodeId=0); |
| 多车版本-初始化 SimOne API | SIMONE_API bool InitSimOneAPIEx(char** mainVehicleIdList, int count, bool isFrameSync = false, const char *serverIP = "127.0.0.1", int port = 23789, void(*startCase)() = 0, void(*endCase)() = 0, int registerNodeId = 0); |
| 初始化 SimOne API 带超时 | SIMONE_API bool InitSimOneAPIWithTimeOut(const char* mainVehicleId = "0", bool isFrameSync = false, const char *serverIP = "127.0.0.1", int port = 23789, int timeOutMS = -1, void(*startCase)() = 0, void(*endCase)() = 0, int registerNodeId = 0); |
| 多车版本 - 初始化 SimOne API 带超时 | SIMONE_API bool InitSimOneAPIExWithTimeOut(char** mainVehicleIdList, int count, bool isFrameSync = false, const char *serverIP = "127.0.0.1", int port = 23789, int timeOutMS = -1, void(*startCase)() = 0, void(*endCase)() = 0, int registerNodeId = 0); |
| 参数名 | 解释 |
|---|---|
| mainVehicleId | 主机车辆 ID(范围从 0 到 9) |
| isFrameSync | 是否同步帧 |
| serverIP | BridgeIO 服务器 IP 地址 |
| port | BridgeIO 服务器端口号 |
| startCase | 案例开始前调用的回调函数 |
| endCase | 案例结束后调用的回调函数 |
| registerNodeId | 注册节点 ID(当前未使用 |
| count | 主车辆 ID 数量 |
| timeOutMS | 超时时间,以毫秒为单位 |
1.1.2 获取主车状态 ¶
| 事件 | API |
|---|---|
| 主动获取主车状态 | SIMONE_API bool GetMainVehicleStatus(const char* mainVehicleId, SimOne_Data_MainVehicle_Status *pMainVehicleStatus); |
| 回调方式获取之车状态 | SIMONE_API bool SetMainVehicleStatusUpdateCB(void(*cb)(const char* mainVehicleId, SimOne_Data_MainVehicle_Status *pMainVehicleStatus)); |
| 参数名 | 解释 |
|---|---|
| mainVehicleId | 主车的 ID |
| SimOne_Data_MainVehicle_Status | 指向主车状态信息的指针 |
SimOne_Data_MainVehicle_Status 结构体说明:
| 参数名 | 解释 |
|---|---|
| mainVehicleId | 主车 ID 的队列 |
| mainVehicleStatus | 对应的状态 |
1.1.3 其他函数说明 ¶
| 类别 | 事件 | API |
|---|---|---|
| 退出 | 退出 API 节点 | SIMONE_API bool TerminateSimOneAPI(); |
| 获取案例信息 | 获取案例详情 | SIMONE_API bool GetCaseInfo(SimOne_Data_CaseInfo *pCaseInfo); |
| 获取案例运行状态 | SIMONE_API ESimOne_Case_Status GetCaseRunStatus(); | |
| 获取主车信息列表 | SIMONE_API bool GetMainVehicleList(SimOne_Data_MainVehicle_Info *pMainVehicleInfo); | |
| 获取高精度地图元数据信息 | SIMONE_API bool GetHDMapData(SimOne_Data_Map* hdMap); | |
| 获取当前库的版本号 | SIMONE_API const char *GetVersion(); | |
| 案例控制 | 等待并获取当前帧值 | SIMONE_API int Wait(); |
| 进行下一帧 | SIMONE_API void NextFrame(int frame); //frame 为具体的第几帧 | |
| 暂停,用于非帧同步调试 | SIMONE_API int Pause(); | |
| 继续,用于非帧同步调试 | SIMONE_API int Continue(); | |
| 自动回调帧数据 | 仿真场景中每帧的回调函数 | SIMONE_API bool SetFrameCB(void(*FrameStart)(int frame), void(*FrameEnd)(int frame)); |
| 截取节点信息 | 节点通信数据发送API | SIMONE_API bool SendRouteMessage(int length, void* pBuffer, int msgId, int toNodeId, ESimOne_Client_Type toNodeType); |
| 节点通信数据接收API | SIMONE_API bool ReceiveRouteMessageCB(void(*cb)(int fromId, ESimOne_Client_Type fromType, int length, const void* pBuffer, int commandId)); | |
| 设置日志格式 | 日志设置接口 | SIMONE_API bool SetLogOut(ESimOne_LogLevel_Type level, const char *format, ...); |
SimOne_Data_CaseInfo 如下:
| 参数名 | 解释 |
|---|---|
| caseName | 案例名称 |
| caseId | 案例 ID |
| taskId | 任务 ID |
SimOne_Data_MainVehicle_Info 结构如下:
| 参数名 | 解释 |
|---|---|
| size | 车辆数量 |
| id_list | 车辆 ID |
| type_list | 车辆类型 |
SimOne_Data_Map 结构如下:
| 参数名 | 解释 |
|---|---|
| openDrive | 地图名称 |
| openDriveUrl | 地图下载的URL |
| opendriveMd5 | 地图文件的MD5值 |
2. 传感器类 ¶
2.1 SensorAPI ¶
| 新增 | 获得所有传感器的配置信息(Id/类型/频率/位置和朝向等) |
GetSensorConfigurations
|
SoGetSensorConfigurations
|
|---|---|---|---|
| 新增 | 获取传感器检测到地面喷漆信息(包括车道停止线/地面箭头/人行横道线) |
GetSensorRoadMarkInfo
|
SoGetSensorRoadMarkInfo
|
| 获取传感器检测到地面喷漆信息(包括车道停止线/地面箭头/人行横道线数据回调) |
SetSensorRoadMarkInfoCB
|
SoApiSetSensorRoadMarkInfoCB
|
2.1.1 GPS ¶
GPS 获取数据的 API 有:
| 事件 | API |
|---|---|
| 获取主车 GPS 信息 | SIMONE_NET_API bool GetGps(int mainVehicleId, SimOne_Data_Gps *pGps) |
| 主车 GPS 更新回调 | SIMONE_NET_API bool SetGpsUpdateCB(void(cb)(int mainVehicleId, SimOne_Data_GpspGps)) |
-
mainVehicleId 为主车 ID; pGps 的数据结构 SimOne_Data_Gps 如下:
| 数据 | 解释 |
|---|---|
| float posX; | Opendrive 中地图坐标系位置信息 X 坐标(单位 米) |
| float posY; | Opendrive 中地图坐标系位置信息 Y 坐标(单位 米) |
| float posZ; | Opendrive 中地图坐标系位置信息 Z 坐标(单位 米) |
| float oriX; | Opendrive 中地图坐标系旋转位置信息 X 坐标(单位 弧度) |
| float oriY; | Opendrive 中地图坐标系旋转位置信息 Y 坐标(单位 弧度) |
| float oriZ; | Opendrive 中地图坐标系旋转位置信息 Z 坐标(单位 弧度) |
| float velX; | Opendrive 中地图坐标系速度信息 X 坐标(单位 m/s) |
| float velY; | Opendrive 中地图坐标系速度信息 Y 坐标(单位 m/s) |
| float velZ; | Opendrive 中地图坐标系速度信息 Z 坐标(单位 m/s) |
| float throttle; | 主车油门 |
| float brake; | 主车刹车 |
| float steering; | 主车方向盘 |
| int gear; | 主车档位 |
| float accelX; | Opendrive 中地图坐标系加速度 X 坐标(单位 m/s^2) |
| float accelY; | Opendrive 中地图坐标系加速度 Y 坐标(单位 m/s^2) |
| float accelZ; | Opendrive 中地图坐标系加速度 Z 坐标(单位 m/s^2) |
| float angVelX; | Opendrive 中地图坐标系速度方向在 X 坐标(单位 弧度) |
| float angVelY; | Opendrive 中地图坐标系速度方向在 Y 坐标(单位 弧度) |
| float angVelZ; | Opendrive 中地图坐标系速度方向在 Z 坐标(单位 弧度) |
| float wheelSpeedFL; | 主车前面左轮的转速(单位 m/s) |
| float wheelSpeedFR; | 主车前面右轮的转速(单位 m/s) |
| float wheelSpeedRL; | 主车后面左轮的转速(单位 m/s) |
| float wheelSpeedRR; | 主车后面面右轮的转速(单位 m/s) |
| float engineRpm; | 发动机转速(单位 r/min) |
| float odometer; | 主车里程表(单位 米) |
2.1.2 摄像头以及目标级摄像头 ¶
2.1.2.1 物理级摄像头
| 事件 | API |
|---|---|
| 获取图像信息 | SIMONE_NET_API bool GetImage(const int mainVehicleId, const int sensorId, SimOne_Data_Image *pImage) |
| 设置图像更新回调 | SIMONE_NET_API bool SetImageUpdateCB(void(cb)(int mainVehicleId, int sensorId, SimOne_Data_ImagepImage)) |
| 获取流式图像信息 | SIMONE_NET_API bool GetStreamingImage(const char ip, unsigned short port, SimOne_Data_ImagepImage) |
| 设置流式图像回调 | SIMONE_NET_API bool SetStreamingImageCB(const char* ip, unsigned short port, void(cb)(SimOne_Data_ImagepImage)) |
mainVehicleId 为主车 ID; sensorId 为摄像头 ID; ip 为接收机器的 ip 地址; port 为分配的端口号; pImage 为每帧图像信息; SimOne_Data_Image 的结构如下:
| 数据 | 解释 |
|---|---|
| int width; | 图像的宽度 |
| int height; | 图像的高度 |
| SimOne_Image_Format format; | 图像的格式目前只支持 RGB(每通道 8 位) |
| int imageDataSize; | 图像的大小 |
| Char imageData[SOSM_IMAGE_DATA_SIZE_MAX]; | 图像数据存储数组,最大 1920 x 1200 x 3 |
1 与 2 方式获取物理级摄像头信息时不需要配置 UDP 信息,仅以 3 、4 的方式获取物理级图像信息时,需要在网页端订阅通道上配置 UDP 信息例如:udp://127.0.0.1:13956,截图如下:
2.1.2.2 目标级摄像头
| 事件 | API |
|---|---|
| 获取传感器检测到物体的对应真值 (支持的传感器包括目标级相机/目标级激光雷达/完美传感器) | |
| 传感器真值信息更新回调 (支持的传感器包括目标级相机/目标级激光雷达/完美传感器) | |
| 获取传感器检测到车道与车道线数据 (仅目标级相机和融合传感器支持) | |
| 获取传感器检测到车道与车道线数据 回调 |
-
其中 pGroundtruth 为目标信息集合, SimOne_Data_SensorDetections 结构如下:
| 数据 | 解释 |
|---|---|
| int objectSize; | 目标数量 |
| SimOne_Data_SensorDetections_Entry objects[SOSM_SENSOR_DETECTIONS_OBJECT_SIZE_MAX]; | 目标存储集合,最多存储 256 个目标 |
-
SimOne_Data_SensorDetections_Entry 结构如下:
| 数据 | 解释 |
|---|---|
| int id; | 目标 ID |
| SimOne_Obstacle_Type type; | 目标类型,与目标物理材质对应类型一致 |
| float posX; | 目标在世界坐标系中的 X 坐标(单位 米) |
| float posY; | 目标在世界坐标系中的 Y 坐标(单位 米) |
| float posZ; | 目标在世界坐标系中的 Z 坐标(单位 米) |
| float oriX; | 目标在世界坐标系中的 X 轴方向的旋转坐标(单位 弧度) |
| float oriY; | 目标在世界坐标系中的 Y 轴方向的旋转坐标(单位 弧度) |
| float oriZ; | 目标在世界坐标系中的 Z 轴方向的旋转坐标(单位 弧度) |
| float length; | 目标的长度(单位 米) |
| float width; | 目标的宽度(单位 米) |
| float height; | 目标的高度(单位 米) |
| float range; | 目标相对于传感器的距离(单位 米) |
| float velX; | 目标在 X 轴上的速度(单位 km/h) |
| float velY; | 目标在 Y 轴上的速度(单位 km/h) |
| float velZ; | 目标在 Z 轴上的速度(单位 km/h) |
| float probability; | 目标为当前类型的置信度(0~1 之间) |
| float relativePosX; | 目标相对于传感器的 X 坐标(单位 米) |
| float relativePosY; | 目标相对于传感器的 Y 坐标(单位 米) |
| float relativePosZ; | 目标相对于传感器的 Z 坐标(单位 米) |
| float relativeRotX; | 目标相对于传感器的 X 轴方向的旋转坐标(单位 米) |
| float relativeRotY; | 目标相对于传感器的 Y 轴方向的旋转坐标(单位 米) |
| float relativeRotZ; | 目标相对于传感器的 Z 轴方向的旋转坐标(单位 米) |
| float relativeVelX; | 目标相对于传感器的 X 轴方向的速度坐标(单位 km/h) |
| float relativeVelY; | 目标相对于传感器的 Y 轴方向的速度坐标(单位 km/h) |
| float relativeVelZ; | 目标相对于传感器的 Z 轴方向的速度坐标(单位 km/h) |
| float bbox2dMinX ; | 像素坐标系下目标的 2d 包围盒左上角 X 坐标 |
| float bbox2dMinY ; | 像素坐标系下目标的 2d 包围盒左上角 Y 坐标 |
| float bbox2dMaxX ; | 像素坐标系下目标的 2d 包围盒右下角 X 坐标 |
| float bbox2dMaxY ; | 像素坐标系下目标的 2d 包围盒右下角 Y 坐标 |
-
其中 pLaneInfo 为车道信息集合, SimOne_Data_LaneInfo 结构如下:
| 数据 | 解释 |
|---|---|
| int id; | 车道 ID |
| ESimOneLaneType laneType; | 车道类型 |
| int laneLeftID; | 当前车道的左边车道 ID |
| int laneRightID; | 当前车道的右边车道 ID |
| int lanePredecessorID[SOSM_SENSOR_LANE_OBJECT_SIZE_MAX]; | 当前车道前继集合最大 256 |
| int laneSuccessorID[SOSM_SENSOR_LANE_OBJECT_SIZE_MAX]; | 当前车道后继集合最大 256 |
| 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; | 当前车道右右边缘线信息 |
2.1.3 理想传感器 ¶
-
理想传感器是用来获取目标真值的,只有目标级信息。与理想传感器相关的 API 有:
| 事件 | API |
|---|---|
| 获得仿真场景中的物体真值信息 | |
| 获得仿真场景中的物体真值信息更新回调 | |
| 获取传感器检测到物体的对应真值(支持的传感器包括目标级相机/目标级激光雷达/完美传感器) | |
| 传感器真值信息更新回调(支持的传感器包括目标级相机/目标级激光雷达/完美传感器) |
-
其中 3 4 上面已经介绍过,1 2 中 SimOne_Data_Obstacle 结构如下:
| 数据 | 解释 |
|---|---|
| int obstacleSize; | 目标数量 |
| SimOne_Data_Obstacle_Entry obstacle[SOSM_OBSTACLE_SIZE_MAX]; | 目标存储数组最多存储 100 个 |
-
SimOne_Data_Obstacle_Entry 结构如下:
| 数据 | 解释 |
|---|---|
| int id; | 目标 ID |
| int viewId; | 目标可视化 ID |
| SimOne_Obstacle_Type type; | 目标类型,与目标物理材质对应类型一致 |
| float theta; | 全局坐标系方位角,这里用的是 oriZ 的值 |
| float posX; | 目标在世界坐标系中的 X 坐标(单位 米) |
| float posY; | 目标在世界坐标系中的 Y 坐标(单位 米) |
| float posZ; | 目标在世界坐标系中的 Z 坐标(单位 米) |
| float oriX; | 目标在世界坐标系中的 X 轴方向的旋转坐标(单位 弧度) |
| float oriY; | 目标在世界坐标系中的 Y 轴方向的旋转坐标(单位 弧度) |
| float oriZ; | 目标在世界坐标系中的 Z 轴方向的旋转坐标(单位 弧度) |
| float velX; | 目标在 X 轴上的速度(单位 km/h) |
| float velY; | 目标在 Y 轴上的速度(单位 km/h) |
| float velZ; | 目标在 Z 轴上的速度(单位 km/h) |
| float length; | 目标的长度(单位 米) |
| float width; | 目标的宽度(单位 米) |
| float height; | 目标的高度(单位 米) |
2.1.4 超声波雷达 ¶
超声波雷达用来探测目标离传感器的相对距离,以及返回目标的位置信息,相关的 API 如下:
| 事件 | API |
|---|---|
| 获得一个超声波雷达信息 | SIMONE_NET_API bool GetUltrasonicRadar(int mainVehicleId, int sensorId, SimOne_Data_UltrasonicRadar *pUltrasonic) |
| 获得所有超声波雷达信息 | SIMONE_NET_API bool GetUltrasonicRadars(int mainVehicleId, SimOne_Data_UltrasonicRadars *pUltrasonics) |
| 超声波雷达真值信息更新回调 | SIMONE_NET_API bool SetUltrasonicRadarsCB(void(cb)(int mainVehicleId, SimOne_Data_UltrasonicRadarspUltrasonics)) |
1 获取的是单个超声波雷达的信息,而 2 返回的是所有超波雷达信息的集合;
-
SimOne_Data_UltrasonicRadar 的结构如下:
| 数据 | 解释 |
|---|---|
| int id; | 超声波 ID |
| int obstacleNum; | 超声雷达检测到目标的数量 |
| SimOne_Data_UltrasonicRadarDetection_Entry obstacledetections[SOSM_OBSTACL_SIZE_MAX]; | 检测到目标集合,最多存储 100 个 |
-
SimOne_Data_UltrasonicRadarDetection_Entry 的结构如下:
| 数据 | 解释 |
|---|---|
| float obstacleRanges = 0; | 目标力传感器的距离(单位米) |
| float x = 0; | 目标相对于传感器的 x 坐标(单位米) |
| float y = 0; | 目标相对于传感器的 y 坐标(单位米) |
-
SimOne_Data_UltrasonicRadars 的结构如下:
| 数据 | 解释 |
|---|---|
| int UltrasonicRadarsNum; | 超声波雷达数量 |
| SimOne_Data_UltrasonicRadar ultrasonicRadars[SOSM_ULTRASONICRADAR_SIZE_MAX]; | 超声波雷达存储集合,最多存储 100 个 |
2.1.5 毫米波雷达 ¶
毫米波雷达用来探测目标距离,速度,角度信息,相关的 API 如下:
| 事件 | API |
|---|---|
| 获得毫米波雷达目标信息 | SIMONE_NET_API bool GetRadarDetections(const int mainVehicleId, const int sensorId, SimOne_Data_RadarDetection *pDetections) |
| 毫米波雷达目标信息更新回调 | SIMONE_NET_API bool SetRadarDetectionsUpdateCB(void(cb)(int mainVehicleId, int sensorId, SimOne_Data_RadarDetectionpDetections)) |
-
输入:mainVehicleId 为主车 ID;sensorId 为毫米波雷达 ID;
-
输出:SimOne_Data_RadarDetection *pDetections,其结构体如下:
-
struct SimOne_Data_RadarDetection : public SimOne_Data
-
| 数据 | 解释 |
|---|---|
| int detectNum; | 目标物个数 |
| SimOne_Data_RadarDetection_Entry detections[SOSM_RADAR_SIZE_MAX]; | 目标物集合 |
-
struct SimOne_Data_RadarDetection_Entry
| 数据 | 解释 |
|---|---|
| int id; | 目标物 ID |
| int subId; | 目标物子 ID |
| SimOne_Obstacle_Type type; | 目标物类型 |
| float posX; | 目标物在雷达坐标系的 X 轴位置(雷达坐标系采用右手坐标:前进方向为 X,正上方向为 Z) |
| float posY; | 目标物在雷达坐标系的 Y 轴位置 |
| float posZ; | 目标物在雷达坐标系的 Z 轴位置 |
| float velX; | 目标物在雷达坐标系的 X 轴速度 |
| float velY; | 目标物在雷达坐标系的 Y 轴速度 |
| float velZ; | 目标物在雷达坐标系的 Z 轴速度 |
| float range; | 目标物在雷达坐标系的距离 |
| float rangeRate; | 目标物在雷达坐标系的径向速度 |
| float azimuth; | 目标物在雷达坐标系的水平角度 |
| float vertical; | 目标物在雷达坐标系的垂直角度 |
| float snrdb; | 目标物回波信号的信噪比 |
| float rcsdb; | 目标物 RCS 值 |
| float probability; | 目标物置信度 |
2.1.6 激光雷达以及目标级激光雷达 ¶
2.1.6.1 物理级激光雷达
| 事件 | API(貌似删除了?) |
|---|---|
| 1 | SIMONE_NET_API bool GetPointCloud(int mainVehicleId, int sensorId, SimOne_Data_Point_Cloud *pPointCloud) |
| 2 | SIMONE_NET_API bool SetPointCloudUpdateCB(void(cb)(int mainVehicleId, int sensorId, SimOne_Data_Point_CloudpPointCloud)) |
| 3 | SIMONE_NET_API bool GetStreamingPointCloud(const char ip, unsigned short port, unsigned short infoPort,SimOne_Data_Point_CloudpPointCloud) |
| 4 | SIMONE_NET_API bool SetStreamingPointCloudUpdateCB(const char* ip, unsigned short port,unsigned short infoPort, void(cb)(SimOne_Data_Point_CloudpPointCloud)) |
mainVehicleId 为主车 ID; sensorId 为激光雷达 ID; ip 为接收机器的 ip 地址; port 为激光雷达数据端口号; infoPort 为用户配置数据端口; pPointCloud 为每帧点云信息, SimOne_Data_Point_Cloud 的结构如下:
1 与 2 方式获取激光雷达信息时不需要配置 UDP 信息,仅以 3、4 的方式获取物理级激光雷达信息时,需要在网页端通道上配置 UDP 信息例如:udp://127.0.0.1:6699,截图如下:
2.1.6.2 目标级激光雷达
| 事件 | API |
|---|---|
| 1 | SIMONE_NET_API bool GetSensorDetections(int mainVehicleId, int sensorId, SimOne_Data_SensorDetections *pGroundtruth) |
| 2 | SIMONE_NET_API bool SetSensorDetectionsUpdateCB(void(cb)(int mainVehicleId, int sensorId, SimOne_Data_SensorDetectionspGroundtruth)) |
其中 pGroundtruth 与 SimOne_Data_SensorDetections 结构已经在摄像头与目标级摄像头 API 中已介绍。
2.1.7 目标级融合传感器 ¶
| 事件 | API |
|---|---|
| 获取传感器检测到物体的对应真值(支持的传感器包括目标级相机/目标级激光雷达/完美传感器) | SIMONE_NET_API bool GetSensorDetections(int mainVehicleId, int sensorId, SimOne_Data_SensorDetections *pGroundtruth) |
| 传感器真值信息更新回调(支持的传感器包括目标级相机/目标级激光雷达/完美传感器) | SIMONE_NET_API bool SetSensorDetectionsUpdateCB(void(cb)(int mainVehicleId, int sensorId, SimOne_Data_SensorDetectionspGroundtruth)) |
| 获取传感器检测到车道与车道线数据(仅目标级相机和融合传感器支持) | SIMONE_NET_API bool GetSensorLaneInfo(int mainVehicleId, int sensorId, SimOne_Data_LaneInfo *pLaneInfo) |
| 获取传感器检测到车道与车道线数据回调 | SIMONE_NET_API bool SetSensorLaneInfoCB(void(cb)(int mainVehicleId, int sensorId, SimOne_Data_LaneInfopLaneInfo)) |
其中 pGroundtruth 、 SimOne_Data_SensorDetections 、 SimOne_Data_LaneInfo 结构已经在摄像头与目标级摄像头 API 中已介绍。
2.2 StreamingAPI ¶
| 名称 | 事件 | C++ API | Python API |
|---|---|---|---|
| 物理级传感器流式传输 | 实时获取图像数据(图像格式包括 RGB/JPEG/Segmentation/H.265 等) |
GetStreamingImage
|
SoGetStreamingImage
|
| 设置实时图像数据更新回调(图像格式包括 RGB/JPEG/Segmentation/H.265 等) |
SetStreamingImageUpdateCB
|
SoApiSetStreamingImageUpdateCB
|
|
| 实时获取 SimOne_Streaming_Point_Cloud 格式点云数据 |
GetStreamingPointCloud
|
SoGetStreamingPointCloud
|
|
| 设置点云数据更新回调 |
SetStreamingPointCloudUpdateCB
|
SoApiSetStreamingPointCloudUpdateCB
|
2.3 V2XAPI ¶
V2X(车联网)技术关键在于两部分设备: OBU 和 RSU ,它们通过无线通信方式实现车与车以及车与路边设施之间的互联。具体的设备功能和通信方式如下表所示:
| 序号 | 组件 | 设施 | 描述 | 通信方式 |
|---|---|---|---|---|
| 1 | OBU (车载端) | 车辆内部安装 | 作为车辆通信节点 | 直连 RSU;与其他 OBU 通过 LTE 广播通信 |
| 2 | RSU (路侧端) | 路边设施安装 | 类似大型 WIFI,支持车辆通信 | 广播 CSAE2020 标准信息给所有车辆 OBU |
在 CSAE2020 标准下, RSU 负责将关键安全和导航信息以广播的方式传输给车载的 OBU ,确保车辆及时获取重要通信。
详细的广播消息类型及其描述如右表所示:
| 消息类型 | 覆盖内容 |
|---|---|
| SPAT | 信号灯状态信息,例如红绿灯变换 |
| RSI | 路侧信息,涉及道路状况例如施工、限速等 |
| RSM | 路侧安全信息,包括事故报告、车辆异常等 |
| MAP | 地图信息,详细描述路口设计及其信号灯相位信息 |
2.3.1 V2X API 概览 ¶
| 事件 | API |
|---|---|
| 获取主车通过 OBU 接收到的特定 V2X 消息 | SIMONE_API bool GetV2XInfo(const char* mainVehicleId, const char* sensorId, int infoType, SimOne_Data_V2XNFS*pDetections) |
| 设置回调函数,以获取所有接收到的 V2X 消息 | SIMONE_API bool SetV2XInfoUpdateCB(void(cb)(const char mainVehicleId, const char* sensorId, SimOne_Data_V2XNFS*pDetections)) |
2.3.2 API 详细说明 ¶
2.3.2.1
GetV2XInfo
函数
用于获取指定类型的 V2X 消息。
| 参数 | 参数 | 类型 | 描述 |
|---|---|---|---|
| 输入 | mainVehicleId | const char* | 主车 ID。 |
| sensorId | const char* | OBU 设备 ID。 | |
| infoType | int | 要获取的 V2X 消息类型。 | |
| 输出 | pDetections | SimOne_Data_V2XNFS* | 返回的 V2X 消息。 |
2.3.2.2
SetV2XInfoUpdateCB
函数
用于设置 V2X 消息更新的回调,确保消息实时更新且无数据丢失。
| 参数 | 参数 | 类型 | 描述 |
|---|---|---|---|
| 输入 | cb | function | 回调函数。 |
| mainVehicleId | const char* | 主车 ID。 | |
| sensorId | const char* | OBU 设备 ID。 | |
| 输出 | pDetections | SimOne_Data_V2XNFS* | 返回的 V2X 消息。 |
2.3.2.3 V2X 消息结构体
SimOne_Data_V2XNFS
说明:
| 字段名称 | 类型 | 描述 |
|---|---|---|
| infoType | int | 消息类型,按照 ESimOne_V2X_MessageFrame_PR 枚举定义 |
| V2XMsgFrameSize | int | 消息的字节大小 |
| MsgFrameData | char[SOSM_V2X_MSGFRAME_SIZE_MAX] | ASN 编码的十六进制字符形式的应用层消息 |
注意 :更详细的消息定义可参考《CSAE 2020 合作式智能运输系统 - 车用通信系统应用层及应用数据交互标准》。
3. 控制通信类 ¶
3.1 PNCAPI ¶
调用示例可参考 调用示例 。
4. 高精地图运行时类 ¶
4.1 HDMapAPI ¶
高精度地图路网运行时目前提供的 API 包括功能为: 全图查询,定位,路由,交通灯和标志牌,停车位 等。
4.1.1 基本概念 ¶
-
坐标系统 :对于高精度地图而言,系统提供 Local ENU 和 s-t 两种坐标系统 。
A. 世界坐标系/站心直角坐标系(Local ENU) 世界坐标系为 x,y,z 右手坐标系
惯例适用于地理参考,即对应站心直角坐标系,x 为正东(East,E),y 为正北(North,N),z 为 Up(U)。
B. 参考线坐标系/轨道系统 s-t 坐标系(Track System s-t coordinate)
路网运行时根据不同参考线基准分别定义了 2 个 s-t 坐标系:
-
以 道路参考线 为基准定义 s-t 坐标系
-
以 车道虚拟中心线 为基准定义 s-t 坐标系
-
车道标识符 :高精度地图中的
laneName为车道提供了唯一标识,结合道路编号、路段索引和车道编号,实现了精准的车道信息查询和定位。-
标识符格式 :
$roadId_sectionIndex_laneId-
$roadId: 道路的唯一编号。 -
_sectionIndex: 道路中特定路段的索引,用于标识道路的不同部分。 -
_laneId: 车道编号,在每个路段中独一无二。
-
例如:
-
"1_0_-1"表示道路编号为 1 的路段索引 0 上的右侧第一条车道( 负号表示右侧 )。 -
"1_0_2"表示同一路段上左侧的第二条车道( 正号表示左侧 )。
-
-
坐标转换 :LocalENU(x,y,z) 坐标和 [s,t] 坐标相互转换
-
Road 参考线体系下的 [s,t] 坐标
-
定义: 以 道路参考线 为基准线,参考线右侧 t 值为负,左侧 t 值为正
-
例子: * *P(-51.5,-73.5)对应 Road 1 的[s,t]坐标系的值是(7,-5.25)
-
-
Lane 虚拟中心线体系下的 [s,t] 坐标
-
定义: 以 车道虚拟中心线 为基准线,基准线右侧 t 为负,左侧 t 为正,主车沿着车道虚拟中心线行驶,那么 t 值永远为 0
-
例子 :P(-51.5,-73.5),对应 Lane “1_0_-2”的[s,t]坐标系的值是(7,0);对应 Lane “1_0_-1”的[s,t]坐标系的值是(7,-3.5)
-
-
-
定位障碍物 :使用 Road 参考线体系下的[s,t]坐标,我们可以确定障碍物相对于主车前进方向的横向距离(t)和纵向距离(s)。
-
定义 :以道路参考线为基准线,参考线右侧 t 值为负,左侧 t 值为正,S 是沿着道路参考线的累加值
-
例子 :主车相对于道路的 ST 坐标(25,-5.25)
-
4.1.2 全局查询 ¶
4.1.3 定位 ¶
4.1.4 路由 ¶
5. 评价算法类 ¶
5.1 EvaluationAPI ¶
5.1.1 评价 API 功能介绍 ¶
Simone 支持用户自定义评价功能,EvaluationAPI 用于获取存储用户自定义的评价功能所需的数据,主要为:
(1)仿真过程数据,例如主车以及障碍物的位姿数据等;
(2)用户规控算法的内部输出信号,例如状态机信号、控制信号等;
5.1.2 评价 API 存储数据的方式 ¶
目前存储用户自定义评价所需数据的方式有两种:本地文件存储与数据库存储。
对应的 API 如下:
| API 功能 | API |
|---|---|
| 用于获取仿真过程数据,并将数据存储到数据库中。 |
InitEvaluationService
|
| 用于获取仿真过程数据,并将数据存储到本地文件。 |
InitEvaluationServiceWithLocalData
|
| 保存评价算法所需的各类信息(JSON 格式)。 |
SaveEvaluationRecord
|
5.1.3 评价 API 添加规控算法内部信号 ¶
用户自定义评价算法需要的数据除了仿真过程数据,有些可能还需要特定的规控算法内部信号,用户可以通过 API 自行添加评价所需要的数据,例如变道信号、控制信号等。
| API 功能 | API |
|---|---|
| 添加评价算法所需的各类信息(JSON 格式),信号格式示例:{"category": "signal", "timestamp": 1648363819335, "ACC": "on", "ACCSpeed": 20} |
AddEvaluationRecord
|