
前言
Openpilot 是 comma.ai 公司开源的L2级别的自动驾驶辅助开源系统,基于 android,主要用 python/c++ 语言开发,github 地址:https://github.com/commaai
Openpilot github 开源项目迭代速度非常快,几乎维持在平均一个月一个版本的样子,而且原CEO神奇小子George Hotz于2018/8月将CEO职位交接给来自特斯拉的 Riccardo Biasini,后者总体负责质量及首席执行官,前者则主要负责整体技术的开发及迭代,这可能也是 comma 能快速迭代的一个原因。

项目
纵观commaai的 github 全部项目(79个),可以主要分为以下几大类:
- 自动驾驶
- 汽车通讯
- android系统
- 机器学习
- 其他辅助
下图是 Pinned 的6个项目:

下图是最近提交的项目:

分析
接下来笔者把个人认为比较重要的项目进行简单的分析:
- openpilot
这个项目是comma 最主要的一个项目,在EON/android设备及汽车之间架起的一座桥梁。通过EON移动设备的摄像头识别道路信息,及各种传感器的数据,经过分析计算后向汽车发出各种加/减速、转变等指令,以达到自动驾驶的目的。
所有的后台服务,主要代码在项目的 selfdrive 目录,其中有一个关键的 visiond 的服务,在 0.5.6 以前是开源且本地编译的,现在代码已经从代码库中删除了(可以认为是闭源了,以二进制方式集成在 android系统中),因为这个模块就是图像识别的关键算法部分。 - panda/opendbc
Panda是comma基于 STM32F413 开发一款让EON和汽车通讯的硬件,基于 opendbc 的汽车 OBD 协议,可以通过不同的 DBC 定义,解析和发送的 OBD 信号,起到了数据转换和解析的网关作用。
按照comma的话:panda is the nicest universal car interface ever!他们期待 panda能成为有史以来最好的通用汽车接口。它最多支持3个CAN,2个LIN和1个GMLAN。同时还可以为手机充电,同时也可能过USB和计算机连接并通讯。

Panda经过好几代的迭代,光从颜色来分就有黑(二代)/白(有WIFI,没有GPS)/灰(有GPS,没有WIFI),关于硬件区别笔者计划在另一个文章再细说。
- comma10k/2k19
深度学习数据集这两个项目是comma公司个人觉得仅次于 openpilot 最重要的项目之一,这决定了自动驾驶的安全性及演进。
comma2k19,这是加利福尼亚州280高速公路上通勤时间超过33小时的数据集。这意味着在加利福尼亚州圣何塞和旧金山之间20公里的高速公路上行驶的2019年路段各长1分钟。comma2k19是一个完全可复制且可伸缩的数据集。数据是使用逗号EON收集的,该EON的传感器类似于任何现代智能手机,包括路面摄像头,手机GPS,温度计和9轴IMU。此外,EON还可以捕获原始GNSS测量数据以及用逗号灰色熊猫汽车发送的所有CAN数据。
为此 comma 还专门写了一个 paper,有兴趣的朋友可以去看下:

comma10 则是道路训练的图像数据集,comma也要网上号召大家去免费做数据打标签工作(以前还会送panda等硬件),毕竟数据量越大训练出来的模型准确率更高,大家驾驶更安全,更智能。
- android/eon
openpilot 代码运行在基于 android 6 (cm13) 系统的设备之上,现在仅支持三款硬件:乐视、一加及comma,项目如下图:

系统编译基本是 CM 那一套,comma 还是将很多关键的组件以二进制的形式提供,所以说openpilot并不算是完全100%的开源,但你可以自已构建并运行起来。
另外说一下为什么只支持这三款机型,是因为openpilot 的图像识别依赖骁龙820处理器,在SOC的固件里有一个硬件加速模块能让系统实时处理摄像头采集到的图像数据。记得 medium 有一篇文章,找到后为大家翻译转载一下。
- cereal/laika 等
后续再补充,主要是一些数据采集、分析和可视化相关。