【自动驾驶】决策规划算法概述

2024-08-27 00:28

本文主要是介绍【自动驾驶】决策规划算法概述,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

写在前面:
🌟 欢迎光临 清流君 的博客小天地,这里是我分享技术与心得的温馨角落。📝
个人主页:清流君_CSDN博客,期待与您一同探索 移动机器人 领域的无限可能。

🔍 本文系 清流君 原创之作,荣幸在CSDN首发🐒
若您觉得内容有价值,还请评论告知一声,以便更多人受益。
转载请注明出处,尊重原创,从我做起。

👍 点赞、评论、收藏,三连走一波,让我们一起养成好习惯😜
在这里,您将收获的不只是技术干货,还有思维的火花

📚 系列专栏:【决策规划】系列,带您深入浅出,领略控制之美。🖊
愿我的分享能为您带来启迪,如有不足,敬请指正,让我们共同学习,交流进步!

🎭 人生如戏,我们并非能选择舞台和剧本,但我们可以选择如何演绎 🌟
感谢您的支持与关注,让我们一起在知识的海洋中砥砺前行~~~


文章目录

  • 引言
  • 一、自动驾驶级别划分
    • 1、级别划分依据
    • 2、核心模块作用类比
  • 二、决策规划算法模块三大构成
    • 1、导航规划模块
    • 2、行为规划模块
    • 3、运动规划算法
  • 三、目录与大纲
  • 四、仿真环境
  • 参考资料


引言

  各位小伙伴们大家好,本篇博客开一个新的系列,自动驾驶决策规划算法。内容整理自 B站知名up主 忠厚老实的老王 的视频,作为博主的学习笔记,分享给大家共同学习。

  本篇博客是第一节序章,也就是整个教程的开篇,介绍决策规划的地位以及作用。


一、自动驾驶级别划分

  首先讲一下自动驾驶的六个级别,从 L 0 L0 L0 L 5 L5 L5

级别功能
L0没有任何自动驾驶功能
L1有横向和纵向自动驾驶功能,但横纵向无法联合作用
L2横纵向可以联合作用,但驾驶员必须对驾驶所发生的一切情况负责
L3横纵向可以联合作用,但对部分场景驾驶员不必负责
L4大部分道路都可以自动驾驶,大部分场景不需要驾驶员负责
L5完全自动驾驶

  这就是自动驾驶从 L 0 L0 L0 L 5 L5 L5 六个级别的区分。

1、级别划分依据

有两个区分等级的关键因素:

  • 车辆可实现的功能
  • 驾驶员所负的责任

  从 L 0 L 0 L0 L 2 L2 L2 主要是功能区分,从 L 3 L3 L3 L 5 L5 L5 主要是责任区分,区别不在于有什么花里胡哨的功能,而是在于责任划分。

  不同公司的 L 2 L2 L2 L 2 L2 L2 之间差距巨大,只要厂家宣称驾驶员需要负全责,那即使在功能上做到和 L 4 L4 L4 一样的功能,但只要说驾驶员需要负全责,本质上还是 L 2 L2 L2,而 L 2 L2 L2 本身是比较宽泛的概念。

  比如车辆只有 定速巡航 + 车道保持,就是非常简单的可以横纵向联合控制的称为 L 2 L2 L2

  车辆具有 L 5 L5 L5 级别的功能,但厂家宣称驾驶员必须负全责,即在自动驾驶过程中必须要盯着,准备随时接管,那么车也属于 L 2 L2 L2

  从简单的 L 2 L2 L2 进化成什么都能做的 L 2 L2 L2,其重要模块就是决策规划算法。

   有人可能会觉得决策规划的算法难道不是 L 4 L4 L4 应该做的事情嘛?为什么是 L 2 L2 L2 的模块?上面也说了, L 4 L4 L4 L 2 L2 L2 就是有功能上的区别,但最重要的区别还是在于责任。 L 4 L4 L4 在大多数情况下都是车负责,驾驶员不需要接管, 而 L 2 L2 L2 是一切情况都要人接管。

2、核心模块作用类比

模块类比
感知模块人的眼睛、耳朵
控制模块人的小脑、双脚
决策规划模块人的大脑

  功能越往上做越丰富、越复杂,决策规划的算法也就越重要,并且也越难。

  在 L 4 L4 L4 中,决策规划模块是整个模块中最重要的,也是最复杂、最难做的模块,难做到要把整个模块一分为三,还要加上地图模块,每个每块单独处理,才能勉强完成大脑的工作。


二、决策规划算法模块三大构成

  整个决策规划算法模块一分为三。

1、导航规划模块

  导航规划算法计算整体上从 A A A B B B 的最优路径,和机器人导航、手机导航的算法基本一致,长度在几公里到几百公里不等,该算法是整个规划模块中最成熟的算法。

  特点:导航算法给出粗略的、大范围的路径,但路径不考虑如何避障,也不考虑车辆动力学约束,所以规划出来的路径是不规则的折线,导航算法一般只需执行一次,只有遇到大范围的拥堵、施工、偏航情况才会再次执行。

2、行为规划模块

  行为规划算法又叫决策算法,决定车辆行驶意图。对于静态障碍物,往左绕还是往右绕?对于动态障碍物是减速避让还是加速超车,决策算法决定了车辆的行驶意图,是整个规划算法中最难做的部分。

  特点:给出车辆的行驶意图,指导车辆该避让还是该超车,该左转还是往右转,但决策并不给具体的运动建议,例如左转多少度或车辆加减速到多少。由于实际环境瞬息万变,所以决策算法需要有较高的执行频率,一般为 10 H z 10Hz 10Hz

  决策算法也需要有一定的稳定性,不允许在周围环境比较稳定的情况下,出现“朝令夕改”的现象,即决策算法在环境稳定时不允许出现决策指令的剧烈波动。除非环境发生变化,否则决策算法不允许频繁改变结果,这样会导致控制效果变得非常差。

3、运动规划算法

  运动规划算法是根据决策给出的行为意图,在相关的时空中搜索或优化出一条具有详细路径速度信息,且满足各约束条件的轨迹,并将轨迹发给控制模块去跟踪,轨迹长度一般在几米到几十米不等。

  特点:运动规划生成的轨迹是整个决策规划模块最终的输出,具有详细的路径、速度信息,且执行频率与决策频率相同,都是 10 H z 10Hz 10Hz

  运动规划也要有一定的稳定性,在环境不发生剧烈变动的情况下,运动规划的轨迹要基本一致。


三、目录与大纲

  本系列博客将详细讲解决策算法与运动规划算法,不讲导航算法,因为导航算法相对比较成熟。以 Apollo EM Planner 算法为例,本算法擅长处理复杂环境下的决策规划问题,也是 Apollo 默认的决策规划算法。

  注意EM Planner 是在Apollo 1.5 1.5 1.5 时加入,在 Apollo 6.0 6.0 6.0 时的 EM Panner 换了个名字叫 OnLine Planning。本系列博客所讲解的是最初 1.5 1.5 1.5 版的 EM Planner,当然思想上是殊途同归的,建议各位学完后要看一下 6.0 的 OnLine Planning。和最初的 EM Planner 相比有些变化。

  下面介绍本系列博客大概的目录和大纲:

章节内容
序章决策规划算法概述
第一章数学基础
第二章Apollo EM Planner 理论篇
第三章Apollo EM Planner 代码篇
终章决策规划算法总结
  • 第一章是必要的数学基础。
  • 第二章将详细解读 Apollo EM Planner 理论,到底是怎么解决决策规划问题的。
  • 第三章将具体的实践,写 Apollo EM Planner 程序的仿真。
  • 终章是决策规划算法的总结,具体讲 Apollo EM Planner 的优点和缺点,以及除了 EM Planner 之外的其他决策规划算法是怎么做的。

四、仿真环境

  目前代码环境是在 Windows 下做,软件采用 Prescan + Matlab + Carsim 三者联合。

  在熟悉 EM Planner 之后,再用 Linux 下的 C++EM Planner 代码。因为目前主流的规划算法是在 C++ 上写更好,不过对于初学还是先在 Windows 下做。

  本篇博客到此结束,下一节再见,欢迎关注!


参考资料

  自动驾驶决策规划算法序章 总纲与大致目录


后记:

🌟 感谢您耐心阅读这篇关于 自动驾驶决策规划算法概述 的技术博客。 📚

🎯 如果您觉得这篇博客对您有所帮助,请不要吝啬您的点赞和评论 📢

🌟您的支持是我继续创作的动力。同时,别忘了收藏本篇博客,以便日后随时查阅。🚀

🚗 让我们一起期待更多的技术分享,共同探索移动机器人的无限可能!💡

🎭感谢您的支持与关注,让我们一起在知识的海洋中砥砺前行 🚀

这篇关于【自动驾驶】决策规划算法概述的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



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

相关文章

golang字符串匹配算法解读

《golang字符串匹配算法解读》文章介绍了字符串匹配算法的原理,特别是Knuth-Morris-Pratt(KMP)算法,该算法通过构建模式串的前缀表来减少匹配时的不必要的字符比较,从而提高效率,在... 目录简介KMP实现代码总结简介字符串匹配算法主要用于在一个较长的文本串中查找一个较短的字符串(称为

Java中实现订单超时自动取消功能(最新推荐)

《Java中实现订单超时自动取消功能(最新推荐)》本文介绍了Java中实现订单超时自动取消功能的几种方法,包括定时任务、JDK延迟队列、Redis过期监听、Redisson分布式延迟队列、Rocket... 目录1、定时任务2、JDK延迟队列 DelayQueue(1)定义实现Delayed接口的实体类 (

通俗易懂的Java常见限流算法具体实现

《通俗易懂的Java常见限流算法具体实现》:本文主要介绍Java常见限流算法具体实现的相关资料,包括漏桶算法、令牌桶算法、Nginx限流和Redis+Lua限流的实现原理和具体步骤,并比较了它们的... 目录一、漏桶算法1.漏桶算法的思想和原理2.具体实现二、令牌桶算法1.令牌桶算法流程:2.具体实现2.1

shell脚本自动删除30天以前的文件(最新推荐)

《shell脚本自动删除30天以前的文件(最新推荐)》该文章介绍了如何使用Shell脚本自动删除指定目录下30天以前的文件,并通过crontab设置定时任务,此外,还提供了如何使用Shell脚本删除E... 目录shell脚本自动删除30天以前的文件linux按照日期定时删除elasticsearch索引s

关于最长递增子序列问题概述

《关于最长递增子序列问题概述》本文详细介绍了最长递增子序列问题的定义及两种优化解法:贪心+二分查找和动态规划+状态压缩,贪心+二分查找时间复杂度为O(nlogn),通过维护一个有序的“尾巴”数组来高效... 一、最长递增子序列问题概述1. 问题定义给定一个整数序列,例如 nums = [10, 9, 2

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

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

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

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

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脚本编写三、脚本解析四、运行脚本五、案例演示六、注意事项七、总结在日常使用