syntax = "proto3"; option optimize_for = LITE_RUNTIME; // 添加包名 package VRC; import "vrc.v2x.msgframe.proto"; import "vrc.v2x.dataframe.proto"; // VRC内部数据帧 // 安全消息扩展,PTC和BSM扩展添加,非ASN定义 message SafetyMsgExtPb { oneof choice { HostExtPb hostExt = 1; // 本地扩展信息 RemoteExtPb remoteExt = 2; // 远端扩展信息 } } // 安全消息扩展精简版 message SafetyMsgExtLitePb { oneof choice { HostExtLitePb hostExt = 1; // 本地扩展信息精简版 RemoteExtLitePb remoteExt = 2; // 远端扩展信息精简版 } } // 本地扩展信息 message HostExtPb { // 安全距离,开始刹车到速度为0的距离,再加上预留安全距离,取和 // 低速或异常时,没有该数据项 oneof safetyDisOpt { double safetyDis = 1; } // 安全时间,以当前速度行驶完安全距离的耗时 // 低速或异常时,没有该数据项 oneof safetyTimeOpt { double safetyTime = 2; } // 车辆危险信息预警距离,异常时,没有该数据项 oneof vehHazardInfoWarningDisOpt { double vehHazardInfoWarningDis = 3; } HostSpeedLimitsPb speedLimits = 4; // 本地限速信息 // 本地交叉路口的无地图区域 // 选填,包含是否在本地交叉路口的无地图区域中和交叉路口的无地图区域 HostUnmappedRegionOfIntersectionPb unmappedRegionOfIntersection = 5; // 本地转向信息 // 有地图信息或有本地交叉路口的无地图区域时,存在 HostManeuversPb maneuvers = 6; // 本地地图扩展 // 填写本车所属地图相关的各种信息 HostMapExtPb hostMapExt = 7; } // 本地扩展信息精简版 message HostExtLitePb { // 安全距离,开始刹车到速度为0的距离,再加上预留安全距离,取和 // 低速或异常时,没有该数据项 oneof safetyDisOpt { double safetyDis = 1; } // 安全时间,以当前速度行驶完安全距离的耗时 // 低速或异常时,没有该数据项 oneof safetyTimeOpt { double safetyTime = 2; } // 车辆危险信息预警距离,异常时,没有该数据项 oneof vehHazardInfoWarningDisOpt { double vehHazardInfoWarningDis = 3; } HostSpeedLimitsPb speedLimits = 4; // 本地限速信息 } // 本地限速信息 message HostSpeedLimitsPb { oneof highSpeedLimitOpt { double highSpeedLimit = 1; // 高速限制 } oneof lowSpeedLimitOpt { double lowSpeedLimit = 2; // 低速限制 } } // 本地交叉路口的无地图区域 message HostUnmappedRegionOfIntersectionPb { bool inRegion = 1; // 是否在本地交叉路口的无地图区域中 UnmappedRegionOfIntersectionPb region = 2; // 交叉路口的无地图区域 } // 交叉路口的无地图区域 message UnmappedRegionOfIntersectionPb { V2xPosPb pos = 1; // 位置点,通常为停止线点 double heading = 2; // 行驶方向,通常为车道方向 } // 本地转向信息 message HostManeuversPb { RefManeuverPb straight = 1; // 直行转向信息 RefManeuverPb left = 2; // 左转转向信息 RefManeuverPb right = 3; // 右转转向信息 RefManeuverPb uTurn = 4; // U行转向信息 } // 相关转向信息 message RefManeuverPb { int32 source = 1; // 来源 int32 status = 2; // 状态 V2xNodeRefIdPb remoteIntersection = 3; // 远端路口ID // 连接起始点信息 // 左转辅助运算弧线时使用 V2xPosPb connectingPos = 4; oneof connectingLaneIdOpt { int32 connectingLaneId = 5; // 连接车道ID } oneof phaseIdOpt { int32 phaseId = 6; // 相位ID } } // 本地地图扩展 message HostMapExtPb { HostInMapPb inMap = 1; // 本地所处地图信息 HostNodeRefIdsPb nodeRefIds = 2; // 本地节点关联ID EndLinePb endLine = 3; // 本地停止线信息 HostRefLaneLitesPb refLaneLites = 4; // 本地相关精简版车道信息 } // 本地所处地图信息 message HostInMapPb { V2xMapPb map = 1; // 所处地图信息 V2xNodePb node = 2; // 所处节点信息 V2xLinkPb link = 3; // 所处连接信息 V2xLanePb lane = 4; // 所处车道 // 所处车道序号 // 以车道行驶方向为参考,车道ID默认自左向右从1开始编号 int32 laneIndex = 5; // 本地交叉路口信息 // 选填,填充内容标识存在本地交叉路口信息,否则不存在 HostIntersectionPb intersection = 6; } // 本地交叉路口信息 message HostIntersectionPb { bool closeToIntersection = 1; // 是否即将到达交叉路口 } // 本地节点关联ID message HostNodeRefIdsPb { V2xNodeRefIdPb upstreamNodeId = 1; // 上游节点ID V2xNodeRefIdPb downstreamNodeId = 2; // 下游节点ID repeated V2xNodeRefIdPb otherNodeRefIds = 3; // 其他关联ID集合 } // 停止线信息 message EndLinePb { V2xPosPb endPos = 1; // 所属车道或连接终点位置,部分场景的停止线位置 double endDis = 2; // 现有位置到所属车道或连接终点位置的距离 double endHeading = 3; // 所属车道或连接终点附近的行驶方向 } // 本地相关精简版车道信息 message HostRefLaneLitesPb { repeated LaneLitePb lanes = 1; // 同向车道 repeated LaneLitePb leftLanes = 2; // 同向左相邻车道 repeated LaneLitePb farLeftLanes = 3; // 同向左非相邻车道 repeated LaneLitePb rightLanes = 4; // 同向右相邻车道 repeated LaneLitePb farRightLanes = 5; // 同向右非相邻车道 repeated LaneLitePb oncomingLeftLanes = 6; // 反向左相邻车道 repeated LaneLitePb oncomingFarLeftLanes = 7; // 反向左非相邻车道 repeated LaneLitePb intersectionLeftLanes = 8; // 交叉左前方车道,向右行驶 repeated LaneLitePb intersectionRightLanes = 9; // 交叉右前方车道,向左行驶 } // 车道信息精简版 message LaneLitePb { V2xNodeRefIdPb upstreamNodeId = 1; // 上游路段节点标识ID V2xNodeRefIdPb downstreamNodeId = 2; // 下游路段节点标识ID int32 laneId = 3; // 车道标识ID } // 远端扩展信息 message RemoteExtPb { DisToHostVehPb disToHostVeh = 1; // 到本车的距离 double azimuth = 2; // 本车到远车的方位角 int32 relPos = 3; // 相对位置,参考TmPb中相对位置描述 // 本信息所属消息是否是BSM消息的标识 // true:是BSM消息;false:是PTC数据; bool isInBsm = 4; // 本信息所属消息是否标识弱势交通参与者 // true:标识弱势交通参与者;false:标识非弱势交通参与者; bool isVru = 5; // 本信息所属消息是否标识紧急车辆 // true:紧急车辆;false:非紧急车辆; bool isEmergencyVeh = 6; // 远端所处车道信息 // 路侧生成,用于运算协作式信号灯优先通行场景和协作式匝道汇入场景; // 车端生成,用于DAY2运算; LaneLitePb inLane = 7; } // 远端扩展信息精简版 message RemoteExtLitePb { DisToHostVehPb disToHostVeh = 1; // 到本车的距离 double azimuth = 2; // 本车到远车的方位角 int32 relPos = 3; // 相对位置,参考TmPb中相对位置描述 // 本信息所属消息是否标识弱势交通参与者 // true:标识弱势交通参与者;false:标识非弱势交通参与者; bool isVru = 4; // 本信息所属消息是否标识紧急车辆 // true:紧急车辆;false:非紧急车辆; bool isEmergencyVeh = 5; // 远端所处车道信息 // 路侧生成,用于运算协作式信号灯优先通行场景和协作式匝道汇入场景; // 车端生成,用于DAY2运算; LaneLitePb inLane = 6; } // 到本车的距离 message DisToHostVehPb { double straightLineDisToHostVeh = 1; // 到本车的直线距离 double latDisToHostVeh = 2; // 到本车的横向距离 double lonDisToHostVeh = 3; // 到本车的纵向距离 } // 感知数据共享请求功能设置 message SsmVirSetPb { bool sendSsmVir = 1; // 感知数据共享请求功能开关,true:支持发送感知数据共享请求消息;false:不支持; } // 在LINK中的信号灯消息 // 处理后的信号灯信息,包含直行、左转、右转、U行转向灯信息和停止线、限速信息 message SignalMsgInLinkPb { TurnSignalMsgPb straight = 1; // 直行转向灯信息 TurnSignalMsgPb left = 2; // 左转转向灯信息 TurnSignalMsgPb right = 3; // 右转转向灯信息 TurnSignalMsgPb uTurn = 4; // U行转向灯信息 V2xPosPb endPos = 5; // 停止线位置 double endDis = 6; // 停止线距离 oneof highSpeedLimitOpt { double highSpeedLimit = 7; // 限高速信息 } } // 转向信号灯信息 // 灯状态,剩余时间和转向状态 message TurnSignalMsgPb { // 灯状态 // 参考V2X标准消息集DE_LightState int32 light = 1; double time = 2; // 剩余时间 // 转向状态 // 0:无效的;1:正在使用的;2:可使用的;3:不可使用但相关的; int32 status = 3; SignalDurationPb duration = 4; // 信号灯持续时间,周期时间 } // 信号灯持续时间 // 红黄绿三色灯在一个周期内的时间 message SignalDurationPb { double red = 1; // 一个周期内的红灯占用时间 double green = 2; // 一个周期内的绿灯占用时间 oneof yellowOpt { double yellow = 3; // 一个周期内的黄灯占用时间 } } // 车辆接口消息必填浮点类型数据项 message VimDoublePb { double value = 1; // 值 } // 车辆接口消息选填浮点类型数据项 message VimDoubleOptPb { bool valueOpt = 1; // 是否包含值 double value = 2; // 值 } // 车辆接口消息必填整形数据项 message VimIntPb { int32 value = 1; // 值 } // 车辆接口消息选填整形数据项 message VimIntOptPb { bool valueOpt = 1; // 是否包含值 int32 value = 2; // 值 } // 车辆接口消息刹车系统状态 // 用于封装从车端获取的刹车系统状态信息 message VimBrakesPb { VimIntOptPb brakePadel = 1; // 刹车踏板踩下情况 VimIntOptPb wheelBrakes = 2; // 车辆车轮制动情况 VimIntOptPb traction = 3; // 牵引力控制系统作用情况 VimIntOptPb abs = 4; // 制动防抱死系统作用情况 VimIntOptPb scs = 5; // 车身稳定控制系统作用情况 VimIntOptPb brakeBoost = 6; // 刹车助力系统作用情况 VimIntOptPb auxBrakes = 7; // 辅助制动系统(一般指手刹)情况 } // 车辆接口消息安全扩展 // 用于封装从车端获取的安全扩展信息 message VimSafetyExtPb { VimIntOptPb events = 1; // 特殊事件状态 VimIntOptPb lights = 2; // 车身灯光状态 } // 车辆接口消息车辆紧急扩展信息 // 用于封装从车端获取的车辆紧急扩展信息 message VimVehEmergencyExtPb { VimIntOptPb responseType = 1; // 当前行驶状态或驾驶行为 VimIntOptPb sirenUse = 2; // 警笛或发声装置状态 VimIntOptPb lightsUse = 3; // 紧急车辆或特殊车辆的警示灯或外置专用显示设备的工作状态 } // 配置子项,用于映射通用配置文件、车端配置文件和路端配置文件内容到V2X协议栈内部; // value和items至少包含一项; message ConfigItemPb { // 子项名,可用于标识子项 // 最上层的子项名一般对应配置ID string name = 1; // 描述信息 oneof descriptionOpt { string description = 2; } // type类型,标识本子项对应信息类型 // 0:无效;1:BOOL;2:整形;3:浮点型;4:字符串;5:对象(数组); // type为1-4时,使用value;为5时,使用items; int32 type = 3; // 本子项对应信息值 // 本子项标识基本类型信息时,由该值标识; // BOOL:字符串"true"或"false"; // 整形:字符串转换为int; // 浮点型:字符串转换为double; // 字符串:字符串赋值; oneof valueOpt { string value = 4; } // 最小值 oneof minValueOpt { string minValue = 5; } // 最大值 oneof maxValueOpt { string maxValue = 6; } // 单元 oneof unitOpt { string unit = 7; } // 备注 oneof remarkOpt { string remark = 8; } // 本子项对应信息下属子项集合 // 本子项标识对象或数组信息时,由该值标识; // 对象:下属成员集合; // 数据:数组成员集合; repeated ConfigItemPb items = 9; } // 配置请求 // 4种操作可选择其中的0-4种,支持任意组合; // 如果一个文件中要操作多个ID的数据,在一个ConfigReqItemPb创建多个ConfigItemPb,而不是创建多个ConfigReqItemPb; // add和alter区别,如果没有匹配到,add会新增数据项,alter跳过; message ConfigReqPb { // 是否更新配置文件 // true:更新;false:不更新; bool updateFile = 1; // 添加配置 // 操作层次文件级:对应文件下属内容全删,使用该请求内容; // 操作层次ID级:匹配ID,如果没匹配到,新增,处理下一个;如果匹配到,替换该ID内容; // 操作层次子项级:匹配ID,如果没匹配到,新增,处理下一个;如果匹配到,匹配子项(使用name),如果没匹配到,新增,处理下一个,如果匹配到,替换该子项内容; ConfigReqCtlPb add = 2; // 修改配置 // 操作层次文件级:对应文件下属内容全删,使用该请求内容; // 操作层次ID级:匹配ID,如果没匹配到,处理下一个;如果匹配到,替换该ID内容; // 操作层次子项级:匹配ID,如果没匹配到,处理下一个;如果匹配到,匹配子项(使用name), 如果没匹配到,处理下一个,如果匹配到,替换该子项内容; ConfigReqCtlPb alter = 3; // 删除配置 // 操作层次文件级:对应文件下属内容全删; // 操作层次ID级:匹配ID,如果没匹配到,处理下一个;如果匹配到,删除该ID内容; // 操作层次子项级:匹配ID,如果没匹配到,处理下一个;如果匹配到,匹配子项(使用name),如果没匹配到,处理下一个,如果匹配到,删除该子项; ConfigReqCtlPb del = 4; // 查询配置 // 操作层次文件级:对应文件全部下属内容; // 操作层次ID级:匹配ID,如果没匹配到,处理下一个;如果匹配到,添加该ID内容; // 操作层次子项级:匹配ID,如果没匹配到,处理下一个;如果匹配到,匹配子项(使用name),如果没匹配到,处理下一个,如果匹配到,添加该子项内容; ConfigReqCtlPb query = 5; } // 配置请求控制 // 包含请求子项集合,涉及各种请求内容; // 轮询处理,如果多个指令涉及同一数据,由请求方对处理是否达到自身需求负责; message ConfigReqCtlPb { repeated ConfigReqItemPb items = 1; } // 配置请求子项 // 对应一条配置请求指令; // 包含操作层次,对应文件描述和配置信息; // 对非实时配置的修改,需要写入配置文件,且重启后才会生效; message ConfigReqItemPb { // 操作层次 // 0:无效;1:文件级;2:ID级;3:子项级; // 操作层次涉及请求内容的处理,在ConfigReqPb中进行描述; int32 layer = 1; // 文件描述 // 0:无效; // 1:可见的实时通用配置; // 2:不可见的实时通用配置; // 3:可见的实时路端应用配置; // 4:不可见的实时路端应用配置; // 5:可见的实时车端应用配置; // 6:不可见的实时车端应用配置; // 7:实时TCI一致性测试配置; // 8:可见的非实时通用配置; // 9:不可见的非实时通用配置; // 10:可见的非实时路端应用配置; // 11:不可见的非实时路端应用配置; // 12:可见的非实时车端应用配置; // 13:不可见的非实时车端应用配置; // 14:非实时TCI一致性测试配置; int32 file = 2; // 请求涉及的配置子项信息 // 子项名字为配置ID,类型是object; repeated ConfigItemPb items = 3; } // 配置回复 message ConfigRspPb { // 回复操作状态 // 0:成功,非0:失败; int32 status = 1; // 查询到的配置消息 ConfigInfoPb data = 2; } // 配置信息 // 包含各个配置文件数据; // 配置文件数据的名称默认为文件名,下属子项为配置ID数据; // 配置ID数据下属子项为配置项数据; message ConfigInfoPb { // 可见的实时通用配置 ConfigItemPb visibleRealtimeCommon = 1; // 不可见的实时通用配置 ConfigItemPb invisibleRealtimeCommon = 2; // 可见的实时路端应用配置 ConfigItemPb visibleRealtimeAppsRs = 3; // 不可见的实时路端应用配置 ConfigItemPb invisibleRealtimeAppsRs = 4; // 可见的实时车端应用配置 ConfigItemPb visibleRealtimeAppsVeh = 5; // 不可见的实时车端应用配置 ConfigItemPb invisibleRealtimeAppsVeh = 6; // 实时TCI一致性测试配置 ConfigItemPb realtimeTcis = 7; // 可见的非实时通用配置 ConfigItemPb visibleNonrealtimeCommon = 8; // 不可见的非实时通用配置 ConfigItemPb invisibleNonrealtimeCommon = 9; // 可见的非实时路端应用配置 ConfigItemPb visibleNonrealtimeAppsRs = 10; // 不可见的非实时路端应用配置 ConfigItemPb invisibleNonrealtimeAppsRs = 11; // 可见的非实时车端应用配置 ConfigItemPb visibleNonrealtimeAppsVeh = 12; // 不可见的非实时车端应用配置 ConfigItemPb invisibleNonrealtimeAppsVeh = 13; // 非实时TCI一致性测试配置 ConfigItemPb nonrealtimeTcis = 14; }