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

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.rhkb.cn/news/300421.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

作为一个前端,在入职新公司如何快速安装好开发环境

由于电脑运行内存才16G有点卡,今天公司给我们换了32G内存,是直接整个主机都换了,环境自然得重新安装,在装的过程中,自己会有些心得体会,就是想着一个新人如何快速安装环境。 个人说一下我的思路&#xff1a…

Node操作mysql

配置 安装mysql模块 npm i mysql建立连接 const mysql require(mysql);const db mysql.createPool({host: 127.0.0.1,user: root,password: admin123,database: my_db_01 });测试 // select 1没有任何实质性作用 只是检查mysql模块是否正常 db.query(select 1, (err, results…

mac如何检测移动硬盘 mac硬盘检测工具 Tuxera怎么用 Tuxera NTFS官网

在工作学习中,我们都绕不开用移动硬盘来拷贝存储一些文件。但是在使用过程中,我们经常遇到“mac检测不到移动硬盘”“移动硬盘不存在”等问题,今天本文就带大家了解下mac如何检测移动硬盘,mac硬盘检测工具。 一、mac如何检测移动…

43.1k star, 免费开源的 markdown 编辑器 MarkText

43.1k star, 免费开源的 markdown 编辑器 MarkText 分类 开源分享 项目名: MarkText -- 简单而优雅的开源 Markdown 编辑器 Github 开源地址: https://github.com/marktext/marktext 官网地址: MarkText 支持平台: Linux, macOS 以及 Win…

网页的皮肤——CSS

1. CSS 介绍 CSS(Cascading Style Sheets)是一种样式表语言,用于描述 HTML 或 XML(包括如 SVG、XHTML 等)文档的外观和格式。CSS 允许开发者将文档的内容与其表现分离,使得网页设计更加灵活和可维护。CSS …

Python作业

第一题:打印菱形(实心) 第二题:打印菱形(空芯) 第三题:打印菱形(间隔为2) 第四题:猜数字 第五题:最大公约数 第六题:判断素数 第七题&…

Redis的高可用和持久化

目录 一、Redis高可用 二、Redis持久化 2.1 持久化的功能 2.2 Redis提供两种方式进行持久化 三、RDB持久化 3.1 触发条件 3.1.1 手动触发 3.1.2 自动触发 3.1.3 其他自动触发机制 四、AOF持久化 4.1 开启AOF 4.2 执行流程 4.2.1 命令追加 (append) 4.2.2 文件写入…

深入理解数据结构第三弹——二叉树(3)——二叉树的基本结构与操作

二叉树(1):深入理解数据结构第一弹——二叉树(1)——堆-CSDN博客 二叉树(2):深入理解数据结构第二弹——二叉树(2)——堆排序及其时间复杂度-CSDN博客 前言…

如何通过ArkTS卡片的Canvas自定义绘制能力实现五子棋游戏卡片

介绍 本示例展示了如何通过ArkTS卡片的Canvas自定义绘制能力实现一个简单的五子棋游戏卡片。 使用Canvas绘制棋盘和黑白棋子的落子。通过卡片支持的点击事件进行交互,让用户在棋盘上进行黑白棋子的对局。通过TS的逻辑代码实现五子棋输赢判定、回退等逻辑计算&…

多线程学习-线程安全

目录 1.多线程可能会造成的安全问题 2. static共享变量 3.同步代码块 4.同步方法 5.使用Lock手动加锁和解锁 6.死锁 1.多线程可能会造成的安全问题 场景:三个窗口同时售卖100张电影票,使用线程模拟。 public class MyThread extends Thread{//tic…

时序分解 | Matlab实现GSWOA-VMD改进鲸鱼优化算法优化变分模态分解时间序列信号分解

时序分解 | Matlab实现GWO-CEEMDAN基于灰狼算法优化CEEMDAN时间序列信号分解 目录 时序分解 | Matlab实现GWO-CEEMDAN基于灰狼算法优化CEEMDAN时间序列信号分解效果一览基本介绍程序设计参考资料 效果一览 基本介绍 Matlab实现GSWOA-VMD改进鲸鱼优化算法优化变分模态分解时间序…

GitHub入门与实践

ISBN: 978-7-115-39409-5 作者:【日】大塚弘记 译者:支鹏浩、刘斌 页数:255页 阅读时间:2023-08-05 推荐指数:★★★★★ 好久之前读完的了,一直没有写笔记。 这本入门Git的书籍还是非常推荐的,…

前端实现token的无感刷新#记录

因为服务器的token一版不会设置太长,token过期后就需要重新登录,频繁的登录会造成体验不好的问题,因此,需要体验好的话,就需要定时去刷新token,并替换之前的token。以下是token失效的效果: 那么…

Vue3组件基础示例

组件是vue中最推崇的,也是最强大的功能之一,就是为了提高重用性,减少重复性的开发。 如何使用原生HTML方法实现组件化 在使用原生HTML开发时,我们也会遇到一些常见的功能、模块,那么如何在原生HTML中使用组件化呢&am…

动态规划——线性dp

图片来源&#xff1a;_snowstorm_ 路线问题的状态表示一般都可以用点的坐标来表示 状态表示数组维数的确定原则&#xff1a;在可以用该维数表示出答案的基础上维数尽可能最小 数字三角形 acwing 898 #include<iostream> #include<cstring> #include<algorith…

python学习笔记——控制流

目录 1. 控制流**** 1.1. if-elif-else语句**** 1.2. 循环结构**** 1.2.1. for循环**** 1.2.2. While循环**** 1.2.3. 嵌套循环**** 1.2.4. 循环的控制**** 1.2.4.1. Break**** 1.2.4.2. Continue**** 1.2.5. 遍历**** 1.2.5.1. dict**** 1.2.5.1.1. 遍历key&#x…

三分钟带你了解,可重构柔性装配生产线

产品个性化时代&#xff0c;产品小批量、多批次&#xff0c;行业常用高柔性的人-机混合装配线实现跨品类产品装配&#xff0c;但产品的装配质量一致性差、效率低成为行业痛点。富唯智能联合清华大学提出了可重构柔性装配方法和技术&#xff0c;实现跨品类产品的数控自动化装配。…

京东云轻量云主机8核16G配置租用价格1198元1年、4688元三年

京东云轻量云主机8核16G服务器租用优惠价格1198元1年、4688元三年&#xff0c;配置为8C16G-270G SSD系统盘-5M带宽-500G月流量&#xff0c;华北-北京地域。京东云8核16G服务器活动页面 yunfuwuqiba.com/go/jd 活动链接打开如下图&#xff1a; 京东云8核16G服务器优惠价格 京东云…

原型变量、原子操作、原子性、内存序

一、原子变量、原子操作 锁竞争&#xff1a;互斥锁、条件变量、原子变量、信号量、读写锁、自旋锁。在高性能基础组件优化的时候&#xff0c;为了进一步提高并发性能&#xff0c;可以使用原子变量。性能&#xff1a;原子变量 > 自旋锁 > 互斥锁。 操作临界资源的时间较长…

7 个 iMessage 恢复应用程序/软件可轻松恢复文本

由于误操作、iOS 升级中断、越狱失败、设备损坏等原因&#xff0c;您可能会丢失 iPhone/iPad 上的 iMessages。意外删除很大程度上增加了这种可能性。更糟糕的是&#xff0c;这种情况经常发生在 iDevice 缺乏备份的情况下。 &#xff08;iPhone消息消失还占用空间&#xff1f;&…