初读标准时,较为生涩难懂,在这里结合标准,解读下自己目前对V2X消息的理解。尊重版权,禁止转载。

首先放上一张图

图片来自 T/CSAE 53-2017《合作式智能运输系统 车用通信系统应用层及应用数据交互标准》

1、msgCnt:发送方为自己发送的同类消息,依次进行编号。编号数值为 0 ~ 127。当发送方开始发起某一类数据时,它可以随机选择起始编号,随后依次递增。发送方也可以在连续发送相同的数据帧时,选择使用相同的 MsgCount 消息编号。编号到达 127 后,则下一个回到 0。(好像作用不太大)

2、TimeStamp:时间戳。在Linux下通过gettimeofday函数来获取系统的时间戳,得到的是自1970年以来的微秒数

3、name:没啥卵用,在现场抓到的消息里面也没有这个字段

4、Intersections:包含一系列IntersectionState;可以理解一个IntersectionState表示一个路口的红绿灯;因为一个路测设备是可以发送附近几个路口的红绿灯消息的(暂且把intersection理解为路口的意思吧)

5、IntersectionState:定义一个路口信号灯的属性和当前状态。包括路口ID、信号灯工作状态、时间戳以及信号灯的相位列表。

6、intersectionId:包括regionID和intersection ID,regionID可用于地图匹配

7、status:不理解干啥用的

8、moy:Minute Of The Year;当前UTC年的分钟数,还不太明白干嘛的

9、timeStamp:时间戳,不多说

10、Phase:定义信号灯相位,一个相位包括一个相位ID以及一个相位状态列表。一个路口有多少个相位得看路口的具体情况,因为并不是所有路口的信号灯都是一样的。

11、id:定义信号灯相位ID,用于地图匹配。一辆车想知道自己前方的红绿灯,得先通过定位得知自己位于这个路口的哪一条路上,知道自己在哪一条路上了就可以拿到对应的pahseid,就可以倒这来拿信号灯的灯态了。(1、可以通过地图消息中link中的Movement拿phaseId;2、也可以通过link中的lane来拿phaseId

12、light:定义信号灯相位的灯色状态。支持GB 14886规定的红、绿、黄三种信号灯灯色,以及亮灯、闪烁和熄灭三种状态。对于绿灯状态,在应用实现时应参考实际路口的情况,选择采用通行允许相位(permissive-green)或通行保护相位(protected-green)

13、timing:描述了信号灯一个相位状态的完整计时状态,包含了startTime、minEndTime等字段;其中最为重要的是startTime和likelyEndTime两个字段

14、startTime:表示该相位状态下一次开始(距离当前时刻)的时间,或者预测开始的时间。如果当前正值该相位状态,则该数值为 0

15、minEndTime:表示当前时刻距离该相位状态下一次结束的最短时间(不管当前时刻该相位状态是否开始)

16、maxEndTime:表示当前时刻距离该相位状态下一次结束的最长时间(不管当前时刻该相位状态是否开始)

17、likelyEndTime:表示当前时刻距离该相位状态下一次结束的估计时间(不管当前时刻该相位状态是否开始)。如果该信号灯相位是定周期、固定时长,则该数值就表示当前时刻距离该相位状态下一次结束的准确时间。如果信号灯当前相位是非固定配时(感应配时、手动控制等),则该数值表示预测的结束时间,且预测时间必须在minEndTime和maxEndTime之间,可能由历史数据或一些事件触发等来进行预测(简单理解,就是结束时间吧)

18、nextStartTime:如果当前该相位状态已开始(未结束),则该数值表示当前时刻距离该相位状态下一次开始的估计时长;如果当前该相位状态未开始,则表示当前时刻距离该相位状态第二次开始的时间。通常用在一些经济驾驶模式(ECO Drive)等相关的应用中

19、nextDuration:如果当前该相位状态已开始(未结束),则该数值表示该相位状态下一次开始后的持续时长;如果当前该相位状态未开始,则表示该相位状态第二次开始后的持续时长。与nextStartTime配合使用,通常用在一些经济驾驶模式(ECO Drive)等相关的应用中

完整的信号灯相位计时信息:

下面放上一段路上抓到的SPAT消息

<MessageFrame><spatFrame><msgCnt>108</msgCnt><timeStamp>26832</timeStamp><intersections><IntersectionState><intersectionId><region>10</region><id>19</id></intersectionId><status>0000000000100000</status><moy>75939</moy><timeStamp>26832</timeStamp><phases><Phase><id>6</id><phaseStates><PhaseState><light><red/></light><timing><counting><startTime>0</startTime><likelyEndTime>90</likelyEndTime><nextDuration>360</nextDuration></counting></timing></PhaseState><PhaseState><light><permissive-green/></light><timing><counting><startTime>90</startTime><likelyEndTime>450</likelyEndTime><nextDuration>360</nextDuration></counting></timing></PhaseState><PhaseState><light><yellow/></light><timing><counting><startTime>450</startTime><likelyEndTime>490</likelyEndTime><nextDuration>40</nextDuration></counting></timing></PhaseState></phaseStates></Phase><Phase><id>7</id><phaseStates><PhaseState><light><red/></light><timing><counting><startTime>0</startTime><likelyEndTime>90</likelyEndTime><nextDuration>360</nextDuration></counting></timing></PhaseState><PhaseState><light><permissive-green/></light><timing><counting><startTime>90</startTime><likelyEndTime>450</likelyEndTime><nextDuration>360</nextDuration></counting></timing></PhaseState><PhaseState><light><yellow/></light><timing><counting><startTime>450</startTime><likelyEndTime>490</likelyEndTime><nextDuration>40</nextDuration></counting></timing></PhaseState></phaseStates></Phase><Phase><id>16</id><phaseStates><PhaseState><light><permissive-green/></light><timing><counting><startTime>0</startTime><likelyEndTime>30</likelyEndTime><nextDuration>280</nextDuration></counting></timing></PhaseState><PhaseState><light><yellow/></light><timing><counting><startTime>30</startTime><likelyEndTime>70</likelyEndTime><nextDuration>40</nextDuration></counting></timing></PhaseState><PhaseState><light><red/></light><timing><counting><startTime>70</startTime><likelyEndTime>510</likelyEndTime><nextDuration>440</nextDuration></counting></timing></PhaseState></phaseStates></Phase><Phase><id>17</id><phaseStates><PhaseState><light><permissive-green/></light><timing><counting><startTime>0</startTime><likelyEndTime>30</likelyEndTime><nextDuration>280</nextDuration></counting></timing></PhaseState><PhaseState><light><yellow/></light><timing><counting><startTime>30</startTime><likelyEndTime>70</likelyEndTime><nextDuration>40</nextDuration></counting></timing></PhaseState><PhaseState><light><red/></light><timing><counting><startTime>70</startTime><likelyEndTime>510</likelyEndTime><nextDuration>440</nextDuration></counting></timing></PhaseState></phaseStates></Phase><Phase><id>26</id><phaseStates><PhaseState><light><red/></light><timing><counting><startTime>0</startTime><likelyEndTime>90</likelyEndTime><nextDuration>360</nextDuration></counting></timing></PhaseState><PhaseState><light><permissive-green/></light><timing><counting><startTime>90</startTime><likelyEndTime>450</likelyEndTime><nextDuration>360</nextDuration></counting></timing></PhaseState><PhaseState><light><yellow/></light><timing><counting><startTime>450</startTime><likelyEndTime>490</likelyEndTime><nextDuration>40</nextDuration></counting></timing></PhaseState></phaseStates></Phase><Phase><id>27</id><phaseStates><PhaseState><light><red/></light><timing><counting><startTime>0</startTime><likelyEndTime>90</likelyEndTime><nextDuration>360</nextDuration></counting></timing></PhaseState><PhaseState><light><permissive-green/></light><timing><counting><startTime>90</startTime><likelyEndTime>450</likelyEndTime><nextDuration>360</nextDuration></counting></timing></PhaseState><PhaseState><light><yellow/></light><timing><counting><startTime>450</startTime><likelyEndTime>490</likelyEndTime><nextDuration>40</nextDuration></counting></timing></PhaseState></phaseStates></Phase><Phase><id>36</id><phaseStates><PhaseState><light><permissive-green/></light><timing><counting><startTime>0</startTime><likelyEndTime>30</likelyEndTime><nextDuration>280</nextDuration></counting></timing></PhaseState><PhaseState><light><yellow/></light><timing><counting><startTime>30</startTime><likelyEndTime>70</likelyEndTime><nextDuration>40</nextDuration></counting></timing></PhaseState><PhaseState><light><red/></light><timing><counting><startTime>70</startTime><likelyEndTime>510</likelyEndTime><nextDuration>440</nextDuration></counting></timing></PhaseState></phaseStates></Phase><Phase><id>37</id><phaseStates><PhaseState><light><permissive-green/></light><timing><counting><startTime>0</startTime><likelyEndTime>30</likelyEndTime><nextDuration>280</nextDuration></counting></timing></PhaseState><PhaseState><light><yellow/></light><timing><counting><startTime>30</startTime><likelyEndTime>70</likelyEndTime><nextDuration>40</nextDuration></counting></timing></PhaseState><PhaseState><light><red/></light><timing><counting><startTime>70</startTime><likelyEndTime>510</likelyEndTime><nextDuration>440</nextDuration></counting></timing></PhaseState></phaseStates></Phase></phases></IntersectionState></intersections></spatFrame>
</MessageFrame>

消息里面的时间单位是0.1秒

V2X消息之SPAT消息解读相关推荐

  1. 企业微信 接收消息服务器,接收消息与事件

    [TOC] 关于接收消息 为了能够让自建应用和企业微信进行双向通信,企业可以在应用的管理后台开启接收消息模式. 开启接收消息模式的企业,需要提供可用的接收消息服务器URL. 开启接收消息模式后,用户在 ...

  2. 消息积压在消息队列里怎么办

    作者:一条路上的咸鱼 链接:https://www.jianshu.com/p/07b2169bef49 1.大量消息在mq里积压了几个小时了还没解决 场景:几千万条数据在MQ里积压了七八个小时,从下 ...

  3. 消息队列面试连环问:如何保证消息不丢失?处理重复消息?消息有序性?消息堆积处理?...

    大家好,我是 yes. 最近我一直扎在消息队列实现细节之中无法自拔,已经写了 3 篇Kafka源码分析,还剩很多没肝完.之前还存着RocketMQ源码分析还没整理.今儿暂时先跳出来盘一盘大方向上的消息 ...

  4. ucosii事件控制块------消息邮箱与消息队列

    UCOSII 使用叫做事件控制块(ECB)的数据结构来描述诸如信号量.邮箱(消息邮箱)和消息队列这些事件 #define OS_EVENT_EN (((OS_Q_EN > 0u) &&a ...

  5. 【Android 异步操作】Handler 机制 ( Android 提供的 Handler 源码解析 | Handler 构造与消息分发 | MessageQueue 消息队列相关方法 )

    文章目录 一.Handler 构造函数 二.Handler 消息分发 三.MessageQueue 消息队列相关函数 一.Handler 构造函数 一般使用 Handler 时 , 调用 Handle ...

  6. 【Android 异步操作】手写 Handler ( 消息队列 MessageQueue | 消息保存到链表 | 从链表中获取消息 )

    文章目录 一.MessageQueue 消息队列存储消息 二.MessageQueue 消息队列取出消息 三.消息队列完整代码 一.MessageQueue 消息队列存储消息 Message 链表 : ...

  7. java 消息队列_java消息队列

    Java消息服务(Java Message Service,JMS)应用程序接口是一个Java平台中关于面向消息中间件(MOM)的API,用于在两个应用程序之间,或分布式系统中发送消息,进行异步通信. ...

  8. RocketMQ-初体验RocketMQ(09)-广播消息、延时消息、批量消息

    文章目录 广播消息 广播消息概述 演示步骤 延时消息 概述 使用场景 延时机制 实现原理 示例 批量消息 批量消息概述 示例 代码 广播消息 广播消息概述 广播消息就是向所有用户发送消息. 如果我们希 ...

  9. 计算发送延时与传播延迟_消息队列——延时消息应用解析及实践

    简介:在大部分场景下业务系统如果只需要实现异步解耦.削峰填谷等能力,常规的普通消息就可以满足此类需求.除此之外,在某些特殊的业务场景中,普通消息类型存在无法满足需求的情况.这就需要消息队列服务本身支持 ...

  10. day41——多进程的消息队列、消息队列pipe

    多进程的消息队列 消息队列指的是消息在传输过程中保存消息的容器 消息队列最经典的用法是消费者和生产者之间通过消息管道来传递消息.消费者和和生产者是不同的进程,生产者往管道中写消息,消费者从管道中读消息 ...

最新文章

  1. Linux解压WINRAR文件
  2. Facebook全球6小时宕机原因已查明:一条指令所致,内部工程师所为
  3. textview是否超过一行_如何实现一个TextView自动换行单词不会被拆分
  4. UISeatchBar
  5. 如何在Hadoop上运行TensorFlow【部署】
  6. 如何用命令行刷新,启用,禁用Magento2的缓存
  7. python源码精要(3)-C代码规范
  8. SpringBoot 统一异常处理 ControllerAdvice
  9. android4 设置栈大小,【技术分享】Android内核漏洞利用技术实战:环境搭建栈溢出实战...
  10. bat基础学习--bat批量执行其他bat(startcall),bat执行后暂停(调试)关闭,批量执行关闭exe----基础
  11. 如何才能降低真机测试成本和建议所使用平台
  12. MySQL 主键相关操作
  13. My97DatePicker 演示和文档
  14. wpf listbox绑定不跟新_苦逼的程序员,Python又有新版本3.9,跟还是不跟?
  15. 云优CMS企业网站管理系统 v2.2.2 分站版
  16. 日系插画学习笔记(十一):日系插画标准上色流程
  17. 写了几个排序算法的测试
  18. 微信王者有ios的服务器吗,王者IOS微信区国服瑶多有钱?凌晨撒4W红包,点开头像傻眼...
  19. 全民远程办公的第一天,为什么你的视频会议卡住了?
  20. 【Spring】切入点表达式、函数

热门文章

  1. siblings筛选同胞元素
  2. [教程] PSP 5.00M33-6升级图文教程
  3. 最全官方win10系统安装教程,教你如何用u盘安装win10系统?
  4. 基因加性方差、显性方差与上位性方差定义
  5. 友善串口助手 V2.5.8.0825 Serial Port Utility注册码
  6. 仿微博系统数据库设计和er图设计
  7. 导入和导出requirement
  8. android 联系人 拼音,Android 2.1 (Eclair)的中文联系人拼音检索问题
  9. php获取上月月初,php实现获取当前月与上个月月初及月末时间戳的方法
  10. pat 乙级 1072. 开学寄语(20)