写在前面:
🌟 欢迎光临 清流君 的博客小天地,这里是我分享技术与心得的温馨角落。📝
个人主页:清流君_CSDN博客,期待与您一同探索 移动机器人 领域的无限可能。
🔍 本文系 清流君 原创之作,荣幸在CSDN首发🐒
若您觉得内容有价值,还请评论告知一声,以便更多人受益。
转载请注明出处,尊重原创,从我做起。
👍 点赞、评论、收藏,三连走一波,让我们一起养成好习惯😜
在这里,您将收获的不只是技术干货,还有思维的火花!
📚 系列专栏:【决策规划】系列,带您深入浅出,领略控制之美。🖊
愿我的分享能为您带来启迪,如有不足,敬请指正,让我们共同学习,交流进步!
🎭 人生如戏,我们并非能选择舞台和剧本,但我们可以选择如何演绎 🌟
感谢您的支持与关注,让我们一起在知识的海洋中砥砺前行~~~
引言
各位小伙伴们大家好,本篇博客开一个新的系列,自动驾驶决策规划算法。内容整理自 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 下做。
本篇博客到此结束,下一节再见,欢迎关注!
参考资料
后记:
🌟 感谢您耐心阅读这篇关于 自动驾驶决策规划算法概述 的技术博客。 📚
🎯 如果您觉得这篇博客对您有所帮助,请不要吝啬您的点赞和评论 📢
🌟您的支持是我继续创作的动力。同时,别忘了收藏本篇博客,以便日后随时查阅。🚀
🚗 让我们一起期待更多的技术分享,共同探索移动机器人的无限可能!💡
🎭感谢您的支持与关注,让我们一起在知识的海洋中砥砺前行 🚀