AUTOSAR V2X Facilities详解
AUTOSAR Vehicle-to-X Facilities模块架构与实现详解
目录
- [1. 架构概述](#1. 架构概述)
- [1.1 AUTOSAR V2X Facilities架构图](#1.1 AUTOSAR V2X Facilities架构图)
- [1.2 合作感知(CA)服务功能架构](#1.2 合作感知(CA)服务功能架构)
- [1.3 分散环境通知(DEN)服务功能架构](#1.3 分散环境通知(DEN)服务功能架构)
- [2. 总结](#2. 总结)
1. 架构概述
AUTOSAR中的Vehicle-2-X Facilities (V2xFac)模块是Vehicle-2-X协议栈的关键组成部分。它与V2X Basic Transport (V2xBtp)、V2X GeoNetworking (V2xGn)、V2X Management (V2xM)以及通信驱动层一起构成了完整的V2X协议栈。V2xFac模块设计为硬件无关的基础软件模块,依赖于上层V2X应用服务和底层V2xBtp模块。
1.1 AUTOSAR V2X Facilities架构图

架构元素解释
组件 V2xFac:
- 职责: V2X设施层的核心模块,提供各种基本服务,支持V2X消息处理
- 功能点:
- 提供合作感知(CA)、分散环境通知(DEN)、车辆到基础设施信息(IVI)等基础服务
- 管理各种V2X消息的编码、解码和处理
- 连接应用层与网络传输层,促进数据交换
组件 V2xBtp:
- 职责: 提供基本传输协议服务,处理V2X消息的传输
- 功能点:
- 提供传输层接口
- 负责数据包的分段和重组
- 管理传输层端口
组件 V2xGn:
- 职责: 实现地理网络功能,支持基于位置的消息路由
- 功能点:
- 提供地理区域寻址
- 实现多跳通信
- 支持基于位置的路由策略
组件 V2xM:
- 职责: 管理整个V2X协议栈的运行状态
- 功能点:
- 协调各层模块的初始化和去初始化
- 监控和管理V2X协议栈的状态
- 处理错误和异常情况
层 应用层:
- 范围: V2X应用和服务
- 包含模块: V2X应用程序、位置服务(POTI)、车辆数据提供者(VDP)
层 V2X Facilities层:
- 范围: V2X消息处理和服务支持
- 包含模块: V2xFac及其提供的基本服务
层 V2X网络层:
- 范围: V2X通信的网络功能
- 包含模块: V2xBtp、V2xGn
层 通信驱动层:
- 范围: 硬件相关的通信驱动
- 包含模块: 通信驱动
代码示例
c
/* AUTOSAR V2X Facilities模块的初始化函数 */
Std_ReturnType V2xFac_Init(const V2xFac_ConfigType* ConfigPtr)
{
Std_ReturnType returnValue = E_OK;
/* 参数检查 */
if (ConfigPtr == NULL)
{
return E_NOT_OK;
}
/* 初始化V2xFac内部变量 */
V2xFac_State = V2XFAC_STATE_UNINIT;
/* 初始化各个服务模块 */
returnValue = V2xFac_CA_Init(&(ConfigPtr->CaConfig));
if (returnValue != E_OK)
{
return returnValue;
}
returnValue = V2xFac_DEN_Init(&(ConfigPtr->DenConfig));
if (returnValue != E_OK)
{
return returnValue;
}
/* 初始化其他服务,如IVI、RLT、TLM等 */
/* ... */
/* 设置模块状态为已初始化 */
V2xFac_State = V2XFAC_STATE_INIT;
return E_OK;
}
1.2 合作感知(CA)服务功能架构

合作感知服务元素解释
组件 CAM传输管理:
- 职责: 负责协作感知消息(CAM)的生成和发送
- 功能点:
- 基于车辆动态生成CAM消息
- 根据状态变化调整发送频率,范围1Hz至10Hz
- 管理CAM消息的生命周期
- 确定何时触发CAM消息的产生和发送
组件 CAM接收管理:
- 职责: 处理从其他ITS站接收的CAM消息
- 功能点:
- 接收和处理传入的CAM消息
- 将解码后的CAM消息转发给应用层
- 管理接收到的CAM消息数据
组件 CAM频率管理:
- 职责: 控制CAM消息的发送频率
- 功能点:
- 实现基于车辆状态改变的发送频率控制算法
- 基于以下参数调整发送频率:
- 位置变化 > 4m
- 航向变化 > 4°
- 速度变化 > 0.5m/s
组件 CAM编码器和解码器:
- 职责: 负责CAM消息的编码和解码
- 功能点:
- CAM消息的ASN.1编码和解码
- 验证CAM消息的有效性
- 解析CAM消息的各个字段
接口 V2X应用到CA服务:
- 提供的服务: 允许应用触发CAM消息的生成和接收CAM通知
- 调用方式: 通过标准AUTOSAR接口
接口 车辆数据提供者(VDP)和位置服务(POTI):
- 提供的服务: 向CA服务提供车辆状态数据和位置信息
- 调用方式: 通过标准AUTOSAR接口
代码示例
c
/* CAM传输管理的触发函数 */
Std_ReturnType V2xFac_CAM_TriggerTransmission(void)
{
Std_ReturnType result = E_OK;
V2xFac_CAM_DataType camData;
boolean sendCAM = FALSE;
/* 检查是否满足发送条件 */
sendCAM = V2xFac_CAM_CheckTriggerConditions();
if (sendCAM == TRUE)
{
/* 从VDP获取车辆数据 */
result = V2xFac_CAM_GetVehicleData(&camData);
if (result != E_OK)
{
return result;
}
/* 从POTI获取位置数据 */
result = V2xFac_CAM_GetPositionData(&camData);
if (result != E_OK)
{
return result;
}
/* 编码CAM消息 */
result = V2xFac_CAM_Encode(&camData);
if (result != E_OK)
{
return result;
}
/* 通过BTP发送CAM */
result = V2xBtp_Transmit(V2XFAC_CAM_PORT, &camData.encodedData);
/* 更新频率管理状态 */
V2xFac_CAM_UpdateFrequencyState();
}
return result;
}
/* CAM接收回调函数 */
void V2xFac_CAM_RxIndication(const V2xBtp_RxIndicationType* RxIndicationPtr)
{
V2xFac_CAM_DataType camData;
Std_ReturnType result;
if (RxIndicationPtr == NULL)
{
return;
}
/* 解码接收到的CAM消息 */
result = V2xFac_CAM_Decode(RxIndicationPtr->data, &camData);
if (result != E_OK)
{
return;
}
/* 通知应用层 */
V2xApplRxIndication_CAM(&camData);
}
1.3 分散环境通知(DEN)服务功能架构

分散环境通知服务元素解释
组件 DENM传输管理:
- 职责: 处理分散环境通知消息(DENM)的生成和发送
- 功能点:
- 处理应用触发的事件
- 创建与管理DENM消息
- 设置事件类型和持续时间
- 管理消息有效期和更新
组件 DENM接收管理:
- 职责: 处理接收到的DENM消息
- 功能点:
- 接收和解码DENM消息
- 将消息转发给应用层
- 管理已接收消息的存储和引用
组件 DENM重复机制:
- 职责: 负责DENM消息的重复发送策略
- 功能点:
- 根据事件类型设置重复策略
- 在指定时间间隔重复发送DENM
- 对关键事件提高重发频率
- 支持消息更新和终止
组件 Keep Alive转发:
- 职责: 维持关键DENM消息的传播
- 功能点:
- 接收并转发相关DENM
- 维持关键信息传播
- 扩大消息覆盖范围
- 防止消息在网络中丢失
接口 V2X应用到DEN服务:
- 提供的服务: 允许应用触发DENM消息的生成和接收DENM通知
- 调用方式: 通过标准AUTOSAR接口
接口 位置服务(POTI)到DEN服务:
- 提供的服务: 向DEN服务提供位置信息
- 调用方式: 通过标准AUTOSAR接口
代码示例
c
/* 应用触发DENM消息函数 */
Std_ReturnType V2xFac_DENM_TriggerEvent(const V2xFac_DENM_EventType* EventPtr)
{
Std_ReturnType result = E_OK;
V2xFac_DENM_DataType denmData;
if (EventPtr == NULL)
{
return E_NOT_OK;
}
/* 初始化DENM数据结构 */
V2xFac_DENM_InitData(&denmData, EventPtr);
/* 从POTI获取位置数据 */
result = V2xFac_DENM_GetPositionData(&denmData);
if (result != E_OK)
{
return result;
}
/* 编码DENM消息 */
result = V2xFac_DENM_Encode(&denmData);
if (result != E_OK)
{
return result;
}
/* 通过BTP发送DENM */
result = V2xBtp_Transmit(V2XFAC_DENM_PORT, &denmData.encodedData);
/* 如果需要重复发送,设置重复参数 */
if (EventPtr->repetitionEnabled == TRUE)
{
result = V2xFac_DENM_SetupRepetition(EventPtr->actionId,
EventPtr->repetitionInterval,
EventPtr->repetitionDuration);
}
return result;
}
/* DENM重复发送处理函数 */
void V2xFac_DENM_ProcessRepetition(void)
{
uint8 i;
/* 遍历所有活动的重复事件 */
for (i = 0; i < V2XFAC_DENM_MAX_REPETITION_EVENTS; i++)
{
if (V2xFac_DENM_RepetitionEvents[i].active == TRUE)
{
/* 检查是否到达重复时间 */
if (V2xFac_DENM_CheckRepetitionTime(&V2xFac_DENM_RepetitionEvents[i]))
{
/* 重新发送DENM */
V2xFac_DENM_ResendMessage(&V2xFac_DENM_RepetitionEvents[i]);
/* 更新下一次重复时间 */
V2xFac_DENM_UpdateRepetitionTime(&V2xFac_DENM_RepetitionEvents[i]);
/* 检查重复持续时间是否到期 */
if (V2xFac_DENM_CheckRepetitionExpiry(&V2xFac_DENM_RepetitionEvents[i]))
{
V2xFac_DENM_RepetitionEvents[i].active = FALSE;
}
}
}
}
}
2. 总结
AUTOSAR V2X Facilities模块是Vehicle-to-X通信中关键的中间层组件,它实现了多种基本服务以支持车辆与其他实体之间的通信。主要特点包括:
- 模块化架构:清晰划分为不同的服务组件,如CA、DEN、IVI等
- 标准兼容性:符合ETSI和AUTOSAR标准规范
- 服务丰富:提供合作感知、环境通知等多种V2X通信服务
- 灵活配置:支持根据不同应用场景和需求进行配置
- 多层协作:与上层应用和下层传输层密切协作,确保数据的有效传输
V2X Facilities模块是现代智能交通系统中实现车辆间通信、车路协同等功能的基础软件模块,对提高道路安全性、交通效率和驾驶体验具有重要作用。