基于Matlab/Simulink的自动驾驶车道保持ADAS辅助模型(更新为LQR或MPC控制算法)
基于Matlab/simulink的自动驾驶车道保持adas辅助模型后续会继续此模型更新把pid换成LQR或者MPC。 需要的自取可以为模型 需要版本Matlab2021a踩下油门启动仿真屏幕上虚拟车辆稳稳咬住车道线开始巡航。这个在Matlab2021a里用Simulink搭建的车道保持模型核心秘密藏在三个黄色PID模块里——不过咱们今天要扒开看似简单的控制逻辑看看自动驾驶辅助系统怎么把方向盘的操控权从人类手里悄悄接过来。![车道保持模型架构图]此处应有模型架构图因文本交互暂用文字描述整个模型由五块拼图组成弯曲道路生成器、三自由度车辆模型、前视摄像头、决策大脑就是那个PID控制器和方向盘执行机构。重点看这个Camera模块的算法内核function [d,phi] processImage(I) % 转换HSV空间更易提取车道线 I_hsv rgb2hsv(I); saturation I_hsv(:,:,2); binary saturation 0.6; % 霍夫变换检测直线 [H,T,R] hough(binary); P houghpeaks(H,5); lines houghlines(binary,T,R,P); % 计算横向偏移和航向角 validLines lines([lines.theta]-30 [lines.theta]30); x_intercepts (R(validLines(1).rho) - ... sind(T(validLines(1).theta)))/cosd(T(validLines(1).theta)); d x_intercepts - 640/2; % 640为图像宽度 phi mean([validLines.theta]); end这段图像处理代码就像自动驾驶的眼睛通过HSV色彩空间转换精准锁定车道线。特别注意第13行的霍夫直线检测参数——0.6的饱和度阈值决定了系统在雨雾天气的表现这也是实际路测时需要重点调试的部分。基于Matlab/simulink的自动驾驶车道保持adas辅助模型后续会继续此模型更新把pid换成LQR或者MPC。 需要的自取可以为模型 需要版本Matlab2021a控制器模块现在用的是经典PID但咱们知道这货在高速过弯时容易抽风。看看这个正在调试的LQR控制器雏形function delta LQR_controller(v, d, phi) % 状态空间矩阵 A [0, v; 0, 0]; B [0; v/2.7]; % 2.7为轴距 Q diag([10, 1]); R 0.1; [K,~,~] lqr(A,B,Q,R); delta -K*[d; phi]; end这个LQR控制器的精髓在Q矩阵的权重分配——横向偏移d的惩罚系数是航向角phi的10倍相当于告诉控制系统宁可稍微歪着跑也别让车来回画龙。不过实际调参时发现当车速v超过80km/h时这个参数设置会让方向盘动作过于剧烈这就是为什么需要引入MPC来做多步预测。模型里藏着个彩蛋在Vehicle Dynamics模块的初始化脚本中有个隐藏的冰雪路面模式。把mass参数从1500改成5000前轮抓地力系数从0.8降到0.3立马能体验在结冰路面上做车道保持的刺激感——当然这时候PID控制器会直接崩掉得切换成带滑移率控制的MPC版本才能稳住。要导出这个模型给小伙伴用记得运行目录下的configureModel.m脚本这个脚本会自动检查是否有Automated Driving Toolbox和Control System Toolbox。曾经有个兄弟在2019b版本上死活跑不起来最后发现是缺少了Image Processing Toolbox的hough函数支持——所以版本管理真是个磨人的小妖精。下次更新会把那个傻乎乎的PID换成真正的预测控制到时候咱们再聊聊怎么让仿真模型在U型弯道里优雅地漂移过弯。现在先去Github上clone这个项目的朋友注意分支里的develop版本正在试验基于NLP的舒适度优化模块说不定能解决急转弯时的乘员晕车问题。