1. 项目概述
在自动驾驶和高级驾驶辅助系统(ADAS)开发中,超车换道是最具挑战性的场景之一。这个项目使用Prescan和Simulink搭建了一个典型的超车场景:主车以15m/s(约54km/h)的速度巡航时,前方遇到以5m/s(约18km/h)低速行驶的移动障碍车,同时左侧车道100米处还有一辆静止的障碍车。我们需要设计控制策略,让主车安全完成超车并返回原车道。
这个场景完美模拟了日常驾驶中常见的"龟速车挡道"情况。通过Prescan的物理级传感器仿真和Simulink的控制算法设计,我们可以验证超车策略的安全性和可靠性。相比纯理论分析,这种仿真方法能更真实地反映车辆动力学特性对控制效果的影响。
需要模型API调用? 免费领10W Token,多模型网关一键接入 Claude、DeepSeek 等主流模型。
2. 环境搭建与参数配置
2.1 Prescan场景搭建
打开Prescan GUI后,首先需要构建道路环境。建议选择双向四车道的高速公路场景,车道宽度设置为3.75米(符合中国高速公路标准)。然后按以下步骤添加车辆:
-
主车(Ego Vehicle):
- 初始位置:(0, 0)
- 初始速度:15 m/s
- 动力学模型:Bicycle Model(自行车模型)
- 传感器配置:至少需要前向雷达和后视摄像头
-
移动障碍车(Moving Obstacle):
- 初始位置:(50, 0)(主车前方50米同车道)
- 运动模式:Constant Velocity
- 速度:5 m/s
- 尺寸参数:建议使用默认轿车参数(长4.8m×宽1.8m)
-
静止障碍车(Static Obstacle):
- 位置:(-3.75, 100)(左侧车道100米处)
- 速度:0 m/s
- 建议设置为卡车模型以增加视觉辨识度
提示:在Prescan中设置车辆位置时,Y轴正方向对应现实中的左侧车道。因此左侧车道的Y坐标应为负值(-3.75m)。
2.2 Simulink模型配置
在Simulink中需要建立以下关键子系统:
-
车辆动力学接口:
- 从Prescan模块库拖入"Vehicle Dynamics"模块
- 选择"Bicycle Model"作为基础模型
- 输出端口连接车辆状态(位置、速度、航向角等)
-
控制信号接口:
- 油门/刹车信号范围:[-1,1],正值油门,负值刹车
- 方向盘转角范围:[-1,1],对应最大转向角
- 采样时间设置为0.01秒(100Hz)以保证控制精度
-
传感器数据处理:
- 雷达信号接入距离检测算法
- 摄像头信号接入车道线和障碍物识别算法
matlab复制% 车辆参数初始化脚本示例
ego.length = 4.7; % 车长(m)
ego.width = 1.8; % 车宽(m)
ego.wheelbase = 2.7; % 轴距(m)
ego.max_steer = 0.6; % 最大转向角(rad)
3. 控制策略设计与实现
3.1 状态机设计
超车过程采用有限状态机(FSM)实现,包含四个主要状态:
-
跟车模式(FOLLOW):
- 持续监测与前车的相对距离
- 使用雷达测距公式:distance = (obs_x - ego_x) - obs_length/2
- 当距离<20米时触发超车条件
-
加速变道(OVERTAKE):
- 方向盘左转角度:-0.15(约8.6度)
- 油门开度:0.8(80%最大加速度)
- 横向控制采用预瞄跟踪算法
-
并行监测(MONITOR):
- 判断条件:主车头超过障碍车尾5米
- 维持当前车速不变
- 持续监测原车道后方车辆
-
安全回位(RETURN_LANE):
- 方向盘右转角度:0.15
- 油门恢复至巡航状态(约0.3)
- 必须满足后方50米内无车
matlab复制function [throttle, steering] = fsm(ego_x, obs_x, rear_dist)
persistent state;
% 状态初始化
if isempty(state)
state = 'FOLLOW';
end
% 状态转移逻辑
switch state
case 'FOLLOW'
if (obs_x - ego_x) < 20
state = 'OVERTAKE';
throttle = 0.8;
steering = -0.15;
else
throttle = 0.3;
steering = 0;
end
case 'OVERTAKE'
if ego_x > (obs_x + 5)
if rear_dist > 50
state = 'RETURN_LANE';
steering = 0.15;
else
state = 'MONITOR';
steering = 0;
end
end
throttle = 0.8;
case 'MONITOR'
if rear_dist > 50
state = 'RETURN_LANE';
steering = 0.15;
end
throttle = 0.6;
case 'RETURN_LANE'
if abs(ego_y) < 0.1
state = 'FOLLOW';
steering = 0;
end
throttle = 0.3;
end
end
3.2 轨迹规划算法
采用五次多项式生成换道路径,确保轨迹平滑:
code复制y(t) = a₅t⁵ + a₄t⁴ + a₃t³ + a₂t² + a₁t + a₀
边界条件:
- t=0时:y(0)=0, y'(0)=0, y''(0)=0
- t=T时:y(T)=d, y'(T)=0, y''(T)=0
解得系数矩阵:
matlab复制T = 3; % 换道时间(s)
d = 3.75; % 横向位移(m)
A = [0 0 0 0 0 1;
T^5 T^4 T^3 T^2 T 1;
0 0 0 0 1 0;
5*T^4 4*T^3 3*T^2 2*T 1 0;
0 0 0 2 0 0;
20*T^3 12*T^2 6*T 2 0 0];
b = [0; d; 0; 0; 0; 0];
coeffs = A\b; % 求解多项式系数
4. 关键参数调试与优化
4.1 安全距离计算
超车过程中需要重点监控三个关键距离:
-
跟车安全距离:
code复制d_follow = v_ego * t_reaction + (v_ego^2 - v_obs^2)/(2*a_brake)其中:
- t_reaction:驾驶员反应时间(取1.5秒)
- a_brake:最大减速度(取-4 m/s²)
-
变道触发距离:
- 建议值:20米(考虑传感器误差和控制延迟)
-
回位安全距离:
- 后方最小距离:50米
- 计算公式:
d_safe = v_ego * 3.6(相当于3.6秒时距)
4.2 控制参数调优
通过大量仿真实验得出的优化参数组合:
| 参数 | 初始值 | 优化值 | 说明 |
|---|---|---|---|
| 换道时间(T) | 2.0s | 3.0s | 低于2.5s易导致失稳 |
| 最大转向角 | 0.2 | 0.15 | 减小侧向加速度 |
| 油门开度 | 1.0 | 0.8 | 防止驱动轮打滑 |
| 回位触发距离 | 3m | 5m | 增加安全余量 |
| 横向容错距离 | 0.2m | 0.5m | 考虑定位误差 |
5. 典型问题排查与解决
5.1 车辆失稳问题
现象:变道过程中车辆出现剧烈摆动甚至侧滑
原因分析:
- 换道时间T设置过短(<2秒)
- 方向盘转角变化率过大
- 轮胎模型参数不准确
解决方案:
- 将换道时间延长至3秒
- 在转向控制中加入一阶低通滤波器:
matlab复制steering_cmd = 0.9*steering_cmd + 0.1*steering_prev; - 检查Prescan中轮胎的侧偏刚度参数
5.2 碰撞风险问题
现象:回原车道时与固定障碍车发生刮蹭
原因分析:
- 回位时机判断不准确
- 后视镜检测范围不足
- 车辆动力学响应延迟
改进措施:
- 增加安全距离判断条件:
matlab复制if (rear_distance > 50) && (ego_x > static_obs_x + ego_length) - 扩大后视镜检测范围至70米
- 在状态机中增加"WAIT"过渡状态
5.3 轨迹跟踪误差大
现象:实际路径偏离规划轨迹超过0.3米
调试步骤:
- 检查自行车模型参数(特别是轴距)
- 验证控制器采样时间是否与Prescan同步
- 在横向控制中加入前馈补偿:
matlab复制delta_ff = atan(wheelbase * curvature);
6. 进阶优化方向
6.1 障碍车速度预测
针对移动障碍车可能加速的情况,可以增加速度预测模块:
-
使用卡尔曼滤波器估计障碍车加速度:
matlab复制% 状态向量:[位置; 速度; 加速度] F = [1 dt 0.5*dt^2; 0 1 dt; 0 0 1]; z = radar_measurement; [x_est, P] = kalman_filter(F, x_pred, P_pred, z); -
动态调整超车策略:
- 如果检测到障碍车加速,提前触发回位动作
- 根据相对速度重新计算安全距离
6.2 多目标决策
复杂交通场景下可能需要考虑更多因素:
- 建立代价函数评估各车道安全性:
code复制cost = w1*distance + w2*speed_diff + w3*curvature - 使用强化学习训练决策模型
- 引入V2X通信获取更全面的环境信息
6.3 硬件在环测试
将控制算法部署到实时处理器(如dSPACE),与Prescan组成HIL测试系统:
- 验证算法实时性能
- 测试极端工况下的系统鲁棒性
- 收集处理器资源占用数据
这个超车换道demo虽然场景简单,但涵盖了自动驾驶决策控制的多个核心技术点。在实际项目中,还需要考虑更多复杂因素,如雨天路滑、传感器噪声、通信延迟等。建议在掌握基础版本后,逐步增加这些现实约束条件进行进阶练习。
