【路径规划】基于哈里斯鹰优化算法的栅格法路径规划 机器人路径规划【Matlab代码#20】

2023-11-05


【可更换其他算法,获取资源请见文章第6节:资源获取】


1. 原始HHO算法

详细介绍此处略,可参考HHO算法介绍

2. 机器人路径规划环境创建

对机器人工作空间的进行环境建模是机器人路径规划研究的重要前提。栅格法为环境建模提供了一种简洁有效的方法,是目前为止应用最广泛的机器人工作环境建模方法。
通过二维平面坐标对机器人的局部运动空间进行划分,如下面图所示。栅格编号用来表示机器人和障碍物的具体位置,其中非障碍物栅格称为自由栅格。机器人在当前栅格可以沿其邻域方向移动,以栅格45为例,机器人可以选择的自由栅格包括25、44、46、64、65。
在这里插入图片描述
栅格法地图一般通过如下所示的障碍物矩阵来描述。其中0表示此处没有障碍物,1表示此处有障碍物。
在这里插入图片描述

3. 路径规划模型建立

在基于HHO算法的路径规划中,设定哈里斯鹰种群每一次迭代更新的位置坐标,代表机器人的一条移动路线。通过HHO优化算法,从二维栅格地图中找寻从起始点到目标点符合约束条件的最优路径。约束条件设定如下:

1)地图边界和障碍物约束条件
机器人的移动路径必须限定在栅格地图边界内,并且在可移动区域内,机器人的移动路径禁止穿越障碍物节点。

2)路径连续条件
机器人在通行区域内的移动路径,需避免路径重叠和迂回。假设移动机器人在 t t t时刻的坐标为 ( x t , y t ) (x_{t},y_{t}) (xt,yt),则下一时刻机器人位置坐标 ( x t + 1 , y t + 1 ) (x_{t+1},y_{t+1}) (xt+1,yt+1)需要满足 x t + 1 > x t x_{t+1}>x_{t} xt+1>xt或者 y t + 1 > y t y_{t+1}>y_{t} yt+1>yt

3)路径最短条件
为实现移动机器人路径规划,机器人需在满足边界约束和路径连续条件的基础上,寻找从起始点到目标点的最短路径。将路径的欧氏距离作为算法
的适应度函数,适应度最小的路径即为最优路径。
将路径上每两个相邻点之间的欧式距离相加即可得到总路径长度。

4. 部分代码展示

%% 地图矩阵
G=[0 0 0 0 0 0 1 1 1 0 0 0 0 0 0 0 0 0 0 0; 
   0 0 0 0 0 0 1 1 1 0 0 0 0 0 0 0 0 0 0 0; 
   0 0 0 0 0 0 1 1 1 0 0 0 0 0 0 0 0 0 0 0; 
   0 0 0 0 0 0 1 1 1 0 0 0 0 0 0 0 0 0 0 0; 
   0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0; 
   0 1 1 1 0 0 1 1 1 0 0 0 0 0 0 0 0 0 0 0; 
   0 1 1 1 0 0 1 1 1 0 0 0 0 0 0 0 0 0 0 0;
   0 1 1 1 0 0 1 1 1 0 1 1 1 1 0 0 0 0 0 0; 
   0 1 1 1 0 0 0 0 0 0 1 1 1 1 0 0 0 0 0 0; 
   0 0 0 0 0 0 0 0 0 0 1 1 1 1 0 0 0 0 0 0; 
   0 0 0 0 0 0 0 1 1 0 1 1 1 1 0 0 0 0 0 0; 
   0 0 0 0 0 0 0 1 1 0 1 1 1 1 0 0 0 0 0 0; 
   0 0 0 0 0 0 0 0 0 0 0 0 1 1 0 1 1 1 1 0; 
   0 0 0 0 0 0 0 0 0 0 0 0 1 1 0 1 1 1 1 0; 
   1 1 1 1 0 0 0 0 0 0 0 0 1 1 0 1 1 1 1 0; 
   1 1 1 1 0 0 1 1 0 0 0 1 0 0 0 0 0 0 0 0; 
   0 0 0 0 0 0 1 1 0 1 1 1 0 0 0 0 0 1 1 0; 
   0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 1 0; 
   0 0 1 1 0 0 0 0 0 0 1 1 0 0 1 0 0 0 0 0; 
   0 0 0 0 0 0 0 0 0 0 1 1 0 0 0 0 0 0 0 0;];

% 交换G(1,1)和G(20,1),G(2,1)和G(19,1)
for i=1:20/2
    for j=1:20
        m=G(i,j);
        n=G(21-i,j);
        G(i,j)=n;
        G(21-i,j)=m;
    end
end
%% 
S = [1 1];     % 起点
E = [20 20];   % 终点
G0 = G;
G = G0(S(1):E(1),S(2):E(2)); 
[Xmax,dimensions] = size(G);        
dimensions = dimensions - 2;             

%% 参数设置
max_gen = 200;          % 最大迭代次数
num_polution = 50;      % 种群数量
X_min = 1;  
[global_best,final_goal] = HHO(num_polution,max_gen,dimensions,G,Xmax,X_min);

5. 仿真结果展示

在这里插入图片描述

在这里插入图片描述

6. 资源获取

可以获取完整代码资源。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

【路径规划】基于哈里斯鹰优化算法的栅格法路径规划 机器人路径规划【Matlab代码#20】 的相关文章

  • 是否有一个函数可以检查矩阵是否对角占优(行占优)

    矩阵是对角占优 http en wikipedia org wiki Diagonally dominant matrix 按行 如果对角线处的值在绝对意义上大于该行中所有其他绝对值的总和 对于列也是如此 只是相反 matlab中有没有函数
  • 整数的十进制表示形式中的分隔数字

    例如 我想将用户输入作为整数输入 45697 并将前两位数字存储在数组 向量或其他内容中 例如 4 5 6 9 7 这样我就可以使用一些函数调用来检查前两个值 4 5 并对它们进行计算 问题 我不知道如何存储恢复前两个值 有没有简单的函数调
  • 通过傅里叶空间填充进行插值

    我最近尝试在 matlab 上实现一个在傅立叶域中使用零填充的插值方法的简单示例 但我无法正常工作 我总是有一个小的频移 在傅里叶空间中几乎不可见 但它在时空上产生了巨大的误差 由于傅里叶空间中的零填充似乎是一种常见 且快速 的插值方法 因
  • 同时重新排序和旋转图像的高效方法

    为了快速加载 jpeg 我为turbojpeg 实现了一个 mex wrapper 以有效地将 大 jpeg 读入 MATLAB 对于 4000x3000px 的图像 实际解码只需要大约 120 毫秒 而不是 5 毫秒 然而 像素顺序是 R
  • python 正弦和余弦精度

    如何提高Python正弦和余弦精度 例如 我想使用以下代码 只需计算随机复向量 x 的 y cos acos x import numpy as np N 100000 x np zeros N 1j np zeros N for k in
  • 为什么matlab的mldivide比dgels好这么多?

    Solve Ax b 真正的双 A是超定的 Mx2 其中 M gt gt 2 b是MX1 我运行了大量的数据mldivide 并且结果非常好 我用 MKL 写了一个 mex 例程LAPACKE dgels但它远没有那么好 结果有大量噪音 并
  • 在 Matlab 中显示有理数

    我有两个整数 m n 它们一起形成 m n 形式的有理数 现在我只想以这种理性的形式在 Matlab 中显示它们 我可以通过这样做来做到这一点 char sym m n 所以 如果 例如m 1 n 2 Matlab将显示1 2 然而 如果m
  • Matlab Solve():未给出所有解决方案

    我试图找到两条曲线的交点 syms x y g x 20 exp x 30 3 5 1 sol x sol y solve x 22 3097 2 y 16 2497 2 25 y g x x y Real true 它只提供一种解决方案
  • 作为动画的八度情节点

    我有以下八度脚本 TOTAL POINTS 100 figure 1 for i 1 TOTAL POINTS randX rand 1 randY rand 1 scatter randX randY hold on endfor 当我运
  • 非模态 questdlg.m 提示

    我的代码绘制了一个图 然后提示用户是否想使用不同的参数绘制另一个图 问题是 当 questdlg m 打开时 用户无法查看绘图的详细信息 这是代码 while strcmp Cont Yes 1 Some code modifying da
  • 如何每次使用按钮将数据添加到 MATLAB 中的现有 XLSX 文件?

    我有一个函数可以生成一些变量 例如分数 对 错 未回答 使用按钮调用此功能 问题是如何每次将函数生成的这些值添加 附加到 XLSX 文件中 或者 如何创建 MAT 文件以便可以添加它 可能的解决方案是什么 附加到 xls 文件所涉及的挑战是
  • MATLAB 可执行文件太慢

    我使用以下命令将 MATLAB 程序转换为基于控制台的应用程序deploytool在 MATLAB 中 MATLAB m文件执行大约需要 2 秒 但在我将其转换为可执行文件并调用 exe 执行需要45秒 太长了 我想将 MATLAB 程序与
  • 平衡两轮机器人而不使其向前/向后漂移

    我正在尝试设计一个控制器来平衡 2 轮机器人 约 13 公斤 并使其能够抵抗外力 例如 如果有人踢它 它不应该掉落 也不应该无限期地向前 向后漂移 我对大多数控制技术 LQR 滑模控制 PID 等 都很有经验 但我在网上看到大多数人使用 L
  • Matlab 一个图上有多个图例 2014b

    我想在一个地块上有多个传说 该解决方案在 2014b 版本之前完美运行 我试图弄清楚如何使用手柄优雅地制作它 但到目前为止还没有成功 欢迎任何想法 2013b 的示例 x 1 50 y1 sin x 2 y2 cos x 2 f figur
  • 如何正确从表中删除 NaN 值

    在 Matlab 中阅读 Excel 电子表格后 不幸的是 我的结果表中包含了 NaN 例如这个 Excel 表格 将产生此表 其中出现额外的 NaN 列 我尝试使用以下代码片段删除 NaN measurementCells readtab
  • MATLAB 除法...29/128 应该返回 0 吗?

    我真的不认为这是一个精度问题 答案应该是0 226左右 这是确切的代码 val I i j bucketSize pos val bucketSize I只是我从中获取值的矩阵 以下是 MATLAB 的输出 val 29 bucketSiz
  • 在 MATLAB 中绘图后恢复轴

    从文本文件绘制多种方法的输出后 未显示轴的右侧和上侧 我需要拥有它们并将它们加粗 就像当前的轴一样 绘制的数据来自存储每种方法数据的文件 每个数据文件都是一个 256x2 文件 包含 0 1 之间的值 第一列是精度 第二列是召回率 figu
  • 通过 cuFFT 进行逆 FFT 缩放

    每当我使用 cuFFT 绘制程序获得的值并将结果与 Matlab 的结果进行比较时 我都会得到相同形状的图形 并且最大值和最小值位于相同的点 然而 cuFFT 得到的值比 Matlab 得到的值大得多 Matlab代码是 fs 1000 s
  • 如何在 MATLAB 中将矩阵元素除以列总和?

    有没有一种简单的方法可以将每个矩阵元素除以列和 例如 input 1 4 4 10 output 1 5 4 14 4 5 10 14 以下是执行此操作的不同方法的列表 使用bsxfun https www mathworks com he
  • matlab 中的动画绘图

    我正在尝试创建一个三角形的动画图 最终结果应该是十个三角形 后面跟着两个更大的三角形 后面跟着一条直线 使用matlab文档 https de mathworks com help matlab ref drawnow html 我最终得到

随机推荐

  • Win7下vs2013打开鼠标不能用,鼠标失灵

    以下是有效的解决方法 昨天重装了office2007出现这样的问题 如题 只要一进vs 鼠标变失灵 以下是网友提供的方法 Win7下vs2013打开鼠标不能用 解决办法 1 先打开vs2013 这时鼠标就用不了了 2 此时用 Ctrl Al
  • Android 退出整个应用程序解决方案

    1 通过广播 相信有过项目经验的同学都遇到过这样的问题 就是设计 退出 功能时可能会遇到有些界面不能关闭的问题 当然如果你的项目所有的界面都在打开另一个界面时被关闭就不存在这个问题了 但大多数情况下这样是很不合理的 因为每次要查看这个界面都
  • 利用matlab实现卷积实验报告,实验五 使用matlab实现卷积的运算

    实验五 使用matlab实现卷积的运算 一 实验目的 1 2 二 实验内容 学习MATLAB语言的编程方法及熟悉MATLAB指令 深刻理解卷积运算 利用离散卷积实现连续卷积运算 1 完成f1 t 与f2 t 两函数的卷积运算 其中 f1 t
  • 购买服务器及宝塔部署环境指南

    服务器购买宝塔部署环境指南 为什么程序员都需要一个自己的服务器 作为一个程序员 必须要发布自己的网站和项目 联系linux 自己的远程长裤 远程数据库 远程tomcat 搭建在服务器上 练习 Linux进行任意的环境部署操作 Window下
  • Spring Cloud的断路器模式是什么?如何使用断路器?Spring Cloud的配置管理是怎样实现的?

    1 Spring Cloud的断路器模式是什么 如何使用断路器 Spring Cloud的断路器模式是一种应对微服务架构中潜在故障的解决方案 在微服务架构中 不同的服务相互依赖 当某个服务出现故障或响应缓慢时 可能会导致级联故障 影响整个系
  • ELK技术栈实践(一)

    通常 日志被分散的储存不同的设备上 如果你管理数十上百台服务器 你还在使用依次登录每台机器的传统方法查阅日志 这样是不是感觉很繁琐和效率低下 当务之急我们使用集中化的日志管理 例如 开源的syslog 将所有服务器上的日志收集汇总 集中化管
  • C语言中低位存放,C语言 大端小端存储解析以及判断方法

    当我们在C语言中查看数据在内存中的存储时 我们经常会发现一个很奇怪的现象 什么现象呢 例如下面这段代码 int main int i 1 return 0 数据在内存中的存放方式似乎和我们想象的顺序不太一样 在我们的常规认知不一样 在我们的
  • [UPC] 2021秋组队17

    目录 A Quality Adjusted Life Year B Gwen s Gift C Forest for the Trees D H Index E Driving Lanes F Treasure Spotting G Nei
  • 测试第一年

    2018年 无心插柳柳成荫 终于进入了软件测试这一行 经过各种磕磕绊绊 进入了一家不足五十人的小私企 工资待遇和工作环境都不算好甚至可以说是略差 但在合肥这座对应届生极其不友好的城市 能找到一家公司做自己想做的事情已实属不易 作为一名初出茅
  • VS_VS2015或者VS2017出现跳过:1或者Skiped:1

    问题如下 解决办法 把绿色的部分全部勾上即可解决问题
  • 事务回滚,同时记录异常信息

    事务回滚 同时记录异常信息 需求 实现原理 实现 1 依赖HTTP重新发送请求 2 开启新事务 插入异常信息 需求 在发生异常时 回滚对数据库的操作 同时在数据库中插入一条异常信息 实现原理 开启新的事务 进行异常信息的数据库操作 实现 1
  • Linux中重要的目录有哪些?分别有何作用?

    当我们学习Linux知识时 除了要学习各种各样的命令之外 我们还需要了解Linux各个目录的功能 那么Linux中重要的目录有哪些 在Linux系统中 有两个非常重要的目录 bin与sbin 接下来我们详细的介绍一下 Linux重要的目录分
  • [C++]访问者模式

    在访问者模式 Visitor Pattern 中 我们使用了一个访问者类 它改变了元素类的执行算法 通过这种方式 元素的执行算法可以随着访问者改变而改变 这种类型的设计模式属于行为型模式 根据模式 元素对象已接受访问者对象 这样访问者对象就
  • 计算机视觉领域不同的方向:目标识别、目标检测、语义分割等

    计算机视觉任务 图像分类 image classification 图像分类 根据图像的主要内容进行分类 数据集 MNIST CIFAR ImageNet 目标检测 object detection 给定一幅图像 只需要找到一类目标所在的矩
  • 计算机网络知识点总结——第五章传输层

    目录 一 传输层概述 二 UDP协议 三 TCP协议 TCP报文段首部格式 重点 TCP连接管理 TCP可靠传输 TCP流量控制 重点 TCP拥塞控制 重点 拥塞控制四种算法 一 传输层概述 只有主机之间才会有的层次 传输层的功能 传输层提
  • “惊群”,看看nginx是怎么解决它的

    在说nginx前 先来看看什么是 惊群 简单说来 多线程 多进程 linux下线程进程也没多大区别 等待同一个socket事件 当这个事件发生时 这些线程 进程被同时唤醒 就是惊群 可以想见 效率很低下 许多进程被内核重新调度唤醒 同时去响
  • eclipse 导出maven 项目关联jar 文件

    一 默认导出maven 项目所在的文件夹target dependency 1 打开控制台指令窗口cmd 2 切换到maven 项目所在pom xml 文件所在目录 我的项目目录所在地址 D j2ee Morning 3 执行mvn 项目指
  • Qt多线程的创建详解

    文章目录 一 摘要 1 线程基础 2 为什么要创建多线程 3 创建多线程的方法 二 继承于QObject线程的创建 1 项目创建 2 代码编写与实现 三 线程间数据的传递 1 通过外部变量 2 通过信号与槽机制 四 总结 一 摘要 1 线程
  • Mysql 事务锁

    一 InnoDB锁的类型 S行级共享锁 S锁简单理解就是 运行 select from l where id 1 innoDB就会对id 1的这行数据进行加S锁 X行级排它锁 对数据进行修改时 就会对修改的行加X锁 排它的意思就是 在同一时
  • 【路径规划】基于哈里斯鹰优化算法的栅格法路径规划 机器人路径规划【Matlab代码#20】

    文章目录 可更换其他算法 获取资源 请见文章第6节 资源获取 1 原始HHO算法 2 机器人路径规划环境创建 3 路径规划模型建立 4 部分代码展示 5 仿真结果展示 6 资源获取 可更换其他算法 获取资源请见文章第6节 资源获取 1 原始