当前位置: 首页 > 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”表示“负”。 正数的原、反、…...

【Axure高保真原型】引导弹窗

今天和大家中分享引导弹窗的原型模板,载入页面后,会显示引导弹窗,适用于引导用户使用页面,点击完成后,会显示下一个引导弹窗,直至最后一个引导弹窗完成后进入首页。具体效果可以点击下方视频观看或打开下方…...

微软PowerBI考试 PL300-选择 Power BI 模型框架【附练习数据】

微软PowerBI考试 PL300-选择 Power BI 模型框架 20 多年来,Microsoft 持续对企业商业智能 (BI) 进行大量投资。 Azure Analysis Services (AAS) 和 SQL Server Analysis Services (SSAS) 基于无数企业使用的成熟的 BI 数据建模技术。 同样的技术也是 Power BI 数据…...

模型参数、模型存储精度、参数与显存

模型参数量衡量单位 M:百万(Million) B:十亿(Billion) 1 B 1000 M 1B 1000M 1B1000M 参数存储精度 模型参数是固定的,但是一个参数所表示多少字节不一定,需要看这个参数以什么…...

CentOS下的分布式内存计算Spark环境部署

一、Spark 核心架构与应用场景 1.1 分布式计算引擎的核心优势 Spark 是基于内存的分布式计算框架,相比 MapReduce 具有以下核心优势: 内存计算:数据可常驻内存,迭代计算性能提升 10-100 倍(文档段落:3-79…...

镜像里切换为普通用户

如果你登录远程虚拟机默认就是 root 用户,但你不希望用 root 权限运行 ns-3(这是对的,ns3 工具会拒绝 root),你可以按以下方法创建一个 非 root 用户账号 并切换到它运行 ns-3。 一次性解决方案:创建非 roo…...

Spring Cloud Gateway 中自定义验证码接口返回 404 的排查与解决

Spring Cloud Gateway 中自定义验证码接口返回 404 的排查与解决 问题背景 在一个基于 Spring Cloud Gateway WebFlux 构建的微服务项目中,新增了一个本地验证码接口 /code,使用函数式路由(RouterFunction)和 Hutool 的 Circle…...

九天毕昇深度学习平台 | 如何安装库?

pip install 库名 -i https://pypi.tuna.tsinghua.edu.cn/simple --user 举个例子: 报错 ModuleNotFoundError: No module named torch 那么我需要安装 torch pip install torch -i https://pypi.tuna.tsinghua.edu.cn/simple --user pip install 库名&#x…...

力扣热题100 k个一组反转链表题解

题目: 代码: func reverseKGroup(head *ListNode, k int) *ListNode {cur : headfor i : 0; i < k; i {if cur nil {return head}cur cur.Next}newHead : reverse(head, cur)head.Next reverseKGroup(cur, k)return newHead }func reverse(start, end *ListNode) *ListN…...

比较数据迁移后MySQL数据库和OceanBase数据仓库中的表

设计一个MySQL数据库和OceanBase数据仓库的表数据比较的详细程序流程,两张表是相同的结构,都有整型主键id字段,需要每次从数据库分批取得2000条数据,用于比较,比较操作的同时可以再取2000条数据,等上一次比较完成之后,开始比较,直到比较完所有的数据。比较操作需要比较…...

【Veristand】Veristand环境安装教程-Linux RT / Windows

首先声明&#xff0c;此教程是针对Simulink编译模型并导入Veristand中编写的&#xff0c;同时需要注意的是老用户编译可能用的是Veristand Model Framework&#xff0c;那个是历史版本&#xff0c;且NI不会再维护&#xff0c;新版本编译支持为VeriStand Model Generation Suppo…...