8

Matlab 模糊控制 车辆泊车 案例分享

 1 year ago
source link: https://blog.51cto.com/domi/5859777
Go to the source link to view the article. You can view the picture content, updated content and better typesetting reading experience. If the link is broken, please click the button below to view the snapshot at that time.
neoserver,ios ssh client

Matlab 模糊控制 车辆泊车 案例分享

精选 原创

domi+1 2022-11-17 08:53:54 博主文章分类:matlab ©著作权

文章标签 h5 个人主页 开发者 文章分类 其它 编程语言 yyds干货盘点 阅读数145

✅作者简介:热爱科研的算法开发者,Python、Matlab项目可交流、沟通、学习。

🍎个人主页:算法工程师的学习日志

最近看到了一个知网的文献,研究基于模糊控制的自动泊车,复现了论文,

模糊控制方法参看之前的文章:

 ​matlab模糊控制工具箱使用和模糊控制pid实例参考(一)​

 ​matlab模糊控制工具箱使用和模糊控制pid实例参考(二)​

Matlab 模糊控制 车辆泊车 案例分享_开发者

车辆在倒车的过程中是一定的低速度运动,在这一过程中,车辆的后轮运动轨迹与倒车速度无关,倒车速度只对倒车过程中在固定时间内车辆行驶的距离有影响,而不对行驶路线有影响。车辆的轨迹可以用(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 编辑器中编辑的自动泊车系统的输入与输出量如图所示。

Matlab 模糊控制 车辆泊车 案例分享_个人主页_02

如图所示,文本建立了 Mamdani 型模糊推理系统,这种推理,从每一个

规则的结果中得到的模糊集通过聚类运算与结果模糊集相组合后,去模糊化(解

模糊)以产生系统输出。解模糊的方法是重心法(centroid)。输入变量 x 的范围

为[0, 90];输入变量 y 的范围为[0,80];输入变量 θ 的范围为[-80, 80];输出变量

φ 的范围为[-45, 45]。

输入变量 x , y ,θ 的隶属度函数如图所示;

Matlab 模糊控制 车辆泊车 案例分享_开发者_03
Matlab 模糊控制 车辆泊车 案例分享_个人主页_04
Matlab 模糊控制 车辆泊车 案例分享_开发者_05

输出变量ϕ 的隶属度函数如图所示

Matlab 模糊控制 车辆泊车 案例分享_h5_06

模糊规则见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-1
pause(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;
end
x0 = 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 on
grid 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
Matlab 模糊控制 车辆泊车 案例分享_h5_07

About Joyk


Aggregate valuable and interesting links.
Joyk means Joy of geeK