自动驾驶路径决策算法——动态规划

文章内容来自b站up主忠厚老实的老王,视频链接如下:

自动驾驶决策规划算法第二章第二节(中) 参考线算法_哔哩哔哩_bilibili

其中host是自车位置,以host在参考线的投影为坐标原点,建立frenet坐标,此时host的坐标是(0,L0),将障碍物的也投影到该坐标系下。

规划的第一步就是确定规划的起点:

蓝色的线是第一次规划的结果,按照当前的规划来说100ms以后应该是绿点位置,但是由于控制本身不完美,100ms后车辆实际位置是红色点,此时同时开始第二次规划,按照规划100ms后应该是紫点位置,但是由于控制不完美,车辆实际位置是橙点。这样在控制看了规划的轨迹是割裂的。

正确的做法是比较规划100ms之后比较车辆实际位置和规划它应该达到的位置,看两者之间是否相差过大,具体如下:

如果相差太大就以当前车辆的实际位置(在French坐标系上的坐标位置是(0,L0))作为规划的起点规划下一个周期的轨迹。

 相差不大除了上面的那种方法,还有另一种方法就是直接使用上一个周期规划100ms车辆应该到达的位置(也就是绿点)投影到referenceline上进行下一个周期的规划。下面使用第一种方法进行规划:

 如上,第一次规划的轨迹是蓝色,100ms后规划位置是绿色,车辆实际位置是红色,有一个差距,此时将车辆实际位置(红点)投影到上一次规划的轨迹(蓝线)上,得到紫点,再将紫点投影到referenceline上进行下一阶段的规划也就是紫线。

如上,使用上面的方法从控制的角度来说得到的规划的轨迹是连续的,并每次规划都从定位开始规划要好很多。

静态障碍物避障

具体如下:

在障碍物附近离散化的撒点,再计算cost function,计算出最优路径;

在离散空间上使用动态规划得到粗解,开辟凸空间;在此凸空间上使用二次规划的到最优解。

规划起点的约束和第一层离散点的约束,其中第一层离散点约束中的第一阶和第二节导数都为0,原因是动态规划得到的解是粗解,目的是开辟凸空间,最后的最优路劲是二次规划得到的。同理第一层到第二层的约束也是这样,一阶和二阶导数值都为0:

 这样通过五次多项式来计算出一条条路径出来,接下来就是设计cost function来评价路径的优劣:

这个cost function的解释如下:

设计好cost function后就可以使用cost function来计算出每条路径的代价,问题就变成怎么找图的最短路径问题,比较常用的方法有:Dijkstra算法、Bellman-Ford算法、Floyd-Warshall算法以及A*算法。这里使用比较简单的方法介绍图的最短路径问题:

以此类推,从起到到第n层的最小cost问题可以简化成从起点到n-1层最小cost问题,再往前推就可以把复杂的问题简单化。这样就可以写出状态转移方程(递推方程):

控制接口与轨迹拼接

现实中由于规划是100ms更新一次,控制是10ms更新一次,在100ms和10ms之间意味控制九个周期跟踪的都是同一个点,控制效果不好。解决办法如下:

规划会规划出来一系列的点,但是原来的做法是找到100ms时对应的点将其发给控制接口,但是这种方法在控制与规划周期同步时没有问题,当控制与规划周期不同步时就会出现问题,所以控制的接口得改变,在前期规划时其实已经规划出10ms、20ms以及30ms等一系列到100ms的点,但是直将100ms时对应的规划点发给控制接口就会使得控制效果变差,改造方法如下:

原理基本如上图,细节很多,如下:

问题1:轨迹的时间是绝对时间

拼接例子如下:

去查上一个周期100ms也就是绝对时间16:00:10对应的规划点(紫色点),和当前车的位置(红点)进行比较,如果相差大就不拼接,误差不大就拼接。

对于控制也用绝对时间比较好,如下:

这里是由于控制也有延迟。

问题2:规划起点

上个规划周期规划出来的轨迹是蓝色线条,本周期规划开始的时间是T,首先比较当前车辆的位置和上一个规划周期在T时刻规划出来的位置是否接近,比较接近,误差不大就是说明控制时按照规划路径走的,就可以进行轨迹拼接,规划的起点是T+100ms(绿点)。

原因如下:

 控制频率比较快,在[T,T+100ms]的时间段内,规划未计算完成,控制跟踪的是上一个周期规划的轨迹。

如果本周期规划起点的绝对时间是T,计算完毕的时间是T+100ms,也就是直到T+100ms时,绿色的本周期轨迹才计算完毕,发送给控制接口,从控制看来规划的路径如下,是不连续的:

 而如果规划起点的绝对时间是T+100ms,车在跟踪完上一个规划周期规划的轨迹后,在T+100ms时控制接口就可以接受到本规划周期规划到的路径信息,这样在控制看来规划的轨迹是连续的。

动态规划和决策之间的关系

 

 动态规划开辟凸空间,所以动态规划应该是决策算法。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/646117.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

ABAQUS应用07-实现拉伸和压缩刚度不同的弹簧建模

文章目录 0、背景描述1、步骤 0、背景描述 到目前为止,本文的内容我还没有具体实践过,但是个人认为后期是会用到的。比如说,对于风电机组地基转动刚度的设置,土体就是一种拉压刚度并不相同的材料。所以现在先记录下来&#xff0c…

bclinux基于欧拉(BigCloud Enterprise Linux For Euler)下安装mysql5.7

第一步:下载mysql5.7的rpm安装包 下载地址:https://dev.mysql.com/downloads/mysql/ 第二步:上传mysql安装包到Centos7的下 第三步:检查是否已经安装了mysql或者mariadb(centos7默认安装),如已…

Java—内部类

Java—内部类 一、内部类二、应用特点三、分类3.1、普通内部类:直接将一个类的定义放在另外一个类的类体中3.2、静态内部类3.3、局部内部类 一、内部类 一个类的定义出现在另外一个类,那么这个出现的类就叫内部类(Inner)。 内部类所在的类叫做外部类(Ou…

[JAVASE] 类和对象(六) -- 接口(续篇)

目录 一. Comparable接口 与 compareTo方法 1.1 Comparable接口 1.2 compareTo方法的重写 1.2.1 根据年龄进行比较 1.2.2 根据姓名进行比较 1.4 compareTo 方法 的使用 1.3 compareTo方法的缺点(重点) 二. Comparator接口 与 compare方法 2.1 Comparator接口 2.2 compare 方法…

upload-labs 21关解析

目录 一、代码审计 二、实践 三、总结 一、代码审计 $is_upload false; $msg null; if(!empty($_FILES[upload_file])){//检查MIME$allow_type array(image/jpeg,image/png,image/gif);if(!in_array($_FILES[upload_file][type],$allow_type)){$msg "禁止上传该类型…

ssms用户登陆失败,服务器处于单用户模式。目前只有一位管理员能够连接。解决方案

文章目录 问题解决方案单用户模式什么是单用户模式?为什么使用单用户模式?实现步骤 问题 连接smss的时候发现无法连接,显示 服务器处于单用户模式。目前只有一位管理员能够连接 解决方案 打开SQL Server配置管理器 右键属性 在启动参数的最…

picamera配opencv做发现移动物体后录像50秒

本来是想配合上一篇写的测距传感器数据打开摄像头录制个50秒实时画面,后来这个测距传感器(因为我是歪用,用来识别范围内的移动物体)给的数据,false alarming还是太高了。于是想到使用本人之前深恶痛绝的opencv来试一试…

getters的使用

getters的使用 如果state中的数据需要经过处理再使用,就可以利用getters函数

OFDM通信中的部分内容

纠错编码:在无线通信过程中由于传输过程存在噪声等各种非理想因素,在接收端接收到的信息往往相对于发射信息存在误码,通过纠错编码方式可以对少数非连续的误码进行判断和纠正。举个简单的例子,发射端可能发射的信息为00,01,10,11,…

python字符串入门指南:从基础到进阶

新书上架~👇全国包邮奥~ python实用小工具开发教程http://pythontoolsteach.com/3 欢迎关注我👆,收藏下次不迷路┗|`O′|┛ 嗷~~ 目录 一、字符串的创建与展示 二、处理特殊情况:含有特殊字符的字符串 三、字符串拼…

Spring—Spring配置文件概念及应用(实现一个图形验证码)

文章目录 配置文件配置文件作用配置文件的格式配置文件优先级说明配置文件书写代码的格式yml文件代码的格式 Value注解 properties 缺点分析properties VS yml实现一个验证码程序 配置文件 配置文件作用 整个项目的重要信息我们都会配置在配置文件中,比如说我们数…

springboot基础篇(快速入门+要点总结)

目录 一、SpringBoot简介 二、创建SpringBoot(通过Idea脚手架搭建项目) 三、properties配置文件 properties 配置文件说明 ①. properties 基本语法 ②. 读取配置⽂件 ③. properties 缺点 2. yml 配置⽂件说明 ①. yml 基本语法 ②. yml 使用进…

easy-rule规则引擎使用

简介 轻量级的规则引擎&#xff0c;易于学习的api 简单来说&#xff0c;规则引擎就是一个函数&#xff1a;yf(x1,x2,…,xn) 将业务代码和业务规则分离&#xff0c;解耦业务决策和业务代码的绑定关系 入门示例 依赖引入 <dependency><groupId>org.jeasy</grou…

Nacos 2.x 系列【8】集成 Spring Cloud Gateway

文章目录 1. 概述1.1 API 网关1.1 Spring Cloud Gateway 2. 集成案例2.1 入门案例2.2 动态路由 1. 概述 1.1 API 网关 API网关已经成为了微服务架构的一个标配组件&#xff0c;是系统对外的唯一入口。所有的客户端都通过统一的网关接入微服务&#xff0c;在网关层处理所有非业…

Jenkins工具系列 —— 通过钉钉API 发送消息

文章目录 钉钉环境搭建使用钉钉API接口 发送消息机器人安全设置使用自定义关键词机器人安全设置使用加签方式 资料下载 钉钉环境搭建 在jenkins安装钉钉插件以及小机器人&#xff0c;这部分内容可参考&#xff1a;插件 钉钉发送消息 使用钉钉API接口 发送消息 机器人安全设置…

【全开源】分类记账小程序系统源码(ThinkPHP+FastAdmin+UniApp)

基于ThinkPHPFastAdminUniAppvk-uView-uiVue3.0开发的一款支持多人协作的记账本小程序&#xff0c;可用于家庭&#xff0c;团队&#xff0c;组织以及个人的日常收支情况记录&#xff0c;支持周月年度统计。 &#xff1a;智能管理您的财务生活 一、引言&#xff1a;财务智能化…

SSMP整合案例第三步 业务层service开发及基于Mybatis的接口功能拓展

业务层开发 对于业务层的制作有个误区 Service层接口定义与数据层接口定义具有较大差别 不要混用 业务层接口关注的是业务名称 数据层接口关注的是数据层名称 操作是不难 但是有些东西还是要掌握的 业务层接口如果是业务方法 就按照业务名称来代替 如果是数据操作 直接用…

python数据分析——数据可视化(图形绘制)

数据可视化&#xff08;图形绘制基础&#xff09; 前言一、图形绘制基础Matplotlib简介使用过程sin函数示例 二、常用图形绘制折线图的绘制plot示例 散点图的绘制scatter()示例 柱状图的绘制bar示例 箱型图绘制plot.box示例 饼状图的绘制pie示例 三、图形绘制的组合情况多个折线…

有什么普通人可以做的赚钱软件?盘点9个适合普通人长期做的软件

在这个互联网高速发展的时代&#xff0c;智能手机已经成为我们生活中不可分割的一部分。众多APP的涌现&#xff0c;使得许多朋友都在寻求通过手机赚钱的方法。 然而&#xff0c;面对市面上琳琅满目的网上赚钱APP&#xff0c;我们该如何挑选呢&#xff1f;别担心&#xff0c;今…

全国首例!云南破获域名黑产大案,抓获630人

2021年5月以来&#xff0c;在公安部的组织指挥下&#xff0c;云南公安机关历时8个多月&#xff0c;成功破获全国首例域名黑产犯罪案件&#xff0c;经全国各地公安机关连续奋战&#xff0c;共侦破案件300起&#xff0c;抓获涉案人员630人&#xff0c;查封用于黄、赌、诈等违法网…