传感器类
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)) |
其中 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_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、SimOne_Data_LaneInfo 结构已在摄像头与目标级摄像头 API 中介绍。