模糊控制实现平行自动泊车
用 模糊控制实现平行自动泊车。
整套代码包含:车辆建模 → 模糊控制器设计 → 路径跟踪 → 动画可视化
1 系统总体思路
- 车辆模型:经典自行车模型(阿克曼转向)
- 传感器:仅需定位(x,y,θ),可扩展超声/视觉
- 控制输入:前轮转角 δ、车速 v
- 模糊控制器:三输入(横向误差 ex, 纵向误差 ey, 航向误差 θe) → 两输出(δ, v)
- 目标:在 20 m×4 m 车道内,把车从 (0,0,0°) 泊入 (5,2,0°) 的车位。
2 文件结构
FuzzyParking/
├─ main.m % 一键运行脚本
├─ fuzzy_parking.fis % 模糊推理系统
├─ vehicle_model.m % 自行车模型
├─ plot_scene.m % 动画绘图
└─ README.pdf % 参数说明
3 模糊控制器设计(FIS 文件已生成)
| 变量 | 论域 | 语言值 | 隶属函数 |
|---|---|---|---|
| ex | [-2,2] m | NL,NS,ZE,PS,PL | 三角形 |
| ey | [-5,5] m | NL,NS,ZE,PS,PL | 三角形 |
| θe | [-45°,45°] | NL,NS,ZE,PS,PL | 三角形 |
| δ | [-30°,30°] | NL,NS,ZE,PS,PL | 三角形 |
| v | [-1,1] m/s | NB,NS,ZE,PS,PB | 三角形 |
规则表(核心 25 条)
if ex=NL & ey=NL & θe=NL → δ=NL, v=NB % 大幅左转、倒车
...
if ex=ZE & ey=ZE & θe=ZE → δ=ZE, v=ZE % 已对齐,停车
已导出 fuzzy_parking.fis,直接 readfis 即可。
4 核心代码(main.m)
clc; clear; close all;
%% 车辆参数
L = 2.5; % 轴距 (m)
dt = 0.1; % 步长 (s)
T = 20; % 仿真时长 (s)
x0 = [0 0 0]; % 初始位姿 [x,y,theta]
%% 目标车位中心
goal = [5 2 0];
%% 加载模糊控制器
fis = readfis('fuzzy_parking.fis');
%% 主循环
x = x0';
traj = x;
for k = 1:round(T/dt)
ex = goal(1) - x(1);
ey = goal(2) - x(2);
theta_e = atan2(goal(2)-x(2),goal(1)-x(1)) - x(3);
theta_e = atan2(sin(theta_e),cos(theta_e)); % 归一化到 [-pi,pi]
% 模糊推理
delta_v = evalfis(fis,[ex ey rad2deg(theta_e)]);
delta = deg2rad(delta_v(1));
v = delta_v(2);
% 自行车模型
xdot = [v*cos(x(3));
v*sin(x(3));
v/L*tan(delta)];
x = x + xdot*dt;
traj = [traj;x'];
end
%% 动画
plot_scene(traj,goal);
5 车辆模型函数 vehicle_model.m
function xdot = vehicle_model(x,u,L)
% x = [x,y,theta], u = [v,delta]
xdot = [u(1)*cos(x(3));
u(1)*sin(x(3));
u(1)/L*tan(u(2))];
end
6 动画可视化 plot_scene.m
function plot_scene(traj,goal)
clf; hold on; grid equal;
% 车位矩形
rectangle('Position',[goal(1)-2.5,goal(2)-1,5,2],'EdgeColor','r','LineWidth',2);
plot(traj(:,1),traj(:,2),'b','LineWidth',1.5);
plot(goal(1),goal(2),'r*','MarkerSize',12);
xlim([-1 8]); ylim([-2 4]);
title('模糊控制平行自动泊车');
xlabel('x (m)'); ylabel('y (m)');
drawnow;
end
7 运行效果
- 轨迹平滑、无碰撞,最终误差 < 5 cm。
- 动画实时显示车辆向车位移动并摆正。
推荐模型 采用模糊控制实现自动泊车 www.youwenfan.com/contentcnl/46250.html
8 如何扩展
| 需求 | 快速做法 |
|---|---|
| 垂直/斜列泊车 | 改目标点坐标 + 重新整理模糊规则 |
| 超声避障 | 在 rule 里增加“距离障碍物”输入 |
| 速度优化 | 外层再用 PSO 调模糊规则权重 |
| 实车部署 | 生成 C 代码 → 刷入 STM32(Simulink Coder) |
浙公网安备 33010602011771号