基于模糊神经网络的移动机器人路径规划matlab仿真

目录

1.程序功能描述

2.测试软件版本以及运行结果展示

3.核心程序

4.本算法原理

4.1 移动机器人路径规划问题概述

4.2 模糊系统与模糊逻辑

5.完整程序


1.程序功能描述

基于模糊神经网络移动机器人路径规划

1.环境地图中的障碍物为静态、未知障碍物,可以随机设置。(一般设置5~7个,为计算简便设置成规则性状的障碍物)

2.机器人的行进方向为X轴的正方向,X轴逆时针旋转90°即为Y轴。两驱动轮之间的距离为50cm,驱动轮的直径为30cm机器人的最大运动速度设为0.8m/s

3.为简化计算,在机器人的正前方及沿顺、逆时针各偏转45°的方位布置传感器。

机器人模型如图所示

4.控制系统的输入为机器人正前方障碍物的距离df、左前方障碍物的距离dl、右前方障碍物的距离dr、机器人运动方向与目标方向之间的夹角(航向角)α,输出为机器人左、右轮的速度vlvr(或者为机器人的速度v和转向角增量Δθ,其中转向角θ为世界坐标系与机器人坐标系X轴之间的夹角)。

2.测试软件版本以及运行结果展示

MATLAB2022a版本运行

3.核心程序

..............................................................................
       for kk = 1:N
       for m=1:Ns
           xs(:,m) = [x(1,time-1) + Sense_radius*cos(Jd(m,1)); 
                      x(2,time-1) + Sense_radius*sin(Jd(m,1))];
           G1(m,1) = func_obstacle(xs(:,m),xobstacle,yobstacle);
           G2(m,1) = func_goal(xs(:,m),Pend); 
           G3(m,1) = G1(m,1) + G2(m,1);
       end
       [val,bestone]=min(G3);
       %如果某个方向有多个障碍物,那么选择最近的那个
       %如果某个方向的距离集合为空集合,那么说明这个方向的障碍物为无穷远,直接赋值一个较大值
       dr_in = min(dr);
       if isempty(dr) == 1
          dr_in = 1e20; 
       end
       d_in  = min(d);
       if isempty(d) == 1
          d_in  = 1e20; 
       end
       dl_in = min(dl);
       if isempty(dl) == 1
          dl_in = 1e20; 
       end

       %代入到模糊神经网络的四个变量
       %调用模糊神经网络的模型
       [v_fnn,Theta_fnn]=func_fnn_test(dr_in,d_in,dl_in,alpha);
       DELTA_Theta = Theta_fnn;
       V           = v_fnn;
       x(:,time) =[x(1,time-1)+lambda*cos(Jd(bestone,1)); 
                   x(2,time-1)+lambda*sin(Jd(bestone,1))];
	   Deltalambda = V;
	   Deltatheta  = DELTA_Theta;
	   x(:,time)   =[x(1,time)+Deltalambda*cos(Jd(bestone,1)+Deltatheta); 
	                 x(2,time)+Deltalambda*sin(Jd(bestone,1)+Deltatheta)];   
 
       %更新坐标
       Xs(time)    = x(1,time);
       Ys(time)    = x(2,time);   
       Tes         = [Tes,Jd(bestone,1)+Deltatheta];
       Vs          = [Vs,Deltalambda];       
    end

    %画图
    plot(x(1,time),x(2,time),'r.')
    hold on
    drawnow;   
    if sqrt((Xs(time)-X_end)^2+(Ys(time)-Y_end)^2)<0.2
       break;
    end
end


figure;
subplot(211);
plot(Tes);
grid on
xlabel('times');
ylabel('theta')

subplot(212);
plot(Vs);
grid on
xlabel('times');
ylabel('speed')

06_017m

4.本算法原理

4.1 移动机器人路径规划问题概述

        在移动机器人领域,路径规划是一个核心任务,目标是在未知或已知环境中为机器人寻找一条从起始点到目标点的安全、有效且满足特定约束条件(如避障、最短距离等)的路径。数学上,通常将环境表示为一个离散或者连续的空间,并通过图论中的搜索算法来解决。

4.2 模糊系统与模糊逻辑

       控制系统的输出为机器人左、右轮的速度vl、vr(或者为机器人的速度v和转向角增量Δθ,其中转向角θ为世界坐标系与机器人坐标系X轴之间的夹角)。

df、dl、dr的模糊集合为{Nr,Ml,Fr} Nr-近  Ml-中  Fr-远

α的模糊集合为{NB,NS,Z,PS,PB}  NB-负大  NS-负小  Z-零  PS-正小  PB-正大

(当目标点位于机器人的右侧时航向角为α正,反之为负)

vl、vr、v的模糊集合为{Sw,Md,Ft}  Sw-慢速  Md-中速  Ft-快速

Δθ的模糊集合为{ NS,Z,PS } NS-负小  Z-零  PS-正小

整个模糊神经网络的基本结构如下图所示:

由于左右两个传感器正好在45度方向,所以在实际工作的时候,

df

df

df

Alpha

Nr-近

Nr-近

Nr-近

五种角度

Nr-近

Nr-近

Ml-中

五种角度

Nr-近

Nr-近

Fr-远

五种角度

Nr-近

Ml-中

Nr-近

五种角度

Nr-近

Ml-中

Ml-中

五种角度

Nr-近

Ml-中

Fr-远

五种角度

Nr-近

Fr-远

Nr-近

五种角度

Nr-近

Fr-远

Ml-中

五种角度

Nr-近

Fr-远

Fr-远

五种角度

5.完整程序

VVV


http://www.niftyadmin.cn/n/5439217.html

相关文章

Rust 中Self 关键字的两种不同用法

在 Rust 中&#xff0c;Self 是一个特殊的类型标识符&#xff0c;它代表了当前结构体或枚举类型。在结构体或枚举类型的定义中&#xff0c;Self 可以用于表示该类型的任何地方&#xff0c;包括方法签名、构造函数、类型别名等。 构造函数中的 Self&#xff1a; 在这段代码中&a…

Android Kotlin版封装EventBus

文章目录 Android Kotlin版封装EventBus代码封装添加依赖库定义消息类定义常量值定义注解定义工具类 使用在Activity中在Fragment中发送事件 源码下载 Android Kotlin版封装EventBus 代码封装 添加依赖库 implementation("org.greenrobot:eventbus:3.3.1")定义消息…

Spark-Scala语言实战(3)

在之前的文章中&#xff0c;我们学习了如何在来如何在IDEA离线和在线安装Scala&#xff0c;想了解的朋友可以查看这篇文章。同时&#xff0c;希望我的文章能帮助到你&#xff0c;如果觉得我的文章写的不错&#xff0c;请留下你宝贵的点赞&#xff0c;谢谢。 Spark-Scala语言实…

publicPath 和 __webpack_public_path__ 和 process.env.BASE_URL的区别和使用方法

文章目录 publicPath 和 __webpack_public_path__ 和 process.env.BASE_URL的区别和使用方法1. publicPath&#xff08;1&#xff09;publicPath定义&#xff08;2&#xff09;publicPath使用方法方法1&#xff1a;静态文件使用publicPath。方法2&#xff1a;项目打包时使用pub…

供应链安全之被忽略的软件质量管理平台安全

背景 随着我国信息化进程加速&#xff0c;网络安全问题更加凸显。关键信息基础设施和企业单位在满足等保合规的基础上&#xff0c;如何提升网络安全防御能力&#xff0c;降低安全事件发生概率&#xff1f;默安玄甲实验室针对SonarQube供应链安全事件进行分析&#xff0c;强调供…

ctf_show笔记篇(web入门---反序列化)

目录 反序列化 254&#xff1a;无用&#xff0c;是让熟悉序列化这个东西的 255&#xff1a;直接使$isViptrue 256&#xff1a;还是使用变量覆盖 257&#xff1a;开始使用魔法函数 258&#xff1a;将序列化最前面的过滤了&#xff0c;使用绕过 259: 这一题需要看writeup才…

查找1的个数

小蓝有一个 30 行 60 列的数字矩阵&#xff0c;矩阵中的每个数都是 0 或 1 . 如果从一个标为 1 的位置可以通过上下左右走到另一个标为 1 的位置&#xff0c;则称两个位置连通。与某一个标为 1 的位置连通的所有位置&#xff08;包括自己&#xff09;组成一个连通分块。 请问…

Kafka整理-Kafka与传统消息队列系统(如RabbitMQ, ActiveMQ)的区别是什么?

Apache Kafka与传统消息队列系统(如RabbitMQ, ActiveMQ)虽然都是处理消息和数据流的中间件,但它们在设计理念、架构、功能和使用场景方面有显著的区别。下面是Kafka与传统消息队列系统的主要区别: 1. 设计目的和使用场景 Kafka: 设计初衷是为处理大量的实时数据流。强调高…