自动驾驶之心规划控制笔记

2024-04-04 04:44

本文主要是介绍自动驾驶之心规划控制笔记,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

Search-based Path Planning Methods

Path Finding Problem

一般来说指标有距离,耗费时间,能量,或者多目标。

左图是拓扑地图,蓝色的点就是顶点,绿色的线是连接关系。最后得到的是一个从哪里走的一个最优,并非精细解。

右图是栅格地图,这个搜索出来的是在相对分辨率比较高的情况下的最优路径。

路径搜索问题的输入输出是什么:

输入:给出一副由节点和边构成的图论上的图,起点和终点

输出:返回一条由节点和边组成的path

Graph Basic

无向图(可以从节点A-B,也可以B-A)、有向图(可以从A-B,但是不可以B-A)、带权重的图(有了每条边的代价,来定义哪条路最优)

Some ways to Construct Graph

基于实现的效果来定制图。

栅格地图:每个顶点就描述栅格中心世界坐标系下的坐标,有天然的连接关系,与周围八个节点天生连接。

概率路图:通过采样得到的,采样顶点,通过规则,选择边。

state graph sampled from control space :运动基元构成的,给定转角和速度,通过积分的方式得到一小段轨迹。

state graph sampled from state space:给定起点终止顶点,根据逆动力学来构造运动基元。

Graph Traversal Algorithm

BFS

队列,先进先出,层序遍历。

算法输入是:一幅图,起始节点、终止节点。

输出是:从终点回溯到起点的最短路径。

步骤:先定义队列Q,然后把起始节点加入到队列中,然后把起始节点标记成已访问。

主循环:终止条件:队列Q没有节点,也就是所有节点都访问过了,另外一个条件式访问的节点是终点。

弹出队列的第一个节点,依次访问节点周围的邻居节点,如果节点没有访问过,就把节点加入到队尾中,并且把父节点标记成当前节点,并且把这个节点标记成已访问的状态。不断循环,就可以遍历到所有节点,如果存在可行路径,一定能找到。

BFS Search Process

Summary

1、会相同的探索所有的方向

2、如果所有边的权重为1,那么BFS搜索出来的路径就是cost最优的路径。

Dijkstra

维护了一个新的变量g(n),g(n)是从起始节点到当前节点n累计的代价,访问的是在openset中累计代价最小的那个节点去访问,采用贪心的思想。

Priority queue

优先级队列,为容器赋予优先级。

Algorithm Dijkstra

输入:有个图,有个起点的节点和终点节点

输出:一条从终点节点向起点节点回溯得到的最短路径

Dijkstra Search Process

Summary

优点:

1、可以获得到起点到任何节点的最短路径

2、满足最优性

缺点:

1、无启发函数

A* Algorithm

Core ideas

Dijkstra在搜索的过程中是不知道终点信息的,搜索效率不高。A*算法设计一个到目标点的启发式函数,此时用f来描述每个节点的cost(f = g + h)。

这里可以简单的画个图,如图所示,Dijkstra会浪费一部分计算资源去扩展与终点较远的节点,对于A*算法会更有目的性一些。

A* Search Process

Heuristic Function Design

启发式函数的设计和具体任务有关系,如果说搜索问题的最优指标和距离有关系的话,那么可以用下面这几种距离来定义启发式函数。

Euclidian distance其实对应的是一个二范数,在几何上就是直线距离。

Manhattan distance在数学上就是一范数。

Great circle distance描述的是球面上两点的最短路径,对应于是弧长的概念。

Optimality

如何设计启发式函数能保证A*算法的最优性:heuristic function不能高于costs。也就是估计值需要小于真实值。如果满足这一点,那么A*算法一定能找到最优解的,且比Dijkstra快。

What’s Wrong with Overestimated Heuristics?

对于上图而言,根据A*的逻辑,选择ACD这个路径,但是真实情况是ABD的代价最小,出现这样的计算错误是由于B的h值大于真实的cost。

Heuristic Function Design in Gridmap

对于八连通的形式,用Manhattan distance会高估cost,可能导致找不到最优解。欧式距离可以使用。

Efficiency and Accuracy

Summary

Dynamic Programming

What is Dynamic Programming

对于一个动态规划的问题,具有

1、有一个最优的子结构

2、对于所有的子问题,有很多是重复的。(这里相当于,如果一个子问题之前计算过了,那么就将结果保存起来,后续可以通过查表的形式,不用重复计算)

Tiny Example of Dynamic Programming

Dynamic Programming in Path Search

Sampling-based Planning Methods

General Recipe

Probabilistic Roadmap (PRM)

PRM

1、撒点来学习出图的结构,得到一个graph

2、用图搜索来搜索出最优的路径

配置空间是指,在这样空间中规划的其实是一个质点,机器人的几何信息都被近似到forbidden space里面了。

对于图中的freespace来说,只要质点是在图中,那么可以忽略机器人几何形状的影响。

随机采样:依据某种分布,在一定范围内随

这篇关于自动驾驶之心规划控制笔记的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



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

相关文章

浅析如何使用Swagger生成带权限控制的API文档

《浅析如何使用Swagger生成带权限控制的API文档》当涉及到权限控制时,如何生成既安全又详细的API文档就成了一个关键问题,所以这篇文章小编就来和大家好好聊聊如何用Swagger来生成带有... 目录准备工作配置 Swagger权限控制给 API 加上权限注解查看文档注意事项在咱们的开发工作里,API

Go Mongox轻松实现MongoDB的时间字段自动填充

《GoMongox轻松实现MongoDB的时间字段自动填充》这篇文章主要为大家详细介绍了Go语言如何使用mongox库,在插入和更新数据时自动填充时间字段,从而提升开发效率并减少重复代码,需要的可以... 目录前言时间字段填充规则Mongox 的安装使用 Mongox 进行插入操作使用 Mongox 进行更

C语言中自动与强制转换全解析

《C语言中自动与强制转换全解析》在编写C程序时,类型转换是确保数据正确性和一致性的关键环节,无论是隐式转换还是显式转换,都各有特点和应用场景,本文将详细探讨C语言中的类型转换机制,帮助您更好地理解并在... 目录类型转换的重要性自动类型转换(隐式转换)强制类型转换(显式转换)常见错误与注意事项总结与建议类型

Spring IOC控制反转的实现解析

《SpringIOC控制反转的实现解析》:本文主要介绍SpringIOC控制反转的实现,IOC是Spring的核心思想之一,它通过将对象的创建、依赖注入和生命周期管理交给容器来实现解耦,使开发者... 目录1. IOC的基本概念1.1 什么是IOC1.2 IOC与DI的关系2. IOC的设计目标3. IOC

IDEA如何让控制台自动换行

《IDEA如何让控制台自动换行》本文介绍了如何在IDEA中设置控制台自动换行,具体步骤为:File-Settings-Editor-General-Console,然后勾选Usesoftwrapsin... 目录IDEA如何让控制台自http://www.chinasem.cn动换行操作流http://www

vscode保存代码时自动eslint格式化图文教程

《vscode保存代码时自动eslint格式化图文教程》:本文主要介绍vscode保存代码时自动eslint格式化的相关资料,包括打开设置文件并复制特定内容,文中通过代码介绍的非常详细,需要的朋友... 目录1、点击设置2、选择远程--->点击右上角打开设置3、会弹出settings.json文件,将以下内

Python脚本实现自动删除C盘临时文件夹

《Python脚本实现自动删除C盘临时文件夹》在日常使用电脑的过程中,临时文件夹往往会积累大量的无用数据,占用宝贵的磁盘空间,下面我们就来看看Python如何通过脚本实现自动删除C盘临时文件夹吧... 目录一、准备工作二、python脚本编写三、脚本解析四、运行脚本五、案例演示六、注意事项七、总结在日常使用

SpringBoot项目启动后自动加载系统配置的多种实现方式

《SpringBoot项目启动后自动加载系统配置的多种实现方式》:本文主要介绍SpringBoot项目启动后自动加载系统配置的多种实现方式,并通过代码示例讲解的非常详细,对大家的学习或工作有一定的... 目录1. 使用 CommandLineRunner实现方式:2. 使用 ApplicationRunne

Springboot的ThreadPoolTaskScheduler线程池轻松搞定15分钟不操作自动取消订单

《Springboot的ThreadPoolTaskScheduler线程池轻松搞定15分钟不操作自动取消订单》:本文主要介绍Springboot的ThreadPoolTaskScheduler线... 目录ThreadPoolTaskScheduler线程池实现15分钟不操作自动取消订单概要1,创建订单后

python实现自动登录12306自动抢票功能

《python实现自动登录12306自动抢票功能》随着互联网技术的发展,越来越多的人选择通过网络平台购票,特别是在中国,12306作为官方火车票预订平台,承担了巨大的访问量,对于热门线路或者节假日出行... 目录一、遇到的问题?二、改进三、进阶–展望总结一、遇到的问题?1.url-正确的表头:就是首先ur