首页 > 编程语言 >APA(自动泊车辅助系统)_路径规划算法(A_算法)

APA(自动泊车辅助系统)_路径规划算法(A_算法)

时间:2024-09-12 16:21:18浏览次数:3  
标签:OpenList 距离 栅格 算法 搜索 泊车 APA 节点

APA(自动泊车辅助系统):路径规划算法(A*算法)

前言

A*算法在网上有许多讲解,各种各样的版本都有,包括“文档”或者“视频”的形式都能够找到,这些讲解中都是作者基于作者个人的理解进行的,其中对算法的理解难免有出入,这就导致了后来者往往学习后出现“稀里糊涂”的感觉,这其中就包含我自己,因此针对这种情况,本人基于对算法论文的学习,做了一个总结概括,并在这里做了一个记录,记录内容如下:

image.png

目录

0. A*算法简述

1. A* 算法原理分析

0 A*算法简述

A*算法最早于1964年在IEEE Transactions on Systems Science and Cybernetics中的论文《A Formal Basis for the Heuristic Determination of Minimum Cost Paths》中首次提出,论文如下链接Sci-Hub | A Formal Basis for the Heuristic Determination of Minimum Cost Paths. IEEE Transactions on Systems Science and Cybernetics, 4(2), 100-107 | 10.1109/tssc.1968.300136,其属于一种经典的启发式搜索方法,所谓启发式搜索,就在于当前搜索节点往下选择下一步节点时,可以通过一个启发函数来进行选择,选择代价最少的节点作为下一步搜索节点而跳转其上。

论文中A*算法步骤如下:

image

图 1 A*算法原始论文中的设计步骤

上图中, � 为目标集合(这个目标集合的概念下文会有阐述);

关于A*的阐述就不做过多介绍,这块网上都很多,主要对其原理在下文进行分析。

1 A* 算法原理分析

1.1 关键名词的理解

image.png

1.2 算法逻辑

(1)建图(即初始化全局地图,并划分栅格)

举一个自动泊车的例子:开始泊车之前,在一个非开放空间内,由“道路边界”“车位上边缘边界”“车位边界”组成了一个“可行驶区域”,如果采用A*算法,那第一步就是建立这么一个“地图”并对这个地图进行“栅格”划分(当然从泊车性能指标的角度考虑:这里的栅格大小也是有讲究的,这里先不做叙述,仅对算法先做总结),每个节点指的就是每个栅格的中心点,示例图如下:

image

图 2 A*算法初始化全局地图

(2)OpenList 与 CloseList 更新

基于图2,对OpenList 与 CloseList进行分析描述,去“车位上边缘边界”与“道路边界”之间的区域进行分析,如下图(实际泊车也很少会有障碍物出现在这里,这里仅用作分析算法原理使用):

image

图 3 A*路径规划搜寻原理分析

image.png

**注:(1)**这里为什么说最多八个栅格,一方面根据A*的启发函数的计算方式来说,节点往下走的方向即指这八个方向,如图4所示;另一方面来说,地图中的节点包含障碍物节点(节点分为可走和不可走,障碍物节点不可走),如果节点周围包含障碍物,则栅格数小于八个,如图5所示,此时的节点数为六个,准确说是可走节点(放入OpenList中的均指可走节点)。

image

图 4 节点周围栅格表示法

image

图 5 节点周围包含障碍物节点的示意图

基于图4,将此区域单独拿出来讨论,初始时刻OpenList内的栅格应包含下图6中所标记的节点,即OpenList ={N1 N2 N3 N4 N5 N6 N7 N8}

image

图 6 节点周围栅格示意

基于图5,将此区域单独拿出来讨论,初始时刻OpenList内的栅格应包含下图7中所标记的节点,即OpenList ={N1 N2 N3 N6 N7 N8}

image

图 7 有障碍物节点时最优节点附近栅格表示

综上,是对OpenList 的一个说明, CloseList则比较好理解,它就是存放最优节点的一个集合,当算法从其实节点搜寻到最后的目标点时, 将CloseList中的节点连接起来就是规划的路径。

(3)基于初始节点开始往下搜寻计算

此处总结计算之前先介绍一下几个求解点到点距离的计算方法,这也是A算法中启发函数所采用的计算方式之一( A* 采用的是曼哈顿距离(Manhattan distance)),分别如下:

(一)曼哈顿距离

标准的启发函数是曼哈顿距离(Manhattan distance),如下图所示

image

图 8 几种距离求解的几何描述

**曼哈顿距离为:**两点之间的横坐标之差的绝对值 + 两点之间纵坐标之差的绝对值

(二)欧几里得距离(欧氏距离)

这个就是我们物理中常说的两点之间的距离求解公式

(三)对角线距离

在后续混合A*中详细介绍;

搜索计算介绍:

下面开始对A*的搜索计算进行总结(这部分其实比较好理解),此处假设节点到节点横向或纵向移动一个节点的代价记为10**(或通俗理解:就是横向移动或纵向移动一个节点需要消耗多少能量),斜向移动记为14(** 102≈14 ,标记为10就是为了好计算或好表示,标记为任何都行),如下图所示:

image

图 9 移动一个节点的代价表示

image.png

image

图10 基于起始点的A*算法搜索原理分析

image.png

image.png

综上,选取评价函数值最小的点既是最优节点,但巧合的是此处有两个点的评价函数的值相等,一般遇到此种情况可以使用一些策略选择最优节点,常见的几种策略如下:

(1)首选最早生成的节点:如果两个节点具有相等的评价函数值,那么可以选择最早生成的节点作为最优节点。这意味着在搜索树中,先生成的节点将被优先探索。

(2)首选最靠近起始点的节点:在评价函数值相等的情况下,可以选择距离起始节点最近的节点作为最优节点。这样可以尽量减少路径的长度。

(3)使用先进先出 (FIFO) 队列:将相等的评价函数值节点按先进先出的顺序加入待搜索队列。这样可以保证搜索按照广度优先的方式进行,即先探索更接近起始节点的路径。

image.png

标签:OpenList,距离,栅格,算法,搜索,泊车,APA,节点
From: https://blog.csdn.net/adas_l5/article/details/142179630

相关文章

  • 互联网算法备案必要性+攻略全流程详解【附件+流程】
    一、算法备案的重要性算法备案是指相关企业或组织向有关部门提交其使用的算法的相关信息,以接受监管和审查。这一举措有助于确保算法的公正性、透明性和合法性,保护用户的权益,促进数字经济的健康发展。算法备案必要性强制性例如,在推荐系统中,如果算法存在偏见或歧视,可能会导致......
  • 多模态大语言模型综述(中)-算法实用指南
    IV.算法实用指南多模态的算法可分为两类:基础模型和大规模多模态预训练模型。基础模态是多模态的基本框架,许多新的大规模多模态预训练模型都是基于它进行改进的。下图是论文涉及的算法清单,含模型名字、年份、技术要点、功能及参考编号,以及代码开源情况。如果您也对A......
  • 【大数据】聚类算法
    目录一、聚类算法概述二、聚类算法优缺点和改进2.1 聚类算法优点2.2聚类算法缺点2.3 聚类算法改进三、聚类算法实现3.1 聚类算法C语言实现3.2 聚类算法JAVA实现3.3 聚类算法python实现四、聚类算法应用五、聚类算法发展趋势一、聚类算法概述      ......
  • 排序算法
    排序算法是计算机科学中的基本算法之一,旨在将一组数据按照特定顺序(通常是升序或降序)排列。以下是一些常见的排序算法及其特点:1.冒泡排序(BubbleSort)描述:通过重复遍历待排序的数组,比较相邻的元素并交换它们的位置,直到没有需要交换的元素为止。时间复杂度:最坏和平均情况下为......
  • 查找算法
    查找算法是用于在数据结构中查找特定元素的算法。根据数据的存储方式和组织形式,查找算法可以分为线性查找和二分查找等多种类型。以下是一些常见的查找算法及其特点:1.线性查找(LinearSearch)描述:从数据的第一个元素开始,依次与目标值比较,直到找到目标值或遍历完整个数据。时......
  • 算法与数据结构——二分查找插入点
    二分查找插入点二分查找不仅可用于搜索目标元素,还可以解决许多变种问题,比如搜索目标元素的插入位置。无重复元素情况Question给定一个长度为n的有序数组nums和一个元素target,数组不存在重复元素。现将target插入数组nums中,并保持其有序性。若数组中已存在元素target,则插入到......
  • 密码算法设计与分析 - 课程笔记
    基本概念安全威胁安全威胁被动攻击消息内容获取业务流分析主动攻击中断(可用性)篡改(完整性)伪造(真实性)人为威胁被动攻击被动攻击即窃听,是对系统的保密性进行攻击,如搭线窃听、非法拷贝等,以获取他人的信息。被动攻击分类:消息内容获取:直接对消息内容进行窃听,......
  • 七、常用算法
    文章目录一、二分查找(非递归)二、分治算法2.1分治算法介绍2.2分治算法应用案例三、动态规划算法3.1引出3.2基本介绍3.3应用实例四、KMP算法4.1引出4.2暴力匹配法4.3KMP算法五、贪心算法5.1基本介绍5.2应用实例一、二分查找(非递归)packagecom.gyh.a......
  • 苹果研究人员提出了一种新颖的AI算法来优化字节级表示以自动语音识别(ASR),并将其与UTF
    端到端(E2E)神经网络已成为多语言自动语音识别(ASR)的灵活且准确的模型。然而,随着支持的语言数量增加,尤其是像中文、日语、韩语(CJK)这样大字符集的语言,输出层的大小显著增长。这种扩展对计算资源、内存使用和资产大小产生了负面影响。在多语言系统中,这一挑战尤为严重,因为输出通常包......
  • 算法 - 课程笔记
    调度问题插入排序分治法分治法是将原问题划分为多个规模较小的子问题,这些子问题可以独立求解,将子问题的解进行综合得到原问题的解。算法设计一般使用递归算法,算法分析一般使用递归表达式。归并排序归并排序,就是分组再合并,将一个数组等分为左右两个子数组,然后再使用......