作者简介:知乎id ryan woo,硅谷软件工程师,第一批特斯拉Model 3车主
之前笔者曾在知乎上发表过两篇关于TeslaAutopilot 1.0的文章,感兴趣的读者可在知乎上查找「Ryan Woo:Tesla自动驾驶的前世今生」、「Ryan Woo:Tesla 自动驾驶2.0」。今天笔者将主要剖析Tesla全自动驾驶之路的最近一个进程——从 Autopilot 2.0 到 3.0的升级。
虽然HW 3.0 FSD 全自动驾驶电脑的喧嚣已经过去一段时间了,不过还是希望这篇文章能够提供一个比较硬核的关于Tesla Autopilot 硬件及其发展历史的介绍。(在下文中为了方便把“Autopilot 自动辅助驾驶” 简称为“AP”)
首先我们来看一下从第一代到如今第三代AP电脑的对比简图:

我们先来聊一个不起眼的东西:摄像头滤镜。
摄像头滤镜
AP 2.5 与AP 2.0 在硬件上一个看似不起眼的区别,便是摄像头从RCCC滤镜换成了RCCB滤镜。
在说RCCC和RCCB滤镜前,我们先说个大家几乎每天都在用的滤镜——RGB滤镜,也叫做拜尔滤色镜:
RGB其实是分布着3种彩色的滤镜,RGB 分别代表着:R(Red)红,G(Green)绿,B(Blue)蓝,但是在实际应用中,为了更好的适应人眼视锥细胞的特性——对绿光尤其敏感,所以我们实际使用了50%的空间安装绿滤镜,剩余各25%安装红和蓝滤镜,因此实际应用中应该被称为RGGB滤镜。

当光线经过不同颜色的滤镜后,我们会得到相应的RGB通光量,再通过去马赛克算法来插值得到每个像素的红、绿、蓝色的组成数值,从而呈现我们所看到的彩色。

解释了我们常见的RGGB滤镜,再来看Tesla 用到的RCCC 和RCCB滤镜。这其中C代表着Clear,也即是白色滤镜,于是当光线通过滤镜时,我们能得到更多的亮度信息而不是色彩信息,这样做的直接好处就是在昏暗的光线下,可以得到几倍于RGB滤镜的亮度信息,这对于CMOS传感器面积有限的车载应用尤其重:

那么为什么我们需要一块红色滤镜呢?聪明的你应该能猜到了——因为人类世界很多警告信息就是用红色/橙色代表的,例如红灯、停车牌等,所以获取红色信息远比蓝色、绿色更为重要。
现在说完了RGGB和RCCC滤镜,RCCB就很好解释了:B也即是蓝色,所以RCCB 就是25%红色,50% 白色,25% 蓝色组成的滤镜[3],那么为什么我们要加入蓝色呢?
因为随着技术的进步,我们不再仅仅只需要获得亮度和红绿灯感知(RCCC),我们还需要更多的靠颜色来感知整个世界,如果说RCCC是最大限度做到辅助驾驶,让一切光线变得有利于物体有无的判断,那么RCCB就是让你在不牺牲亮度的前提下,最大限度的感知整个世界,这也正是全自动驾驶所需要的信息量——我不仅要知道那是一个障碍物,我还需要知道那是一个什么样的障碍物,会对我的自动驾驶决断产生如何的影响。
在Aptina的RCCB演示图标中可以对比看见,RCCB 滤镜能够比参考的RGGB滤镜多出3-4dB 信噪比,同时依然能保证图像的清晰度和接近的彩色还原:

看完了这不起眼的滤镜介绍,这里插播一个问题供大家思考:为什么Tesla HW 2.0 没有提供行车记录仪和哨兵模式呢?
360度环绕摄像头

Tesla Model 3 Autopilot Dance
曾有一个记录视频,仪表盘的车跳得非常欢快。如果这就是AP 计算时摄像头采集的数据,我是不是应该很担心呢?
先说结论:
1. 因为AP摄像头最佳工作状态时运动时,静止或者慢速时会产生不可避免的显示问题。
2. 屏幕显示的动画是示意图,远不是AP实际得到的计算输入数据,因此完全不用担心AP的决策。
现在我就来解释这种看似可笑的显示失误是如何产生的,以及为什么我们不用担心AP 的决策。如前所述,AP HW 2.0 之后的系统装备了8个周边摄像头,由于视角的差异,摄像头与摄像头之间其实是有重叠的部分。

这就是摘取的一个AP状态时侧后、侧左同时看到的一帧图像——非常正常的一辆埃尔法从左后方开过来:

但是我们如果把时间再往后一点,埃尔法侧后还没完全经过,车头却进入了侧左摄像头的视角:

而如果我们看三个摄像头,侧后、侧左和超广,这台埃尔法甚至车头都没有了!同时多了一个屁股留在左后视角中:

我们再往前看一点,左后干净了,但是左侧剩下一点车尾,而超广中居然仅有一个车头:

所以我们再去看刚才那个仪表“跳舞”的视频,结合这里的视角想想,其实就是当车停止或者慢速的时候,摄像头在判断车的形状、方向、大小的细节时被这种切割的画面所干扰,得到了匪夷所思的跳舞效果。类似的,如果你仔细观察一辆车从你后方超车经过,你也会看到动画中的车会在接近你时突然靠近你的车道,似乎是要侧撞了,但是又渐渐回到自己车道,再安全远离。其实这些都是摄像头采集数据时,车在跨越集合部分时断层产生的错误图像。
那么我们究竟要不要在乎这种看似很危险的显示呢?AP 会不会认为旁道的车突然接近我而反向躲避呢?这里就要用到一点神经网络数据处理的知识了——当输入数据的时候,我们是有错误标记的,那么神经网络的第一步就是尽可能标准化我们的数据(Normalization),所以对摄像头视野进行校准,对两个摄像头之间的重叠区域进行标记和取舍就是AP 数据处理时的重要一部分,而这些恰恰是AP 硬件决策计算前可以很容易解决的。还记得你提车时那段几十公里的路校准摄像头吗?就是这个作用——每一台车的摄像头角度会有细微的差异,而这个校准的过程也会一直在背后进行,渐渐的AP电脑就会知道每台摄像头的像差如何,距离如何,重合的视角如何计算,后期就只需要套用这个计算好的补偿公式,便能得到一个完整的360度视频进行传递给AP 的神经网络做决策计算。
所以现在你明白当我们看到那些好笑的“跳舞”小车时,不用过度惊慌了吧!当然如果Tesla 有足够的计算能力,它也能在显示动画小车的部分做这样一个数据校正补偿处理,也许等到HW 3.0 有足够算力时,他们会逐步解决这个显示问题。
Autopilot 车载电脑
在以前介绍AP 1.0 的文章中我详细解释了它的硬件构造和布局,这里我便跳过这部分,直接对HW 2.0、HW 2.5 以及HW 3.0 进行比较和说明。
HW2.0,先说结论:HW 2.0 是赶工的产物,由于那次著名的AP事故,Mobileye 与Tesla 的关系极速变冷,Tesla 只能把还在研发中的HW 2.0 匆忙上架,具体赶工到什么样,我们可以通过电路板间接看出来。
这是NVIDIA 的Drive PX 2开发基板,正面是两块Parker CPU 模组:

NVIDIA Drive PX2 测试基板正面是两块Parker CPU 模组
背面是两块Pascal GPU 模组:

NVIDIA Drive PX2 测试基板背面是两块Pascal GPU 模组
所以总共是:
4x Denver + 8x Cortex A57 CPU + 2x Parker GPGPU。
这是第一批Tesla 2016 Model S AP HW 2.0 的主板,可以明显看到四个问题:
1.主CPU附近有大量的基板留白;
2.整个主板仅有一颗Parker CPU 和一颗Pascal GPU;
3.Pascal GPU 依然通过类似开发主板桥接的方式与主基板连接在一起;
4.背面有大量的留白。
可以明显看出其主板的整体集成度并不高,基本就是NVIDIA 开发公版的简单套用,同时所有芯片加起来仅有:2x Denver + 4x Cortex A57 CPU + 1x Parker GPGPU。
相较于NVIDIA Drive PX2 测试基板理论算力整整少了一倍,如果NVIDIA 都不敢说自己完整版的Drive PX 2 可以做到L5 甚至L4,Tesla 何德何能可以把仅有一半算力的平台做到全自动驾驶?

Tesla 2016 Model S AP HW 2.0 主板-正面

Tesla 2016 Model S AP HW 2.0 主板-背面
所以到这里我想你也能得到同样的结论:
这个HW 2.0 就是内外压力之下,Tesla 匆忙上架的产物,为了降低采购成本,Tesla 仅仅选取了最核心的Drive PX2 AutoCruise(理论计算性能仅有一半)先满足宣传和稳定民心的需要。接下来怎么走?我们站在2019年往回看,那会是风雨摇摆的两年。
2016年12月,就在HW 2.0 发布后不到两个月Tesla AP 主管Sterling Anderson 便离职,而且带走了不少AP 组的工程师和高管去自己的创业公司。

而失去了自己主管的Tesla 情急中找到了LLVM 编译器和Apple Swift 语言的创始人Chris Lattner 来领导AP 开发,而这时的HW 2.0 AP 就像襁褓中的婴儿,不仅硬件资源吃紧,整体软件也要从0开始研发,Elon Musk 许诺的2-3个月便能超越AP 1.0 的计划彻底落空。最终顶着巨大压力的Chris Lattner 仅仅干了不到6个月便悄然离去,加入了Google 。

而购买了AP HW 2.0的车主甚至发起诉讼,控告Tesla 没有拿得出手的AP 可用,就在这生死存亡之时,Elon Musk 终于给AP部门物色到了新的主管——Andrej Karpathy,作为Musk 从OpenAI 挖来的大将,也是李飞飞的高徒,Andrej 临危受命,以一个研究人员的身份扛起了AP 开发的大旗。

也在同一时间,Tesla 发布了HW 2.5 硬件,但是整个过程非常低调,有黑客发现Tesla的在线配置系统突然出现了AP3 代码,才锁定了这个新的平台,Tesla 官方对HW 2.5 一直都非常低调,唯一强调说这只是提供了冗余性,并没有实质性的改变,而直到第一台HW 2.5 拆机时我们才知道,这一年的时间,Tesla 究竟做了多大的改进。
在这张2017 Model 3 的HW 2.5 主板上我们可以欣喜的看见:
1.整体集成度空前提高,没有了留白;
2.多出来一块Parker CPU 模组;
3.Pascal GPU 模组被直接集成到主板中,不再通过桥接方式连接;
背面集成度同样满点,几乎没留下任何多余空间;
所以整体的计算能力提升为:4x Denver + 8x Cortex A57 CPU + 1x Parker GPGPU

Tesla 2017 Model 3 AP HW 2.5 主板-正面

Tesla 2017 Model 3 AP HW 2.5 主板-背面
单就AP HW2.5 主板这个局部来说,其设计的紧密度和集成度空前提高,很难想象这是在资源有限、不到一年的时间中完成的,这种集成度上的飞跃,甚至被拆解过Model 3 的名人Munro 称之为F35 上面才能看到的技术。虽然依然没有完全达到Drive PX 2 AutoChauffeur 的完整效能(缺少一组Pascal GPU),但是设计和布局显然已非常成熟和老道,完全不像是第一次HW 2.0 的青涩和没信心,同时少用了一组Pascal GPU 也给我们留下一个问题:Tesla 究竟葫芦里卖的什么药,HW 2.5 的算力能实现预期的全自动驾驶吗?当然我们现在回顾这一切,都少不了感谢Pete Bannon 和Jim Keller 领导的AP 硬件组的努力。
但是Model 3 带来的集成度提升不仅仅是把AP 芯片主板做到一块干净的主板上,他们还创造性的通过液冷把AP 主板和MCU媒体控制主板通过夹心的方式组装成一块模组——

Tesla 2017 Model 3 AP HW 2.5 + MCU 综合模组
这块模组通过三明治的方式把两块独立的主板集成到一起,再通过液冷共同散热:

Tesla 2017 Model 3 AP HW 2.5 + MCU 综合模组设计图
这与之前Model S/X 那种MCU 和AP 分离式设计通过风冷散热高了又是一倍:

Tesla 2016 Model S MCU 模组+ 触摸屏

Tesla 2016 Model S AP HW 2.0 模组

Tesla 2016 Model S AP HW 2.0 模组拆解
由于充分考虑到了可替换性,HW3 FSD 模组或者说HW 2.5 模组从一开始就是以FSD 模组的设计为原型进行了定型,两者之间完全可以替换使用,功能上可以100% 替代,可见这需要非常强大的设计实力才能预估到短短1-2年中可提前预铺好可升级的能力。满足了兼容性,自然就会一定程度上放弃扩展性,所以HW2.0 - HW3.0 是Elon Musk 对老用户的承诺,同时也是给自己的限制,要想获得更进一步的提升,未来HW 4.0,乃至5.0 很大可能会采用全新的设计以适应新的挑战。

好了,花了这么长的篇幅,我们终于进入到了HW 3.0 的讨论,在下一篇中我会更加细致的解释为什么HW 3.0 会是Tesla 决胜FSD 的武器,以及Model S3XY 能够实现FSD的可能性有多大。
后记:
这篇文章我前前后后改了有一年多,一直没有时间做完最后的润色,但是从最初的标题“从Autopilot 2.0 到Autopilot 2.5” 到如今Autopilot 3.0 都已经量产了。我终于还是觉得不能这样一直拖下去,就已有的信息和结论来说还是能给读者提供一点干货,所以就先成文了。
文|ryan woo
图|ryan woo网络及相关截图