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

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.mzph.cn/news/790195.shtml

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

相关文章

SSL证书有哪些种类?有免费的吗?

SSL证书主要有以下几种类型: 1. 域名验证型SSL证书 (DV SSL): - 仅对申请者的域名所有权进行验证,无需人工验证申请单位的真实身份。 - 审核快速,通常适用于个人网站、小型组织或各类加密应用。 2. 组织验证型SSL证书 (OV…

C++的并发世界(五)——线程状态切换

0.线程状态 初始化:该线程正在被创建; 就绪:该线程在列表中就绪,等待CPU调度; 运行:该线程正在运行; 阻塞:该线程被阻塞挂机,Blocked状态包括:pend&#xff…

顶级Layer-3 通证正在飙升,布局龙头Degen Chain(含bitget教程)

近期以太坊生态内,Base 一枝独秀,其 TVL 突破 25 亿美元,创历史新高。并且生态内的社交文化和 DeFi 板块的龙头都很惹眼。 Farcaster 协议上的 meme 币 DEGEN 目前价格为 0.018 美元,7 日涨幅达 376%。 DEGEN 兴起于 Farcaster 的…

数据开发-面试真题。

1. 自我介绍 2.在培训班的学过的项目经历 3.之前的工作经历,以及薪资 4.开始讲之前的项目经历 5.技术面试官开始提问。 kafka中进行数据分层,怎么从kafka中实时查询到相关的数据,一条或几条 6.java中的集合,以及io流 7.给定…

知识产权与标准化

根据希赛相关视频课程汇总整理而成,是个人软考的复习笔记,仅供参考 知识产权概述 知识产权类型: ①著作权(版权、文学产权) ② 工业产权(产业产权) 知识产权的特点: 无形性、独占性…

PS从入门到精通视频各类教程整理全集,包含素材、作业等(7)复发

PS从入门到精通视频各类教程整理全集,包含素材、作业等 最新PS以及插件合集,可在我以往文章中找到 由于阿里云盘有分享次受限制和文件大小限制,今天先分享到这里,后续持续更新 PS敬伟01——90集等文件 https://www.alipan.com/s…

【学习笔记】java项目—苍穹外卖day07

文章目录 苍穹外卖-day07课程内容1. 缓存菜品1.1 问题说明1.2 实现思路1.3 代码开发1.4 功能测试1.5 代码提交 2. 缓存套餐2.1 Spring Cache2.1.1 介绍2.1.2 常用注解2.1.3 入门案例 2.2 实现思路2.3 代码开发2.4 功能测试2.5 代码提交 3. 添加购物车3.1 需求分析和设计3.1.1 产…

Leetcode刷题-数组(二分法、双指针法、窗口滑动)

数组 1、二分法 704. 二分查找 - 力扣&#xff08;LeetCode&#xff09; 需要注意区间的问题。首先在最外面的循环判断条件是left<right。那就说明我们区间规定的范围就是【left,right】 属于是左闭右闭&#xff01;&#xff01;&#xff01;&#xff01;&#xff01;&…

基于java实现的沙县小吃点餐系统

开发语言&#xff1a;Java 框架&#xff1a;ssm 技术&#xff1a;JSP JDK版本&#xff1a;JDK1.8 服务器&#xff1a;tomcat7 数据库&#xff1a;mysql 5.7&#xff08;一定要5.7版本&#xff09; 数据库工具&#xff1a;Navicat11 开发软件&#xff1a;eclipse/myeclip…

WebKit简介

1、简介&#xff08;WebKit&#xff09; WebKit 是一个开源的浏览器引擎&#xff0c;最初由苹果公司基于KHTML&#xff08;K Desktop Environment的HTML渲染引擎&#xff09;开发&#xff0c;并广泛应用于Safari浏览器&#xff0c;后来也被其他多款浏览器和应用采用。WebKit负…

Python程序设计 魔法函数

1.魔法方法 Python中有一些特殊方法&#xff0c;它们允许我们的类和Python更好地集成。在标准库参考&#xff08;Standard Library Reference&#xff09;中&#xff0c;它们被称为魔法方法(Magic Methods)&#xff0c;是与Python的其他特性无缝集成的基础。 例如&#xff0c…

Redis高可用与持久化

目录 一、Redis高可用 二、Redis持久化 1、持久化的功能&#xff1a; 2、Redis 提供两种方式进行持久化&#xff1a; 三、RDB持久化 1、触发条件 1.手动触发 2.自动触发 3.其他自动触发机制 2、执行流程 3、启动时加载 四、AOF持久化 1、开启AOF 2、执行流程 1.…

vue3+elementPlus:实现数字滚动效果(用于大屏可视化)

自行封装注册一个公共组件 案例一&#xff1a; //成功案例&#xff1a; //NumberScroll.vue /* 数字滚动特效组件 NumberScroll */<template><span class"number-scroll-grow"><spanref"numberScroll":data-time"time"class&qu…

构建知识图谱的基石:理解本体和数据模型

构建知识图谱的基石&#xff1a;理解本体和数据模型 一、本体的基本概念 1. 定义与重要性 本体&#xff08;Ontology&#xff09;在计算机科学和信息科学中&#xff0c;尤其是在知识图谱领域&#xff0c;扮演着重要的角色。它提供了一种形式化的描述知识领域的方法&#xff0…

【SpringCloud】Config配置中心

Spring Cloud Config是一个集中的外部配置管理服务器&#xff0c;它支持从各种来源读取配置数据&#xff0c;如Git仓库、本地文件系统、数据库等&#xff0c;并为微服务应用提供统一的配置管理。通过使用Spring Cloud Config&#xff0c;你可以将应用程序的配置信息集中管理&am…

金融案例:构建高效统一的需求登记与管理方案

在金融行业数字化转型背景下&#xff0c;银行等金融机构面临着业务模式创新与数据应用的深度融合。业务上所需要的不再是单纯的数据&#xff0c;而是数据背后映射的业务趋势洞察&#xff0c;只有和业务相结合转化为业务度量指标&#xff0c;经过数据分析处理呈现为报表进行展示…

【零基础C语言】编译和链接

1.翻译环境和运行环境 翻译环境&#xff1a;将源代码转化为可执行的机器指令 运行环境&#xff1a;用于执行机器指令 1.1 翻译环境 翻译环境由编译和链接两大过程构建&#xff0c;编译又可以分为三大过程&#xff1a; 【1】预处理(预编译) 【2】编译 【3】汇编 不同的.c文件经…

力扣(数组)找到所有数组中消失的数字

给你一个含 n 个整数的数组 nums &#xff0c;其中 nums[i] 在区间 [1, n] 内。请你找出所有在 [1, n] 范围内但没有出现在 nums 中的数字&#xff0c;并以数组的形式返回结果。 示例 1&#xff1a; 输入&#xff1a;nums [4,3,2,7,8,2,3,1] 输出&#xff1a;[5,6]示例 2&am…

03 cookie session

文章目录 Cookie01.javaCookie02.javaCookieTestServletSessionServlet.java Cookie01.java package com.aistart.cookie;import javax.servlet.ServletException; import javax.servlet.annotation.WebServlet; import javax.servlet.http.Cookie; import javax.servlet.http.…

力扣 392. 判断子序列

题目来源&#xff1a;https://leetcode.cn/problems/is-subsequence/description/ C题解1&#xff1a;在t中按顺序一个一个寻找s的元素。 class Solution { public:bool isSubsequence(string s, string t) {bool flg false;int m s.size(), n t.size();if(m 0) return tr…