目錄
??1 概述
??2 運行結果
??3 參考文獻
?????4 Matlab代碼
??1 概述
作為一種方便、快捷的交通工具,汽車已成為人們生活和工作的重要組成部分。隨著汽車數量的逐年增加,有限的城市空間顯得日趨擁擠,車輛平均分配到的停放空間也日趨縮小,車輛泊車入位困難問題在人們生活中逐漸顯現。人們對車輛使用輕便性及安全性要求促使越來越多汽車生產商、科研機構及高校對泊車系統(tǒng)進行研究。目前,國外已有部分汽車生產商推出自己的自動泊車系統(tǒng),但僅裝配于高端車型,我國暫時還未具有自主知識產權的汽車自動泊車系統(tǒng)。因此,本文以低端車型為研究平臺,針對自動平行泊車系統(tǒng)的核心技術——泊車控制策略進行探索,目的為提高泊車操作輕便性和泊車過程安全性。 本文采用泊車路徑規(guī)劃和泊車路徑跟蹤控制方法進行泊車系統(tǒng)控制器控制策略設計。
?本文旨在通過一個簡單的腳本實現自動泊車的路徑規(guī)劃動態(tài)演示,并對泊車路線進行曲線擬合。
??2 運行結果
??3 參考文獻
[1]李紅. 自動泊車系統(tǒng)路徑規(guī)劃與跟蹤控制研究[D].湖南大學,2014.
?????4 Matlab代碼
主函數部分代碼:
clc;clear;close all
% ? main_line.m
% ? 一個簡單的腳本實現自動泊車的路徑規(guī)劃動態(tài)演示,并對泊車路線進行曲線擬合。
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
% 參數設定
up_limit = 6;%上邊界縱坐標
front_p = [5, 2]; % 車位信息C點, 參見說明文檔最后碰撞檢測第二部分
right_limit = 11; % 橫坐標右邊界
o_3 = [0.5, 1]; % 泊車點
ini = [6, 4]; ? % 初始點
c_l = 3; % 車長
c_w = 1.4; % 車寬
r_min = 2; ? ?% 最小轉彎半徑
plot_vec = 0.01; % 動畫速度, 數越小, 越快, 為0直接出圖
fit_model = 0; % 擬合形式, 1位高次多項式, 其他數為傅里葉級數擬合, 圖中最后出現的紅色曲線為擬合曲線
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
figure(1)
hold on
grid on
%% 泊車區(qū)域限定
% 左下角坐標, 沿x長度, 沿y長度
line([0, right_limit], ? ? ? ? ?[up_limit, up_limit] ? ?,'LineWidth',2, 'Color',[0 0 0]);
line([0, front_p(1)], ? ? ? ? ? [0, 0] ? ? ? ? ? ? ? ? ?,'LineWidth',2, 'Color',[0 0 0]);
line([front_p(1), front_p(1)], ?[0, front_p(2)] ? ? ? ? ,'LineWidth',2, 'Color',[0 0 0]);
line([front_p(1), right_limit], [front_p(2), front_p(2)],'LineWidth',2, 'Color',[0 0 0]);
axis([0 right_limit 0 up_limit], 'equal');
%% 參數
x = ini(1); y = ini(2); % 車輛后軸中心點坐標
c_o = [x, y];
c_line(1,:) = [x, ? ? ? x, ? ? ? y - c_w/2, y + c_w/2];
c_line(2,:) = [x, ? ? ? x + c_l, y + c_w/2, y + c_w/2];
c_line(3,:) = [x + c_l, x + c_l, y + c_w/2, y - c_w/2];
c_line(4,:) = [x + c_l, x, ? ? ? y - c_w/2, y - c_w/2];
for i = 1:4
? ? car(i) = line([c_line(i,1),c_line(i,2)], [c_line(i,3), c_line(i,4)],'LineWidth',1.5, 'Color',[0 0 0]);
end
%% 弧長確定
% 倒推法, 根據最小轉彎半徑確定弧2的圓心
cir2 = [o_3(1), o_3(2) + r_min];
% plot(cir2(1), cir2(2), 'ro');
% 根據過初始點和泊車點的圓的圓心確定最大半徑
k_1 = (c_o(2) - o_3(2)) / (c_o(1) - o_3(1));
k_2 = - 1/k_1;
r_max = y - (k_2 * x + ((c_o(2) + o_3(2))/2 - k_2*(c_o(1) + o_3(1))/2)); % 第一次轉彎最大半徑
% 弧1, 根據最大最小轉彎半徑確定的圓心
p_rmin = [x, y - r_min];
p_rmax = [x, y - r_max];
% 最小轉彎半徑對應的到圓心2-r_min的距離和到初始點的距離, 以及所對應的轉角
v_min = p_rmin - cir2;
l_min = norm(v_min) - r_min; % 最小轉彎半徑時, 與o_3連線得到的半徑對比
d_min = y - p_rmin(2);
alpha_min = pi/2 - atan2(abs(v_min(2)), abs(v_min(1)));
% alpha_min*180/pi
% 最大轉彎半徑對應的到圓心2-r_min的距離和到初始點的距離, 以及所對應的轉角
v_max = p_rmax - cir2;
l_max = norm(v_max) - r_min;
d_max = y - p_rmax(2);
alpha_max = pi/2 - atan2(abs(v_max(2)), abs(v_max(1)));
% alpha_max*180/pi文章來源:http://www.zghlxwxcb.cn/news/detail-471760.html
% 2分法找滿足相切的兩個弧的, 弧1的半徑和圓心
l_middle = inf;
d_middle = 0;
% 由于弧1以最小轉彎半徑對應圓心構成的到初始點的長一般小于到圓心2的點, 同理, 另一個相反. 以此判斷條件, 是否滿足泊車最低要求.
if (l_min > d_min) && (l_max < d_max)
? ? while abs(l_middle - d_middle) > 0.000001
? ? ? ? % 根據中間角度對應的射線與x = x交點作為圓心, 計算l和d
? ? ? ? alpha_middle = (alpha_max + alpha_min)/2;
? ? ? ? k_middle = -tan(pi/2 - alpha_middle);
? ? ? ? y_middle = k_middle*c_o(1) + (cir2(2) - k_middle*cir2(1));
? ? ? ? d_middle = y - y_middle;
? ? ? ? v_middle = [x, y_middle] - cir2;
? ? ? ? l_middle = norm(v_middle) - r_min;
? ? ? ??
? ? ? ? if l_middle > d_middle
? ? ? ? ? ? v_min = [x, y_middle] - cir2;
? ? ? ? ? ? l_min = norm(v_min) - r_min; % 最小轉彎半徑時, 與o_3連線得到的半徑對比
? ? ? ? ? ? d_min = y - y_middle;
? ? ? ? ? ? alpha_min = pi/2 - atan2(abs(v_min(2)), abs(v_min(1)));
? ? ? ? else
? ? ? ? ? ? v_max = [x, y_middle] - cir2;
? ? ? ? ? ? l_max = norm(v_max) - r_min;
? ? ? ? ? ? d_max = y - y_middle;
? ? ? ? ? ? alpha_max = pi/2 - atan2(abs(v_max(2)), abs(v_max(1)));
? ? ? ? end
? ? end文章來源地址http://www.zghlxwxcb.cn/news/detail-471760.html
到了這里,關于基于智能優(yōu)化算法實現自動泊車的路徑動態(tài)規(guī)劃(Matlab代碼實現)的文章就介紹完了。如果您還想了解更多內容,請在右上角搜索TOY模板網以前的文章或繼續(xù)瀏覽下面的相關文章,希望大家以后多多支持TOY模板網!