多目标应用:基于自组织分群的多目标粒子群优化算法(SS-MOPSO)的移动机器人路径规划研究(提供MATLAB代码)

news/2024/9/18 17:02:41/ 标签: 前端, 多目标算法, 人工智能, 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.

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

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.

四、SS-MOPSO求解移动机器人路径规划

基于自组织分群的多目标粒子群优化器(self-organized speciation based multi-objective particle swarm optimizer,SS-MOPSO)的算法流程:

初始化:初始化粒子群,随机分配粒子在搜索空间中的位置和速度。
评估:评估每个粒子的适应度,确定其在目标空间中的位置。
分群:根据粒子的适应度和位置,使用自组织机制将粒子分入不同的生态位或子种群。
更新:粒子根据自身经验、种群经验以及生态位内的引导,更新位置和速度。
维护多样性:通过拥挤距离技术,确保粒子群在决策空间和目标空间中保持多样性。
迭代:重复评估和更新步骤,直到满足停止条件,如达到最大迭代次数或解的质量标准。
输出:最终输出Pareto最优解集,这些解代表了在多个目标之间取得平衡的最优解。

参考文献:
[1] Qu B , Li C , Liang J ,et al.A self-organized speciation based multi-objective particle swarm optimizer for multimodal multi-objective problems[J].Elsevier, 2020.DOI:10.1016/j.asoc.2019.105886.


 

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)>1idx=min(Fbest);
elseidx=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-ZpqYmplwhttps://mbd.pub/o/bread/mbd-ZpqYmpdxhttps://mbd.pub/o/bread/mbd-ZpqYmZ5shttps://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.ppmy.cn/news/1519921.html

相关文章

71. 简化路径算法实现详解(goalng版)

LeetCode 71. 简化路径详解 一、题目描述 给你一个字符串 path,表示指向某一文件或目录的 Unix 风格绝对路径(以 ‘/’ 开头),请你将其转化为更加简洁的规范路径。 在 Unix 风格的文件系统中,一个点(.)表示当前目录本身;此外,两个点(…)表示将目录切换到上一级(…

数据结构代码集训day14(适合考研、自学、期末和专升本)

题目均来自b站up:白话拆解数据结构! 今日题目如下:(1)试写一个算法判断给定字符序列是否是回文。 (2)给定一个算法判断输入的表达式中括号是否匹配。假设只有花、中、尖三种括号。 题1 回文序列…

【类模板】类模板的特化

一、类模板的泛化 与函数模板一样&#xff0c;类模板的泛化就是普通的模板&#xff0c;不具有特殊性的模板。 以下的类模板为泛化的版本 //类模板的泛化 template<typename T,typename U> struct TC {//静态成员变量static int static_varible; //声明TC() {std::cout…

【Java EE】JVM

目录 1. JVM简介 2.JVM运行流程 3.JVM运行时数据区 3.1 堆&#xff08;线程共享&#xff09; 3.2 Java虚拟机栈&#xff08;线程私有&#xff09; 1. JVM简介 JVM是 Java Virtual Machine 的简称&#xff0c;意为Java虚拟机。 虚拟机是指通过软件模拟的具有完整硬件功能的…

python-简单的dos攻击

前言 这个是DOS攻击学习(注意&#xff1a;千万别去攻击有商业价值的服务器或应用&#xff0c;不然会死的很惨(只有一个IP通过公网访问容易被抓),前提是网站没有攻击防御) 创建一个以python编写的后端web服务(好观察) 安装flask pip install flask from flask import Flaskapp …

Android使用前台服务

Android使用前台服务 服务几乎都是在后台运行的&#xff0c;一直以来它都是默默地做着辛苦的工作。但是服务的系统优先级还是比较低的&#xff0c;当系统出现内存不足的情况时&#xff0c;就有可能会回收掉正在后台运行的服务。 如果你希望服务可以一直保持运行状态&#xff…

使用golang的AST编写定制化lint

什么是lint &#xff08;来自wiki&#xff09;在计算机科学中&#xff0c;lint是一种工具程序的名称&#xff0c;它用来标记源代码中&#xff0c;某些可疑的、不具结构性&#xff08;可能造成bug&#xff09;的段落。它是一种静态程序分析工具&#xff0c;最早适用于C语言&…

【13年12月CCF计算机软件能力认证】:出现次数最多的数、ISBN号码、最大的矩形、有趣的数、I‘m stuck!

题目概括出现次数最多的数暴力枚举&#xff0c;非常简单ISBN号码直接模拟&#xff0c;非常简单最大的矩形用到双指针&#xff08;优化枚举&#xff09;&#xff0c;非常简单有趣的数用到了数学知识排列组合&#xff0c;有一定思维难度I’m stuck!我用到了两个dfs来解决&#xf…

【区块链 + 供应链】广汽本田区块链合同供应链管理系统 | FISCO BCOS应用案例

广汽本田是国内汽车制造的龙头&#xff0c;每年销售额超千亿级别&#xff0c;每年的合同采购规模量在百亿以上。企业内部采用传 统的中心化方式管理合同&#xff0c;由于涉及部门众多&#xff0c;需要管理的合同要素也各不相同&#xff0c;造成信息不集中、合同版本众多、 合同…

C#中lock(this)与lock(private object)区别

前言 在使用多线程编程时&#xff0c;我们会对代码关键部分确保其一次只由一个线程执行&#xff0c;对于防止争用条件和保持数据完整性至关重要。在C#中&#xff0c;lock 语句就是用于通过同步对共享资源的访问来实现此目的工具。本文介绍lock(this) 与lock(private object) 两…

重新修改 Qt 项目的 Kit 配置

要重新修改 Qt 项目的 Kit 配置&#xff0c;你可以按照以下步骤进行操作&#xff1a; 1. 打开 Qt Creator 首先&#xff0c;启动 Qt Creator&#xff0c;确保你的项目已经打开。 2. 进入项目设置 在 Qt Creator 中&#xff0c;点击菜单栏的 “Projects” 标签&#xff08;通…

Spark MLlib模型训练—回归算法 Decision tree regression

Spark MLlib模型训练—回归算法 Decision tree regression 在机器学习中,决策树是一种常用且直观的模型,广泛应用于分类和回归任务。决策树回归 (Decision Tree Regression) 通过将数据集分割成多个区域,构建一棵树形结构,以预测目标变量的连续值。本文将详细探讨 Spark 中…

【Eureka】搭建Eureka Server,实现服务注册和服务发现

1. Eureka介绍 Eureka是NetflixOSS套件中关于服务注册和发现的解决⽅案.SpringCloud对Eureka进⾏了集成,并作为优先推荐⽅案进⾏宣传,虽然⽬前Eureka2.0已经停⽌维护,新的微服务架构设计中,也不再建议使用,但是⽬前依然有⼤量公司的微服务系统使⽤Eureka作为注册中⼼. 官方文…

数据访问:JPA

文章目录 JPA的由来JPA是什么Spring Data JPA快速上手 JPA的由来 ORM框架能够将Java对象映射到关系型数据库中&#xff0c;能够直接持久化复杂的 Java对象。ORM框架的出现&#xff0c;可以让开发者从数据库编程中解脱出来&#xff0c;把更多的精力放在业务模型与业务逻辑上。目…

k8s-pod 实战八 (gRPC 探测详细分析)

gRPC 探测详细分析 在 Kubernetes 中,探针(Probe)用于检查应用程序的健康状态和就绪状态。尽管 Kubernetes 原生支持 HTTP 和 TCP 探针,但对于 gRPC 服务,你需要借助第三方工具来实现探测。grpc-health-probe 是一个常用的工具,它专门用于探测 gRPC 服务的健康状态。 实…

KeePassXC软件简介

KeePassXC 是一款开源且免费的跨平台密码管理器&#xff0c;它允许用户在不同的网站和服务上使用多个不同的密码&#xff0c;而无需记住它们。用户只需要记住一个主密码或者持有一个密钥文件&#xff0c;就可以访问所有密码的加密数据库。KeePassXC 支持 AES 加密算法&#xff…

《C++20 特性综述》

《C20 特性综述》 在编程世界中&#xff0c;C一直以其强大的性能和灵活性占据着重要地位。随着时间的推移&#xff0c;C不断发展和演进&#xff0c;C20 带来了一系列令人瞩目的新特性&#xff0c;为开发者提供了更强大的工具和更高效的编程方式。 一、概念&#xff08;Concep…

大模型技术 | 基于 Langchain 和 Streamlit,构建多 PDF RAG 聊天机器人

与 PDF 互动是很酷的。你可以与你的笔记、书籍和文档等进行聊天。 本文将帮助你构建一个基于 Multi RAG Streamlit 的 Web 应用程序&#xff0c;通过对话 AI 聊天机器人来读取、处理和互动PDF数据。 以下是该应用程序的工作步骤&#xff0c;用简单的语言进行说明。 配置必要的…

JDK原理

当我们谈论JDK&#xff08;Java Development Kit&#xff09;的原理时&#xff0c;实际上是在探讨Java语言及其开发环境背后的技术和设计思想。JDK是Java编程语言的核心工具包&#xff0c;它包含了Java运行环境&#xff08;JRE&#xff09;、Java编译器&#xff08;javac&#…

2 html5 浏览器已经支持的新API

HTML5规范下很多API浏览器都已经支持&#xff0c;这里我们列举几个很常用的浏览器支持的API: 1 tab页之间通信: BroadcastChannel(channelName); 可用于多个不同浏览器tab页之间通信。实例化的时候Channel名称必须相同。 const broadcastChannel new BroadcastChannel(myC…