无人驾驶之 Planning 十日谈系列,是无人驾驶系统里面 Planning 模块的特辑,会从 Planning Overview 开始讲起,一步步揭开无人驾驶的神秘面纱。
1、熟悉又陌生的 Planning
-Planning 在无人驾驶中的定位
整个自动驾驶系统其实细分为很多的模块,感知、语义地图、地图与定位、规划、控制 等等。如果说 Perception 像是人的眼睛,Control 像是人的手脚,那么 Planning 就像是人的大脑。可以说是整个无人驾驶系统最核心的部分。
Planning 会根据定位以及感知结果做出避让的决策并规划具体路径,用机器学习技术从大量真实驾驶数据中学习人类的决策行为,再利用各种路径规划算法得到具体行驶路径。
无人驾驶中大家可能比较熟悉 Perception 模块,比如基于 Camera / Lidar / 的 Detection (探测)/ Tracking (追踪)/ Fusion (融合)。也就是 Perception 会根据激光雷达、毫米波雷达以及摄像头等传感器,基于 DL 和融合算法去检测路上行人和车辆,并预测他们的行为。而大家对于 Planning 具体在做什么相对还比较陌生,Planning 模块其实是位于在自动驾驶系统的最后一环,可以说无人车上的所有模块最终都是服务于 Planning 的。
对 Planning 的输入主要有三个模块:Perception / Semantic Map / Localization。这三个模块分别提供了动态环境信息( Perception ),包括路上车辆行人的位置、形状、朝向、速度等;静态环境信息( Semantic Map ),如交通标志、道路标示线、交通灯位置等;以及本车状态( Localization ),如位置、速度、加速度等。
最后,Planning 会考虑所有当前信息和历史信息,生成一条最终车辆要行驶的轨迹( Trajectory ),并交给 Control 模块去控制车辆行驶。
-Planning 的细分模块
Planning 主要包含三大模块:Prediction / Decision / Motion。
Prediction 要根据 Perception 的结果,结合路网( Road net )等信息来预测所有道路参与者的可能行为。比如其他车辆是否变道,行人横穿马路等行为的预测。更复杂的包括没有道路标识(车道线)场景下周围车辆的行驶轨迹预测,说白了有点像怎么预测碰碰车的运行轨迹。
Decision 像是做一个宏观决策。比如在变道的时候旁边有辆车和你并驾齐驱,Decision 要决定超到旁边这辆车前面,还是减速跟在他后面变道。又比如看到前面停止的车辆,Decision 要决定是变道超过去,还是跟在他后面等待,也许他也只是在排队。
Motion 的目的是执行 Decision 的决策,考虑车辆动力学模型后生成一个安全、舒适的可执行轨迹。最终无人车执行的就是这条轨迹,而 Planning 每 0.1s 还会根据最新的 Perception / Localization 结果来更新一次这条轨迹。
2、Planning 的难点是什么
可以说 Planning 和 Perception 是无人驾驶中最难解决的两个领域,从某些维度上来说 Planning 更加困难。一个辅助的信息是,Waymo 的 Software 部门里 Planning 和 Perception 人数几乎一样多,而这两个 team 的人比其他所有 team 加起来都还要多。
Planning 难在它是一个涵盖面很广的问题,用我们 SVP 钟华的话说,Planning 做到最后可能需要综合一个人道路上的所有知识。这个知识不光是怎么开车,而是包含了一个人对于这个世界非常多的理解和认知。
比如看到前面的公交车减速进站,人立马就知道要谨慎缓慢的从他旁边通过,这件事不用从驾校学,大部分人都能"感悟"到。因为你自己可能曾经也这么做过:下了公交车后从公交车前头走到马路上,公交车旁边的车辆正好和你互为视觉盲区,你突然出现吓了路上的司机一跳,也就是常说的鬼探头(很危险)。稍稍修改一下上面的场景,如果这个公交车只是熄火的停在路边,你从他旁边经过的时候可能就不会那么谨慎。同样的场景,同样有视觉盲区,人类的处理会有非常大的差异,这就是人类驾驶的灵活性。
3、关于 Planning 的思考
人在驾驶这个行为中间考虑了非常多的东西,各个方面融合在一起会变成了直觉,所以我们常说驾驶是一项肌肉记忆。而我们要做的就是解构人类驾驶的直觉,弄清楚在每一个驾驶行为背后人真正在考虑的是什么。换句话说,我们要思考驾驶的本质。
我们把解决 Planning 问题的方式分成两种,一种是模仿人的行为,以期在各种场景下都能更像人;一种是思考背后的本质问题,理解和量化人类驾驶中到底在考虑什么,然后从本质出发去解决问题。
举例来说,第一种方法就好像在飞机诞生前的漫长历史里,人们执着的模仿鸟类翅膀的扑动,从人力扑翼到机械扑翼,而这些努力大都以某种悲壮的方式失败了。真正让人类征服天空的,是对鸟类翅膀形态研究后诞生的”伯努利原理”。
人类的跟车行为可以很好的说明 Planning 中一个具体的问题。最直接能观察到的是,跟车车速越快,人类的跟车距离越长。甚至很多人在驾校里面学到的也是:跟车距离 = 车速 * 2 秒。一个刚学开车的新手会觉得这条规则很有用,但老司机心里根本就不是按照这种规则在开车。简单的模仿这个行为其实在大部分场景下也能有不错的效果,但稍微复杂一点的情况就无能为力了。
这可能也会引发一些疑问:在无人驾驶中模仿人类行为有没有有价值?我的观点是有价值的。比如“跟车距离 = 车速 * 2 秒”这个规则,是人们对跟车大量例子的总结,对复杂问题的简化,其实这条规则帮到了很多新手司机。在没能探究到本质问题的时候,对于人类行为的模仿是必要的。但我们心里很清楚,模仿只是我们探究本质的一个过程。