首页 > 编程语言 >自动驾驶-预瞄-Pure pursuit纯跟踪算法-MATLAB实现

自动驾驶-预瞄-Pure pursuit纯跟踪算法-MATLAB实现

时间:2023-04-05 15:34:23浏览次数:40  
标签:target 预瞄 cy cx MATLAB Pure ind dt yaw

有空把引入、逻辑、原理介绍给写了,目前先给大家看看代码。

将来写大概会分成这么几块:

  • 汽车运动学自行车模型
  • 跟踪算法主流模型及特点
  • 纯跟踪算法原理推导
  • 代码介绍

代码原创,来之不易,请勿不注明转载。

喜欢点个赞吧!网上许多代码都跑不起来hh

clc;
clear;

% ------------form road------------
cx = 0:0.1:50;
cx = cx';
for i = 1:length(cx)
    cy(i) = sin(cx(i)/5)*cx(i)/2;
end

%--------form initial state---------
L = 2.9  ;% [m] wheel base of vehicle
i = 1;
target_speed = 2.5;
T = 80;
x = 0; y = -3; yaw = 0; v = 0;
time = 0;

%--------how to update--------------
lastIndex = length(cx)-1;
dt = 0.1  ;% [s]
Lfc = 1.0;  % look-ahead distance
k = 0.1;  % look forward gain
Kp = 1.0 ; % speed propotional gain
Lf = k * v + Lfc;
%--------show initial state---------

target_ind= calc_target_index(x,y,cx,cy,Lf)



%--------Update now keep on track-----
while T > time && target_ind < lastIndex-10
    target_ind= calc_target_index(x,y,cx,cy,Lf)
    ai = PIDcontrol(target_speed, v,Kp);
    di = pure_pursuit_control(x,y,yaw,v,cx,cy,target_ind,k,Lfc,L,Lf);
    
    [x,y,yaw,v] = update(x,y,yaw,v, ai, di,dt,L)
    
    time = time + dt;
    pause(0.1)
    subplot(1,2,1)
    plot(cx,cy,'b',x,y,'r-*')
    title(['time=' num2str(time), 'v=' num2str(v),'ind=' num2str(target_ind)])
    drawnow
    hold on
    box off
% should also show errors
end

%-----growing speed-----------------
function [a] = PIDcontrol(target_v, current_v, Kp)
    a = Kp * (target_v - current_v);
end
%-----pute pursuit-------------------
function [delta] = pure_pursuit_control(x,y,yaw,v,cx,cy,ind,k,Lfc,L,Lf)
    tx = cx(ind);
    ty = cy(ind);
    
    alpha = atan((ty-y)/(tx-x))-yaw;
%--------should also show lateral error---------
    latError =abs((ty-y)*cos(yaw) - (tx-x)*sin(yaw))     
    subplot(1,2,2)
    plot(x,latError,'b-*')
    title(['latError=' num2str(latError)])
    drawnow
    hold on
    box off
%------------------------------------------------
    Lf = k * v + Lfc;
    delta = atan(2*L * sin(alpha)/Lf)  ;
end
%-----update state-------------------
function [x, y, yaw, v] = update(x, y, yaw, v, a, delta,dt,L)
    x = x + v * cos(yaw) * dt;
    y = y + v * sin(yaw) * dt;
    yaw = yaw + v / L * tan(delta) * dt;
    v = v + a * dt;
end
%-----find the nearest point---------
function [ind] = calc_target_index(x,y, cx,cy,Lf)
    N =  length(cx);
    %N =  length(cx)-11;
    Distance = zeros(N,1);
    for i = 1:N
        Distance(i) =  sqrt((cx(i)-x)^2 + (cy(i)-y)^2);
    end
    [~, location]= min(Distance);
    ind = location;
    ind = ind + 10;

end

结果图是实时的,包含一个路径跟踪展示和横向误差图,大概如下(图形并不精美,展示原理所用):


凑字数凑字数使得可以投稿!不用理会
凑字数凑字数使得可以投稿!不用理会
凑字数凑字数使得可以投稿!不用理会

标签:target,预瞄,cy,cx,MATLAB,Pure,ind,dt,yaw
From: https://www.cnblogs.com/VotaverUno/p/17289519.html

相关文章

  • c++实现Matlab矩阵Matrix类(实矩阵Matrix、复矩阵CMatrix)
    全栈工程师开发手册(作者:栾鹏)matlab2c动态链接库下载matlab库函数大全matlab2c基础教程matlab2c开发全解教程开发注意事项:1、目前matlab2c对矩阵的实现仅包含实数型、复数型数据。实数型矩阵使用Matrix定义,复数型矩阵使用CMatrix定义。2、实数矩阵元素int、float元素类型会自动......
  • 一维CNN,二维CNN以及三维CNN的训练模型matlab仿真
    1.算法描述卷积神经网络(ConvolutionalNeuralNetworks,CNN)是一类包含卷积计算且具有深度结构的前馈神经网络(FeedforwardNeuralNetworks),是深度学习(deeplearning)的代表算法之一。卷积神经网络具有表征学习(representationlearning)能力,能够按其阶层结构对输入信息进行平移不变......
  • m基于多核学习支持向量机MKLSVM的数据预测分类算法matlab仿真
    1.算法描述        20世纪60年代Vapnik等人提出了统计学习理论。基于该理论,于90年代给出了一种新的学习方法——支持向量机。该方法显著优点为根据结构风险最小化归纳准则,有效地避免了过学习、维数灾难和局部极小等传统机器学习中存在的弊端,且在小样本情况下仍然具有......
  • m基于多核学习支持向量机MKLSVM的数据预测分类算法matlab仿真
    1.算法描述20世纪60年代Vapnik等人提出了统计学习理论。基于该理论,于90年代给出了一种新的学习方法——支持向量机。该方法显著优点为根据结构风险最小化归纳准则,有效地避免了过学习、维数灾难和局部极小等传统机器学习中存在的弊端,且在小样本情况下仍然具有良好的泛化能力,从......
  • 【无人机协同】多无人机协同任务规划模型研究附matlab代码
    ✅作者简介:热爱科研的Matlab仿真开发者,修心和技术同步精进,matlab项目合作可私信。......
  • matlab学习笔记7 插值方法与求解微分方程
    插值法拉格朗日插值分段插值由于高次函数往往拟合的情况反而不好,所以用两点之间的直线代替其值进行插值三次样条插值更加光滑,节点处二阶可导代码汇总interp1(x0,y0,x,'cubic')%分段三次多项式插值,第三个参数不写则为普通分段插值interp1(x0,y0,x,'spline')%三次样条插值......
  • 基于mnist手写数字数据库的深度学习网络训练和数字识别matlab仿真
    1.算法描述        MNIST数据集(MixedNationalInstituteofStandardsandTechnologydatabase)是美国国家标准与技术研究院收集整理的大型手写数字数据库,该数据集包含60000 个于训练的样本和10000 个于测试的样本,图像是固定⼤小(28x28像素),每个像素的值为......
  • MATLAB读写excel中指定sheet行列中的数据 and 去除含有NaN的行或者列
    matlab读写excel中指定sheet行列中的数据data=xlsread('data.xlsx','sheet1','c2:c12');xlswrite('newdata.xlsx',newdata,'Sheet1','p2:p12');matlab中去除含有NaN的行或者列b=a(all(~isnan(a),2),:);%删除含有NAN的行b=a(al......
  • 基于LSTM网络的空调功耗数据预测matlab仿真
    1.算法描述       长短期记忆网络(LSTM,LongShort-TermMemory)是一种时间循环神经网络,是为了解决一般的RNN(循环神经网络)存在的长期依赖问题而专门设计出来的,所有的RNN都具有一种重复神经网络模块的链式形式。在标准RNN中,这个重复的结构模块只有一个非常简单的结构,例如一个t......
  • m基于AlexNet神经网络和GEI步态能量图的步态识别算法MATLAB仿真
    1.算法描述        AlexNet是2012年ImageNet竞赛冠军获得者Hinton和他的学生AlexKrizhevsky设计的。也是在那年之后,更多的更深的神经网络被提出,比如优秀的vgg,GoogLeNet。这对于传统的机器学习分类算法而言,已经相当的出色。Alexnet网络模型于2012年提出。它具有更高维......