基于多目标向日葵优化算法(Multi-objective Sunflower Optimization,MOSFO)的移动机器人路径规划研究,MATLAB代码

一、机器人路径规划介绍

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

参考文献:

[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 ( N i / N ) − 0.5 x = \text{mod}(N_i / N) - 0.5 x=mod(Ni/N)0.5

y = N − ceil ( N i / N ) + 0.5 y = N - \text{ceil}(N_i / N) + 0.5 y=Nceil(Ni/N)+0.5

其中, mod \text{mod} mod为取余运算, ceil \text{ceil} ceil表示向后取整, N i N_i Ni是对应栅格的标号, N N 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 = [ P 0 , P 1 , … , P i , P i + 1 , … , P n , P n + 1 ] P = [P_0, P_1, \ldots, P_i, P_{i+1}, \ldots, P_n, P_{n+1}] P=[P0,P1,,Pi,Pi+1,,Pn,Pn+1]代表路径 P P P S = P 0 S = P_0 S=P0代表起点, T = P n + 1 T = P_{n+1} T=Pn+1代表目标点。路径长度目标计算方法如下式:

Length ( P ) = ∑ i = 0 n d ( P i , P i + 1 ) \text{Length}(P) = \sum_{i=0}^{n} d(P_i, P_{i+1}) Length(P)=i=0nd(Pi,Pi+1)

其中, P i = ( x i , y i ) P_i = (x_i, y_i) Pi=(xi,yi) P i + 1 = ( x i + 1 , y i + 1 ) P_{i+1} = (x_{i+1}, y_{i+1}) Pi+1=(xi+1,yi+1) 是路径中的两个连续点, d ( P i , P i + 1 ) d(P_i, P_{i+1}) d(Pi,Pi+1) 是路径中的线段距离; Length ( P ) \text{Length}(P) Length(P) 表示由所有线段相加得到的总路径长度; n n n 表示路径中的点数量。

3.2 平滑成本

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

Smoothness ( P ) = ∑ i = 0 n − 2 ∣ θ i ∣ \text{Smoothness}(P) = \sum_{i=0}^{n-2} \left| \theta_i \right| Smoothness(P)=i=0n2θi

其中, θ i \theta_i θi 是路径上三个相邻点 P i , P i + 1 , P i + 2 P_i, P_{i+1}, P_{i+2} Pi,Pi+1,Pi+2 之间的夹角。

3.3 目标函数

移动机器人路径规划的目标函数 f 1 f_1 f1 f 2 f_2 f2 分别是路径成本最小和平滑成本最小:

f 1 = min ⁡ ( Length ( P ) ) f_1 = \min(\text{Length}(P)) f1=min(Length(P))

f 2 = min ⁡ ( Smoothness ( P ) ) f_2 = \min(\text{Smoothness}(P)) f2=min(Smoothness(P))

参考文献:

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

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

四、多目标向日葵优化算法求解移动机器人路径规划

4.1多目标向日葵优化算法

多目标向日葵优化算法(Multi-objective Sunflower Optimization,MOSFO) 是一种用于解决多目标优化问题的强大学术研究算法,由 Joao Luiz Junho Pereira 等人于 2023 年提出。该算法是具有超立方和约束的多目标元启发式算法,其灵感源于向日葵围绕太阳的向光性生命周期。
算法原理
MOSFO 通过模拟向日葵的生长和追光机制来寻找最优解集合。在自然界中,向日葵会随着太阳位置的变化而转动自己的花盘以获得最佳的光照条件。同样地,在多目标优化问题中,MOSFO 旨在通过模拟这一过程来寻找问题的最优解集合。尤其适用于需要同时考虑多个目标函数的优化问题,能够为决策者提供一组具有不同目标权衡的解。
算法流程
初始化种群:在搜索空间中随机生成初始种群,种群中的每个个体代表一个可能的解。
适应度评估:计算每个个体针对不同目标函数的适应度值。
更新种群:根据向日葵的向光性行为更新种群的位置,通过选择邻居并朝向“太阳”(即最优解的方向)移动。
保持多样性:采用某种机制保持种群的多样性,例如外部存档或 crowding distance 方法,以探索新的区域。
终止条件:达到最大迭代次数或其他终止条件后,输出帕累托前沿。
优势
强大的搜索能力:MOSFO 在解决含有多个目标的复杂工程问题上表现出色,能在帕累托前沿上找到分布更广泛、质量更高的解。
效率高:相比其他算法,MOSFO 在保持解的质量的同时,能以更快的速度收敛,具有更低的计算成本。
实现简单:编程模型比大多数进化算法更简单,更容易在不同领域应用。
适应性强:对不同目标数量的问题都适用,尤其在目标数量较多时表现更优
参考文献:
[1] Pereira J L J , Gomes G F .Multi‐objective sunflower optimization: A new hypercubic meta‐heuristic for constrained engineering problems[J].Expert Systems, 2023, 40(8).DOI:10.1111/exsy.13331.

4.2 部分代码

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);
%%  画图pareto前沿图
dbclear all
figure
plot(Fbest(:,1),Fbest(:,2),'r*');
xlabel('路径成本')
ylabel('平滑成本')
legend('')

4.3 部分结果

在这里插入图片描述
在这里插入图片描述

五、完整MATLAB代码

见下方联系方式

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

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

cursor使用经验分享(java后端服务开发向)

前言 cursor是一款基于vscode,并集成AI能力的代码编辑器,其功能包括但不限于代码生成及补全、AI对话(能够直接将代码环境作为上下文)、即时应用建议等等,是一款面向未来的代码编辑器。 对于vscode,最先想…

【Java学习】异常

一、异常的处理过程 异常类的似复刻变量被throw时,会立即中止当前所在的这层方法,即当层方法里throw异常类似复刻变量之后的语句就不会执行了,如果throw异常语句在当层方法中被try{}包裹,则中止就先发生被包裹在了try{}层&#xf…

双足机器狗开发:Rider - Pi

双足机器狗开发:Rider - Pi https://github.com/YahboomTechnology/Rider-Pi-Robot 项目介绍 Rider - Pi是一款为开发者、教育工作者和机器人爱好者设计的桌面双轮腿式机器人,它基于树莓派CM4核心模块构建,具备多种先进功能和特点: 硬件特性 核心模块:采用树莓派CM4核…

vscode 查看3d

目录 1. vscode-3d-preview obj查看ok 2. vscode-obj-viewer 没找到这个插件: 3. 3D Viewer for Vscode 查看obj失败 1. vscode-3d-preview obj查看ok 可以查看obj 显示过程:开始是绿屏,过了1到2秒,后来就正常看了。 2. vsc…

Nginx 本地配置ssl证书

Nginx 本地配置ssl证书 主要为了本地使用https站点访问测试 本地linux 服务器环境为Centos7 本地安装mkcert证书工具 对于 Debian 或 Ubuntu 系统,你可以使用以下命令安装: sudo apt update sudo apt install mkcert # 验证是否安装成功 mkcert --vers…

Redis相关面试题

Redis相关面试题 缓存三剑客 面试官:什么是缓存穿透 ? 怎么解决 ? 缓存穿透是指查询一个一定不存在的数据,如果从存储层查不到数据则不写入缓存,这将导致这个不存在的数据每次请求都要到 DB 去查询,可能导致 DB 挂掉。这种情况…

Android ChatOn-v1.66.536-598-[构建于ChatGPT和GPT-4o之上]

ChatOn 链接:https://pan.xunlei.com/s/VOKYnq-i3C83CK-HJ1gfLf4gA1?pwdwzwc# 添加了最大无限积分 删除了所有调试信息 语言:全语言支持

机器学习(六)

一,决策树: 简介: 决策树是一种通过构建类似树状的结构(颠倒的树),从根节点开始逐步对数据进行划分,最终在叶子节点做出预测结果的模型。 结构组成: 根节点:初始的数据集…

求最小公倍数

求最小公倍数 编程实现: 求最小公倍数。 具体要求: 1、小猫询问“请输入第一个数”,并在列表中求出该数的质因数放入列表A,例如输入12; 2、小猫依次询问“请输入第二个数”,并在列表中求出该数的质因数…

【人工智能】GPT-4 vs DeepSeek-R1:谁主导了2025年的AI技术竞争?

前言 2025年,人工智能技术将迎来更加激烈的竞争。随着OpenAI的GPT-4和中国初创公司DeepSeek的DeepSeek-R1在全球范围内崭露头角,AI技术的竞争格局开始发生变化。这篇文章将详细对比这两款AI模型,从技术背景、应用领域、性能、成本效益等多个方…

C/C++蓝桥杯算法真题打卡(Day1)

一、LCR 018. 验证回文串 - 力扣(LeetCode) 算法代码: class Solution { public:bool isPalindrome(string s) {int n s.size();// 处理一下s为空字符的情况if (n 0) {return true; // 修正拼写错误}// 定义左右指针遍历字符串int left …

SpringUI高保真动态交互元件库:助力产品原型设计

SpringUI 是一个专为Web设计与开发领域打造的高质量、全面且易于使用的交互元件集合。通过提供一系列预制的、高质量的交互组件,帮助设计师快速构建出功能丰富、界面美观的原型。 ————基础元件: ——————按钮 Button:基础按钮、禁用…

vue+neo4j 四大名著知识图谱问答系统

编号: D039 视频 vueneo4j四大名著知识图谱问答系统 技术架构 vuedjangoneo4jmysql技术实现 功能模块图 问答:基于知识图谱检索、支持图多跳、显示推理路径 姜维的师傅的主公的臣是谁: 马谡 知识图谱:四大名著总共4个图谱 红楼梦图谱 …

学习使用ESP8266进行MQTT通信并在网页上可视化显示

目录 一、工具 二、 流程 三、代码实现 设置MQTT服务器地址 设置服务器和端口号 连接MQTT服务器并订阅话题 回调处理函数 发布数据到话题 四、调试软件使用 打开MQTTx 添加话题 五、网页使用 一、工具 arduino ide esp8266/32单片机 lot物联网网页 MQTTx软件或者m…

大模型应用开发学习笔记

Huggingface 下载模型: model_dirr"G:\python_ws_g\code\LLMProject\session_4\day02_huggingface\transformers_test\model\uer\uer\gpt2-chinese-cluecorpussmall\models--uer--gpt2-chinese-cluecorpussmall\snapshots\c2c0249d8a2731f269414cc3b22dff021…

虚拟卡 WildCard (野卡) 保姆级开卡教程

本文首发于只抄博客,欢迎点击原文链接了解更多内容。 前言 本篇教程为 WildCard 的介绍以及开卡教学,要了解不同平台(Grok、Talkatone 等)的订阅方式请移步《订阅教程》分类 当我们想要充值国外平台会员时,一般都需要使…

C++实现3D(EasyX)详细教程

一、关于3D 我们看见,这两个三角形是相似的,因此计算很简单 若相对物体的方向是斜的,计算三角函数即可 不会的看代码 二、EasyX简介 initgraph(长,宽) 打开绘图 或initgraph(长,宽…

Qt 进度条与多线程应用、基于 Qt 的文件复制工具开发

练习1:Qt 进度条与多线程应用 题目描述 开发一个基于 Qt 的应用程序,该应用程序包含一个水平进度条(QSlider),并且需要通过多线程来更新进度条的值。请根据以下要求完成代码: 界面设计: 使用 QS…

【算法day2】无重复字符的最长子串 两数之和

无重复字符的最长子串 给定一个字符串 s ,请你找出其中不含有重复字符的 最长 子串 的长度。 https://leetcode.cn/problems/longest-substring-without-repeating-characters/ class Solution { public:int lengthOfLongestSubstring(string s) {int sub_length …

XHR请求解密:抓取动态生成数据的方法

在如今动态页面大行其道的时代,传统的静态页面爬虫已无法满足数据采集需求。尤其是在目标网站通过XHR(XMLHttpRequest)动态加载数据的情况下,如何精准解密XHR请求、捕获动态生成的数据成为关键技术难题。本文将深入剖析XHR请求解密…