V2X协议栈实现了V2X技术标准协议的功能,支持四跨协议(T/CASE-53 2020) 和新四跨协议(YD/T-3709 2020)。V2X协议栈共分为三个层级,分别为适配层、网络层和消息层。 层级内紧凑,层级间独立,层次分明。API清晰易用,开发者可以快速上手开发,事半功倍大大缩短开发周期。
框架设计类似于微内核的设计理念,它本身只管消息传递和模块调度; 可以通过编写子模块的方式进行扩展,每个模块都有一个唯一的名字,模块间通过指定名字和消息进行通信。
Actor是基础的执行单元,基于消息驱动
Worker是一个独立执行的线程,可以与airos-vehicle单向通信
Service由任意个Actor和Worker组成,通过描述文件展现; 它描述框架需要加载的库,需要创建的实例以及实例名称。 例如下面这个例子:
{
"type": "library",
"lib": "libHello.so",
"actor": {
"HelloActor": [
{
"instance_name": "1",
"instance_params": ""
}
]
},
"worker": {
"HelloReceiver": [
{
"instance_name": "1"
}
],
"HelloSender": [
{
"instance_name": "1"
}
]
}
}
通常代指Actor或者Worker
Dataflow是一个数据流配置文件; 用来描述每个模块的数据流向。
# 名称为 worker.FakeObuReceiver.FakeObuReceiver 的worker产生的消息
# 需要发送给 actor.SceneService.SceneService
data_flow
{
name: "worker.FakeObuReceiver.FakeObuReceiver"
dst: "actor.SceneService.SceneService"
}
# 名称为 actor.VehicleBasicInfoApi.VehicleBasicInfoApi 的actor产生的消息
# 需要发送给 worker.NetServiceSender.NetServiceSender
data_flow
{
name: "actor.VehicleBasicInfoApi.VehicleBasicInfoApi"
dst: "worker.NetServiceSender.NetServiceSender"
}
使用子模块的方式进行二次开发。
python ~/airos-vehicle/tools/gen_proj.py --name="Hello" --dir="/full/proj/path"
类:
TemplateRecvier
:接收来自模组的消息TemplateSender
:发送消息给模组TemplateActor
:场景逻辑实现配置文件:
Template.json
:Service配置make install
安装到airos-vehicle目录中~/airos-vehicle/conf/air_link.dataflow
:配置模块间数据流向目前AIROS Vehicle实现的V2X场景包括:
HV In Map
: 负责获取主车在地图上定位GLOSA
: Green Light Optimal Speed Advisory)RLVW
:Red light Violation Warning)场景输入:
BSM
MAP
SPAT
场景输出:
GLOSA
的绿波引导 速度区间 和 推荐速度
RLVW
的 闯红灯预警等级
MAP
消息中字段是否缺失,车道 PointList
中位置点个数是否在 [2,31]
区间内,以及通过判断所有非端点的所有车道中心线拟合点是否在其前后两个拟合点连线左右的二分之一车道宽度范围内,若不满足条件则认为是弯道。SPAT
消息中灯色倒计时是否缺失,倒计时是否合理。BSM
消息中字段是否缺失。BSM
消息认为始终存在。MAP
消息后对MAP
消息进行缓存,并调用Hv In Map
模块判断BSM
与MAP
消息是否匹配,若不匹配则丢弃MAP
消息。SPAT
消息后,若存在缓存的MAP
消息,则利用SPAT
和MAP
消息中的Phase Id
进行匹配,获取主车所在车道对应红绿灯相位。计算主车在MAP
中的位置,即主车所在的Map Link
、Map Lane
和Map Node
。
Hv In Map
模块用于在绿波车速引导和闯红灯预警场景中获取主车在地图中的位置。
BSM
为本车BSM
,认为始终存在,所以,接收到MAP
消息即触发Hv In Map
。
Hv In Map
模块输入是主车BSM
和MAP
,遍历MAP
中的Lane
,若满足下列条件则可认为主车位于该车道上,同时Hv In Map
模块输出主车所在的Lane
、Link
和Node
:
Lane
上存在与主车距离小于车道宽度的一半(默认值1.5米)的Position
,存在多个满足情况的车道时取距离最小的车道。绿波车速引导 (GLOSA
: Green Light Optimal Speed Advisory)是指,当装载车载单元(OBU
)
的主车驶向信号灯控制交叉路口,收到由路侧单元(RSU
)
发送的道路数据及信号灯实时状态数据时,GLOSA
应用将给予驾驶员一个建议车速区间,以使车辆能够经济地、舒适地(不需要停车等待)
通过信号路口。本应用适用于城市及郊区普通道路信号灯控制路口。
绿波车速引导模块输入是主车BSM
、MAP
和SPAT
消息,通过如下步骤实现该场景:
Hv In Map
模块获取主车所在Lane
。MAP
和SPAT
中的Region ID
和Node ID
,判断SPAT
和MAP
消息是否匹配,不匹配则不触发场景。Lane
停止线中心点的距离,及主车以当前速度行驶至停止线所需的时间。SPAT
消息中的灯色倒计时进行比较,给出建议速度区间和推荐速度。虽然目前场景的实现还不支持弯道的情况,但在计算距离时将所有直道都看作弯道处理可以便于后续版本迭代。
如图所示,从主车的位置到停止线(车道中心线拟合点中的最后一个点)认为所有车道都是弯道(直道是角度无限趋近于0的弯道)。
利用下列公式可以计算得出当前主车所在位置到停止线中心点的距离,其中$\gamma$时主车在两个位置的航向角之差。 $$ \Delta D = R \gamma \\ R = \dfrac{D}{2sin\dfrac{\gamma}{2}} $$
计算得出主车当前位置到停止线中心点的距离后,通过主车速度可以计算得出主车以当前速度行驶至停止线中心点所需的时间,通过与当前车道对应红绿灯的灯色倒计时比较,如果满足下列条件则触发场景:
是否触发场景 | 当前灯色 | 速度上限 | 速度下限 | 备注 |
---|---|---|---|---|
否 | - | - | - | 当前速度可正常通过路口 |
是 | 绿灯-加速通过 | 道路最大限速 | 距离 / 当前绿灯倒计时结束时间 | |
是 | 绿灯-下一个绿灯通过 | min{距离/下一个绿道倒计时结束时间, 道路最大限速} | 0 | |
是 | 绿灯-立即停车 | 0 | 0 | 绿灯倒计时为0 |
是 | 红灯 | min{距离/下一个绿道倒计时结束时间, 道路最大限速} | 0 | |
是 | 黄灯 | min{距离/下一个绿道倒计时结束时间, 道路最大限速} | 0 | |
是 | 黑灯 | 道路最大限速 | 0 |
推荐速度值:
例如:
[37,54]
,则推荐绿波车速为45
[47,49]
,则推荐绿波车速为50
。闯红灯预警 (RLVW
: Red Light Violation Warning)是指,主车(Host Vehicle)经过有信号控制的交叉口(车道)
,车辆存在不按信号灯规定或指示行驶的风险时,RLVW应用对驾驶员进行预警。本应用适用于城市及郊区道路及公路的交叉路口、环道的出入口和可控车道、高速路入口和隧道等有信号控制的车道。
闯红灯预警模块输入是主车BSM
、MAP
和SPAT
消息,通过如下步骤实现该场景:
Hv In Map
模块获取主车所在车道MAP
和SPAT
中的Region Id
和Node Id
,判断SPAT
和MAP
消息是否匹配,不匹配则不触发场景SPAT
消息中的灯色倒计时进行比较,给出闯红灯预警等级实现方式同绿波车速引导中计算主车与停止线距离的部分。
在上述基础上,通过主车速度可以计算得出主车以当前速度行驶至停止线中心点所需的时间,通过与当前车道对应红绿灯的灯色倒计时比较,如果满足下列条件则触发场景:
主车所在车道对应所有灯色一致且倒计时完全相同。
主车以当前运动状态(包括速度和加速度)行驶至车道停止线时需要停车等待。
在绿波车速引导的基础上考虑了加速度的影响,因为绿波车速场景触发即加速度改变,而闯红灯预警触发是根据车辆当前运动状态判断主车通过路口时是否存在闯红灯风险。
是否触发场景 | 条件 | 风险等级 |
---|---|---|
否 | 主车保持当前运动状态可正常通过路口 | No Severity |
是 | 主车以当前运动状态通过路口有闯红灯风险,且主车行驶至车道停止线时间大于10秒 | Severity Notify |
是 | 主车以当前运动状态通过路口有闯红灯风险,且主车行驶至车道停止线时间小于10秒 | Severity Warning |
此处可能存在不合适展示的内容,页面不予展示。您可通过相关编辑功能自查并修改。
如您确认内容无涉及 不当用语 / 纯广告导流 / 暴力 / 低俗色情 / 侵权 / 盗版 / 虚假 / 无价值内容或违法国家有关法律法规的内容,可点击提交进行申诉,我们将尽快为您处理。