基于车辆运动学的LQR轨迹跟踪控制 (matlab)

本文详细介绍了基于车辆运动学的LQR轨迹跟踪控制过程,包括车辆运动学模型(自行车模型)、轨迹跟踪控制逻辑(3DOF车辆模型和LQR求解矩阵F的计算)、以及LQR求解器(离散型方法)。通过Matlab实现并展示了仿真结果和控制量记录。
摘要由CSDN通过智能技术生成

基于车辆运动学的LQR轨迹跟踪控制可以分为三个模块

车辆运动学模型、轨迹跟踪控制模块、LQR求解器

先上仿真结果

导入纽伯格林赛道数据,预先设置最优轨迹,基于自行车模型,利用LQR进行轨迹跟踪,结果如下

一、车辆运动学模型

这里使用了最基本的自行车模型

function [vehicle_new] = VehicleModel(vehicle_old,vehilce_con)

    x_old = vehicle_old(1);
    y_old = vehicle_old(2);
    theta_old = vehicle_old(3);
    v = vehilce_con(1);
    delta = vehilce_con(2);
    ts = 0.1;
    L = 1.4;

    x_new = x_old + v * cos(theta_old) * ts;
    y_new = y_old + v * sin(theta_old) * ts;
    theta_new = theta_old + tan(delta * v/L) * ts;

    vehicle_new = [x_new; y_new; theta_new];

end

在进行LQR求解的时候,需要用到线性化+离散化后的自行车模型,下面是公式推导

二、轨迹跟踪控制逻辑

3DOF vehicle model 是车辆运动学模型

LQR模块负责求解矩阵F

同时在map中匹配目标路径点(主要用于匹配前轮转角)

此部分代码如下:

LQR_tracking函数作用是 根据当前车辆状态及目标路径点生成控制量(车速、前轮转角)

VehicleModel函数就是前面提到的车辆运动学模型 

其余部分就是做一些数据更新及记录的工作

while stop_signal == 0
    
    disp(index);
    
    [v, delta, stop_signal, index_new] = LQR_tracking(vehicle_state,ref_Posx,ref_Posy,reftheta,refdelta,index);

    disp(index_new);

    vehicle_con = [v; delta];

    vehicle_state_new = VehicleModel(vehicle_state,vehicle_con);

    vehicle_state = vehicle_state_new;

    vehicle_state_record = [vehicle_state_record, vehicle_state];

    vehicle_con_record = [vehicle_con_record, vehicle_con];

    index = index_new;

end

三、LQR求解器

这部分主要参考《控制之美2》中提到的离散型LQR求解方法

此部分代码如下:

LQR_gain函数主要作用是嵌套在LQR_tracking函数中负责求解矩阵F

function [F] = LQR_gain(A,B,S,Q,R)

    tol = 1e-3;
    max_iter = 200;
    i = 0;
    diff = Inf;
    F_old = Inf;

    P = S;

    while diff > tol

        F_new = inv(transpose(B)*P*B+R) * transpose(B) * P * A;

        diff = abs(max(F_old-F_new));

        F_old = F_new;

        P_new = Q + transpose(F_old)*R*F_old + transpose(A-B*F_old)*P*(A-B*F_old);

        P = P_new;

        i = i + 1;

        if i > max_iter
            break;
        end
    end

    F = F_new;

end

四、其余工作

在前期将控制量及车辆状态量均记录在vehicle_con_record和vehicle_state_record矩阵中,最后利用matlab的画图功能将其以动画形式复现即可。

  • 7
    点赞
  • 26
    收藏
    觉得还不错? 一键收藏
  • 5
    评论
评论 5
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值