自动驾驶控制:动力学跟踪误差模型LQR算法路径跟踪仿真

自动驾驶控制-动力学跟踪误差模型LQR算法路径跟踪仿真 复现百度apollo的横向控制 matlab/simulink和carsim联合仿真,动力学跟踪误差模型实现的前馈 反馈lqr横向控制,可以跟踪双移线,圆形,五次多项式以及各种自定义路径,相比运动学模型车速更高,更实用。 跟踪效果完美。 有离线计算反馈矩阵K矩阵和在线计算K矩阵两种。 可以提供前轮转向/后轮转向/四轮转向三种模型,具体看你需要哪个请指定

最近在研究自动驾驶横向控制这块,今天来和大家分享一下复现百度apollo横向控制的一些心得,主要基于matlab/simulink和carsim联合仿真,利用动力学跟踪误差模型实现前馈 + 反馈LQR横向控制。

一、算法背景及优势

传统的运动学模型在车速较高时,控制效果可能不尽人意。而动力学跟踪误差模型考虑了车辆的动力学特性,在较高车速下能更精准地实现路径跟踪,实用性更强。像双移线、圆形、五次多项式以及各种自定义路径,都能轻松跟踪,而且跟踪效果堪称完美。

二、LQR算法实现

离线计算反馈矩阵K矩阵

LQR(线性二次型调节器)算法的核心之一就是反馈矩阵K。离线计算K矩阵时,我们首先要定义系统的状态空间方程。假设车辆的状态向量为 x = [xposition, yposition, headingangle, velocity],控制输入为 u = [steeringangle]

以一个简单的车辆动力学模型为例(这里为了便于理解,做了适当简化),状态空间方程可以写成:

A = [0 0 0 1; 0 0 0 0; 0 0 0 0; 0 0 0 0];
B = [0; 1; 0; 0];

这里的 A 矩阵描述了状态的变化,B 矩阵描述了控制输入对状态的影响。

接下来计算Q和R矩阵,Q矩阵用于权衡状态的重要性,R矩阵用于权衡控制输入的代价。

Q = [1 0 0 0; 0 1 0 0; 0 0 1 0; 0 0 0 1];
R = [1];

然后就可以利用matlab的 lqr 函数来计算K矩阵:

[K, S, E] = lqr(A, B, Q, R);

这个 K 矩阵就是离线计算得到的反馈矩阵,在后续的控制中,根据当前状态 x 计算控制输入 u = -K * x

在线计算K矩阵

在线计算K矩阵相比离线计算,更能实时适应车辆状态和环境的变化。实现在线计算时,我们需要在每个时间步重新计算K矩阵。

% 假设在每个时间步t
for t = 1:total_time_steps
    % 更新A和B矩阵,这里假设A和B矩阵会随时间变化
    A = update_A(t); 
    B = update_B(t); 
    Q = [1 0 0 0; 0 1 0 0; 0 0 1 0; 0 0 0 1];
    R = [1];
    [K, S, E] = lqr(A, B, Q, R);
    % 根据当前状态x计算控制输入u
    x = get_current_state(t); 
    u = -K * x;
    % 执行控制动作
    execute_control(u); 
end

这里的 updateAupdateB 函数是根据车辆当前状态实时更新状态空间矩阵,getcurrentstate 函数获取当前车辆状态,execute_control 函数执行控制动作。

三、转向模型选择

可以提供前轮转向、后轮转向、四轮转向三种模型。

  • 前轮转向:这是最常见的转向方式,车辆的转向主要通过控制前轮的转向角度来实现。在代码实现上,控制输入 u 直接对应前轮转向角度。
  • 后轮转向:相对少见一些,但在某些特殊场景下有独特优势。代码实现时,对车辆动力学模型的调整主要集中在将控制输入 u 映射到后轮转向角度,并且需要重新调整状态空间方程中与转向相关的部分。
  • 四轮转向:四轮转向能提供更好的机动性和稳定性。在实现时,需要将控制输入 u 合理分配到前后轮的转向角度上,同时状态空间方程和动力学模型都要做相应的更复杂的调整。

四、联合仿真实现

通过matlab/simulink和carsim联合仿真,能更真实地模拟车辆在实际行驶中的情况。在simulink中搭建基于动力学跟踪误差模型的LQR控制模块,将其输出的转向角度作为carsim的输入,同时从carsim获取车辆的实时状态反馈给simulink进行下一步的计算。具体的联合仿真设置这里就不赘述了,网上有很多相关教程。

总的来说,利用动力学跟踪误差模型结合LQR算法实现自动驾驶横向控制,无论是在理论研究还是实际应用中都有很大的价值,感兴趣的小伙伴可以一起深入探讨。

【直流微电网】径向直流微电网的状态空间建模与线性化:一种耦合DC-DC变换器状态空间平均模型的方法 (Matlab代码实现)内容概要:本文介绍了径向直流微电网的状态空间建模与线性化方法,重点提出了一种基于耦合DC-DC变换器状态空间平均模型的建模策略。该方法通过对系统中多个相互耦合的DC-DC变换器进行统一建模,构建出整个微电网的集中状态空间模型,并在此基础上实施线性化处理,便于后续的小信号分析与稳定性研究。文中详细阐述了建模过程中的关键步骤,包括电路拓扑分析、状态变量选取、平均化处理以及雅可比矩阵的推导,最终通过Matlab代码实现模型仿真验证,展示了该方法在动态响应分析和控制器设计中的有效性。; 适合人群:具备电力电子、自动控制理论基础,熟悉Matlab/Simulink仿真工具,从事微电网、新能源系统建模与控制研究的研究生、科研人员及工程技术人员。; 使用场景及目标:①掌握直流微电网中多变换器系统的统一建模方法;②理解状态空间平均法在非线性电力电子系统中的应用;③实现系统线性化并用于稳定性分析与控制器设计;④通过Matlab代码复现和扩展模型,服务于科研仿真与教学实践。; 阅读建议:建议读者结合Matlab代码逐步理解建模流程,重点关注状态变量的选择与平均化处理的数学推导,同时可尝试修改系统参数或拓扑结构以加深对模型通用性和适应性的理解。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值