四种算法(麻雀搜索算法SSA、螳螂搜索算法MSA、红尾鹰算法RTH、霸王龙优化算法TROA)求解机器人路径规划(提供MATLAB代码)

news2025/2/22 12:49:20

 一、机器人路径规划介绍

移动机器人(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.

三、四种算法介绍

麻雀搜索算法SSA、螳螂搜索算法MSA、红尾鹰算法RTH、霸王龙优化算法TROA

(1)麻雀搜索算法SSA

(2)螳螂搜索算法MSA

机器人路径规划:基于螳螂搜索算法(Mantis Search Algorithm,MSA)的机器人路径规划(提供MATLAB代码)-CSDN博客

(3)红尾鹰算法RTH

机器人路径规划:基于螳螂搜索算法(Mantis Search Algorithm,MSA)的机器人路径规划(提供MATLAB代码)-CSDN博客

(4)霸王龙优化算法TROA

机器人路径规划:基于霸王龙优化算法(Tyrannosaurus optimization,TROA)的机器人路径规划(提供MATLAB代码)-CSDN博客

四、四种算法求解机器人路径规划

4.1部分代码

%% 
S = [1 1];   %起点
E = [dimensions dimensions];  %终点
dim = dimensions - 2;             
%% 参数设置
Max_iter= 200;    % 最大迭代次数
SearchAgents_no = 50;         % 种群数量
X_min = 1;  
lb=1;
fobj=@(x)fitness(x);
AlgorithmName={'SSA','MSA','RTH','TROA'};%算法名称
Fit=[];
for i=1:numel(AlgorithmName)
    Algorithm=str2func(AlgorithmName{i});%依次获取算法
    [BestF{i},BestX{i},Curve{i}] = Algorithm(SearchAgents_no,Max_iter,lb,ub,dim,fobj);
    path{i}=GetPath(BestX{i});
    Fit=[Fit,BestF{i}];
end
strColor={'r','c','m','y','g','b','k'};
strColor1={'r*-','co--','ms-.','yd-','mp--','cx-.','y+-'};

4.2部分结果

五、完整MATLAB代码

见下方名片​

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Flink KafkaSink分区配置的不同版本对比

Flink KafkaSink分区配置的不同版本对比 在不同版本的Flink中,KafkaSink 分区默认配置方式可能会有一些变化。以下是摘自Flink官方文档不同版本的原文: 1. Flink版本:1.12~1.19 Sink 分区 # 配置项 sink.partitioner 指定了从 Flink 分区到 …

12个可能未使用过的Python特性

大多数程序员不知道的令人难以置信的功能列表。 Python 是顶级编程语言之一,它具有许多程序员从未使用过的许多隐藏功能。在这篇文章中,我将分享你可能从未使用过的13 个 Python 特性。 1.列表Stepping 这是一个 step 参数,可以通过采取几…

六西格玛培训公司怎么选?一篇就够你明白

在如今六西格玛培训公司琳琅满目的市场中,如何挑选出一家既专业又符合自身需求的公司呢?本文将为大家提供一些实用的建议,助您在挑选六西格玛培训公司时不再迷茫。 一、明确培训目标 在选择六西格玛培训公司之前,首先要明确自己的…

nginx代理https地址报阿里云Web应用防火墙 (WAF)

项目中开通的网络策略都是从nginx代理出去,当代理的地址是阿里云地址时出现了如下错误。 我的nginx配置如下 在网上查资料发现,阿里是通过请求头中的host来校验域名是否存在来拦截该请求。最终配置如下: location /test/ { prox…

数据结构学习记录

数据结构 数组 & 链表 相连性 | 指向性 数组可以迅速定位到数组中某一个节点的位置 链表则需要通过前一个元素指向下一个元素,需要前后依赖顺序查找,效率较低 实现链表 // head > node1 > node2 > ... > nullclass Node {constructo…

C语言 | 动态内存管理

目录: 1. 为什么要有动态内存分配 2. malloc和free 3. calloc和realloc 4. 常见的动态内存的错误 5. 动态内存经典笔试题分析 6. 柔性数组 1. 为什么要有动态内存分配 我们已经掌握的内存开辟方式有: int val 20; //在栈空间上开辟四个字节 cha…

【笔试强训】Day1 --- 数字统计 + 两个数组的交集 + 点击消除

文章目录 1. 数字统计2. 两个数组的交集3. 点击消除 1. 数字统计 【链接】:数字统计 解题思路:模拟,利用数学知识,计算每个数字中2出现的个数。(这里也可以将数字转换成字符串来统计字符’2’出现的个数&#xff09…

30. 【Android教程】吐司提示:Toast 的使用方法

在使用 Android 手机的时候,有没有遇到过如图中这种类型的消息提示? 这个在 Android 中被称为 Toast,用来短暂的展示一些简短的提示信息。相比弹窗来讲它对用户的打扰更小,在提示一段时间之后会自动消失,通常用来提示当…

第2章:车辆纵向控制

2.1 车辆纵向动力学模型 注:车辆的纵向控制是指控制车辆行驶方向上的加减速,使得汽车可以按照期望的速度行驶,并保持安全的前后车距(即对汽车油门 / 刹车的控制); 2.1.1 车辆纵向受力模型 :轮胎…

笔记本电脑键盘没反应怎么办?4个方法解决电脑问题!

“好奇怪啊,我的笔记本电脑键盘莫名其妙就没有反应了,怎么按都无法解决这个问题,有朋友知道应该怎么解决吗?” 笔记本电脑键盘是我们日常工作和生活中不可或缺的输入工具,我们无论是输入文件还是与别人聊天&#xff0c…

【数信杯】pyc

题目 题目描述: py又cc 附件:(资源已上传) pyc文件是是py的编译文件,使用反编译工具还原文件 1. 反编译pyc文件 在线工具:http://tools.bugscaner.com/decompyle/ 本地工具:uncompyle6 pip …

网上客车售票管理系统(含源码+sql+视频导入教程+文档+PPT)

👉文末查看项目功能视频演示获取源码sql脚本视频导入教程视频 1 、功能描述 网上客车售票管理系统4拥有两种角色:管理员和用户 管理员:车票管理、订单管理、退票管理、车票流水记录、余票盘点、留言管理、用户管理等 用户:登录…

科学高效备考2024年AMC10,吃透1250道AMC10历年真题和详细解析

距离2024年AMC10比赛正式开始还有6个多月的时间,备考要趁早。 我们今天继续来随机看5道AMC10真题,以及详细解析,这些题目来自1250道完整的官方历年AMC10真题库。 2000-2023年AMC10真题练习和解析:2016年第23题 这道题考点是代数的…

黑马程序员——mysql——day05——反射、注解、动态代理

目录: 类的加载 目标讲解 类的加载过程类的加载机制小结类加载器 目标讲解 类加载器的作用类加载器的分类:获取类加载器的方式小结双亲委派机制 目标讲解 3种类加载器的关系双亲委派机制小结反射:概述 目标讲解 反射反射技术的应用案例:反射…

建都寿春的袁术兴亡史

三国(220年-280年)是中国历史上位于汉朝之后,晋朝之前的一段历史时期。这一个时期,先后出现了曹魏、蜀汉、东吴三个主要政权。袁术的地盘很小,为了在三国时期能够立足? 事实上,袁术巅峰时期的地盘并不小,而…

通过IP地理位置阻止网络攻击:有效性与局限性

网络攻击已成为当今互联网世界中的一项常见挑战。黑客和恶意用户利用各种手段对网络系统进行攻击,造成数据泄露、服务中断甚至财产损失。在这种背景下,寻找有效的网络安全解决方案变得至关重要。 IP地理位置阻止是一种基于黑名单的网络安全措施。它的原…

不到2毛钱的IGBT绝缘栅晶体管/MOSFET场效应管栅极驱动器N531

功率开关控制器 较大功率的IGBT或MOSFET都需要外部电流驱动,这个可能和大部分人的想法是不同的,明明它们是电压驱动器件,为什么还要电流驱动?因为这些器件的输入存在CISS等输入电容,需要给它们快速的充电和放电&#…

第一天学C++(C++入门)

一、HelloWorld &#xff08;第一个C入门程序&#xff09; 1.1代码 #include<iostream> using namespace std; // 1.单行注释// 2. 多行注释 /* main 是一个程序的入口 每个程序都必须有这么一个函数 有且仅有一个 */ int main() {// 第九行代码的含义就是在屏幕中输出…

element plus el-date-picker type=“datetime“ 限制年月日 时分秒选择

如何限制el-date-picker组件的时分秒选中&#xff01;&#xff01;&#xff01;&#xff01;&#xff01;&#xff01;&#xff01; 文档 文档在这里&#xff1a;DateTimePicker 日期时间选择器 | Element Plus 它提供的disabled-date给我们来限制日期选择 nice&#xff01;&…

【Java学习笔记】9.5 Java中的Lambda表达式

Lambda表达式是从Java8版本开始增加的语法。Lambda表达式有利于实现函数式编程&#xff0c;简化开发。 9.5.1 Lambda表达式入门 Lambda表达式由三部分组成&#xff1a;参数列表、箭头(->),及一个表达式或语句块。其完整的语法格式如下&#xff1a; (Type 1 param1 , Type…