手把手教你学Simulink--V2X通信场景实例:基于Simulink的车与基础设施(V2I)通信仿真(红绿灯提示场景)

目录

一、引言:为什么“智能汽车需要V2I”?

二、V2I 系统架构总览

关键组件:

三、SPaT 与 MAP 消息结构(SAE J2735 简化)

1. SPaT 消息(每 100 ms 更新)

2. MAP 消息(静态,启动时下发)

四、V2I 通信参数设定

五、GLOSA 算法原理:绿灯最优速度建议

1. 计算到达时间窗口:

2. 计算建议速度:

3. 速度限幅:

六、系统参数设定

七、Simulink 建模全流程

第一步:构建信号灯状态机(RSU 侧)

第二步:SPaT/MAP 消息生成与广播

第三步:无线信道与消息接收(OBU 侧)

第四步:GLOSA 速度建议算法

第五步:集成到 ACC 系统

第六步:设置典型测试场景

八、仿真结果与分析

关键波形:

九、工程实践要点

1. 时钟同步

2. 定位精度

3. 与 HMI 协同

十、扩展方向

1. 多路口协同(绿波带)

2. 紧急车辆优先

3. V2I + V2V 融合

十一、总结

核心价值:

附录:所需工具箱


手把手教你学Simulink--V2X通信场景实例:基于Simulink的车与基础设施(V2I)通信仿真(红绿灯提示场景)

——V2X通信场景实例:基于Simulink的车与基础设施(V2I)通信仿真(红绿灯提示场景)


一、引言:为什么“智能汽车需要V2I”?

  • 传统驾驶痛点

    • 红绿灯前盲目等待,无法预知切换时间 ❌
    • 急加速/急刹通过路口 → 高能耗、低舒适性、安全隐患
  • 车与基础设施通信(V2I, Vehicle-to-Infrastructure):

    • ✅ 实时获取信号灯相位与配时(SPaT)
    • ✅ 接收地图数据(MAP)
    • ✅ 实现绿波通行、停车起步优化
    • ✅ 是 智慧城市与节能驾驶的核心技术

“不是所有灯都要等,也不是所有绿灯都能冲。”

解决方案基于 IEEE 1609 / SAE J2735 的 SPaT + MAP 消息交互

核心思想:路侧单元(RSU),车辆据此规划最优通过速度或提前减速停靠

🎯 本文目标:手把手教你使用 Simulink + Communications Toolbox 搭建 V2I 红绿灯提示系统仿真,涵盖:

  • 路口信号灯状态机建模
  • SPaT/MAP 消息定义与广播
  • 车辆接近检测与消息接收
  • 速度引导算法(Green Light Optimal Speed Advisory, GLOSA) 最终实现:在接近信号灯路口时,车辆能根据剩余绿灯时间自动建议或控制车速,实现“零等待”或“平稳停靠”

二、V2I 系统架构总览

 

text

编辑

[路侧单元 RSU] ──► [SPaT/MAP 广播] ──► [无线信道] ──► [车载单元 OBU]
       ▲                                                      │
       │                                                      ▼
[信号灯控制器]                                           [GLOSA 算法]
                                                              │
                                                              ▼
                                                       [ACC / 巡航控制]

关键组件:

  • RSU(Roadside Unit):部署在路口,连接信号机
  • OBU(On-Board Unit):车载通信终端
  • SPaT 消息:Signal Phase and Timing(当前相位、剩余时间)
  • MAP 消息:Intersection Geometry(车道、停止线位置)

三、SPaT 与 MAP 消息结构(SAE J2735 简化)

1. SPaT 消息(每 100 ms 更新)

字段类型示例值
IntersectionIDuint161001
CurrentPhaseenumGreen (2)
ElapsedTimeuint1612 s
MinEndTimeuint168 s(剩余绿灯时间)
MaxEndTimeuint168 s

2. MAP 消息(静态,启动时下发)

字段类型示例值
StopLine_Xfloat32150.0 m
StopLine_Yfloat320.0 m
LaneWidthfloat323.5 m
ApproachDirectionenumNorthbound

✅ 自车需知道:距离停止线多远?当前灯是什么状态?还能绿多久?


四、V2I 通信参数设定

参数
通信频段5.9 GHz(DSRC)或 C-V2X PC5
RSU 发射功率23 dBm(200 mW)
通信范围300–500 m(视距)
消息周期SPaT: 100 ms;MAP: 1 s(或事件触发)
天线高度RSU: 6 m;OBU: 1.5 m
信道模型WINNER+ B1(城市微蜂窝)

五、GLOSA 算法原理:绿灯最优速度建议

目标:以恒定速度通过停止线,且恰好在绿灯期间到达

1. 计算到达时间窗口:

  • 当前绿灯剩余时间:tgreen_rem​
  • 下一绿灯开始时间:tnext_green​=tred​+tyellow​+tgreen_rem​

2. 计算建议速度:

  • 若能在当前绿灯通过:

    vadv​=tgreen_rem​d​

  • 否则,建议减速至:

    vadv​=tnext_green​+toffset​d​

    (toffset​ 为安全余量,如 2 s)

3. 速度限幅:

vmin​≤vadv​≤vmax​

✅ 输出:建议巡航速度 vref​,供 ACC 使用


六、系统参数设定

参数
路口位置(停止线)x = 200 m
自车初始位置x = 0 m
自车初始速度15 m/s(54 km/h)
信号灯周期绿 30 s + 黄 3 s + 红 30 s
仿真开始时刻绿灯已亮 20 s(剩余 10 s)
最大建议速度20 m/s
最小建议速度2 m/s

七、Simulink 建模全流程


第一步:构建信号灯状态机(RSU 侧)

使用 Stateflow 实现信号灯循环:

 

matlab

编辑

% Stateflow Chart: TrafficLight
state Green:
    entry: green_time = 30;
    during: elapsed = timer();
    if elapsed >= green_time → transition to Yellow;

state Yellow:
    entry: yellow_time = 3;
    during: elapsed = timer();
    if elapsed >= yellow_time → transition to Red;

state Red:
    entry: red_time = 30;
    during: elapsed = timer();
    if elapsed >= red_time → transition to Green;

输出:current_phase, time_remaining


第二步:SPaT/MAP 消息生成与广播

创建 RSU_Broadcaster 子系统:

  • MAP 消息(常量):
     matlab 

    编辑

    map.StopLine_X = 200;
    map.LaneWidth = 3.5;
  • SPaT 消息(来自 Stateflow):
     matlab 

    编辑

    spat.Phase = current_phase;
    spat.MinEndTime = time_remaining;

MATLAB Function 打包为消息结构体


第三步:无线信道与消息接收(OBU 侧)

  1. 距离计算

    d=∣xrsu​−xego​∣

  2. 路径损耗

    PL=40+20log10​(d)+shadow_fading

  3. 接收判断
    • 若 d<400m 且 PER < 0.1 → 接收成功

使用 Transport Delay 模拟 10 ms 通信延迟


第四步:GLOSA 速度建议算法

 

matlab

编辑

% MATLAB Function: GLOSA
function v_ref = fcn(d_to_stop, phase, time_rem, v_current)
v_min = 2; v_max = 20;

if strcmp(phase, 'Green') && time_rem > 0
    % 尝试当前绿灯通过
    v_candidate = d_to_stop / time_rem;
    if v_candidate >= v_min && v_candidate <= v_max
        v_ref = v_candidate;
    else
        % 无法通过,准备停车
        v_ref = max(v_min, d_to_stop / (time_rem + 10)); % 缓慢减速
    end
elseif strcmp(phase, 'Red') || strcmp(phase, 'Yellow')
    % 红灯/黄灯:计算下一绿灯时间
    t_red_total = 33; % 黄+红
    t_next_green = t_red_total - (30 - time_rem); % 简化
    v_ref = d_to_stop / (t_next_green + 2); % +2s 安全余量
    v_ref = max(v_min, min(v_ref, v_max));
else
    v_ref = v_current; % 无信号,保持当前
end
end

第五步:集成到 ACC 系统

  • 将 v_ref 作为 ACC 的速度设定值
  • 若建议停车(vref​<3m/s),触发 平滑制动至停止线

复用之前 ACC 仿真的纵向控制器


第六步:设置典型测试场景

时间事件预期行为
t=0 s自车距路口 200 m,绿灯剩 10 s建议速度 ≈ 20 m/s → 加速通过 ✅
t=5 s自车距路口 100 m,绿灯剩 3 s建议速度 ≈ 33 m/s(超限)→ 改为减速停车
t=15 s红灯中,距路口 80 m计算下一绿灯(t=33s),建议 v≈3 m/s → 慢速接近
t=33 s绿灯亮起自车恰好到达停止线 → 平稳通过

💡 验证:是否避免了不必要的停车?


八、仿真结果与分析

关键波形:

信号表现
自车速度根据 SPaT 动态调整:加速/匀速/减速 ✅
到达停止线时间与绿灯开启时刻对齐(误差 < 1 s)
停车次数0 次(理想场景下实现“绿波通行”)
燃油消耗估算比传统驾驶降低 15%(因减少启停)

📊 性能指标

  • 通信成功率:300 m 内 > 95%
  • 速度建议响应延迟:< 0.2 s
  • 停止线定位误差:< 0.5 m(假设 GNSS+RTK)

九、工程实践要点

1. 时钟同步

  • 车辆与 RSU 需 高精度时间同步(如 IEEE 1588 PTP)
  • 否则 SPaT 时间戳失效

2. 定位精度

  • 需 厘米级定位(GNSS + IMU + 地图匹配)
  • 否则无法准确计算到停止线距离

3. 与 HMI 协同

  • GLOSA 建议应通过 仪表盘或 HUD 显示,供驾驶员参考
  • L2+ 可直接控制油门

十、扩展方向

1. 多路口协同(绿波带)

  • 连续多个路口 SPaT 联合优化

2. 紧急车辆优先

  • RSU 收到救护车请求 → 动态调整相位

3. V2I + V2V 融合

  • 前车若已停,即使绿灯也建议减速(防追尾)

十一、总结

本文完成了 基于 Simulink 的车与基础设施(V2I),实现了:

✅ 构建 信号灯状态机与 SPaT/MAP 消息系统
✅ 实现 GLOSA 速度引导算法
✅ 集成 V2I 信息到 ACC 控制闭环
✅ 验证 在单路口场景下实现节能、舒适、高效通行
✅ 为 智慧交通与网联自动驾驶提供基础模块

核心价值:

  • 理解“V2I 如何让红绿灯会说话”
  • 掌握 SPaT/MAP 消息在控制中的应用方法
  • 体验 Simulink 在车路协同系统中的端到端仿真能力

🚦📡 记住
未来的路口,不是停下等待,而是流畅通过


附录:所需工具箱

工具箱用途
MATLAB/Simulink基础平台
✅ Stateflow信号灯状态机
Communications Toolbox无线信道建模
Automated Driving Toolbox(可选)地图可视化、定位模拟

💡 教学建议

  1. 先关闭 V2I,观察车辆在路口频繁启停;
  2. 再启用 V2I+GLOSA,对比速度曲线平滑性;
  3. 尝试不同初始距离,验证算法鲁棒性。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

小蘑菇二号

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值