栅格地图路径规划:基于小龙虾优化算法(Crayfsh optimization algorithm,COA)的机器人路径规划(提供MATLAB代码)

   一、机器人路径规划介绍

移动机器人(Mobile robot,MR)的路径规划是 移动机器人研究的重要分支之,是对其进行控制的基础。根据环境信息的已知程度不同,路径规划分为基于环境信息已知的全局路径规划和基于环境信息未知或局部已知的局部路径规划。随着科技的快速发展以及机器人的大量应用,人们对机器人的要求也越来越高,尤其表现在对机器人的智能化方面的要求,而机器人自主路径规划是实现机器人智能化的重要步骤,路径规划是指规划机器人从起点位置出发,无碰撞、安全到达指定目标位置的最优路径。目前,常用的移动机器人全局路径规划方法很多,如栅格法和人工势场法。对于栅格法,当空间增大时,所需存储空间剧增,决策速度下降;而人工势场法容易产生局部最优解问题和死锁现象。随着智能控制技术的发展,出现了如遗传算法算法、粒子群优化算法、麻雀搜索算法、灰狼优化算法、鲸鱼优化算法等。

参考文献:

[1]史恩秀,陈敏敏,李俊,等.基于蚁群算法的移动机器人全局路径规划方法研究[J].农业机械学报, 2014, 45(6):5.DOI:CNKI:SUN:NYJX.0.2014-06-009.

[2]朱庆保,张玉兰.基于栅格法的机器人路径规划蚁群算法[J].机器人, 2005, 27(2):5.DOI:10.3321/j.issn:1002-0446.2005.02.008.

[3]曹新亮,王智文,冯晶,等.基于改进蚁群算法的机器人全局路径规划研究[J].计算机工程与科学, 2020, 42(3):7.DOI:CNKI:SUN:JSJK.0.2020-03-027.

二、栅格地图环境搭建

首先建立移动机器人工作环境,设移动机器人的工作空间为二维空间(记为RS),工作环境中的障碍物即为机床。在机器人运动过程中,障碍物为静止且大小不发生变化。按栅格法划分RS,移动机器人在栅格间行走。无障碍物的栅格为可行栅格,有障碍物的栅格为不可行栅格。栅格集包含所有栅格。栅格标识有:直角坐标法和序号法。本文采用序号标识法。

在移动机器人工作空间下按从左到右,从上到下的顺序,依次标记为序号1,2,3,···,n,每一个序号代表一个栅格。为了避免移动机器人与障碍物发生碰撞,可以将障碍物膨胀,障碍物在占原有栅格的同时,再占多个栅格,按 个栅格算。这种划分方法简单实用,能够满足环境模型与真实情况相符。从而使移动机器人在路径规划时畅通无阻。令S={1,2,3,···,N}为栅格序号集。根据上述对应关系,可知g(0,0)的序号为1,g(1,0)序号为2,直至g(X,Y)的序号为n。规划起始位置、目标位置均为任意且都属于S(但不在同一栅格内)。

在实际工作环境中,移动机器人工作环境是复杂多变的,且为三维空间。为了便于研究,本文对环境进行简化建模。栅格法是一种常用的环境表示方法,因其简单方便(二维环境),环境建模的复杂性小,因而本文环境建模采用栅格法。在栅格地图中,工作环境被划分为很多栅格,其中包括有障碍物和无障碍的栅格,在仿真程序中用0表示此栅格无障碍物,机器人可以通过此栅格,用1表示栅格有障碍物,机器人无法通过,需选择其他栅格。栅格的尺寸大小可根据工作环境中的障碍物尺寸以及安全距离进行设置。为了实现程序仿真,需要对栅格进行标识,如下图所示,以20x20的栅格环境为例来说明。

如上图所示,白色栅格表示无障碍物的栅格,黑色栅格则表示有障碍物的栅格,在地图中对每个栅格编号,不同序号的栅格在坐标系中的坐标可用下式来表示:

x=mod(Ni/N)-0.5

y=N-ceil(Ni/N)+0.5

其中,mod为取余运算,ceil表示向后取整,Ni是对应栅格的标号,N表示每 列的栅格数量,取栅格中心位置作为栅格在坐标系中的坐标。这样机器人全局路径规划的问题就转变成了利用算法在栅格地图上寻找由起始点到目标点的有序的栅格子集,这些栅格子集的中心连线便是算法寻找的路径。

参考文献:

[1]史恩秀,陈敏敏,李俊,等.基于蚁群算法的移动机器人全局路径规划方法研究[J].农业机械学报, 2014, 45(6):5.DOI:CNKI:SUN:NYJX.0.2014-06-009.

[2]曹新亮,王智文,冯晶,等.基于改进蚁群算法的机器人全局路径规划研究[J].计算机工程与科学, 2020, 42(3):7.DOI:CNKI:SUN:JSJK.0.2020-03-027.

三、小龙虾优化算法

小龙虾优化算法(Crayfsh optimization algorithm,COA)由Jia Heming 等人于2023年提出,该算法模拟小龙虾的避暑、竞争和觅食行为,具有搜索速度快,搜索能力强,能够有效平衡全局搜索和局部搜索的能力。

小龙虾是一种形状类似于虾的甲壳类动物,其甲壳坚硬且颜色丰富。成体的小龙虾身长约5.6-11.9厘米,整体颜色包括红色、红棕色和粉红色。背部是酱暗红色,两侧则是粉红色,带有橘黄色或白色的斑点。甲壳部分近黑色,而腹部背面则有一楔形条纹。幼虾体为均匀的灰色,有时具有黑色波纹,其螯狭长,甲壳中部不被网眼状空隙分隔,甲壳上明显具有颗粒。

小龙虾属于杂食性动物,它们的饮食习性比较特殊。在河底,小龙虾更喜欢吃泥,并且喜欢吃已经死亡的小鱼或其他水中生物。除此之外,植物类、小鱼、小虾、浮游生物、底栖生物和藻类都可以成为它们的食物。

参考文献:

[1] Jia, H., Rao, H., Wen, C. et al. Crayfish optimization algorithm. Artif Intell Rev (2023). Crayfish optimization algorithm | SpringerLink
                        
原文链接:https://blog.csdn.net/weixin_46204734/article/details/132939275

四、小龙虾优化算法求解机器人路径规划

4.1部分代码

%% 
S = [1 1];   %起点
E = [20 20];  %终点
[ub,dimensions] = size(G);        
dim = dimensions - 2;             
%% 参数设置
Max_iter= 100;    % 最大迭代次数
SearchAgents_no = 50;         % 种群数量
X_min = 1;  
lb=1;
fobj=@(x)fitness(x);
[Best_score,Best_NC,Convergence_curve]=COA(SearchAgents_no,Max_iter,lb,ub,dim,fobj);

toc
%% 结果分析
global_best = round(Best_NC);
figure(1)
plot(Convergence_curve,'r-','linewidth',2.5)
xlabel('Iteration');
ylabel('Fitness');
legend('COA')

4.2部分结果

五、完整MATLAB代码

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/485116.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

目标检测上的diffusion

1 Title DiffusionDet: Diffusion Model for Object Detection(Shoufa Chen,Peize Sun,Yibing Song,Ping Luo)【ICCV 2023】 2 Conclusion This study proposes DiffusionDet, a new framework that formulates object detection as a denoisin…

Dynamo与Revit API之间的转换

今天来聊聊 Dynamo 与 Revit 之间图元转换的基础知识,这些需要你牢牢记住哦,不然在 Python script 中写代码,经常会报错的~ 通常来讲,所有来自 Dynamo 节点的几何图形都不是 Revit 的几何对象,所以它们需要与 Revit AP…

FreeCAD傻瓜教程之基准面的构建-在实体的表面上新建坐标、倾斜的平面、附加不同的台阶、旋转体等

目的:学会在已有模型的不同剖面上建立新的坐标系,并绘图;使得新图形仍然作为同一个零件实体的构件。 零、需求举例 在下列模型中,我们要在圆杆的顶部增加一个把手,如果点击圆杆顶部,则仅能在顶部圆形所在…

举4例说明Python如何使用正则表达式分割字符串

在Python中,你可以使用re模块的split()函数来根据正则表达式分割字符串。这个函数的工作原理类似于Python内置的str.split()方法,但它允许你使用正则表达式作为分隔符。 示例 1: 使用单个字符作为分隔符 假设你有一个由逗号分隔的字符串,你可…

设计模式之状态模式(一)

设计模式专栏: http://t.csdnimg.cn/4Mt4u 目录 1.概述 2.结构 3.实现 4.总结 1.概述 状态模式( State Pattern)也称为状态机模式( State Machine pattern), 是允许对象在内部状态发生改变时改变它的行为,对象看起来好像修改了它的类, 属于行为型模式。 在状…

Vscode按键占用问题解决

Vscode按键占用 在使用vscode的过程中,官方按键 Ctrl . 按键可以提示修复代码中的问题,但是发现按了没有反应。 解决问题 首先确认vscode中是否设置了这个按键,默认设置了的系统输入法中是否有按键冲突了,打开输入法设置检查 …

AI在融媒体领域的应用探讨

AI在融媒体领域的应用探讨 ChatGPT是人工智能的一种应用形式,它属于自然语言处理(NLP,Nature Language Process)领域。 2022年11月30日,由人工智能实验室OpenAI发布的对话式大型语言模型ChatGPT一夜爆火,…

ETL数据倾斜与资源优化

1.数据倾斜实例 数据倾斜在MapReduce编程模型中比较常见,由于key值分布不均,大量的相同key被存储分配到一个分区里,出现只有少量的机器在计算,其他机器等待的情况。主要分为JOIN数据倾斜和GROUP BY数据倾斜。 1.1GROUP BY数据倾…

[激光原理与应用-80]:PLC通信协议之-OMRON欧姆龙FINS TCP通信协议详细解析

目录 一、OMRON欧姆龙 PLC简介 1.1 OMRON欧姆龙 PLC 1.2 OMRON欧姆龙 PLC通信协议简介 1.3 通信架构 二、欧姆龙FINS协议简介 2.1 简介 2.2 协议分层 2.3 OMRON(欧姆龙)FINS协议的本质 2.4 OMRON(欧姆龙)FINS&#xff08…

Spring Boot集成zxing实现生成二维码功能

1.二维码介绍 二维码QR Code(Quick Response Code) 由Denso公司于1994年9月研制的一种矩阵二维码符号,它具有一维条码及其它二维条码所具有的信息容量大、可靠性高、可表示汉字及图象多种文字信息、保密防伪性强等优点。 ZXing 一个支持在图像中解码和生成条形码(如…

Vue3与CSS艺术: 实现数字流动画

开篇 最近在给我的个人小项目做注册页面,想的是反正是自己的页面,不妨加点动画特效进去,这样看起来更好看。在经过一番思索后,决定了做一个简单的“字符雨”动画出来。 思路分析 想做就做,打开IDE,接下来就…

医院预约挂号系统设计与实现|jsp+ Mysql+Java+ Tomcat(可运行源码+数据库+设计文档)

本项目包含可运行源码数据库LW,文末可获取本项目的所有资料。 推荐阅读100套最新项目 最新ssmjava项目文档视频演示可运行源码分享 最新jspjava项目文档视频演示可运行源码分享 最新Spring Boot项目文档视频演示可运行源码分享 2024年56套包含java,…

信号处理--使用EEGNet进行BCI脑电信号的分类

目录 理论 工具 方法实现 代码获取 理论 EEGNet作为一个比较成熟的框架,在BCI众多任务中,表现出不俗的性能。EEGNet 的主要特点包括:1)框架相对比较简单紧凑 2)适合许多的BCI脑电分析任务 3)使用两种卷…

大创项目推荐 图像识别-人脸识别与疲劳检测 - python opencv

文章目录 0 前言1 课题背景2 Dlib人脸识别2.1 简介2.2 Dlib优点2.3 相关代码2.4 人脸数据库2.5 人脸录入加识别效果 3 疲劳检测算法3.1 眼睛检测算法3.3 点头检测算法 4 PyQt54.1 简介4.2相关界面代码 5 最后 0 前言 🔥 优质竞赛项目系列,今天要分享的是…

道路与航线

一道类似缩点的好题&#xff0c;先按道路缩点 然后将缩点以后的图按照航线做DAG 在DAG上先跑topsort 在每一个团内部跑dijkstra&#xff0c;同时更新top点 很有意思的一道题目 #include<bits/stdc.h> using namespace std; using ll long long; const int N 3e510; co…

STM32--RC522学习记录

一&#xff0c;datasheet阅读记录 1.关于通信格式 2.读寄存器 u8 RC522_ReadReg(u8 address) {u8 addr address;u8 data0x00;addr((addr<<1)&0x7e)|0x80;//将最高位置一表示read&#xff0c;最后一位按照手册建议变为0Spi_Start();//选中从机SPI2_ReadWriteByte(ad…

Python 潮流周刊#43:在开源与家庭之间,他选择了家庭

△△请给“Python猫”加星标 &#xff0c;以免错过文章推送 你好&#xff0c;我是猫哥。这里每周分享优质的 Python、AI 及通用技术内容&#xff0c;大部分为英文。本周刊开源&#xff0c;欢迎投稿[1]。另有电报频道[2]作为副刊&#xff0c;补充发布更加丰富的资讯&#xff0c;…

Java基础-正则表达式

文章目录 1.基本介绍2.正则底层实现1.matcher.find()完成的任务2.matcher.group(0)分析1.源代码2.解释&#xff08;不分组&#xff09;3.解释&#xff08;分组&#xff09; 3.总结 3.正则表达式语法1.基本介绍2.元字符的转义符号1.基本介绍2.代码实例 3.字符匹配符1.基本介绍2.…

vscode使用Runner插件将.exe文件统一放到一个目录下

找到右下角管理&#xff0c;点击扩展。 找到Code Runner插件&#xff0c;打开扩展设置。 向下翻&#xff0c;找到Executor Map&#xff0c;点击在settings.json中编辑。 在c和c的配置命令栏中增加\\\output\\即可。&#xff08;增加的目录不能自动创建&#xff0c;需要手动创建…

管理自由,体验简单,使用安全 | 详解威联通全套多用户多权限管理方案【附TS-466C产品介绍】

管理自由&#xff0c;体验简单&#xff0c;使用安全 | 详解威联通全套多用户多权限管理方案【附TS-466C产品介绍】 哈喽小伙伴们好&#xff0c;我是Stark-C~。今天我们来解决一个之前评论区多次被提及的问题--多用户权限管理。 对于我们NAS用户来说&#xff0c;基本都会面临这…