2020-12-14 Matlab 模糊控制 车辆泊车 案例分享
Matlab 模糊控制 車輛泊車 案例分享
最近看到了一個知網的文獻,研究基于模糊控制的自動泊車,復現了論文,
模糊控制方法參看之前的文章:
matlab模糊控制工具箱使用和模糊控制pid實例參考(一)
matlab模糊控制工具箱使用和模糊控制pid實例參考(二)
車輛在倒車的過程中是一定的低速度運動,在這一過程中,車輛的后輪運動軌跡與倒車速度無關,倒車速度只對倒車過程中在固定時間內車輛行駛的距離有影響,而不對行駛路線有影響。車輛的軌跡可以用(xr, yr, θ)表示,為了方便在此用(x, y, θ)來表示。此時,車輛的軌跡 變化控制量為(x, y, θ),直接輸出量為 φ。選取 x、y、θ 作為模糊控制的輸入變量,φ為輸出變量。其中設定輸入變量x的模糊集合數為 4,語言變量表示為 LB、LM、LS、XCE;輸入變量 y 的模糊集合數為 4,語言變量表示為 FAR、MD、CL、YCE;輸入變量
θ 的模糊集合數為 5,語言變量表示為 RBV、RBH、H、RUH、RUV;輸出變量φ模糊集合數為 7,語言變量表示為 PB、PM、PS、ZE、NS、NM、NB。在模糊階段里最重要的是設計隸屬函數,而隸屬函數的外型就跟設計者要求的特性和經驗 有關,一般常見的是用三角形或梯形來描述隸屬函數的外型。本文使用的為三角 型隸屬度函數。
在 FIS 編輯器中編輯的自動泊車系統的輸入與輸出量如圖所示。
?
如圖所示,文本建立了 Mamdani 型模糊推理系統,這種推理,從每一個
規則的結果中得到的模糊集通過聚類運算與結果模糊集相組合后,去模糊化(解
模糊)以產生系統輸出。解模糊的方法是重心法(centroid)。輸入變量 x 的范圍
為[0, 90];輸入變量 y 的范圍為[0,80];輸入變量 θ 的范圍為[-80, 80];輸出變量
φ 的范圍為[-45, 45]。
輸入變量 x , y ,θ 的隸屬度函數如圖所示;
?
?
輸出變量? 的隸屬度函數如圖所示
?
模糊規則見fis文件,fis文件公眾號后臺回復 "模糊控制自動泊車"
?
代碼如下:
clc; clear; close all; l = 25; w = 20; v = 5; Ts =0.4; %采樣時間間隔 - second N=2000; % 最大循環次數 fuzzyfis=readfis('boche.fis');% x(1) = 10; %汽車起點的x坐標 % y(1) = 30; %汽車起點的y坐標 % phi(1) =0; %汽車車身起始傾角 x(1) = 20; %汽車起點的x坐標 y(1) = 30; %汽車起點的y坐標 phi(1) =0; %汽車車身起始傾角figure; pause(1); for i=1:1:N-1pause(0.1);inputcanshu=[x(i),y(i),phi(i)];outputcanshu=evalfis(inputcanshu,fuzzyfis);theta(i)=outputcanshu;x(i+1)=x(i)+v*Ts*cos(phi(i)*pi/180)*cos(theta(i)*pi/180);y(i+1)=y(i)+v*Ts*sin(phi(i)*pi/180)*cos(theta(i)*pi/180);phi(i+1)=phi(i)-(v*Ts*300/l)*sin(theta(i)*pi/180);if x(i+1) >= 100 || y(i+1) >= 90 %如果超出模糊邏輯控制器的輸入范圍,則停止break;endx0 = x(i) + w/2*sind(phi(i)); %左前角x坐標y0 = y(i) - w/2*cosd(phi(i)); %左前角y坐標x1 = x(i) - w/2*sind(phi(i)); %右前角x坐標y1 = y(i) + w/2*cosd(phi(i)); %右前角y坐標p = x(i) - l*cosd(phi(i));q = y(i) - l*sind(phi(i));x2 = p + w/2*sind(phi(i)); %左后角x坐標y2 = q - w/2*cosd(phi(i)); %左后角y坐標x3 = p - w/2*sind(phi(i)); %右后角x坐標y3 = q + w/2*cosd(phi(i)); %右后角y坐標%畫汽車后軸中心plot (x(i), y(i), 'rs');axis([-20 120 0 100]);xlabel('x - cm');ylabel('y - cm');hold ongrid on;%畫車位示意圖h1 = line([-20 40], [60 60]);h2 = line([40 40], [60 95]);h3 = line([40 115], [95 95]);h4 = line([115 115], [60 95]);h5 = line([115 120], [60 60]);set(h1, 'linewidth', 5, 'color', 'b');set(h2, 'linewidth', 5, 'color', 'b');set(h3, 'linewidth', 5, 'color', 'b');set(h4, 'linewidth', 5, 'color', 'b');set(h5, 'linewidth', 5, 'color', 'b');%畫車身輪廓l0 = line([x0 x1], [y0 y1]);l1 = line([x1 x3], [y1 y3]);l2 = line([x2 x3], [y2 y3]);l3 = line([x0 x2], [y0 y2]);set(l0, 'linewidth', 4, 'color', 'm');set(l1, 'linewidth', 2, 'color', 'b');set(l2, 'linewidth', 4, 'color', 'g');set(l3, 'linewidth', 2, 'color', 'b'); end?
結果如圖
《新程序員》:云原生和全面數字化實踐50位技術專家共同創作,文字、視頻、音頻交互閱讀總結
以上是生活随笔為你收集整理的2020-12-14 Matlab 模糊控制 车辆泊车 案例分享的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 2020-12-11 python查看p
- 下一篇: 2020-12-14 Python Py