多目标应用:基于环形拓扑的多目标粒子群优化算法(MO_Ring_PSO_SCD)的移动机器人路径规划研究(提供MATLAB代码)

news2024/9/21 2:49:29

  一、机器人路径规划介绍

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

三、机器人路径规划多目标模型

3.1路径成本

当机器人从起点向目标点移动时,通常选择最短的一条路径。将一条路径上每 条线段的长度累加求和即可得到路径总长度。任何两点形成的线段都是根据欧氏距 离来计算的,其中,P = [P0, P1, …, Pi, Pi + 1, … Pn, Pn + 1]代表路径 P,S = P0代表起 点,T = Pn + 1代表目标点。路径长度目标计算方法如下式

其中,Pi =(xi, yi)和 Pi + 1 = (xi + 1, yi + 1)是路径中的两个连续点,d(Pi, Pi + 1)是 路径中的线段距离;Length(P)表示由所有线段相加得到的总路径长度;n 表示路 径中的点数量。

3.2平滑成本

路径平滑度表示路径的弯曲程度,换句话说,只有当路径是平滑的,机器人 在移动时才会使用较少的能量。为了衡量可行路径的平滑度,使用两个连续路段之 间的夹角 Ang [Pi, Pi + 1, Pi + 2]表示。路径平滑度的计算方法如下式

其中 Pi,Pi + 1和 Pi + 2是路径上的三个相邻节点。

3.3目标函数

移动机器人(Mobile robot,MR)的路径规划的目标函数f1f2分别是路径成本最小平滑成本最小

参考文献:

 [1]于振翱. 面向多目标优化的移动机器人路径规划方法研究[D]. 山东:聊城大学,2023. 

[2]杨嘉. 基于改进NSGA-Ⅱ算法的移动机器人路径规划研究[D]. 陕西:长安大学,2021.

四、MO_Ring_PSO_SCD求解移动机器人路径规划

基于环形拓扑的多目标粒子群优化算法(A Multi-objective Particle Swarm Optimizer Using Ring Topology,MO_Ring_PSO_SCD)是一种为解决多模态多目标优化问题而设计的粒子群优化算法。
该算法旨在解决可能具有多个对应相同目标函数值的Pareto最优解的多模态多目标优化问题。其核心特点包括:

环形拓扑结构:算法使用环形拓扑结构来促进种群内个体间的稳定竞争,有助于发现并维持更多的Pareto最优解。
特殊拥挤距离:在决策空间和目标空间中采用了特殊的拥挤距离度量,以评估和保持解的多样性。
MO_Ring_PSO_SCD算法流程
初始化:粒子群初始化,每个粒子随机分配在解空间中。
评估:计算每个粒子的目标函数值,并根据Pareto支配关系进行评估。
更新粒子速度和位置:根据环形拓扑结构和拥挤距离信息更新粒子的速度和位置。
维护多样性:通过特殊拥挤距离的计算方法,该算法不仅定位大量Pareto最优解,而且在决策和目标空间中获得良好分布。
迭代:重复上述步骤,直到满足停止条件或达到最大迭代次数。
参考文献:
[1] Yue C , Qu B , Liang J .A Multi-objective Particle Swarm Optimizer Using Ring Topology for Solving Multimodal Multi-objective Problems[J].IEEE Transactions on Evolutionary Computation, 2017:805-817.DOI:10.1109/TEVC.2017.2754271.


 

4.1部分代码

close all
clear
clc
dbstop if all error
addpath(".//")
global G S E
MultiObj= fun_info();%获取无人机模型信息
params.maxgen=100;  % 最大迭代次数
params.Np=50;      % 种群大小
params.Nr=100;      %外部存档大小(不得小于种群大小)
[Xbest,Fbest] = (params,MultiObj);
%% 获取算法得到的所有路径存于Result中
for i=1:size(Xbest,1)
    global_best = round(Xbest(i,:));
    route = [S(1) global_best E(1)];
    path=generateContinuousRoute(route,G);
    % path=shortenRoute(path);
    path=GenerateSmoothPath(path,G);
    Result(i).BestPosition= path;
    Result(i).BestFit=Fbest(i,:);
end

%% 获取 路径成本最小 与 平滑成本最小
if size(Fbest,1)>1
    idx=min(Fbest);
else
    idx=Fbest;
end
KK=find(Fbest(:,1)==idx(1));
IDX(1)=KK(1);
KK=find(Fbest(:,2)==idx(2));
IDX(2)=KK(1);

https://mbd.pub/o/bread/mbd-ZpqYmplw

https://mbd.pub/o/bread/mbd-ZpqYmpdx

https://mbd.pub/o/bread/mbd-ZpqYmZ5s

https://mbd.pub/o/bread/mbd-ZpqYmZxr

​https://mbd.pub/o/bread/mbd-ZpqYmZpu
%%  画图pareto前沿图
dbclear all
figure
plot(Fbest(:,1),Fbest(:,2),'r*');
xlabel('路径成本')
ylabel('平滑成本')
legend('')

4.2部分结果

五、完整MATLAB代码

见下方联系方式

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

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

相关文章

SpringBoot2:配置类的一般写法

1、知识准备 首先,我们要知道,springboot的配置类的构造器,构造器参数,是从IOC容器中获取的。 2、案例说明 我随便找个springboot的一个自动配置类 org.springframework.boot.autoconfigure.web.servlet.DispatcherServletAuto…

阻塞队列-单锁实现

使用阻塞队列 当我们多个线程下 对 一个队列进行操作,队列满了的情况下,其他线程再次 offer,会一直阻塞等待 对一个队列进行出队操作的时候,队列空的情况下,会一直阻塞等待删除,直到队列有元素的时候&a…

Java-线程的生命周期7大状态

在 Java 中,线程的生命周期可以分为多个状态,这些状态描述了线程从创建到终止的整个过程。Java 线程的生命周期主要包括以下七大状态: 1.新建状态(New) 当一个线程对象被创建但尚未调用 start() 方法时,线…

Zabbix结合Grafana

一、Grafana简介 Grafana 是 Graphite 和 InfluxDB 仪表盘和图形编辑器。Grafana 是开源的,功能齐全的度量仪表盘和图形编辑器,支持 Graphite,InfluxDB 和 OpenTSDB。 Grafana 主要特性:灵活丰富的图形化选项;可以混合…

数分基础(06)商业分析四种类型简介

文章目录 1. 商业分析2. 四种类型2.1 描述性分析和诊断性分析2.1.1 加载Global_Superstore数据集2.1.2 描述性分析2.1.3 诊断性分析2.1.4 再进一步各地区的订单数量和平均订单金额按客户群体分析销售额和利润折扣率和利润产品类别和子类别的销售和利润 本小节小结 2.2 销售预测…

Nature:最大扩散强化学习

转自:清熙 强化学习(RL)智能体(Agent)常常很难在现实世界中广泛部署:初始化差异影响大,样本效率低下,情境之外难以泛化。 研究发现问题的关键是违反了数据独立同分布 (iid) 的假设…

驱动(RK3588S)第六课时:linux2.6的使用与GPIO子系统的使用

目录 一、Linux2.6 字符设备驱动编写框架1、合成一个完整的设备号函数2、从完整的设备号里提取主设备号3、动态申请设备号4、静态申请设备号5、释放申请的设备号6、Linux2.6 字符设备驱动的核心结构体7、初始化核心结构体8、向内核去申请 linux2.6 字符设备9、释放申请的设备10…

Linux实验报告2-初步使用shell

目录 一:实验目的 二:实验内容 1 请指出下面每条命令中哪部分是命令名、选项和参数 3 以列表及递归方式查看/dev目录下的文件。 4 修改当前系统时间为2015年1月1日。 7 查看/tmp目录下的所有文件,指出哪些属于隐藏文件。 8 统计文件/e…

Kaggle竞赛:Rossmann Store Sales第66名策略复现

之前做过一次Kaggle的时间序列竞赛数据集练习:CSDN链接效果并不理想,之后在Kaggle的评论中又找到了各式各样的模型方法,其中我还手动还原过第三名的Entity Embedding:CSDN链接。这个参赛方法中,使用了除了比赛给出的数…

MySQL之UDF提权复现

什么是UDF: UDF(Userfined function)用户自定义函数,是MySQL的一个扩展接口,用户通过自定义函数可以实现在 MySQL 中无法方便实现的功能,其添加的新函数都可以在 SQL 语句中调用。 提权条件: 知道MySQL用户名和密码…

探索 Nuxt Devtools:功能全面指南

title: 探索 Nuxt Devtools:功能全面指南 date: 2024/9/3 updated: 2024/9/3 author: cmdragon excerpt: 摘要:本文介绍了Nuxt Devtools的功能和使用方法,包括自动安装、手动安装和各项主要功能,如页面、组件、构建分析等。 categories: 前端开发tags: NuxtDevtools前端…

【AI】Pytorch_损失函数优化器

建议点赞收藏关注!持续更新至pytorch大部分内容更完。 本文已达到10w字,故按模块拆开,详见目录导航。 整体框架如下 数据及预处理 模型及其构建 损失函数及优化器 本节目录 损失函数创建损失函数 (共18个)nn.CrossEnt…

《CounTR: Transformer-based Generalised Visual Counting》CVPR2023

摘要 本论文考虑了通用视觉对象计数问题,目标是开发一个计算模型,用于计算任意语义类别的对象数量,使用任意数量的“样本”(即可能为零样本或少样本计数)。作者提出了一个新颖的基于Transformer的架构,称为…

【前端面试】leetcode树javascript

写一个树 // 定义二叉树节点 function TreeNode(val, left, right) {this.val = (val === undefined ? 0 : val)this.left = (left === undefined ? null : left)this.right = (right === undefined ? null : right) }// 示例使用 const root = new TreeNode(1,new TreeNod…

Javaweb开发总结(2)

1.处理项目中的异常 利用全局异常处理器 单独创建一个类来处理全局的异常,并对其做出相应回应 /* * 全局异常处理器 * */ RestControllerAdvice public class GlobalExceptionHandler {ExceptionHandler(Exception.class)//代表我们要捕获所有异常public Result ex…

STL-string对字符串进行操作

C形式下的字符串:c_str() string s1("hello"); const char* str s1.c_str(); while (*str) {cout << *str << " ";str; } cout << "\n"; 获取字符数组首地址&#xff0c;用C字符串的形式遍历 区别&#xff1a; cout <…

c++实现生产者消费者的供需关系

一、生产者&消费者模式 生产者-消费者模式&#xff08;Producer-Consumer Pattern&#xff09;是一种常见的并发设计模式&#xff0c;这种模式最常见&#xff0c;所以把它单独拿出来&#xff0c;这种模式用于处理生产者和消费者之间的协调问题。生产者和消费者之间不直接关…

leveldb源码解析(一)——编解码

leveldb中&#xff0c;数字的存储统一采用小端序&#xff0c;通过对数字编码和压缩&#xff0c;节省了存储空间。 变长编码 小端序中&#xff0c;每个字节的最低位存储状态&#xff0c;其余7位存储数据。 status状态值说明&#xff1a; 1&#xff1a;该字节不是当前数字最后…

《Few-shot Object Counting and Detection》CVPR2022

概述 摘要&#xff1a; 论文提出了一个新的任务——少量样本目标计数和检测&#xff08;Few-shot Object Counting and Detection, FSCD&#xff09;。在这项任务中&#xff0c;研究者们旨在通过给定少量目标类别的示例边界框来计数和检测图像中所有目标对象。这项任务与少量样…

Your connection to this site is not secure

chrome 打开某一个网站的网页地址栏提示Your connection to this site is not secure,同一个网站的其它地址栏打开不会 无效的方案 浏览器地址栏输入: chrome://flags 找到下边的选项&#xff0c;从Default改为Disabled即可成功解决 亲测这个方法不行 解决方案 点击右上角的3个…