智能驾驶域控制器的软件架构基础及问题
附赠自动驾驶最全的学习资料和量产经验:链接
第一篇 软件架构基础及问题
第1章 智能驾驶软件架构的重要性
1. 1智能驾驶的简化概念模型
智能驾驶的概念模型简单来说就是解决三个核心问题:
1. 我在哪?
2. 我要去哪?
3. 我该如何去?
第一个问题“我在哪?”需要解决的是“环境感知”和“定位”问题,需要了解的是车自身的位置以及该位置周边的静态环境(道路,交通标识,信号灯等)和动态环境(车、人等)。由此引发一系列的感知和定位的技术方案,包括各种传感器以及算法体系。
**第二个问题“我要去哪?”**在自动驾驶领域就是“规划决策”。由此延伸出一些术语“全局规划””局部规划"、“任务规划”“路径规划”、"行为规划”、“行为决策”“运动规划”,等等,由于语言上的歧义,这些术语有的是同一个意思的不同说法,有的其含义在不同场合经常相近但又有点差别。
抛开具体的术语,一般而言这“规划决策”这个问题都会被分解为三部分:
1. 在一定范围内的全局意义上的规划 (常用术语:全局规划,路径规划,任务规划)
2. 将第一步的结果做划分出多个阶段 (常用术语:行为规划,行为决策)
3. 对每一个阶段进行进一步的规划 (常用术语:局部规划,运动规划)
对于这些各种各样的规划衍生出很多解决问题的算法体系。
**第三个问题“我该如何去?”**一般指的就是“控制执行”,也就是对最小一个规划的实际执行实践,达到规划的目的。具体在车上,往往体现为各种控制算法,控制理论解决的就是这些问题。
因为这三个问题的解决归根到底都是算法问题,所以某种意义上,说自动驾驶的核心就是算法。而软件架构从某种意义上说,就是要能承载这些算法。没有很好的承载体系,再好的算法也无用武之地。
1.2 基础概念模型的分形递归特性
为了方面我们把基础概念模型的三个问题分别表示为 E , P, X,分别代表 环境(Environment)、计划(Plan)、执行(eXecute)。 每一组 E-P-X 都有其描述问题空间。
比如说,我们定义问题空间 A 是“驾车从北京到广州”,那么对于问题 E:其定位关注的可能就是当前在北京那个区,不必细化到街道。我们还需要关心天气是否有雷暴雨,省道以上的道路结构信息。对于问题P:
P-1 : 第一步先设计出一个全局的路径,走哪条高速、国道、省道
P-2 :根据全局路径计划出一系列行为组成,先到哪个高速路口,行驶多少公里,去服务区加油、更换到另一条道路等等
P-3: 计划出到每一段的具体道路路径。比如到高速路口要走三环还是四环,在换到哪条路上
X 要执行 P 规划出来的每一步。
如果我们定义问题空间 B 是“驾车安全通过一个路口”,那么对于E 问题,要关注的是当前的道路信息、交通灯信息、道路上的车辆状况、行人状况等。对于P 问题:
P-1 :第一步先规划出通过路口的安全路径,包括根据交通规则和道路信息计划到达当前路口的哪个车道,进入目标路口的哪个车道。
P-2 :第二步要第一步的根结果规划出一系列动作序列,如先减速,切换目标车道,停车等红灯,起步加速,通过路口。
P-3 :第三步对第二步的每一个动作要设计具体的一段轨迹,轨迹要能避开行人车辆等障碍物。
X 负责执行执行 P 问题的输出结果。
这个问题空间 B 是最接近通常规划算法要解决的问题。其中 P-1 的第一步常称为“全局规划”或“任务规划”,P-2 常被称为“行为规划”或 “行为决策”,P-3 被称为“局部规划”或“运动规划(Motion Plan)”。如下图所示,E-P-X 形成抽象的基础概念