✅作者簡介:熱愛科研的Matlab仿真開發者,修心和技術同步精進,matlab項目合作可私信。
🍎個人首頁:Matlab科研工作室
🍊個人信條:格物緻知。
⛄ 内容介紹
汽車工業經過100多年的發展,汽車技術已向着智能化發展,這将人類從枯燥的汽車駕駛生活中解救出來,也符合未來汽車的發展趨勢。自動泊車系統是其中的一個方面。研究自動泊車系統,可以減少駕駛人員的操作負擔,降低了駕駛人員的疲勞感及泊車過程中的碰撞和刮擦事故的發生,提高駕駛安全性,具有一定的實際意義。本文緻力于研究自動平行泊車系統的控制方法,并通過仿真驗證了該方法可以實作平行泊車。針對車輛低速倒車這一運動過程,建立了車輛數學模型。根據分析車輛數學模型,得到能夠滿足多數情況下的泊車路徑。由于自動泊車過程可分解為尋找最佳泊車位置及從最佳泊車位置倒入停車位兩個過程,針對這兩個過程,分析了無障礙式及有障礙式的泊車路徑。
⛄ 部分代碼
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