探索横纵向车辆轨迹跟踪:LQR与模糊PID的奇妙之旅
横纵向车辆轨迹跟踪LQR/模糊PID 基于二自由度动力学模型与自然坐标系下建立误差模型设计前馈LQR控制器控制车辆的横向和横摆运动在此基础上设计双PID纵向控制器控制车辆纵向速度与位移为了提高控制效果纵向位移跟踪采用模糊PID控制这可以自适应的调整PID的参数。 轨迹规划基于五次多项式拟合所得。 通过Simulink与Carsim联合仿真验证了控制器的控制效果。 设置了三条轨迹单移线双移线和蛇形工况。 资料中有matlab代码simulink模型和介绍资料(自制)资料包括详细的建模过程、算法内容以及使用方法。嘿各位对车辆控制感兴趣的小伙伴们今天咱们来聊聊超酷的横纵向车辆轨迹跟踪这里面用到了LQR和模糊PID控制算法可有意思啦。一、基本思路概述咱们这次的目标是实现车辆横纵向的轨迹跟踪。简单来说就是让车辆能按照我们规划好的轨迹稳稳地行驶。为了达到这个目标我们采用了一些巧妙的方法。首先基于二自由度动力学模型与自然坐标系建立了误差模型这就像是给车辆的运动状态做了一个精准的“体检表”能清楚知道车辆实际运动和我们期望运动之间的差距。基于这个误差模型我们设计了前馈LQR控制器它的作用是控制车辆的横向和横摆运动就像给车辆装了个智能“方向盘”让车辆能灵活地转弯。在纵向方面设计了双PID纵向控制器来控制车辆的纵向速度与位移。而且为了让控制效果更好纵向位移跟踪采用了模糊PID控制它能自适应地调整PID的参数就像给车辆的“油门和刹车”加了个智能调节装置。横纵向车辆轨迹跟踪LQR/模糊PID 基于二自由度动力学模型与自然坐标系下建立误差模型设计前馈LQR控制器控制车辆的横向和横摆运动在此基础上设计双PID纵向控制器控制车辆纵向速度与位移为了提高控制效果纵向位移跟踪采用模糊PID控制这可以自适应的调整PID的参数。 轨迹规划基于五次多项式拟合所得。 通过Simulink与Carsim联合仿真验证了控制器的控制效果。 设置了三条轨迹单移线双移线和蛇形工况。 资料中有matlab代码simulink模型和介绍资料(自制)资料包括详细的建模过程、算法内容以及使用方法。轨迹规划呢是基于五次多项式拟合得到的这就保证了我们规划的轨迹既平滑又符合实际行驶需求。二、代码与分析前馈LQR控制器代码示例% 二自由度动力学模型参数 m 1500; % 车辆质量 Iz 2500; % 车辆转动惯量 lf 1.2; % 质心到前轴距离 lr 1.3; % 质心到后轴距离 Cf 80000; % 前轮侧偏刚度 Cr 80000; % 后轮侧偏刚度 % 建立状态空间方程 A [-2*(CfCr)/(m*vx), -2*(lf*Cf - lr*Cr)/(m*vx^2) - vx; -2*(lf*Cf - lr*Cr)/Iz, -2*(lf^2*Cf lr^2*Cr)/(Iz*vx)]; B [2*Cf/m, 0; 2*lf*Cf/Iz, 1/Iz]; % LQR控制器设计 Q [10, 0; 0, 1]; % 状态权重矩阵 R 1; % 输入权重矩阵 K lqr(A, B, Q, R); % 计算LQR增益矩阵这段代码首先定义了二自由度动力学模型的一些关键参数比如车辆质量、转动惯量、前后轮侧偏刚度等。然后根据这些参数建立了状态空间方程这里的A和B矩阵描述了车辆状态的变化和输入的影响。接着通过lqr函数计算LQR增益矩阵K这个矩阵就是LQR控制器的核心它决定了如何根据车辆的状态误差来调整控制输入。双PID纵向控制器代码示例% 初始化PID参数 Kp_v 1; % 速度PID比例系数 Ki_v 0.1; % 速度PID积分系数 Kd_v 0.01; % 速度PID微分系数 Kp_d 1; % 位移PID比例系数 Ki_d 0.1; % 位移PID积分系数 Kd_d 0.01; % 位移PID微分系数 % 模拟纵向控制过程 for i 1:length(time) % 速度误差 error_v desired_v(i) - current_v(i); % 位移误差 error_d desired_d(i) - current_d(i); % 速度PID控制 integral_v integral_v error_v * dt; derivative_v (error_v - prev_error_v) / dt; control_v Kp_v * error_v Ki_v * integral_v Kd_v * derivative_v; % 位移PID控制 integral_d integral_d error_d * dt; derivative_d (error_d - prev_error_d) / dt; control_d Kp_d * error_d Ki_d * integral_d Kd_d * derivative_d; prev_error_v error_v; prev_error_d error_d; end这里定义了速度和位移PID控制器的参数然后模拟了纵向控制的过程。通过计算速度误差和位移误差利用PID公式计算控制量。integral用于积分项的计算derivative用于微分项的计算不断更新控制量让车辆的速度和位移接近我们期望的值。模糊PID控制代码示例% 模糊规则库 fis newfis(fuzzy_pid); % 输入变量 fis addvar(fis, input, error, [-10, 10]); fis addvar(fis, input, derror, [-5, 5]); % 输出变量 fis addvar(fis, output, Kp, [0, 2]); fis addvar(fis, output, Ki, [0, 0.5]); fis addvar(fis, output, Kd, [0, 0.1]); % 添加隶属度函数和模糊规则此处省略具体规则添加 % 模糊推理 output evalfis([error, derror], fis); Kp output(1); Ki output(2); Kd output(3);模糊PID控制的核心就是根据误差和误差变化率来调整PID的参数。这里首先创建了一个模糊推理系统fis定义了输入变量误差和误差变化率和输出变量PID的三个参数。然后可以添加隶属度函数和模糊规则最后通过evalfis函数进行模糊推理得到调整后的PID参数。三、联合仿真验证为了验证我们设计的控制器的效果我们使用了Simulink与Carsim联合仿真。设置了三条不同的轨迹分别是单移线、双移线和蛇形工况。通过仿真结果我们可以直观地看到车辆在不同工况下能否很好地跟踪我们规划的轨迹。资料里还有详细的matlab代码、simulink模型以及自制的介绍资料里面包括了详细的建模过程、算法内容和使用方法大家可以进一步深入研究。总之横纵向车辆轨迹跟踪是一个很有挑战性也很有趣的领域LQR和模糊PID控制算法为我们实现精准的轨迹跟踪提供了强大的工具。希望大家能从这些内容中有所收获一起探索车辆控制的更多奥秘
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2436682.html
如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!