技术贴:谷歌自动驾驶车的难点在哪里?

· May 18, 2015

不好意思,我们又当 知乎的搬运工 了。原问题为《谷歌智能车的难点在哪里?模式识别,还是分析、控制算法?》,讨论的是谷歌的自动驾驶和无人驾驶技术。本文来源于这个问题里点赞最多用户 康费 以及 吕朝阳 的回答,比较长,非常技术流,但是干货也非常多,值得一看。

康费的回答:

1. 传感器技术

不得不承认现在无人车能出现很大程度上依赖传感器的进步。其实早在 80 年代美国就通过磁钉导航完成过很多无人驾驶的实验。他们在地下埋上磁钉,通过寻找磁钉的方式可以完成高速的巡航、并道、超车等一些列的实验。但是显然这种成本太高,只能作为实验。

到了 2007 年,传感器技术已经突飞猛进了。看看他们的传感器吧。
dc34ae5c1327705750b99991627568fd_b
SICK 公司激光雷达。用于检测周围障碍物,无人车需要能够感知周围环境,又不能像人一样单纯用眼睛完成,于是这玩意可以返回周围障碍物的距离,误差毫米级。

467ab7becc7af0f5e12d8535ffb13390_b
这张图上的无人车头顶的不是灯,而是 5 个 SICK。一个 SICK 当时等价于一辆帕萨特。当然现在 Google car 的激光雷达用头上的小东西了。

c2c353934d0321471750ad97259a0646_b

这个小东西顶至少 4 个 SICK,是 360 度多线激光雷达,今天价值 3 个帕萨特。

剩下的东西没有这个壮观,就不上图了。

除了激光雷达(避障),还有有毫米波雷达(探测)、GPS(定位)、里程计(定位)、陀螺仪(定位)、视觉系统(检测、避障)、数传电台(监控)等等。就不说很多小细节的进步了,但是上述的传感器都是必须的,所以无人车的第一个难点是传感器。

2. 定位

GPS 的定位精度远达不到无人车的需求,GPS 官方定位精度「<10m」,更高精度的 GPS 基本要依靠差分完成。差分的原理很简单:设置一个固定基站,固定基站校准位置,再将信号传递给车载设备,车载设备在接收到基站信号和 GPS 信号后差分获得。但是每一个基站的有效范围也就 30km,怎么大范围应用。于是有很多技术要解决 GPS 精度不足的问题,如地图匹配。

以前 GPS 中会加入干扰,那时候民用 GPS 的精度只有 100m。这个干扰叫 SA,Select Availability,已经于 2006 年取消。SA 依然会在战时开启,那时只有美军自己的 GPS 能有效定位,而其他的 GPS 都将失效(所以我国要研发北斗)。传统 gps 的协议是 0183 格式,这种格式允许小数点后 4 位。军用级别的 gps 在此基础上又加了两位,至于多出来的几位是否真能提高精度就不知道了,得用个绝对位置教一下。

如果是「<1 米」的精度对于车辆定位基本上够用,但是 GPS 一定要在空旷的场地上才能得到这种级别的定位精度。

除此之外,没有 GPS 呢?

在树荫下、楼宇间、隧道内 GPS 信号无法到达,这时就需要里程计+陀螺仪,俗称惯性导航单元。这套系统的原理就是:花钱越多,有效时间越久。如果要能在没有 GPS 的情况下坚持 20 分钟,呵呵,3 个帕萨特。
原因是里程计、陀螺仪都存在累积误差。注意误差是累计的,也就是说上一时刻是 0.5m 的误差,下一时刻指定大于 0.5m。因此要尽可能约束累积误差,使其数量级很低,那么就要上光纤陀螺。因为电子级的陀螺通常达不到这个精度要求,不知道挠性陀螺行不行,但是估计挠性陀螺和光纤陀螺造价差不多。

3. 避障

车辆前方有障碍,障碍物是运动的还是静止的,车是停下来还是绕过去。我没仔细研究过这部分的内容,知道的算法是人工势场法。这部分主要的难度是从传感器识别障碍,在车辆运动的前提下,确定障碍的运动状态。也就是说你要在运动的坐标系下,计算另一个物体相对静坐标系的速度,并作出判断。

4. 识别

下面得识别交通标识,如限速牌、红绿灯。这些通过视觉系统完成,难点主要在实时性和鲁棒性。要离线处理这些交通标志是很简单的,但是在无人车上需要能在有限的时间里识别出来,并且考虑道路中可能有的光线变化、遮挡等问题。

5. 控制

你提到控制算法,除了上面的避障以外,其他外围机构的改造可能会存在一些改造上的问题。如何介入转向架、如何介入油门(以前还要考虑如何换挡)。这些工作如果有厂商帮忙还好,没有的话也会是问题,钱的问题。其实控制的难度相对较小,传统 PID 足够,加上部分买的伺服机构,没有多大难度,就是活累。

6. 规划与决策

既然是无人车,一定牵扯「去哪」。目的地由人决定,但是路线是车子计算出来的,这部分的算法可能你不会,但是你常用,就是百度地图、腾讯地图之类的东西,它们通过一定的算法计算出路径之后车辆会跟随这条路径。当然运行过程中为了解决实际的一些问题,比如修路,也许要决策的机制。

其实对于无人车的控制说小了较控制,说大了叫决策。也可以说,决策是频率比较慢的控制。举个例子,我们对方向盘、车速的控制周期是多少呢?大约 20ms,也就是 1s 中要控制 50 次左右。那么我们对车辆路线的决策周期呢?大约 5s。可以看出,控制是响应速度较快的部分,而决策是响应速度较慢的控制。决策,说白了就是对于一些可能遇到的问题给出的解决逻辑,俗称人性化。这部分我能力有限,希望懂的人可以给些意见。

我觉得,无人车最关键点在于东西不一定复杂,但一定要可靠,所以当有人问 Sebastian Thrun(前面 Google Car 的负责人),你们的车能否在雨雪天开出去的时候。他说,那些日子我们最好不动它。至于你提到的机器学习,我认为这是趋势,可能在识别部分会有应用,但很难成为无人车的核心技术。原因:1)离线学习会导致算法有一定的局限性,你在北美弄好的系统在中国不一定能用。2)在线学习成本太高,给车带个计算机,让它在车辆运行的同时还能逆向运算?

至于以后的突破口,我觉得是廉价可靠的传感器和相应的识别算法。这些机构到底能做到多小,多便宜又多可靠。至于提取信息以后的控制,前面说了,80 年代就有人做了,还做得不错。

吕朝阳的回答:

我从智能汽车作为一个机器人系统,涉及到的几方面技术,在理论方面的难点做一个解释和补充。

首先,智能汽车作为一个机器人系统,所涉及到的机器人技术主要有 控制(control), 感知(perception)和路径规划(planning) 三大块内容。作为一个独立的机器人系统,其自身的计算机系统以及安全性也是一个很重要的方面。关于这几块目前的研究以及工业界达到的成就,和技术难点,我正在写一篇综述给感兴趣的朋友加以介绍。下面就从者三个大方面来看看都还有哪些棘手的问题。

7fab31bad7a3a6db79103ee25de74787_b

关于控制方面, 自动巡航系统(cruise control),自动刹车系统(auto braking),自动停车系统(auto parking)作为独立的系统都已经比较成熟,而且很多普通有人驾驶汽车上已经应用,以帮助人更好的驾驶。

恩,似乎控制,已经不是什么大问题了。

那么感知系统呢?

先简要说下感知系统所涉及的传感器。智能汽车目前依赖的传感器主要是声呐,雷达,激光,惯导系统,GPS 和摄像头。其中惯导系统,GPS 都是自动测距和里程计的关键传感器,里程计估算里程,随着时间确实有累计误差存在,GPS 在城市环境中也有可能出现局部信息不准确的问题。但是目前的研究可以对这个累积误差做出很好的修正,比如通过依赖视觉传感器作为里程计技术,根据场景的识别重定位技术,以及更准确的优化算法。Google 的数据我还并为获得,但去年 IROS 的 workshop 上,BMW 智能汽车的里程计精确度可以达到 10 厘米的级别。作为汽车驾驶来说,这一点也足够安全。

汽车仅仅知道自己里程和位置并不够,它同时得知道周围环境,这也是挑战最大之处。目前通过车载激光传感器,谷歌汽车可以实时看到如下的 3D 场景:

61c3595744040b523837a31211f3ef7a_b.jpg
以上所说的这些感知技术,主要涉及到同步定位与建模技术(Simultaneous Localization and Mapping,简称 SLAM)的研究,这也是我的研究内容。对于目前的 SLAM 技术来说,这已经是一个很不错的结果,而且在同等传感器,以及实时性要求情况下,不会有太大质的提升。

酷!从图里似乎能看到树,地面,墙,甚至是每条车道。如果我把图像作为纹理贴在 3D 模型上的话,似乎都能建一个真的 3D 地图出来。看上去还不错是么?

不过,这仅仅是看上去不错。作为一个需要稳定驾驶,熟悉路况的智能系统来说,问题颇多。

第一,图里的三维场景虽然足够密和详尽,但是汽车本身并不知道场景的表示和涵义。也就是说,它仅仅知道有物体在某个位置,但物体究竟是建筑?还是树木?还是路标?仅仅通过这个图还并不知道。

对于建筑和树木来说,看起来好像汽车并不需要知道他们是什么。听上去似乎合理。但是路标呢?这点颇为关键。即使通过 GIS 测绘,可以对各条路的速度限制等做到了解,但是对于施工路段,美帝颇多的 stop sign,还有小区里的小路来说,它似乎要无能为力了。那么假设智能汽车作为一个测试者要去参加交规测试,关于最基本的路况信息,它都是无法通过的。

因为有图像,我们确实可以根据纯粹模式识别问题来依据输入图像来检测路标。我们暂且不要想计算上可行不可行,不讨论这一点,放到之后再说。

第二,实际上路的路况识别呢?这就又要涉及到模式识别了。既然如此重要,我们得细致的看看。

首先算法需要通过视觉信息检测到动态物体,包括汽车,人,自行车等等。谷歌汽车可以构建出如下图的动态模型出来。比如自动驾驶汽车通过传感器来感知运动的模型,一个个刻画出来,可能是这样。

14b52e7a4924b87f4fc0ea03816553d2_b.jpg
那么现在的问题是,对这些物体进行识别和区分又是一项很艰巨的人物。这是 google 擅长的吧?是的,通过现在的深度学习等机器学习算法,对物体的识别,人脸的识别,都已经做的很好了。但先不说这些场景里物体的识别准确率如何,仅仅在一个实时计算能力有限的系统里,对物体识别判断就已经很让人为难了。

似乎问题是不仅仅是这么简单。实际的路况相当复杂,可能有每秒运动六七米飞奔过来的孩子,还有可能有矮到人都很难发觉的小猫小狗,确定我们的系统依赖于传感器能检测到这些危险的 true positive 么?或者可能仅仅是空中飞过来几片树叶或者纸屑,恰巧被传感器识别到了,车要紧急刹车停止呢,还是直接开过去?或者这样的车还不能上路,我们得先去考虑降低这些 false positive?对现在的智能系统来说,这些细节都放进去,实在是太困难了。

关于路径规划呢,会很复杂么?

这一块主要分为全局的,和局部的。我们既然可以依赖谷歌地图帮助我们导航,智能车相信它也没有任何问题。谷歌地图甚至可以告诉我们在哪个车道行驶,对于这方面规划来说,简直太棒了。

但局部的规划就依赖于路况的信息了。如何检测到突发情况,如何在小区域内局部调整运动线路,也是一个挑战。如何实时构建合理的约束,都涉及到一个场景的复杂程度,和其对应计算量的问题。目前的机器人界的研究,已经有很多研究开始探讨如何实时同时进行识别与规划。

上面说了这么多挑战,每一块都是很有意思的研究,但每一块问题解决都需要一定的计算量作为基础。如何在一个实时系统里同时解决这些问题,这又是系统层面上的挑战。同时,作为计算机系统,安全性,容错率等等,都是要考虑的因素和问题。

同时作为一个商用的系统,价格是回避不了的问题。高精度的激光传感器和 GPS 都造价不菲。即使作为一个成熟的智能系统,如何降低价格,或者在廉价传感器上寻找解决方案,也都是要解决的问题。否则没有人会在刚开始就在一个昂贵的玩具上做如此大投资,况且它似乎还并不比人驾驶更安全。

说了这么多挑战,而且很多似乎都看不出有效的方法来。似乎我在唱衰它, 那么未来要如何改进?

其实它已经很棒了,毕竟 google car 上路在截止 11 年时,对外公布的数据就已经安全行驶了 140000 迈了。路况简单中远距离长途运输似乎应该是它首先发挥功效的地方。只是 google 想的还更多。

现在 BMW,Volvo,Nissan, Honda, Toyota, 甚至 Tesla 都在高调研究自己的自动驾驶系统,并且向外介绍方案。理念也都各有不同。BMW 提倡通过智能帮助人更好的驾驶(我似乎同意),Volvo 则希望政府能在公路上面帮他们做点文章,比如增加点表示以助识别。而 google 则是这方面的激进派,乘客担心不安全想自己帮下忙?No, google 连着方向盘直接去掉了。大家都有稳定的上路测试方案,现阶段都是为了解决问题,进益求精。

回到上面说的问题,那些感知系统的问题怎么办?

但凡是模式识别的问题,google 都有信心,倒不是完全解决,至少它是领先的。Google 的街景地图,以及图像数据库,可以为自动驾驶提供一个非常好的先验知识。在这之上,路标可以训练,人的模型可以训练,树可以训练,一些杂七杂八可能飘在路上的东西也可以训练。这涉及到一块有意思的研究叫做 Object Discovery,我正参与的一个项目就有涉及。至少,我觉得还是有希望和方法很好解决的,只是还需要一段时间。

9


Related Posts 相关文章

One response to “技术贴:谷歌自动驾驶车的难点在哪里?

发表评论

电子邮件地址不会被公开。 必填项已用*标注