自动驾驶(六十二)---------导航路径规划

2023-11-08 11:20

本文主要是介绍自动驾驶(六十二)---------导航路径规划,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

    实际上关于路径规划,我在轨迹规划中有介绍,主要是A*算法,但是目前有强需求,所以只能在系统总结一下了,可以算是水一篇文章,抓紧时间吧,有效的时间不多了!

      导航路径规划需要掌握的方法我总结有四个:RRT、PRM、A*、hybrid A*。A*我之前有介绍:再论轨迹规划,这里就不做赘述。

1. RRT

       RRT(快速探索随机树),首先在环境中,我们有一个起始点,定义为Xinit, 然后我们在环境中随机撒一个点,得到点x_rand,如果x_rand不在障碍物区域,则连接起x_init和x_rand, 我们得到一条连线L,如果L整个不在障碍物里面,则沿着L,从x_init向x_rand的方向移动一定的距离,得到一个新的点,x_new,则x_init,x_new和他们之间的线段构成了一颗最简单的树。

       树的扩展: 在开始的基础上,继续重复,在环境中撒点,得到无障碍物区域的点x_rand,然后在已经存在的树上找一个离x_rand最近的点x_near,连接两个点,如果这条线没有障碍物,则沿着这条线,从x_near到x_rand移动一定的距离,得到新的点,x_new, 该点被添加到已经存在的树上

       规划: 重复上述过程,直到目标点(或其附近的点)被添加到树上,这时我们就可以在树上找到一条从起点到目标点的路径

                                               

2. PRM

      RRT当环境中的障碍物较为复杂时计算量较大,有没有什么办法优化呢?PRM(Probabilistic Roadmaps)是一种基于图搜索的方法,一共分为两个步骤:学习阶段、查询阶段。它将连续空间转换成离散空间,再利用A*等搜索算法在路线图上寻找路径,以提高搜索效率。

      学习阶段:在给定图的自由空间里随机撒点,构建一个路径网络图。  必须是自由空间里的随机点,每个点都要确保机器人与障碍物无碰撞。

      查询阶段:根据设定的起点s和终点g,选择合适的路径,首先将s和g点与路径网络中的两个点x,y分别连接,寻找无向路径网络图中x与y连接的路径,这样就可以将起点和终点连接起来,构成全局路径。得到全局路径后,可以使用平滑的方法寻找捷径,优化路径。

                                              

3. Hybrid A*

       A*算法主要是用在导航中,在车辆轨迹规划中并不好用,这是因为生成的轨迹是折线,这不满足车辆运动学特性,但是A*算法也同样是从一个点到另一个点的一条最优路径,有没有办法转化成车辆可以行使的轨迹线呢?

      2010年,斯坦福首次提出一种满足车辆运动学的算法(Hybrid A*),并在(DARPA)的城市挑战赛中得以运用。首先我们采用A*生成一天折线轨迹,节点之间不采用直线相连,而是Reeds-Shepp曲线相连,当然每个节点与节点相连的曲线,要考虑与之相连的节点状态。这样生成的轨迹就是Hybrid A*。那么什么是Reeds-Shepp呢?请看下节:

4. Reeds-Shepp

      APA自动泊车可以有各种轨迹实现,如何用最短路径来实现自动泊车呢?首先假设车辆能以固定的半径转向,且车辆能够前进和后退,那么Reeds-Shepp曲线就是车辆在上述条件下从起点到终点的最短路径。在轨迹规划中不仅要求车辆能够到达终点,而且需要车辆的角度也有要求,比如在垂直泊车的过程中,开始车辆平行于道路,终点要求车辆垂直于道路等等,总之车辆的终点位置和终点角度都提出了要求。

      首先我们回到车辆运动学:

                                其中:

       这种固定的运动方式在低速情况下轨迹可以近似一个圆,方向盘转角转到最大,其转向半径最小,假设最小转向半径为rmin。为了方便起见Reeds-Shepp中最小转向半径强制设置为1,如果车辆的实际最小转向半径不是1,可也通过适当放缩终点坐标来计算该曲线。

      下面曲线就是一条Reeds-Shepp曲线,R表示右打方向,+表示前进,图中从到 ,首先右打方向前进,再左打方向后退,最后右打方向前进到达终点。

                          

      下表是Reeds-Shepp曲线的基本操作方式,一共有48种操作模式,归为9种Base word,但是在编程求解我们不需要每一种都分开求解,其中他们之间的对称性可以帮助我们减少工作量。例如求解到终点  的  后,我们可以用同样的方法来求解 但是需要将终点换为  ,这种处理方法在文中叫timeflip,还有其他的f对称,这里不做介绍可以参看原文。

                      

      通过这几种组合可以得到最短路径。这里举个例子,从不同位置到达同一目标的Reeds-sheep:

                  

这篇关于自动驾驶(六十二)---------导航路径规划的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/369514

相关文章

Python使用Tenacity一行代码实现自动重试详解

《Python使用Tenacity一行代码实现自动重试详解》tenacity是一个专为Python设计的通用重试库,它的核心理念就是用简单、清晰的方式,为任何可能失败的操作添加重试能力,下面我们就来看... 目录一切始于一个简单的 API 调用Tenacity 入门:一行代码实现优雅重试精细控制:让重试按我

SQL Server跟踪自动统计信息更新实战指南

《SQLServer跟踪自动统计信息更新实战指南》本文详解SQLServer自动统计信息更新的跟踪方法,推荐使用扩展事件实时捕获更新操作及详细信息,同时结合系统视图快速检查统计信息状态,重点强调修... 目录SQL Server 如何跟踪自动统计信息更新:深入解析与实战指南 核心跟踪方法1️⃣ 利用系统目录

python设置环境变量路径实现过程

《python设置环境变量路径实现过程》本文介绍设置Python路径的多种方法:临时设置(Windows用`set`,Linux/macOS用`export`)、永久设置(系统属性或shell配置文件... 目录设置python路径的方法临时设置环境变量(适用于当前会话)永久设置环境变量(Windows系统

Spring Security 单点登录与自动登录机制的实现原理

《SpringSecurity单点登录与自动登录机制的实现原理》本文探讨SpringSecurity实现单点登录(SSO)与自动登录机制,涵盖JWT跨系统认证、RememberMe持久化Token... 目录一、核心概念解析1.1 单点登录(SSO)1.2 自动登录(Remember Me)二、代码分析三、

MyBatis-Plus 自动赋值实体字段最佳实践指南

《MyBatis-Plus自动赋值实体字段最佳实践指南》MyBatis-Plus通过@TableField注解与填充策略,实现时间戳、用户信息、逻辑删除等字段的自动填充,减少手动赋值,提升开发效率与... 目录1. MyBATis-Plus 自动赋值概述1.1 适用场景1.2 自动填充的原理1.3 填充策略

Spring Boot中的路径变量示例详解

《SpringBoot中的路径变量示例详解》SpringBoot中PathVariable通过@PathVariable注解实现URL参数与方法参数绑定,支持多参数接收、类型转换、可选参数、默认值及... 目录一. 基本用法与参数映射1.路径定义2.参数绑定&nhttp://www.chinasem.cnbs

SpringBoot+Docker+Graylog 如何让错误自动报警

《SpringBoot+Docker+Graylog如何让错误自动报警》SpringBoot默认使用SLF4J与Logback,支持多日志级别和配置方式,可输出到控制台、文件及远程服务器,集成ELK... 目录01 Spring Boot 默认日志框架解析02 Spring Boot 日志级别详解03 Sp

浏览器插件cursor实现自动注册、续杯的详细过程

《浏览器插件cursor实现自动注册、续杯的详细过程》Cursor简易注册助手脚本通过自动化邮箱填写和验证码获取流程,大大简化了Cursor的注册过程,它不仅提高了注册效率,还通过友好的用户界面和详细... 目录前言功能概述使用方法安装脚本使用流程邮箱输入页面验证码页面实战演示技术实现核心功能实现1. 随机

HTML5实现的移动端购物车自动结算功能示例代码

《HTML5实现的移动端购物车自动结算功能示例代码》本文介绍HTML5实现移动端购物车自动结算,通过WebStorage、事件监听、DOM操作等技术,确保实时更新与数据同步,优化性能及无障碍性,提升用... 目录1. 移动端购物车自动结算概述2. 数据存储与状态保存机制2.1 浏览器端的数据存储方式2.1.

一文详解MySQL如何设置自动备份任务

《一文详解MySQL如何设置自动备份任务》设置自动备份任务可以确保你的数据库定期备份,防止数据丢失,下面我们就来详细介绍一下如何使用Bash脚本和Cron任务在Linux系统上设置MySQL数据库的自... 目录1. 编写备份脚本1.1 创建并编辑备份脚本1.2 给予脚本执行权限2. 设置 Cron 任务2