• 210查看
  • 0回复

[软件工程] Matlab 模糊控制 车辆泊车 案例分享

[复制链接]


该用户从未签到

发表于 29-3-2024 10:09:55 | 显示全部楼层 |阅读模式

汽车零部件采购、销售通信录       填写你的培训需求,我们帮你找      招募汽车专业培训老师


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

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

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

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

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

车辆在倒车的过程中是一定的低速度运动,在这一过程中,车辆的后轮运动轨迹与倒车速度无关,倒车速度只对倒车过程中在固定时间内车辆行驶的距离有影响,而不对行驶路线有影响。车辆的轨迹可以用(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 模糊控制 车辆泊车 案例分享w2.jpg

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

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

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

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

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

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

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

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

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

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

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

模糊规则见fis文件,fis文件后台回复 "模糊控制自动泊车"

代码如下:

clc;clear;close all;l = 25;w = 20; v = 5; Ts =0.4; %采样时间间隔 - secondN=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);ifx(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([-201200100]);    xlabel('x - cm');ylabel('y - cm');    hold on    grid on;    %画车位示意图    h1 = line([-2040], [6060]);    h2 = line([4040], [6095]);    h3 = line([40115], [9595]);    h4 = line([115115], [6095]);    h5 = line([115120], [6060]);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 模糊控制 车辆泊车 案例分享w7.jpg

快速发帖

您需要登录后才可以回帖 登录 | 注册

本版积分规则

QQ|手机版|小黑屋|Archiver|汽车工程师之家 ( 渝ICP备18012993号-1 )

GMT+8, 22-12-2024 15:53 , Processed in 0.338399 second(s), 30 queries .

Powered by Discuz! X3.5

© 2001-2013 Comsenz Inc.