【控制】车辆自主导航控制系统附matlab代码

简介: 【控制】车辆自主导航控制系统附matlab代码

✅作者简介:热爱科研的Matlab仿真开发者,修心和技术同步精进,matlab项目合作可私信。

🍎个人主页:Matlab科研工作室

🍊个人信条:格物致知。

更多Matlab仿真内容点击👇

智能优化算法  神经网络预测雷达通信 无线传感器

信号处理图像处理路径规划元胞自动机无人机 电力系统

⛄ 内容介绍

自主导引/导航车(Automated Guided Vehicles, AGV)又称无人搬运车或者轮式移动机器人,是指一种能够按照预先设定的路径行驶的无人驾驶智能化运输车辆,而且AGV的轨迹跟踪控制系统是一个典型的具有非完整约束的非线性系统.在过去的几十年中,因其潜在的广泛应用前景,有关AGV的研究受到了越来越多的学者和专家的关注和重视.

⛄ 部分代码

function guictrl(task)


% ========================================

%   PROGRAM AIM :

%         COMPLEMENTRY TO Navigate.m FILE

% ========================================

%   HOW TO RUN :

%         WILL RUN THROUGH Navigate.m

% ========================================

%   SATVIR SINGH SIDHU, ARUN KHOSLA, JASBIR SINGH SAINI

%   MAY 2009

%   COPYRIGHT RESERVED

% ========================================

sys = get(gcf, 'UserData');

FigNum = watchon;

XLoc = findobj(gcf, 'Tag', 'XLoc');

YLoc = findobj(gcf, 'Tag', 'YLoc');

VAng = findobj(gcf, 'Tag', 'VAng');

TAng = findobj(gcf, 'Tag', 'TAng');

Velo = findobj(gcf, 'Tag', 'Velo');

Fou = findobj(gcf, 'Tag', 'Fou');

data.L = 30;

data.W = 13;

data.X = str2num(get(XLoc, 'String'));         % X-Coordinate of Reference Point

data.Y = str2num(get(YLoc, 'String'));         % Y-Coordinate of Reference Point

data.V = str2num(get(VAng, 'String'));        % Vehicle Angle

data.T = str2num(get(TAng, 'String'));         % Front Tyre Angle

data.v = str2num(get(Velo, 'String'));          % Vehicle Velocity

data.F = str2num(get(Fou, 'String'));           % Footprint of Uncertainty


VRef = findobj(gcf, 'Tag', 'VRef');

FTyr = findobj(gcf, 'Tag', 'FTyr');

RTyr = findobj(gcf, 'Tag', 'RTyr');

VBnd = findobj(gcf, 'Tag', 'VBnd');


% [VRef FTyr RTyr VBnd]

dsp = [get(VRef, 'Value') get(FTyr, 'Value') get(RTyr, 'Value') get(VBnd, 'Value')];

watchoff;


if task(1) == '#'

   % CLOSE BUTTON PRESSED

   if strcmp(task, '#Clos')

       delete(gcf)


       % HELP BUTTON PRESSED

   elseif strcmp(task, '#SPlots')

       FigNum = watchon;

       NVS = findobj(gcf, 'Tag', 'NSpace');    % Handle for Navigation Space

       hgsave(NVS, 'NVplots');

       watchoff;


       % CLEAR BUTTON PRESSED

   elseif strcmp(task, '#Clr')

       cla


       % X LOCATION CHANGED

   elseif strcmp(task, '#Xloc')

       FigNum = watchon;

       XLoc = findobj(gcf, 'Tag', 'XLoc');

       Xloc = str2num(get(XLoc, 'String'));

       if Xloc<0

           Xloc = 0;

           set(XLoc, 'String', num2str(Xloc));

       elseif Xloc>200

           Xloc = 200;

           set(XLoc, 'String', num2str(Xloc));

       end

       data.X = Xloc

       vehicle(data, dsp);

       watchoff;


       % Y LOCATION CHANGED

   elseif strcmp(task, '#Yloc')

       FigNum = watchon;

       YLoc = findobj(gcf, 'Tag', 'YLoc');

       Yloc = str2num(get(YLoc, 'String'));

       if Yloc<0

           Yloc = 0;

           set(YLoc, 'String', num2str(Xloc));

       elseif Yloc>200

           Yloc = 200;

           set(YLoc, 'String', num2str(Xloc));

       end

       data.Y = Yloc

       vehicle(data, dsp);

       watchoff;


       % VEHICLE ANGLE CHANGED

   elseif strcmp(task, '#Vang')

       FigNum = watchon;

       VAng = findobj(gcf, 'Tag', 'VAng');

       V = str2num(get(VAng, 'String'));

       if V<-90

           V = -90;

           set(VAng, 'String', num2str(V));

       elseif V>270

           V = 270;

           set(VAng, 'String', num2str(V));

       end

       data.V = V

       vehicle(data, dsp);

       watchoff;


       % TYRE ANGLE CHANGED

   elseif strcmp(task, '#Tang')

       FigNum = watchon;

       TAng = findobj(gcf, 'Tag', 'TAng');

       T = str2num(get(TAng, 'String'));

       if T<-35

           T = -35;

           set(TAng, 'String', num2str(T));

       elseif T>35

           T = 35;

           set(TAng, 'String', num2str(T));

       end

       data.T = T

       vehicle(data, dsp);

       watchoff;


       % VEHICLE VELOCITY CHANGED

   elseif strcmp(task, '#Vel')

       FigNum = watchon;

       Velo = findobj(gcf, 'Tag', 'Velo');

       v = str2num(get(Velo, 'String'));

       data.v = v;

       watchoff;


       % TRACE VEHICLE REFERENCE = Y/N

   elseif strcmp(task, '#VRef')

       FigNum = watchon;

       VRef = findobj(gcf, 'Tag', 'VRef');

       VR = get(VRef, 'Value');

       watchoff;


       % TRACE FRONT TYRES = Y/N

   elseif strcmp(task, '#FTyr')

       FigNum = watchon;

       FTyr = findobj(gcf, 'Tag', 'FTyr');

       FT = get(FTyr, 'Value');

       watchoff;


       % TRACE REAR TYRES = Y/N

   elseif strcmp(task, '#RTyr')

       FigNum = watchon;

       RTyr = findobj(gcf, 'Tag', 'RTyr');

       RT = get(RTyr, 'Value');

       watchoff;


       % TRACE VEHICLE BOUNDARY = Y/N

   elseif strcmp(task, '#VBnd')

       FigNum = watchon;

       VBnd = findobj(gcf, 'Tag', 'VBnd');

       VB = get(VBnd, 'Value');

       watchoff;


       % FOU MATRIX

   elseif strcmp(task, '#Fou')

       FigNum = watchon;

       Fou = findobj(gcf, 'Tag', 'Fou');

       data.F = str2num(get(Fou, 'String'));

       if length(data.F) ~= (length(sys.Input)+length(sys.Output))

           Str = '0';

           for i = 2:(length(sys.Input)+length(sys.Output))

               Str = strcat(Str, ' 0');

           end

           set(Fou, 'String', strcat('[', Str, ']'));

       end

       watchoff;

   end

   % START NAVIGATION

else strcmp(task, 'Sim')

   F = data.F;

   sys2 = ST1toIT2(sys, F);

%     ========================

   sys2.Name='SecondFLS';           % CHANGING THE FILENAME

   assignin('base', 'it2fls', sys2);   % SENDING IT2 FLS STRUCTURE INTO WORKSPACE

   wrgfs(sys2);                                  % WRITING GFS FILE

%     ========================

   for i=1:1000

       TF = 5; % For LPA

%         TF = 1; % For CCA

       data.T = TF*runIT2([data.X data.V], sys2);

       ndata = LPAlgo(data);

%         ndata = CCAlgo(data);

       if ndata.Y>=200

           break;

       end

       data = ndata;

        pause(0.0001);        

   end

end

⛄ 运行结果

⛄ 参考文献

[1]张美娜, 吕晓兰, 陶建平,等. 农用车辆自主导航控制系统设计与试验[J]. 农业机械学报, 2016, 47(7):6.

[2]陈威, 张喜斌, 李卫华,等. 自主导航车辆的轨迹纠偏方法及轨迹纠偏装置,车辆控制系统:, CN112550289A[P]. 2021.

⛄ 完整代码

❤️部分理论引用网络文献,若有侵权联系博主删除
❤️ 关注我领取海量matlab电子书和数学建模资料


相关文章
|
15天前
|
传感器 算法 vr&ar
六自由度Stewart控制系统matlab仿真,带GUI界面
六自由度Stewart平台控制系统是一种高精度、高稳定性的运动模拟装置,广泛应用于飞行模拟、汽车驾驶模拟、虚拟现实等领域。该系统通过六个独立的线性致动器连接固定基座与移动平台,实现对负载在三维空间内的六个自由度(三维平移X、Y、Z和三维旋转-roll、pitch、yaw)的精确控制。系统使用MATLAB2022a进行仿真和控制算法开发,核心程序包括滑块回调函数和创建函数,用于实时调整平台的位置和姿态。
|
14天前
|
机器学习/深度学习 存储 算法
基于Actor-Critic(A2C)强化学习的四旋翼无人机飞行控制系统matlab仿真
基于Actor-Critic强化学习的四旋翼无人机飞行控制系统,通过构建策略网络和价值网络学习最优控制策略。MATLAB 2022a仿真结果显示,该方法在复杂环境中表现出色。核心代码包括加载训练好的模型、设置仿真参数、运行仿真并绘制结果图表。仿真操作步骤可参考配套视频。
33 0
|
3月前
|
算法
基于模糊控制算法的倒立摆控制系统matlab仿真
本项目构建了一个基于模糊控制算法的倒立摆控制系统,利用MATLAB 2022a实现了从不稳定到稳定状态的转变,并输出了相应的动画和收敛过程。模糊控制器通过对小车位置与摆的角度误差及其变化量进行模糊化处理,依据预设的模糊规则库进行模糊推理并最终去模糊化为精确的控制量,成功地使倒立摆维持在直立位置。该方法无需精确数学模型,适用于处理系统的非线性和不确定性。
基于模糊控制算法的倒立摆控制系统matlab仿真
|
3月前
|
安全
【2023高教社杯】D题 圈养湖羊的空间利用率 问题分析、数学模型及MATLAB代码
本文介绍了2023年高教社杯数学建模竞赛D题的圈养湖羊空间利用率问题,包括问题分析、数学模型建立和MATLAB代码实现,旨在优化养殖场的生产计划和空间利用效率。
199 6
【2023高教社杯】D题 圈养湖羊的空间利用率 问题分析、数学模型及MATLAB代码
|
2月前
|
资源调度 算法
基于迭代扩展卡尔曼滤波算法的倒立摆控制系统matlab仿真
本课题研究基于迭代扩展卡尔曼滤波算法的倒立摆控制系统,并对比UKF、EKF、迭代UKF和迭代EKF的控制效果。倒立摆作为典型的非线性系统,适用于评估不同滤波方法的性能。UKF采用无迹变换逼近非线性函数,避免了EKF中的截断误差;EKF则通过泰勒级数展开近似非线性函数;迭代EKF和迭代UKF通过多次迭代提高状态估计精度。系统使用MATLAB 2022a进行仿真和分析,结果显示UKF和迭代UKF在非线性强的系统中表现更佳,但计算复杂度较高;EKF和迭代EKF则更适合维数较高或计算受限的场景。
|
3月前
|
存储 算法 搜索推荐
【2022年华为杯数学建模】B题 方形件组批优化问题 方案及MATLAB代码实现
本文提供了2022年华为杯数学建模竞赛B题的详细方案和MATLAB代码实现,包括方形件组批优化问题和排样优化问题,以及相关数学模型的建立和求解方法。
128 3
【2022年华为杯数学建模】B题 方形件组批优化问题 方案及MATLAB代码实现
|
3月前
|
数据采集 存储 移动开发
【2023五一杯数学建模】 B题 快递需求分析问题 建模方案及MATLAB实现代码
本文介绍了2023年五一杯数学建模竞赛B题的解题方法,详细阐述了如何通过数学建模和MATLAB编程来分析快递需求、预测运输数量、优化运输成本,并估计固定和非固定需求,提供了完整的建模方案和代码实现。
90 0
【2023五一杯数学建模】 B题 快递需求分析问题 建模方案及MATLAB实现代码
|
6月前
|
数据安全/隐私保护
耐震时程曲线,matlab代码,自定义反应谱与地震波,优化源代码,地震波耐震时程曲线
地震波格式转换、时程转换、峰值调整、规范反应谱、计算反应谱、计算持时、生成人工波、时频域转换、数据滤波、基线校正、Arias截波、傅里叶变换、耐震时程曲线、脉冲波合成与提取、三联反应谱、地震动参数、延性反应谱、地震波缩尺、功率谱密度
基于混合整数规划的微网储能电池容量规划(matlab代码)
基于混合整数规划的微网储能电池容量规划(matlab代码)
|
6月前
|
算法 调度
含多微网租赁共享储能的配电网博弈优化调度(含matlab代码)
含多微网租赁共享储能的配电网博弈优化调度(含matlab代码)