热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

a证扣分需要学习吗,驾驶证a本扣分学习

                                                                                           

                                                                                           

Hybrid A*

2021 年 8 月 25 日

算法简介

Hybrid A* 是在 A* 算法的基础上考虑移动机器人实际运动约束的算法,最早在 2010

年斯坦福大学提出,并在 DARPA 的城市挑战赛得以应用。传统的 A* 算法有以下缺点:

A* 算法适用于离散的情况,机器人的控制空间、轨迹空间都是连续的,所以生成的路径是不光滑的。A* 算法规划出的路径不满足机器人的非完整性约束,例如非全向移动机器人不能横向移动。

而 Hybrid A* 算法作为 A* 算法的一个变种,适用于车辆三维状态空间 (x, y, Θ),通过修改状态更新规则,可以在 A* 离散节点中捕获车辆连续状态,从而保证路径的运动可行性。

车辆运动学模型

以阿克曼小车运动模型为例,车辆模型简化为二维平面上的刚体结构,任意时刻车辆的状态 q= (x, y, Θ)。车辆坐标的原点位于后轴中心位置,坐标轴与车身平行。v 代表车辆的速度,Φ 表示车轮转角(向左为正,向右为负),L 表示前轮和后轮的距离,如果车轮转角保持不变,车辆就会在原地转圈,半径为 ρ, 如图片1所示:

 

 

图 1: 阿克曼小车模型

考虑车辆的前进和倒退,令 dir 代表小车前进方向,则速度表示为 s=dir*v, 即设置小车速度大小一定,而方向与小车朝向有关。将小车朝向角约束在 −π/4 到 π/4 之间,因此小车可以实现前后左右一定范围移动。阿克曼小车运动学模型可表达为公式1

节点扩展

在 A* 路径搜索中,将空间划分为小网格,使用网格中心作为 A* 路径规划的节点,并在节点中寻找一条避开障碍物的路径,求解路径时只保证了连通性,不保证车辆实际可行。Hybrid A* 分别考虑空间连通性和车辆的朝向转角,通过考虑车辆的运动学约束,Hybrid A* 搜索出的路径节点可以是二维网格中的任意点。节点的扩展过程中,首先父亲节点根据当前车辆状态以及地图障碍物信息,以给定的 steer_list 和 direction_list(转角序列和方向序列)在一定的 move_step 内,求解出一段无碰撞的路径,将此段路径的最后点作为下一个子节点的位置。因此子节点在地图栅格中的位置取决于在运动约束下一段路径最终点落在栅格中的位置。

图 2: A* 搜索路径 图 3: Hybrid A* 搜索路径

节点的总代价 f_cost=g_cost+H*h_cost,其中 g_cost 是由实际运动产生,其代价由四部分组成,朝向(1 和-1)、转向角大小、转向角变化、行驶方向变化。H 是启发函数代价的比例系数,用来调整启发函数代价的影响因子。h_cost 为启发函数代价。采用了两种启发函数,并取两者的最大值作为最终的启发函数代价 [1]。第一个启发函数为”non-holonomic- without-obstacles”,非全向无障碍启发函数,只考虑车辆的非完整性约束而不考虑障碍物, 一般采用当前节点状态 (xs, ys, Θs), 到目标状态 (xt, yt, Θt) 的最短 Reeds shepp 曲线的代价值。第二个启发函数是”holonomic-with-obstacles heuristic”,忽略汽车的非完整约束,使用障碍物地图计算到目标的最短距离,可以避免运动过程中陷入死胡同或者 U 型障碍物,一般采用 A* 搜索出的最短路径代价。

Reeds shepp 曲 线

由于 Hybrid A* 算法中对运动空间 (x, y, Θ) 和车辆的 steer_list、direction_list 都是进行了离散化处理。因此不可以精确到达连续变化的目标姿态。运动轨迹也会不平滑,因此使用 Reeds shepp 曲线。即从扩展的子节点中找到能从此节点到目标节点的无碰撞 Reeds shepp 曲线,并选择代价最小的曲线作为作后路径。如下图所示,其中黄绿色的是由扩展子节点产生的路径,紫色路径是由最终 Reeds shepp 产生的路径。

图 4: Reeds shepp 曲线扩展

算法流程

整个算法的流程如下:首先定义起始节点和终止节点 (每个节点包括机器人状态、总代价以及父节点),定义障碍物地图。建立 open_dic 和 close_dic 空字典,字典的键代表节点在障碍物地图中唯一的位置,键值为节点。将起始节点存入 open_dic 中。

进入循环,设置开始进行 Reeds shepp 曲线拓展的循环数 N_rs(即每循环 N_rs 次后进行一次查询当前节点状态到目标状态是否存在 Reeds shepp 曲线,将 N_rs 的大少设置为当前节点位置到目标位置欧式距离的四分之一)。从 open_dic 中选出 f_cost 最小的节点作为父节点,如果找到相应的 Redds shepp 曲线则不再扩展节点,并把当前节点作为最终节点,直接选取路径代价最小的 reeds_shepp 曲线,并将曲线的路经点加入到最终的路径序列中。否则继续扩展子节点,与 A 的扩展相邻是栅格不同,Hybrid A* 扩展子节点的过程是根据转角和航向序列产生一系列考虑障碍物和车体形状的无碰撞子节点,如果子节点在close_dic 中,则舍弃,如果不在 close_dic 中,而在 open_dic 中,若子节点的 g_cost 比在 open_dic 中相应节点的 g_cost 小,则更新为子节点。如果既不在 close_dic 中,也不在open_dic 中,则直接将子节点加入到 open_dic 中。

经过循环之后 close_dic 包括从初始节点到最终节点的所父节点,每个父节点都包含一段路径点,最后将所有路径拼接作为 Hybrid A* 规划出的路径。

结果及总结

让小车分别向四个停车位置进行泊车, 起始点标记为蓝色圆圈,目标点标记为黄色五角星。开始进行 Reeds shepp 曲线拓展的最后节点标记为绿色与圆点。在实际的移动机器运动规划过程中,Hybrid A* 规划出的全局路径往往可以作为前端,经过后端的局部轨迹优化处理后可以产生更加平滑的运动轨迹。

程序参考1

 

参考文献

[1] Dmitri Dolgov, 敏感的期待, Michael Montemerlo, and James Diebel. Practical search techniques in path planning for autonomous driving. AAAI Workshop - Technical

1 https://github.com/zhm-real/MotionPlanning


推荐阅读
  • 深度学习中的Vision Transformer (ViT)详解
    本文详细介绍了深度学习中的Vision Transformer (ViT)方法。首先介绍了相关工作和ViT的基本原理,包括图像块嵌入、可学习的嵌入、位置嵌入和Transformer编码器等。接着讨论了ViT的张量维度变化、归纳偏置与混合架构、微调及更高分辨率等方面。最后给出了实验结果和相关代码的链接。本文的研究表明,对于CV任务,直接应用纯Transformer架构于图像块序列是可行的,无需依赖于卷积网络。 ... [详细]
  • 云原生边缘计算之KubeEdge简介及功能特点
    本文介绍了云原生边缘计算中的KubeEdge系统,该系统是一个开源系统,用于将容器化应用程序编排功能扩展到Edge的主机。它基于Kubernetes构建,并为网络应用程序提供基础架构支持。同时,KubeEdge具有离线模式、基于Kubernetes的节点、群集、应用程序和设备管理、资源优化等特点。此外,KubeEdge还支持跨平台工作,在私有、公共和混合云中都可以运行。同时,KubeEdge还提供数据管理和数据分析管道引擎的支持。最后,本文还介绍了KubeEdge系统生成证书的方法。 ... [详细]
  • SpringBoot整合SpringSecurity+JWT实现单点登录
    SpringBoot整合SpringSecurity+JWT实现单点登录,Go语言社区,Golang程序员人脉社 ... [详细]
  • 微软头条实习生分享深度学习自学指南
    本文介绍了一位微软头条实习生自学深度学习的经验分享,包括学习资源推荐、重要基础知识的学习要点等。作者强调了学好Python和数学基础的重要性,并提供了一些建议。 ... [详细]
  • 阿里Treebased Deep Match(TDM) 学习笔记及技术发展回顾
    本文介绍了阿里Treebased Deep Match(TDM)的学习笔记,同时回顾了工业界技术发展的几代演进。从基于统计的启发式规则方法到基于内积模型的向量检索方法,再到引入复杂深度学习模型的下一代匹配技术。文章详细解释了基于统计的启发式规则方法和基于内积模型的向量检索方法的原理和应用,并介绍了TDM的背景和优势。最后,文章提到了向量距离和基于向量聚类的索引结构对于加速匹配效率的作用。本文对于理解TDM的学习过程和了解匹配技术的发展具有重要意义。 ... [详细]
  • 本文主要解析了Open judge C16H问题中涉及到的Magical Balls的快速幂和逆元算法,并给出了问题的解析和解决方法。详细介绍了问题的背景和规则,并给出了相应的算法解析和实现步骤。通过本文的解析,读者可以更好地理解和解决Open judge C16H问题中的Magical Balls部分。 ... [详细]
  • 知识图谱——机器大脑中的知识库
    本文介绍了知识图谱在机器大脑中的应用,以及搜索引擎在知识图谱方面的发展。以谷歌知识图谱为例,说明了知识图谱的智能化特点。通过搜索引擎用户可以获取更加智能化的答案,如搜索关键词"Marie Curie",会得到居里夫人的详细信息以及与之相关的历史人物。知识图谱的出现引起了搜索引擎行业的变革,不仅美国的微软必应,中国的百度、搜狗等搜索引擎公司也纷纷推出了自己的知识图谱。 ... [详细]
  • 推荐系统遇上深度学习(十七)详解推荐系统中的常用评测指标
    原创:石晓文小小挖掘机2018-06-18笔者是一个痴迷于挖掘数据中的价值的学习人,希望在平日的工作学习中,挖掘数据的价值, ... [详细]
  • XML介绍与使用的概述及标签规则
    本文介绍了XML的基本概念和用途,包括XML的可扩展性和标签的自定义特性。同时还详细解释了XML标签的规则,包括标签的尖括号和合法标识符的组成,标签必须成对出现的原则以及特殊标签的使用方法。通过本文的阅读,读者可以对XML的基本知识有一个全面的了解。 ... [详细]
  • Google Play推出全新的应用内评价API,帮助开发者获取更多优质用户反馈。用户每天在Google Play上发表数百万条评论,这有助于开发者了解用户喜好和改进需求。开发者可以选择在适当的时间请求用户撰写评论,以获得全面而有用的反馈。全新应用内评价功能让用户无需返回应用详情页面即可发表评论,提升用户体验。 ... [详细]
  • 本文介绍了Linux系统中正则表达式的基础知识,包括正则表达式的简介、字符分类、普通字符和元字符的区别,以及在学习过程中需要注意的事项。同时提醒读者要注意正则表达式与通配符的区别,并给出了使用正则表达式时的一些建议。本文适合初学者了解Linux系统中的正则表达式,并提供了学习的参考资料。 ... [详细]
  • 闭包一直是Java社区中争论不断的话题,很多语言都支持闭包这个语言特性,闭包定义了一个依赖于外部环境的自由变量的函数,这个函数能够访问外部环境的变量。本文以JavaScript的一个闭包为例,介绍了闭包的定义和特性。 ... [详细]
  • 本文介绍了一个适用于PHP应用快速接入TRX和TRC20数字资产的开发包,该开发包支持使用自有Tron区块链节点的应用场景,也支持基于Tron官方公共API服务的轻量级部署场景。提供的功能包括生成地址、验证地址、查询余额、交易转账、查询最新区块和查询交易信息等。详细信息可参考tron-php的Github地址:https://github.com/Fenguoz/tron-php。 ... [详细]
  • 本文介绍了如何在Azure应用服务实例上获取.NetCore 3.0+的支持。作者分享了自己在将代码升级为使用.NET Core 3.0时遇到的问题,并提供了解决方法。文章还介绍了在部署过程中使用Kudu构建的方法,并指出了可能出现的错误。此外,还介绍了开发者应用服务计划和免费产品应用服务计划在不同地区的运行情况。最后,文章指出了当前的.NET SDK不支持目标为.NET Core 3.0的问题,并提供了解决方案。 ... [详细]
  • node.jsurlsearchparamsAPI哎哎哎 ... [详细]
author-avatar
手机用户2502870367
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有