跳转至

传感器类

2.1 SensorAPI

新增 获得所有传感器的配置信息(Id/类型/频率/位置和朝向等) GetSensorConfigurations SoGetSensorConfigurations
新增 获取传感器检测到地面喷漆信息(包括车道停止线/地面箭头/人行横道线) GetSensorRoadMarkInfo SoGetSensorRoadMarkInfo
获取传感器检测到地面喷漆信息(包括车道停止线/地面箭头/人行横道线数据回调) SetSensorRoadMarkInfoCB SoApiSetSensorRoadMarkInfoCB

传感器仿真类型说明

传感器在自动驾驶系统中的应用可以分为 目标级物理级 两大类,分别服务于不同的应用场景:

传感器类型 激活 API
目标级传感器 — 获取目标对象的信息(如位置、速度等),用于传感器融合算法 enable 参数设置为 true 开始接收数据:SIMONE_NET_API bool SetSensorObjectbasedDataEnable(bool enable);
物理级传感器 — 提供图像和点云等物理信息,用于测试和验证感知算法 enable 参数设置为 true 开始接收数据:SIMONE_NET_API bool SetSensorPhysicalbasedDataEnable(bool enable);

注意

使用 UDP 数据注入方法获取物理级传感器数据时,不需要激活传感器的 API,因为 UDP 注入会直接提供所需的数据。

*UDP(User Datagram Protocol,用户数据报协议):一种简单的网络通信协议,允许应用程序在不建立稳定连接的情况下发送数据包。

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_Gps pGps))
  • 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_Image pImage))
获取流式图像信息 SIMONE_NET_API bool GetStreamingImage(const char ip, unsigned short port, SimOne_Data_Image pImage)
设置流式图像回调 SIMONE_NET_API bool SetStreamingImageCB(const char ip, unsigned short port, void(cb)(SimOne_Data_Image *pImage))

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
获取传感器检测到物体的对应真值(支持的传感器包括目标级相机/目标级激光雷达/完美传感器) 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_SensorDetections *pGroundtruth))
获取传感器检测到车道与车道线数据(仅目标级相机和融合传感器支持) 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_LaneInfo *pLaneInfo))
  • 其中 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
获得仿真场景中的物体真值信息 SIMONE_NET_API bool GetObstacle(const char* mainVehicleId, SimOne_Data_Obstacle *pObstacle)
获得仿真场景中的物体真值信息更新回调 SIMONE_NET_API bool SetObstacleUpdateCB(void(*cb)(const char* mainVehicleId, SimOne_Data_Obstacle *pObstacle))
获取传感器检测到物体的对应真值(支持的传感器包括目标级相机/目标级激光雷达/完美传感器) 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_SensorDetections *pGroundtruth))
  • 其中 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_UltrasonicRadars pUltrasonics))

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_RadarDetection pDetections))
  • 输入: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_Cloud pPointCloud))
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_Cloud *pPointCloud))

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_SensorDetections pGroundtruth))

其中 pGroundtruthSimOne_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_SensorDetections pGroundtruth))
获取传感器检测到车道与车道线数据(仅目标级相机和融合传感器支持) 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_LaneInfo pLaneInfo))

其中 pGroundtruthSimOne_Data_SensorDetectionsSimOne_Data_LaneInfo 结构已在摄像头与目标级摄像头 API 中介绍。