智能驾驶功能软件平台设计规范 第二部分:感知融合功能服务接口
版本:1.0 2020-07-29 发布
本规范规定了智能驾驶功能软件平台中的感知融合功能服务接口。
本规范适用于设计开发 GB/T《汽车驾驶自动化分级》[1]所定义的 2 级及以上的驾驶自动化系统即智能驾驶系统。
本规范的引用和参考文件见下表:
[1] GB/T《汽车驾驶自动化分级》
[2] ISO/DIS 23150:2020(E) Road vehicles — Data communication between sensors and data fusion unit for automated driving functions — Logical interface [3] ISO 8855:2011 Road vehicles — Vehicle dynamics and road-holding ability
[4] ADASIS(Advanced Driver Assistance Systems Interface Specification) v3
[5] 智能驾驶功能软件平台设计规范 第一部分:系统架构
[6] 智能驾驶功能软件平台设计规范 第三部分:预测功能服务接口
[7] 智能驾驶功能软件平台设计规范 第四部分:定位功能服务接口
[8] 智能驾驶功能软件平台设计规范 第五部分:决策规划功能服务接口
文档中可能使用到的缩写说明如下所示:
缩略语 英文全名 中文解释
AD Autonomous Driving 自动驾驶
ADAS Advanced driver-assistance systems 高级辅助驾驶系统
ODD Operational Design Domain 设计运行区域
APP Application 应用程序
VCS Vehicle Coordination System 车体坐标系
智能驾驶功能软件平台基于不同厂商的技术实现方案进行功能抽象,共分为传感器抽象功能、感知融合功能、预测功能、决策规划功能、定位功能和执行器抽象 6 个功能模块。主机厂基于自身策略,在设计和开发功能软件时可以选择不同的功能模块和算法组件,实现拼插式功能组合,灵活构建智能驾驶系统级解决方案。
感知融合功能是指在传感器抽象层的输入数据基础上进行信息融合,结合多种传感器的特性、工况和环境信息,完成对物理世界的数字呈现,作为整体环境的动态输入,是整个智能驾驶功能决策的基础。感知融合功能可以支持不同传感器的组合实现不同的感知任务,传感器组合可以是激光雷达,摄像头和毫米波雷达中的一种或者多种。感知任务包括移动目标检测与跟踪、自由空间、交通灯和交通标志识别、道路结构识别等。
按照“应用、服务”分解成单个、自包含的算法组件的原则,感知融合功能可以提供下列算法组件以及对应的服务接口:
目标识别和跟踪服务接口
道路结构服务接口
交通标志服务接口
静态目标服务接口
可行驶空间服务接口
自车状态服务接口
泊车位信息服务接口
环境模型服务接口
本规范规定了感知融合功能对外提供的逻辑接口,定义了服务所提供信息的语义和数据类型,逻辑接口主要由数据包头和数据体两部分组成。
数据格式 Integer 表示整数类型,Float 表示实数类型;
可选必选列表明信号在接口中是否必选,M 代表必选,O 代表可选。
目标识别和跟踪服务接口主要提供动态和静态目标的检测和跟踪服务,包括交通参与者信息、道路标志、静态目标等信息。
道路结构信息服务接口主要提供道路标线和停止线的识别信息,信息包括车道线类型,置信度,曲线表示,特征点集合等信息。
交通标志服务接口主要提供交通灯和交通标志的识别信息,主要是交通灯和交通标志中的指示信息,包括动态和静态语义信息,是当前交通规则的约束信息。接口至少需要包含一个交通灯或者交通标志的信息。
可行驶空间服务接口主要提供自车附近可供自车行驶的自由空间信息,通过在车辆坐标系下的可行驶特征点和栅格信息来表示。
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-BsZfAFgU-1660531209982)(https://gitee.com/er-huomeng/l-img/raw/master/image-20211117141033211.png)]
自车状态服务采集车辆当前状态,满足后续车辆实现动态智能驾驶业务需求。
泊车位信息服务接口,提供停车场区域内车位检测服务,输出泊车位信息集合。
环境、世界模型服务提供当前车辆所处环境信息以及车辆自身状态信息,这些信息是前述服务的一个集合,并在时间上进行对齐,反应在一个时间轴剖面上的车辆内外环境信息。
标准元数据包头是感知融合功能服务接口的通用包头,主要包含算法组件信息、版本信息,序列号、时间戳、采用坐标系信息、模块状态信息等。
二维坐标信息表示二维平面的点或者向量信息。
三维坐标信息表示三维平面的点或者向量信息。
二维多边形提供了多边形的二维特征点数组信息。
三维多边形提供了多边形的三维特征点数组信息。
边框信息主要提供物体轮廓的长宽高信息。
四元数信息用来表示三维空间中的旋转信息。
位置变换信息主要提供了目标位置的平动和转动信息。
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-NlY3G1sF-1660531209989)(https://gitee.com/er-huomeng/l-img/raw/master/image-20211117141340171.png)]
位姿信息主要提供目标位姿信息,包括位置、姿态和协方差。
速度信息提供了目标的线速度和角速度信息以及协方差信息。
加速度信息提供了目标的线加速度和角加速度信息以及协方差信息。
动静态目标元数据提供了目标识别和跟踪信息,包括目标标识,类型,存在概率,跟踪时间,几何尺寸,速度,加速度,车道关系和灯光信息等。
车道线元数据主要提供车道线的类型、置信度、双曲线表示信息等。
停止线元数据提供了停止线类型、置信度,起点和终点的信息。
交通灯元数据提供了交通灯的类型、颜色、位置、剩余时间信息。
交通标志元数据信息包括了交通标志的类型、位置和对应车道。
车辆坐标系下,构建栅格描述自由空间:格栅的范围是汽车左30米,右30米,前250米, 后80米。
栅格单元信息表明栅格单元的占用状态和占用概率。
泊车位元数据表明泊车位的类型,位置,置信度等特征信息。
车辆状态元数据表明车辆的状态信息,包括转向信息、速度信息、加速度信息、控制模式、发动机状态等。
(资料性附录)
感知融合服务接口 protobuf 描述
// common.proto
message Header{
required uint32 ModuleID=1;
message VersionID{
required uint32 major=1;
required uint32 minor=2;
required uint32 patch=3;
}
required VersionID vid=2;
required uint32 sequenceNum=3;
message timeStamp{
required uint64 timeStampS=1;
required uint64 timeStampNs=2;
}
required timeStamp TimeStamp=4;
enum FRAMETYPE{
NA=0;
VCS=1;
WGS84=2;
UTM=3;
}
required FRAMETYPE Frame=5;
emum STATUS{
GOOD=0;
MED=1;
FAILURE=2;
}
required STATUS Status =6;
}
message Point2D{
required double x=1;
required double y=2;
}
message Point3D{
required double x=1;
required double y=2;
required double z=3;
}
message Polygon2D{
repeated point2D p2d=1;
}
message Polygon3D{
repeated point3D p3d=1;
}
message Dimension{
required double height=1;
required double width=2;
required double length=3;
}
message Quaternion {
required double qx = 1 ;
required double qy = 2 ;
required double qz = 3 ;
required double qw = 4 ;
}
message Transformation{
required Point3D Translation=1;
required Quaternion Rotation=2;
}
message Pose{
required Point3D Position=1;
required Quaternion Orientation=2;
required double Covariance=3;
}
message Velocity{
required Point3D Linear=1;
required Point3D Angular =2;
repeated double Covariance=3;
}
message Acceleration{
required Point3D Linear=1;
required Point3D Angular =2;
repeated double Covariance=3;
}
message Object{
required uint32 objectId=1;
enum OBJECTYPE{
Pedestrian=1;
Cyclist=2;
Car=3;
Truck=4;
Tram=5;
Motorcycle=6;
Bicycle=7;
Tricycle=8;
TrafficLight=9;
TrafficSign=10;
RoadSign=11;
TrafficCone=12;
TrafficStick=13;
BillBoard=14;
ParkingSlot=15;
FireHydrant=16;
Unknow_static=17;
Unknow_movable=18;
}
required OBJECTYPE objectType=2;
required double classConfidence=3;
required bool isMovable=4;
optional double existProbability=5;
optional double timeLastSeen=6;
optional double timeCreation=7;
optional double objectAge=8;
optional double trackQuality=9;
required pose referencePoint=10;
required Dimension objectDimension=11;
required Velocity ObjectVelocity=12;
required Acceleration ObjectAccel=13;
optional int32 laneAssignment=14;
optional double laneOffsetLeft=15;
optional double laneOffsetRight=16;
enum LIGHTSTATUS{
OFF=0;
LEFT=1;
RIGHT=2;
BLINK=3;
BRAKE=4;
}
Optional LIGHTSTATUS LightStatus =17;
}
message LaneLine{
enum LANELINETYPE{
WHITE_DASHED = 0;
WHITE_SOLID = 1;
YELLOW_DASHED = 2;
YELLOW_SOLID = 3;
UNKNOWN=4;
}
required LaneLineType Type=1;
required double confidence=2;
repeated Point3D linePoints=3;
}
message StopLine{
enum STOPLINETYPE {
NORMAL=0;
UNKNOWN=1;
}
required STOPLINETYPE Type=1;
required double confidence=2;
required Point3D LeftStart=3;
required Point3D RightEnd=4;
}
message TrafficLight{
required uint32 id=1;
enum TLType {
STRAIGHT = 0;
LEFT = 1;
RIGHT = 2;
U_TURN = 3;
}
required TLtype type=2;
enum TLColour{
RED = 0;
YELLOW = 1;
GREEN = 2;
BLACK = 3;
UNKNOWN = 4;
}
required TLColour Colour =3;
required Point3D Position=4;
required Polygon2D Box=5;
required int32 LaneAttached=6;
optional double RemainingTime=7;
} message TrafficSign{
required uint32 id=1;
enum TSTYPE{
SpeedLimit=0;
HzardWarning=1;
}
required TSTYPE Semantic=2;
optional uint32 value=3;
enum UNITTYPE{
KMPH=0;
TON=1;
}
optional UNITTYPE Unit=4;
required Point3D position=5;
required Polygon2D Box=6;
optional int32 LaneAttached=7;
}
message FreeSpaceMeta{
required double xStart=1;
required dboule xEnd=2;
required dboule xReslution =3;
required uint32 xGridNum =4;
required double yStart=5;
required dboule yEnd=6;
required dboule yReslution =7;
required uint32 yGridNum =8;
}message FreeSpaceCell{
enum CELLSTATUS {
UNKNOW=0;
FREE=1;
OCC_STATIC=2;
OCC_MOVABLE=3;
}
required CELLSTATUS Status=1;
required double Probability=2;
}
message ParkingSpace{
required uint32 id=1;
enum PARKINGTYPE{
PARKING_TYPE_UNKNOWN = 0;
PARKING_TYPE_VERTICAL = 1;
PARKING_TYPE_PARALLEL = 2;
PARKING_TYPE_INC = 3;
}
required PARKINGTYPE Ptype=2;
required double typeConfidence=3;
repeated Point3D ParkingSpotPoints=4;
optional double width=5;
optional double length=6;
required bool valid=7;
}
message VehicleStatus{
required double SteeringAngle=1;
required double steeringVelocity=2;
required Acceleration acc=3;
required Velocity vel=4;
enum DrivingMode{
MANUAL=0;
AUTO=1;
LAT_ONLY=2;
LON_ONLY=3;
}
required DrivingMode ControlMode=5;
enum GearPosition{
GEAR_NEUTRAL = 0;
GEAR_PARKING = 1;
GEAR_DRIVE = 2;
GEAR_REVERSE = 3;
GEAR_LOW = 4;
GEAR_INVALID = 5;
GEAR_NONE = 6;
}
required GearPosition GearMode=6;
enum EngineMode{
ON=0;
OFF=1;
FAILURE=2;
}
required EngineMode eMode =7;
repeated double WheelSpeed=8;
}
// ObjectDetectionAndTrackingService.proto
import common.proto
message ObjectDetectionAndTrackingService{
required Header header=1;
repeated Object ListOfObjects=1;
}
// RoadStructureService.proto
import common.proto
message RoadStructureService{
required Header header=1;
repeated LaneLine ListOfLaneLine=2;
repeated StopLine ListOfStopLine =3;
}
// TrafficSignLightService.proto
message TrafficSignLightService{
required Header header=1;
repeated TrafficLight ListOfTrafficLight=2;
repeated TrafficSign ListOfTrafficSign=3;
}
// DrivableAreaService.proto
import common.proto
message DrivableAreaService{
required Header header=1;
required FreeSpaceMeta MetaInfo=2;
repeated FreeSpaceCell ListOfFreeSpaceCells=3;
}
//VehicleStatusService.proto
import common.proto
message VehicleStatusService{
required Header header=1;
required VehicleStatus vState=2;
}
// ParkinglotDetectionService.proto
import common.proto
message ParkinglotDetectionService {
required Header header=1;
repeated ParkingSpace ParkingLots =2;
}
import common.proto
message ParkinglotDetectionService {
required Header header=1;
repeated Object ListOfObjects=2;
repeated LaneLine ListOfLaneLine=3;
repeated StopLine ListOfStopLine =4;
repeated TrafficLight ListOfTrafficLight=5;
repeated TrafficSign ListOfTrafficSign=6;
optional FreeSpaceMeta MetaInfo=7;
repeated FreeSpaceCell ListOfFreeSpaceCells=8;
required VehicleStatus vState=9;
repeated ParkingSpace ParkingLots =10;
}