V2X消息之SPAT消息解读

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

首先放上一张图

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

下载链接:https://download.csdn.net/download/fantasyYXQ/88799958

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:路口信号机的工作状态指示,是一个16位的bit string类型。下文中status为“0000000000100000”,第6位为1,表示fixedTimeOperation

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秒

  • 2
    点赞
  • 29
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值