自动驾驶系统描述
自动驾驶
一些有的没得今天就不扯了,毕竟历史、事件、定义之类的经常看,经常忘。
我理解的自动驾驶系统是是由两部分组成的:感知与决策。本文主要从这两个大方向入手,对其麾下的一些不可或缺的功能模块进行描述。
1. 感知系统
我将感知问题分为两部分,第一是对世界的感知与理解,第二个就是对自身的感知与理解。
不过这样将有些过于抽象,实际在自动驾驶中我们并不会那么泾渭分明的完成它们,甚至我们更多的是完成的第一部分,第二部分很多往往是预设的东西。一般我们通过实现以下一些功能模块来完成自动驾驶中的感知问题。
1.1 定位
定位模块解决的问题就是弄清楚自己在哪里,具体化的说就是估计出汽车相对于地图的位姿(位置与姿态)。
其实光定位的话方法有很多,各种slam,里程计还有全局定位的GPS等。但是目前来看这些方法没有一种是完美的,都会有自己的缺点。目前在自动驾驶领域还好解决一点,因为全局的GPS搭配局部的slam算法可以比较好的完成任务。但是对室内机器人来说,由于GPS一般不可用,所以全局定位的问题有些尴尬,具体的场景就是机器人启动时相对地图的全局定位与动态环境下的可靠定位问题。
1.2 静态物体建图
其实静态建图模块与定位在一定程度上来说是很多模块(比如定位)的基础。而且地图也分为局部地图与全局地图两部分。
其实建图的问题,现在的解决方案也还不是很成熟(可能我见识浅薄)。sfm建立的地图往往是给人看的,但是机器并不能理解。而机器用的稀疏点地图和稠密地图虽然比较实用了,但是功能也有限,语义地图听起来高大上,但是具体形式很值得讨论。毕竟,如果我们建立的地图是给机器人看的话,就需要考虑机器人究竟能从中获得什么。
1.3 动态目标跟踪
对于动态物体,我们最好不要将它放入地图中,就算放入也要放入可以随时更新的局部地图。由于在行驶过程中动态物体本身的运动是我们需要考虑的因素,因此动态目标检测与跟踪模块必不可少。
1.4 交通信号检测与识别
这个模块本质是一种交通工具之间的交互行为模块,也许以后随着交通工具之间交互方式的改变,也许这个模块的具体形式也会随之改变。
2. 决策系统
好的,既然已经对于外在的内在的情况有了一定的认知,接下来就是我们发挥主观能动性达成目的的时候了。
在自动驾驶中的决策系统我觉得主要由以下部分组成。 ### 2.1 路线规划 (全局)路线规划模块负责规划出一条穿过道路网的路线,让自动驾驶汽车能从起始位置到达终点位置。这部分的工作本质是一个图搜索问题,算法已经比较成熟了,比较有代表性的有\(A*\)等。
所以路线规划输出的已经可以保持汽车一直在一条路线上,下面需要做的就是如何在这条路线上行驶的更好了。
2.2 行为决策
当全局路线规划算法规划出了路线后,下面的工作就是沿着这条路线进行行驶。为了使得行驶行为更加的智能,一般我们会在这里设置一个行为决策层。这一层的主要任务是:依据感知系统对周围环境环境的实时观测结果,做出最明智的驾驶行为。比如超车、变道、停车等。
2.3 运动规划
运动规划层是控制系统中比较底层的模块,它的任务是依据行为决策层决策出来的行为,对局部的路线进行规划,并生成对汽车的控制信息。
关于实现自动驾驶的讨论
上面我们讲述了自动驾驶系统中的各个环节,这也叫做\(rule-based\)的自动驾驶系统。最近其实学界还有另外一种自动驾驶的实现方式。它们的考量是目前\(rule-based\)的方法完全是基于人类对环境的理解进行的研究,而实际上实现这一工作是机器做的。并且目前的人工智能技术其实和人的感知抽象方式关系不大。所以既然机器看到的世界和人是不一样的,那么为什么不设计一个端到端的神经系统来完成这个任务呢。\(end-to-end\)方式的做法是设计一个深度神经网络,输入是图片数据,输出是对汽车的控制信息,这样的一个系统中内部特征参数是自动调整的,我们人并不能理解,但是机器可以。
rule-based方式
优点:
可解释性强
各个模块功能明确,有利于定点提升性能
比较容易集成新的功能模块,比如车联网模块等
缺点:
按照人的理解来设计机器的感知决策体系,可能有些设计比较臃肿并且低效
目前技术限制,机器智能与人类智能从本质上完全不一样。
end-to-end方式
优点:
- 端到端一步到位,自动调整也许可以抓住最适合机器的特征
缺点:
可解释性弱
不利于新模块的集成
自动驾驶中很多行为并没有最优解,具有随意性