当前位置: 首页 > news >正文

多目标应用:基于MOPSO的移动机器人路径规划研究(提供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.

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

多目标粒子群优化算法(MOPSO)是一种基于粒子群优化(PSO)的进化算法,用于解决多目标优化问题。它通过模拟鸟群的觅食行为来寻找问题的最优解。在MOPSO中,每个粒子代表一个潜在的解决方案,并且每个粒子有自己的速度和位置,粒子的位置对应于优化问题的一个解,速度则决定了粒子在解空间中的移动方向和距离。

MOPSO的关键特点包括:

1. **Pareto支配**:在多目标优化中,一个解可能在某些目标上优于另一个解,而在其他目标上则不然。MOPSO使用Pareto支配来比较解,即一个解不被任何其他解在所有目标上同时优于。

2. **个体最优(pBest)**:每个粒子根据自己的经验找到的最优位置。

3. **全局最优(gBest)**:在MOPSO中,由于多目标的存在,全局最优被替换为一个外部存档(repository),用于存储非支配解。

4. **速度和位置更新**:粒子的速度和位置更新公式与传统PSO类似,但考虑到多目标的情况,pBest和gBest的选择更为复杂。

5. **外部存档(Archive)**:用于存储非支配解,通常使用自适应网格法来维护存档中解的多样性。

6. **拥挤距离**:用于选择gBest时考虑解的分布情况,避免选择过于集中的区域。

 MOPSO的算法步骤大致如下:

1. 初始化粒子群和外部存档。
2. 评估每个粒子的适应度。
3. 更新每个粒子的pBest和外部存档中的非支配解。
4. 选择gBest,通常基于拥挤距离和外部存档中的分布。
5. 根据pBest和gBest更新粒子的速度和位置。
6. 重复步骤2-5,直到满足终止条件。

参考文献:

4.1部分代码

close all
clear
clc
dbstop if all error
addpath("./MOPSO/")
global G S E
MultiObj= fun_info();%获取无人机模型信息
params.maxgen=100;  % 最大迭代次数
params.Np=50;      % 种群大小
params.Nr=100;      %外部存档大小(不得小于种群大小)
[Xbest,Fbest] = MOPSO(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);%%  画图pareto前沿图
dbclear all
figure
plot(Fbest(:,1),Fbest(:,2),'r*');
xlabel('路径成本')
ylabel('平滑成本')
legend('MOPSO')

4.2部分结果

五、完整MATLAB代码

见下方联系方式

相关文章:

  • 北京网站建设多少钱?
  • 辽宁网页制作哪家好_网站建设
  • 高端品牌网站建设_汉中网站制作
  • RTX5源码全家桶集成emWin6.40, Modbus主从,含FreeRTOS版, 探讨一种移植第3方组件通用方法以及使用注意事项2024-08-30
  • 【电子数据取证】Linux软件包管理器yum和编辑器vim
  • 【最全最详细】RPC与HTTP的区别
  • kali——nmap的使用
  • Centos7的x86上构建arm镜像docker
  • 【HuggingFace Transformers】Bert Model的应用
  • Qt/C++地址转坐标/坐标转地址/逆地址解析/支持百度高德腾讯和天地图
  • 时间格式--cotroller传递时间参数
  • RESP图形化界面远程连接虚拟机Redis教程
  • RepoAgent:基于大型语言模型的开源框架,主动生成、维护和更新代码文档
  • Amazon Bedrock 实践:零基础创建贪吃蛇游戏
  • [Algorithm][综合训练][体育课测验(二)][合唱队形][宵暗的妖怪]详细讲解
  • 嵌入式:Arm v7-M指令集架构中的字节序(大小端)
  • Java 入门指南:Java 并发编程 —— Synchronized 实现悲观锁(Pessimistic Locking)
  • 【Spring Boot 3】【Web】全局异常处理
  • 收藏网友的 源程序下载网
  • 【刷算法】求1+2+3+...+n
  • 【跃迁之路】【735天】程序员高效学习方法论探索系列(实验阶段492-2019.2.25)...
  • AngularJS指令开发(1)——参数详解
  • HTTP中的ETag在移动客户端的应用
  • java2019面试题北京
  • Java多线程(4):使用线程池执行定时任务
  • LeetCode29.两数相除 JavaScript
  • Lucene解析 - 基本概念
  • MySQL数据库运维之数据恢复
  • PAT A1050
  • Python 反序列化安全问题(二)
  • Windows Containers 大冒险: 容器网络
  • 大型网站性能监测、分析与优化常见问题QA
  • 翻译:Hystrix - How To Use
  • 区块链将重新定义世界
  • 少走弯路,给Java 1~5 年程序员的建议
  • 设计模式(12)迭代器模式(讲解+应用)
  • 设计模式走一遍---观察者模式
  • 小程序01:wepy框架整合iview webapp UI
  • 新版博客前端前瞻
  • 移动互联网+智能运营体系搭建=你家有金矿啊!
  • 主流的CSS水平和垂直居中技术大全
  • 《TCP IP 详解卷1:协议》阅读笔记 - 第六章
  • 好程序员大数据教程Hadoop全分布安装(非HA)
  • 基于django的视频点播网站开发-step3-注册登录功能 ...
  • ​​​【收录 Hello 算法】10.4 哈希优化策略
  • # dbt source dbt source freshness命令详解
  • #我与Java虚拟机的故事#连载14:挑战高薪面试必看
  • (C语言)球球大作战
  • (Demo分享)利用原生JavaScript-随机数-实现做一个烟花案例
  • (Java入门)学生管理系统
  • (Matlab)基于蝙蝠算法实现电力系统经济调度
  • (Note)C++中的继承方式
  • (笔记)M1使用hombrew安装qemu
  • (二)hibernate配置管理
  • (二)linux使用docker容器运行mysql
  • (附源码)spring boot儿童教育管理系统 毕业设计 281442
  • (附源码)ssm基于web技术的医务志愿者管理系统 毕业设计 100910
  • (附源码)ssm经济信息门户网站 毕业设计 141634