自动驾驶路径规划仿真模型 基于MATLAB/SIMULINK/prescan/carsim仿真实验 自动驾驶车辆动态避障模拟真实环境 使用控制和规划调度算法stateflow状态机模型 MATLAB2018bcarsim2019.1prescan8.5联合测试结果 配置好环境可直接运行最近在折腾自动驾驶仿真实验的时候发现Prescan和Carsim这对组合拳确实有点东西。直接把虚拟摄像头、激光雷达数据和真实的车辆动力学特性揉在一起调算法的时候终于不用在真车上玩心跳了。在Prescan里搭了个双向四车道的场景随手扔了几个突然出现的纸箱当障碍物。重点是这个道路曲率设置得够骚——连续S弯接直角转弯规划算法要是能扛住这种魔鬼路线上路基本稳了。注意要在Scenario Editor里勾选Dynamic Objects选项不然障碍物不会按轨迹运动。Carsim的车辆参数设置直接决定仿真真实性。有次手滑把后轮侧偏刚度设大了20%结果车子过弯时直接表演了段托马斯回旋。现在学乖了直接调用预设的Sedan_Class车型模板重点改这三个参数VSVehicle.Set.VS_COMMON.dm 1500; % 整备质量 VSVehicle.Set.VS_TIRERADIAL.Cz 200; % 轮胎侧偏刚度 VSVehicle.Set.VS_LONG_SLIP.IMODE 3; % 驱动模式规划算法用了改进的RRT*在MATLAB里写了个带动态权重调整的版本。核心是这个节点扩展函数function new_node extendRRT(start, goal, obstacles) search_bias 0.3; % 冲着目标去的概率 if rand search_bias target goal randn(1,2)*0.5; % 加个随机扰动 else target start (goal - start).*rand(1,2); end % 动态调整步长车速越快步长越大 step_size max(0.5, norm(current_velocity)*0.2); new_node start step_size*(target - start)/norm(target - start); if collisionCheck(new_node, obstacles) new_node []; end end这个骚操作让规划路径在低速时更精细高速时又能快速响应。不过要注意动态权重得和控制器做耦合不然容易规划出人类驾驶员看了想打人的蛇形走位。自动驾驶路径规划仿真模型 基于MATLAB/SIMULINK/prescan/carsim仿真实验 自动驾驶车辆动态避障模拟真实环境 使用控制和规划调度算法stateflow状态机模型 MATLAB2018bcarsim2019.1prescan8.5联合测试结果 配置好环境可直接运行控制模块里埋了个PID-LQR混合控制器实测比纯PID稳得多。看这段方向盘控制代码function delta steerControl(ref_path, current_pose) persistent integral_term; if isempty(integral_term) integral_term 0; end lookahead 3 0.35*current_velocity; % 动态前视距离 target_point getLookaheadPoint(ref_path, current_pose, lookahead); % 横向误差计算 dx target_point(1) - current_pose(1); dy target_point(2) - current_pose(2); cross_track_error (dx*sin(current_pose(3)) - dy*cos(current_pose(3))); % LQR权重调整 Q diag([10, 0.1, 5, 0.01]); R 0.8; K lqr(A,B,Q,R); % 系统矩阵需要提前定义 % 混合控制输出 delta -K*[cross_track_error; yaw_error; yaw_rate; steer_angle]... 0.3*integral_term; integral_term integral_term cross_track_error*0.02; end调试时发现积分项容易导致方向盘抽风后来加了个积分限幅才解决。LQR的参数矩阵Q调了整整两天最后发现把横向误差的权重调到10倍以上车子走线终于不画龙了。Stateflow状态机是整套系统的灵魂设计了五种驾驶模式states { Cruise,... % 巡航 ObstacleAvoidance,... % 避障 EmergencyBrake,... % 急刹 LaneChange,... % 变道 Error... % 异常状态 };状态切换条件写得像在搞谍战——比如当雷达检测到障碍物距离小于2米且相对速度大于5m/s时直接触发EmergencyBrake模式同时给规划器发重置指令。有次手贱把急刹触发距离设成0.5米结果仿真视频里车子DuangDuang撞飞三个纸箱场面一度非常欢乐。联合调试时遇到过Prescan和Carsim时间不同步的坑后来在Simulink里加了个全局时钟同步模块才解决。现在整套系统在MATLAB2018b上跑得丝滑20km/h工况下横向控制误差能压在0.15米以内。不过速度提到50km/h以上时规划器偶尔会抽风看来动态权重调整的逻辑还得再优化。最后给个实测数据在包含3个移动障碍物的场景中平均避障反应时间0.82秒比驾校教练踩副刹的速度还快。整套模型文件打个zip包才800MB比某些深度学习模型轻量多了。有老铁想复现的话记得装VC2015运行库别问我是怎么知道的...