V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
XCCSUN
V2EX  ›  分享发现

无人驾驶之 Planning 十日谈 | 第二篇

  •  
  •   XCCSUN · 2019-11-27 11:50:08 +08:00 · 1853 次点击
    这是一个创建于 1849 天前的主题,其中的信息可能已经有所发展或是发生改变。
    Planning 十日谈系列第一篇《 Planning Overview 》从宏观的角度介绍了大家熟悉又陌生的 Planning ,探讨了 Planning 的难点以及对它的思考。文章中提到 Planning 细分为 Prediction、Decision、Motion 三大模块,它们环环相扣。这篇将以 Decision 这个角度切入继续解构自动驾驶,探索其本质。



    1、什么是 Decision Planning
    如果说 Planning 就像是人类的大脑,那么其中 Decision 模块对应就是负责逻辑思维的左脑。在无人驾驶中,Decision 起到的是一个指挥塔的作用,决定了无人驾驶能不能做到 Smart Driving。Decision 模块的工作主要包括从上游的 Perception,Semantic Map,Localization 以及 Prediction 模块获取一切可用的信息,做出驾驶的决策并将“指令”发到 Motion 模块。这里的指令,用专业的术语解释就是凸优化问题。凸优化问题的一个特性就是它只有一个局部最优解,这样的问题更适合 Motion 模块建模并高效地找到最优解。

    无人驾驶其实是一个非凸优化的问题,为什么这样说呢?比如说当在变道的时候,旁边有辆车和你并驾齐驱,司机需要犹豫是超到旁边这辆车前面,还是减速跟在他后面变道,这种情况就说明局部最优解不止一个。Decision 模块的工作就是将无人驾驶这个非凸优化问题,拆分成加速通过或减速跟随,绕车通过或停车等待这些凸优化问题,并告诉 Motion 模块去解其中的哪一个凸优化问题。通俗来说,自动驾驶在保证舒适性的前提下会有很多种行驶的组合方式,而 Decision 的工作就是找出符合交规和人类驾驶习惯的子问题交给 Motion 去计算最优解。

    Decision 模块大致包括了变道决策,绕行决策,交规模块决策,以及车辆轨迹的横向决策(左右位移)和纵向决策(前后加速)。我们的车在哪个位置变道,要绕行哪几个障碍物,路口该停还是该走,前方遇到交通锥往哪个方向绕,并道路段在哪两辆车辆之间并入,这些决策都是由 Decision 模块给出。



    2、Decision Planning 难在哪里

    Decision Planning 难点主要分为两个部分。指令的拆分和指令的选择。

    光是把绕交通锥的问题分成从左绕还是从右绕,这样的处理听起来并不难。然而实际的驾驶场景并不像恋爱养成游戏一样总会帮你把所有选项都列出来。指令拆分的难点在于你的算法得有能力给出你想要的那个选项。在单车道上卡死的时候,我们要意识到利用反向车道进行绕行,而不是一个劲傻等。在看似密不透风的车流中,我们要能自己挤出一条路来完成变道,而不是直接放弃。同时我们还需要评估不同指令的优劣。虽然在必要的时候我们会需要利用反向车道绕行,但是在反向车道一路飞驰就是一个错误的选择了。

    这里对于“必要”的判断就显得至关重要。判严了会让我们的车卡死动不了,判松了又会让我们的车吃罚单。而要把上面这些判断判对就需要一个好的 Decision 模块。



    3、怎样做出好的 Decision

    在 Decision Planning 中,一个比较有用的概念是 MinMax,就是选那个最坏情况下最优的选项。

    比如我们在从南向西左转过程中遇到反向车道一辆从北向南开的车。我们如果选择加速先过,最坏的情况是他不让我们,这样我们就会违反交通规则甚至导致撞车。而如果我们选择减速等他,最坏的情况是他因为某种原因减速或者靠边停车,那样我们就会显得不太智能。

    显而易见,后者的最坏情况要优于前者,我们应该选择等他。而一旦我们判断出了对方正在减速或者停车的时候,我们可以及时切换我们的选择,避免不智能的情况。再回到上面提到的单车道的场景,假设前方挡住我们的是一辆大卡车,我们被挡住了视线,不知道大卡车是一辆路边停着的车还是正排在一排车的后面等红绿灯。那么用 MinMax 的概念,我们就会选择停住不走,因为比起走逆行车道有潜在安全风险,停住不走显得更合理。

    但这样的话,万一大卡车停着不走,我们就会被卡死在这里。这里我们就需要转而考虑所有情况加权平均后的选项的期望值。随着积累更多的观察,我们的模型认为它是在等红灯的概率降低,我们的车就会改变选择绕开大卡车。

    所以做好 Decision 模块还有一个重要的点是要灵活使用上游提供下来的所有信息不断去优化我们的模型,使其在类似的场景下的驾驶行为变得越来越聪明。如果当前信息并不足以让我们做出智能的决策,就需要跟上游团队合作,一起把我们的算法做得更好。



    4、为什么无人驾驶比人类司机驾驶更有优势

    要成为一个优秀的老司机,不仅需要准确的情况判断,丰富的驾驶经验,还需要对路况精确分析。而无人车不仅拥有 360 度的视角,超过老司机几个数量级的驾驶数据,还相当于在上路的第一天就已经把整个城市的甚至路况数据都刻在了脑子里。

    对于拥挤的路段,Decision 模块能事先知道前方可能会出现的并道然后事先变道避开并道路段。对于挤不进左转车道的场景,Decision 模块能果断地判断出开到下一个路口再左转也不用多走多少路并及时更改行驶路径。对于高限速路段的黄灯,Decision 模块能根据限速精确地计算出黄灯的时长,并在看到黄灯时从容地做出是否刹车的决定。

    与人类司机做决策时更依赖直觉和经验相比,无人驾驶的决策直接基于数据和计算。因此无人驾驶比人类司机更加冷静,不会把惊慌或者急躁的情绪带入判断之中,更不会出现酒驾的行为。如今华尔街的金融机构已经逐渐地用自动交易软件取代了人类交易员。我们相信在不久的将来,更安全、更经济、更高效的无人驾驶也会到来。

    相信未来 RoboTaxi 会成为人们工作、生活之外的“第三空间”,不仅在城市移动生态系统中扮演重要的角色,也将成为新型商业模式的主要载体。未来的更多可能,我们一起来创造吧!
    1 条回复    2020-04-10 09:49:47 +08:00
    fighting289
        1
    fighting289  
       2020-04-10 09:49:47 +08:00
    写的挺好的,咋不更新了
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   3135 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 21ms · UTC 12:49 · PVG 20:49 · LAX 04:49 · JFK 07:49
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.