prescan simulink 车辆超车换道,主车速度15m/s,一个运动障碍车速度5m/s,一个固定障碍车,超车加油门后回到原车道
高速上遇到前方慢车,一把方向变道超车是驾驶员的基操。今天咱们用Prescan+Simulink复现这个场景——主车15m/s巡航,前方5m/s的移动障碍车挡路,隔壁车道还有个固定障碍物。如何在确保安全的前提下完成超车?直接上干货!
场景搭建环节,打开Prescan拖入三辆车:主车(Ego)初始位(0,0),运动障碍车(Movingobs)放在主车前方50米同车道,固定障碍车(Staticobs)放在左侧车道100米处。重点来了:在运动障碍车的Motion设置里勾选"Constant velocity"锁定5m/s,主车初始速度设15m/s。
% 障碍车运动参数配置示例 moving_obs = scenario.Vehicles(2); moving_obs.InitialSpeed = 5; % 龟速实锤 moving_obs.Motion.Policy = 'PredefinedSpeed';动力学模型别整太复杂,用Prescan自带的Bicycle Model足够应付这个场景。在Simulink里把车辆动力学接口拖出来,注意把油门/刹车信号接入纵向控制,方向盘转角接横向控制。
核心控制逻辑采用状态机实现:
- 跟车模式:持续监测与前车距离,当间距<20米时触发超车
- 加速变道:方向左打+油门踩到0.8(别踩满,防止打滑)
- 并行监测:车头超越障碍车后维持速度
- 安全回位:通过后视镜模型检测原车道安全距离,右转回正
// 简化的状态机伪代码 switch(current_state){ case FOLLOW: if(distance < 20m) enter OVERTAKE; set_throttle(0.8); set_steering(-0.15); //左转 break; case OVERTAKE: if(ego_x > moving_obs_x + 5m) check_rear_mirror(); if(safe_distance) enter RETURN_LANE; set_steering(0.15); //右转回正 break; }轨迹生成用五次多项式规划变道路径。这里有个坑:预设的换道时间不能太短!实测当T<2秒时,方向盘转角会突变导致车辆失稳。咱们取T=3秒,横向位移d=3.75米刚好覆盖车道宽度。
% 五次多项式系数计算 A = [0 0 0 0 0 1; T^5 T^4 T^3 T^2 T 1]; b = [0; d]; coefficients = A\b; % 解方程组仿真翻车实录:第一次跑的时候,回原车道时机没算准,主车屁股蹭到了固定障碍物。解决办法是在Stateflow里增加安全校验——只有当原车道后方50米内无车时才允许回位。调整后再次运行,主车丝滑完成超车动作,全程速度曲线呈现典型的"加速-维持-减速"三段式特征。
最后留个思考题:如果移动障碍车突然加速怎么办?不妨在距离检测模块里加个速度预测函数,下次咱们接着唠这个进阶操作!