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

无人机避障——路径规划篇(一) JPS跳点搜索算法A*算法对比

JSP 跳点搜索算法与改进 A*算法对比

一、算法概述:

跳点搜索(Jump Point Search,JPS)算法:一种用于路径规划的启发式搜索算法。它主要用于在网格地图(如游戏地图、机器人运动规划地图等)中快速找到从起点到终点的最短路径。该算法在改进 A*算法的基础上进行了优化,通过跳过一些不必要的节点来提高搜索效率。

在网格地图中,跳点是那些能够让搜索路径跳过多个中间节点的特殊节点。这些跳点通常位于障碍物的拐角处或者是能够直接朝着目标方向前进的节点。例如,当一个节点的邻居节点能够让路径更直接地指向目标,且中间没有障碍物时,这个邻居节点就可能是一个跳点。

JPS 算法相比改进 A*算法能够显著减少搜索的节点数量。改进 A*算法需要遍历起点到终点之间的大量中间节点,而 JPS 算法通过识别跳点,能够跳过那些在最优路径上不太可能出现的节点,从而加快搜索速度。在复杂的大型网格地图中,这种效率提升尤为明显。在找到最短路径方面,JPS 算法和改进 A*算法具有相同的性能。只要启发式函数是可接受的(即不会高估节点到终点的成本),JPS 算法找到的路径也是最短路径,和改进 A*算法找到的路径长度相同。

[注意] JSP 跳点搜索算法采用曼哈顿距离,如果测试采用切比雪夫距离,速度会比用曼哈顿慢一些,但是也比改进A*算法快一个数量级左右。改进 A*算法采用切比雪夫距离测试。

二、测试结果:

任务目标:从左上角(0,0)坐标到右下角坐标,障碍物随机分布,但要保证有路径可以到达目标点,对算法的时间和轨迹长度进行记录分析。

(a)左边 JSP 算法,右边改进 A*算法,地图 50*50,障碍物数量:200

1) 时间优势明显:

从测试结果可以看出,JPS 算法在时间性能上明显优于改进 A*算法。在相同的测试环境下 ,JPS 算 法 的 运 行 时 间 仅 为 0.024201393127441406 秒 , 而 改 进 A*算 法则 需 要0.14796710014343262 秒。这表明 JPS 算法能够更快地找到路径,提高了系统的响应速度。

2) 轨迹长度一致:

测 试 结 果 还 显 示 ,JPS 算 法 和 改 进 A*算 法 规 划 出 的 轨 迹 长 度 一 致 , 均 为70.46803743153541。这说明 JPS 算法在保证高效性的同时,并没有牺牲路径的质量。它能够找到与传统算法相同的最短路径,确保了路径的最优性。

(b)左边 JSP 算法,右边改进 A*算法,地图 50*50,障碍物数量:400

1) 时间优势明显:

从测试结果可以看出,JPS 算法在时间性能上明显优于改进 A*算法。在相同的测试环境下 ,JPS 算 法 的 运 行 时 间 仅 为 0.016303300857543945 秒 , 而 改 进 A*算 法则 需 要0.29836177825927734 秒。这表明 JPS 算法能够更快地找到路径。

2) 轨迹长度近似:

测试结果还显示,JPS 算法的轨迹长度为 73.39696961966995,改进 A*算法规划出的轨迹长度 72.22539674441612,基本一致。

(c) 左边 JSP 算法,右边改进 A*算法,地图 50*50,障碍物数量:600

1) 时间优势明显:

从测试结果可以看出,JPS 算法在时间性能上明显优于改进 A*算法。在相同的测试环境下 ,JPS 算 法 的 运 行 时 间 仅 为 0.015148162841796875 秒 , 而 改 进 A*算 法则 需 要0.6297142505645752 秒。这表明 JPS 算法能够更快地找到路径,速度快了将近 40 倍。

2) 轨迹长度近似:

测试结果还显示,JPS 算法的轨迹长度为 76.32590180780447,改进 A*算法规划出的轨迹长度 75.05382386916231,基本一致,相差一个栅格距离左右。

(d) 左边 JSP 算法,右边改进 A*算法,地图 50*50,障碍物数量:800

1) 时间优势明显:

从测试结果可以看出,JPS 算法在时间性能上明显优于改进 A*算法。在相同的测试环境下 ,JPS 算 法 的 运 行 时 间 仅 为 0.013298988342285156 秒 , 而 改 进 A*算 法则 需 要0.48139333724975586 秒。这表明 JPS 算法能够更快地找到路径,速度快了将近 40 倍。

2) 轨迹长度更优:

测试结果还显示,JPS 算法的轨迹长度为 74.56854249492375,改进 A*算法规划出的轨迹长度 75.15432893255065,JSP 轨迹长度更优,轨迹距离基本一致。

(e) 左边 JSP 算法,右边改进 A*算法,地图 50*50,障碍物数量:1000

1) 时间优势明显:

从测试结果可以看出,JPS 算法在时间性能上明显优于改进 A*算法。在相同的测试环境下 ,JPS 算 法 的 运 行 时 间 仅 为 0.024592161178588867 秒 , 而 改 进 A*算 法则 需 要2.0019431114196777 秒。这表明 JPS 算法能够更快地找到路径,速度快了将近 80 倍。

2) 轨迹长度更优:

测试结果还显示,JPS 算法的轨迹长度为 83.74011537017756,改进 A*算法规划出的轨迹长度 85.39696961966993,JSP 轨迹长度更优,更加明显。

(f) 左边 JSP 算法,右边改进 A*算法,地图 100*100,障碍物数量:1000

1) 时间优势明显:

从测试结果可以看出,JPS 算法在时间性能上明显优于改进 A*算法。在相同的测试环境下 ,JPS 算 法 的 运 行 时 间 仅 为 0.057212114334106445 秒 , 而 改 进 A*算 法则 需 要1.4029386043548584 秒。这表明 JPS 算法能够更快地找到路径,速度快了将近 30倍。

2) 轨迹长度较长:

测试结果还显示,JPS 算法的轨迹长度为 149.6223663640861,改进 A*算法规划出的轨迹长度 143.5218613006978,改进 A*算法轨迹长度更优,更加明显。

(g) 左边 JSP 算法,右边改进 A*算法,地图 100*100,障碍物数量:2000

1) 时间优势明显:

从测试结果可以看出,JPS 算法在时间性能上明显优于改进 A*算法。在相同的测试环境下 ,JPS 算 法 的 运 行 时 间 仅 为 0.04240727424621582 秒 , 而 改 进 A*算 法 则需 要5.168658018112183 秒。这表明 JPS 算法能够更快地找到路径,速度超过了 100 倍。

2) 轨迹长度较长:

测试结果还显示,JPS 算法的轨迹长度为 152.30865786510137,改进 A*算法规划出的轨迹长度 148.45079348883237,改进 A*算法轨迹长度更优,但是差距不大。

(h) 左边 JSP 算法,右边改进 A*算法,地图 100*100,障碍物数量:4000

1) 时间优势明显:

从测试结果可以看出,JPS 算法在时间性能上明显优于改进 A*算法。在相同的测试环境下 ,JPS 算 法 的 运 行 时 间 仅 为 0.03251481056213379 秒 , 而 改 进 A*算 法 则需 要8.00110912322998 秒。这表明 JPS 算法能够更快地找到路径,速度超过了 260 倍。

2) 轨迹长度接近:

测试结果还显示,JPS 算法的轨迹长度为 158.99494936611666,改进 A*算法规划出的轨迹长度 157.86500705120545,差距不大。

(i)左边 JSP 算法,右边改进 A*算法,地图 100*100,障碍物数量:5000

1) 时间优势明显:

从测试结果可以看出,JPS 算法在时间性能上明显优于改进 A*算法。在相同的测试环境下 ,JPS 算 法 的 运 行 时 间 仅 为 0.18164896965026855 秒 , 而 改 进 A*算 法 则需 要20.16622757911682 秒。这表明 JPS 算法能够更快地找到路径,速度超过了 110 倍。

2) 轨迹长度较长:

测试结果还显示,JPS 算法的轨迹长度为 196.45079348883257,改进 A*算法规划出的轨迹长度 182.6934341759518,改进 A*算法距离上具有优势。

三、结论:

        JPS 算法在路径规划中展现出明显优势。与改进 A*算法相比,JPS 算法运算时间极快,无论地图成倍扩大还是障碍物成数量级增加,其运算速度都保持较高水平,而改进 A*算法在地图和障碍物变复杂后,计算速度落后 JPS 算法一到两个数量级。从轨迹长度看,虽然任务复杂度提升后 JPS 轨迹长度整体略长于改进 A*算法,但差距不大。JPS 算法通过识别跳点,快速跳过不必要节点,减少搜索空间,提高搜索效率,同时保证找到的路径为最短路径,具有高效性、准确性和适应性。

相关文章:

无人机避障——路径规划篇(一) JPS跳点搜索算法A*算法对比

JSP 跳点搜索算法与改进 A*算法对比 一、算法概述: 跳点搜索(Jump Point Search,JPS)算法:一种用于路径规划的启发式搜索算法。它主要用于在网格地图(如游戏地图、机器人运动规划地图等)中快速找到从起点到终点的最短路径。该算法在改进 A*算法的基础上进行了优化,通过跳过一…...

OpenCV ORB角点检测匹配和偏移计算

OpenCV ORB角点检测匹配和偏移计算 1. 简介2. ORB角点检测匹配和偏移计算2.1. 创建平移图片2.2. ORB角点检测2.3. ORB角点匹配2.4. 计算变换矩阵 1. 简介 首先通过 cv2.ORB_create 创建ORB检测器 orb, 然后通过 orb.detectAndCompute 检测两张图片获得ORB角点&…...

图文详解ChatGPT-o1完成论文写作的全流程

学境思源,一键生成论文初稿: AcademicIdeas - 学境思源AI论文写作 本月中旬OpenAI发布了OpenAI o1系列新的AI模型。 据OpenAI介绍,这些模型旨在花更多时间思考后再做出反应,就像人一样。通过训练,它们学会改进思维过…...

在线体验Sketch中文版,免费下载即刻上手!

Sketch是一款轻量而高效的矢量设计工具,助力全球设计师创造了诸多惊艳作品。安装Sketch的优势主要体现在其矢量编辑、控件和样式功能上。而下载安装“Sketch中文版”即时设计同样出色,它作为一站式设计平台,功能更全面。即时设计拥有纯中文的…...

Redis——缓存

目录 前言 一、缓存基本概念 1.概念 2.二八定律 二、使用 Redis 作为缓存 三、缓存的更新策略 1.定期生成 2.实时生成 四、Redis 内存淘汰机制 1.通用淘汰策略 (1)FIFO (2)LRU (3)LFU &#…...

RHCSA笔记三

第二章 linux中执行命令 命令格式 命令分为两类 内置命令:由 shell 程序自带的命令 外部命令:有独立的可执行程序文件,文件名即命令名 格式 主命令 参数 操作对象 # 注意: 下面是对于命令的语法的一些符号的说明&#xff1…...

【python】sorted() list.sort()

文章目录 sorted()和list.sort()sorted 函数sorted()根据键对字典排序根据字典的键排序根据字典的值排序将排序结果转换回字典 list.sort() 方法总结 keylambda student: student[age] sorted()和list.sort() 在Python中,sorted 函数和 list.sort() 方法都可以用来…...

训练集alpaca、sharegpt格式

LLaMA-Factory微调支持的格式 支持 alpaca 格式和 sharegpt 格式的数据集。 Alpaca格式 格式: [{"instruction": "人类指令(必填)","input": "人类输入(选填)","output": "模型回答(必填)","syst…...

Hive的数据存储格式

目录 一、前言 二、存储格式 2.1、文本格式(TextFile) 2.1.1、定义与特点 2.1.2、存储与压缩 2. 1.3、使用场景 2.2、行列式文件(ORCFile) 2.2.1、ORC的结构 2.2.2、ORC的数据类型 2.2.3、ORC的压缩格式 2.2.3、ORC存储…...

Linux Rsyslog 配置

1、Linux Rsyslog客户端配置 1)安装rsyslog yum install rsyslog 2)启用TCP或UDP传输 vim /etc/rsyslog.conf# Provides UDP syslog reception #若启用UDP进行传输,则取消下面两行的注释 #$ModLoad imudp #$UDPServerRun 514# Provide…...

python实现放烟花效果庆祝元旦

马上就要2025年元旦啦,提前祝大家新年快乐 完整代码下载地址:https://download.csdn.net/download/ture_mydream/89926458...

模型训练识别手写数字(二)

模型训练识别手写数字(一)使用手写数字图像进行模型测试 一、生成手写数字图像 1. 导入所需库 import cv2 import numpy as np import oscv2用于计算机视觉操作。 numpy用于处理数组和图像数据。 os用于文件和目录操作。 2. 初始化画布 canvas np.z…...

深入Vue2

frontend Vue2 学习内容参考 /在线运行 Element 学习内容参考 /视频教学 vue2 1. vue 实例 当一个 Vue 实例被创建时,它将 data 对象中的所有的 property 加入到 Vue 的响应式系统中 但是当使用Object.freeze(),会阻止修改现有的 property&#x…...

opencv-rust 系列3: Create_mask

前言: 这里只是opencv-rust自带示例的中文注解. 略微增加了一些代码也是我在调试时用到的. 调试方法可参见前文. 一. 这个程序还是有点难度的, 关键点在于: 创建了遮罩. 直接调用一个函数, 还是很简单的.窗口事件处理. 注册窗口回调函数, 用以处理鼠标事件进程同步和互斥锁. 为…...

Go语言初识

一、Go语言概述 Go语言是为了取代C和java的地位,既要保留C的简洁,也追求java的规模化开发 并行及分布式的支持,使得开发多核及多机器集群程序如同单机一样简单 Go语言从语言级别支持协程(goroutine, 轻量级线程),Go语言…...

Android Activity SingleTop启动模式使用场景

通知栏 当用户点击通知栏中的通知时,可以使用单顶启动模式来打开对应的活动,并确保只有一个实例存在。 简单集成极光推送 创建应用 获取appkey参数 切换到极光工作台 极光sdk集成 Project 根目录的主 gradle 配置 Module 的 gradle 配置 Jpush依赖配置 配置推送必须…...

PHP 代码执行相关函数

函数 说明 示例代码 ${} 用于复杂的变量解析,通常在字符串内用来解析变量或表达式。可以配合 eval 或其他动态执行代码的功能,用于间接执行代码。 eval(${flag}); eval() 用于执行一个字符串作为 PHP 代码。可以执行任何有效的 PHP 代码片段。没有…...

五周年,继续破浪前行

五周年,TapData 再一次带着自己的“乘风破浪”大队,在一个阳光明媚的日子里,把生日过在了海上。 头顶日升日落,这条属于全体 Tap-pers 的航船,再次校准航向,在船长的带领下,驶向下一个晴好的明…...

【操作系统】Linux之进程管理一

第1关:获取进程常见属性 ret.pidgetpid(); ret.ppidgetppid(); 第2关:进程创建操作-fork pid_t pid fork(); if(pid-1) printf("创建进程失败!"); else if(pid0) printf("Children"); else printf("Parent"); …...

C语言_数据在内存中的存储

1. 整数在内存中的存储 计算机中的整数有三种2进制表示方法 :原码、反码、补码。 三种表示方式均有符号位和数值位两个部分,最高一位的是符号位,剩下的都是数值位。符号位用“0”表示“正”,用“1”表示“负”。 正数的原、反、…...

网络六边形受到攻击

大家读完觉得有帮助记得关注和点赞!!! 抽象 现代智能交通系统 (ITS) 的一个关键要求是能够以安全、可靠和匿名的方式从互联车辆和移动设备收集地理参考数据。Nexagon 协议建立在 IETF 定位器/ID 分离协议 (…...

关于iview组件中使用 table , 绑定序号分页后序号从1开始的解决方案

问题描述:iview使用table 中type: "index",分页之后 ,索引还是从1开始,试过绑定后台返回数据的id, 这种方法可行,就是后台返回数据的每个页面id都不完全是按照从1开始的升序,因此百度了下,找到了…...

反射获取方法和属性

Java反射获取方法 在Java中,反射(Reflection)是一种强大的机制,允许程序在运行时访问和操作类的内部属性和方法。通过反射,可以动态地创建对象、调用方法、改变属性值,这在很多Java框架中如Spring和Hiberna…...

uniapp中使用aixos 报错

问题: 在uniapp中使用aixos,运行后报如下错误: AxiosError: There is no suitable adapter to dispatch the request since : - adapter xhr is not supported by the environment - adapter http is not available in the build 解决方案&…...

Java线上CPU飙高问题排查全指南

一、引言 在Java应用的线上运行环境中,CPU飙高是一个常见且棘手的性能问题。当系统出现CPU飙高时,通常会导致应用响应缓慢,甚至服务不可用,严重影响用户体验和业务运行。因此,掌握一套科学有效的CPU飙高问题排查方法&…...

Reasoning over Uncertain Text by Generative Large Language Models

https://ojs.aaai.org/index.php/AAAI/article/view/34674/36829https://ojs.aaai.org/index.php/AAAI/article/view/34674/36829 1. 概述 文本中的不确定性在许多语境中传达,从日常对话到特定领域的文档(例如医学文档)(Heritage 2013;Landmark、Gulbrandsen 和 Svenevei…...

HDFS分布式存储 zookeeper

hadoop介绍 狭义上hadoop是指apache的一款开源软件 用java语言实现开源框架,允许使用简单的变成模型跨计算机对大型集群进行分布式处理(1.海量的数据存储 2.海量数据的计算)Hadoop核心组件 hdfs(分布式文件存储系统)&a…...

安宝特方案丨船舶智造的“AR+AI+作业标准化管理解决方案”(装配)

船舶制造装配管理现状:装配工作依赖人工经验,装配工人凭借长期实践积累的操作技巧完成零部件组装。企业通常制定了装配作业指导书,但在实际执行中,工人对指导书的理解和遵循程度参差不齐。 船舶装配过程中的挑战与需求 挑战 (1…...

AI病理诊断七剑下天山,医疗未来触手可及

一、病理诊断困局:刀尖上的医学艺术 1.1 金标准背后的隐痛 病理诊断被誉为"诊断的诊断",医生需通过显微镜观察组织切片,在细胞迷宫中捕捉癌变信号。某省病理质控报告显示,基层医院误诊率达12%-15%,专家会诊…...

Java求职者面试指南:Spring、Spring Boot、MyBatis框架与计算机基础问题解析

Java求职者面试指南:Spring、Spring Boot、MyBatis框架与计算机基础问题解析 一、第一轮提问(基础概念问题) 1. 请解释Spring框架的核心容器是什么?它在Spring中起到什么作用? Spring框架的核心容器是IoC容器&#…...