自动驾驶控制:LQR控制路径跟踪Simulink与Carsim联合仿真

张开发
2026/5/17 13:16:44 15 分钟阅读
自动驾驶控制:LQR控制路径跟踪Simulink与Carsim联合仿真
自动驾驶控制-LQR控制路径跟踪仿真 Simulink和Carsim联合仿真横向控制为前馈反馈lqr纵向为位置-速度双PID控制 对于减小误差可以联合后轮转向/四轮转向算法小店中有 下图为Simulink模型截图跟踪效果及跟踪视频 提供模型文件包含咱今天聊点硬核的——用LQR玩转路径跟踪这事儿。最近在搞的SimulinkCarsim联合仿真项目里横向控制直接上前馈反馈LQR组合拳纵向用位置-速度双PID套娃控制实测下来能把横向误差压到0.1米以内。先上个模型截图镇楼假装有图下面咱们边拆代码边唠。横向控制这块的核心在于状态方程构建。咱们直接把车辆动力学简化为二自由度模型状态量选横向误差、航向角误差和它们的微分。在Simulink里用S-Function实现的状态空间模块长这样function sys lqr_controller(t,x,u,flag) Q diag([50, 1, 20, 0.1]); % 误差权重往死里加 R 0.01; % 控制量别太浪 K lqr(A,B,Q,R); % 自动求解器 delta_fb -K * [e1; e2; e1_dot; e2_dot];这里有个骚操作前馈补偿不是直接算理论转角而是把期望曲率积分到控制量里。实测发现这招对曲率突变的路段特管用比纯反馈稳得多。不过权重矩阵Q里的20这个值调了整整两天——太小了跟踪迟滞太大了方向盘抽风。纵向控制别看是双PID坑比横向还多。外层位置环的积分项必须加抗饱和不然遇到红灯停车时速度会突然抽抽。分享个实战调参公式if abs(error_pos) 2 % 大误差区间 Kp 1.2; Ki 0.05; elseif abs(error_pos) 0.5 % 过渡区 Kp 0.8; Ki 0.1; else % 精细控制 Kp 0.3; Ki 0.15; end速度环更讲究得把加速度限制在2.5m/s²以内否则乘客体验堪比过山车。这里在Simulink里用Rate Limiter模块卡死加速度变化率比单纯限幅更顺滑。自动驾驶控制-LQR控制路径跟踪仿真 Simulink和Carsim联合仿真横向控制为前馈反馈lqr纵向为位置-速度双PID控制 对于减小误差可以联合后轮转向/四轮转向算法小店中有 下图为Simulink模型截图跟踪效果及跟踪视频 提供模型文件包含说到四轮转向的骚操作没错就是店里那个在LQR基础上加个后轮转角补偿弯道极限工况能再砍掉30%的横向误差。核心代码就三行beta atan(lr/(lrlf)*tan(delta_front)); delta_rear -0.3 * beta; // 后轮转角系数但注意别让后轮转角超过3度不然容易引发振荡。实测发现系数0.3是个甜蜜点既能辅助转向又不破坏稳定性。最后说下联合仿真的坑Carsim的坐标系和Simulink的千万别直接连Y轴方向是反的记得在接口模块里加个符号处理否则车子会朝着路径反方向狂奔别问我怎么知道的...模型文件已经打包好假装有附件包含20组预设道路场景。跑仿真时建议先开3倍速看大体趋势再0.5倍速逐帧检查异常抖动——某个弯道出现的高频振荡可能就是权重矩阵没调好的蛛丝马迹。

更多文章