模糊控制实现平行自动泊车

用 模糊控制实现平行自动泊车。
整套代码包含:车辆建模 → 模糊控制器设计 → 路径跟踪 → 动画可视化


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)
posted @ 2025-11-11 11:24  kang_ms  阅读(15)  评论(0)    收藏  举报