该文档主要供内部使用,但我想知道为什么不将其公开?openpilot是我们在github开源的ADAS系统,任何人都可以参与其中。我们将从硬件开始,然后逐步提高。
运行openpilot系统必须需要三块硬件:
Panda是EON与汽车之间的安全执行桥梁,它使用对功能安全性有高度支持的芯片以及不久将符合MISRA(已完成),ISO26262和SIL2要求的软件。
EON运行了一套基于CM13(Android6.0)的Android修改版,在该版本中,本文将涉及的所有进程都将运行。而且汽车显然是汽车,其中3个CAN的布置与汽车线束的配置正确(令人惊讶的是有多少制造商符合此规格)。
开车后,我们找到了由我们的硬件团队维护的熊猫固件。由此,我们到达了EON,并开始了我们的软件之旅。您可以在openpilot/selfdrive中找到这些守护程序。
它们通过cereal共享一个指定的IPC格式的消息。所有的消息都是单一发布者且多个订阅的传递,其摘要使得可以使用多个后端。目前,我们支持ZMQ和自定义msgq。
boardd
这是panda固件的接收方。它使用libusb进行通信并将原始USB层通信解析为“CAN”数据包。在灰熊猫和黑熊猫上,它还广播来自NEOM8的GPS数据包。
camerad
这是相机堆栈。所我所知,这是高通唯一公开的定制的相机实现(其他应该都是闭源的),它直接与内核对话。它可以同时捕获道路和驾驶员摄像机,并处理自动对焦和自动曝光。
sensord
其余的传感器在这里处理,包括陀螺仪,加速计,磁力计和灯光。GPS和高通原始GPS数据也在这里被处理得很好。
NEOS内核空间
这是Linux内核,而Android则是一团糟。你会发现我们开源的内核在这里,并且我们的Android仓库的fork在这里。内核统一运行在OnePlus3和LePro3这两款运行骁龙820的手机上。
modeld
主模型位于models/driving_model.dlc文件中,它从公路摄像机中拍摄一张照片,并回答“我应该往哪里驾驶汽车?”这一问题。它还接受一个需求输入,该输入可以命令模型采取行动,例如转弯或改变车道。这是许多逗号魔术发生的地方,它具有深远的时序性,并且以超出深度学习技术水平的方式和技巧进行训练。
modeld还运行models/posenet.dlc中的posenet。它接收两个帧并在它们之间输出6自由度变换。它用于校准和完整性检查,并且未经特别神奇的方式培训。
monitoringd(位于modeld目录中)
这是驾驶员监视模型运行程序。它使用models/monitoring_model.dlc中的模型跟踪您的头部姿势,眼睛位置和眼睛状态。这个服务运行在DSP上,以便不使用其他守护程序所需的CPU或GPU资源,从而为它提供了巨大的增长空间。
locationd/ubloxd(TBD)
因此,现在可以进行定位了,但这并不是真正的本地化程序的最终目标。现在,它将在ubloxd中解析来自ublox的数据流,然后将其与posenet组合以获得稳定的偏航估计。
calibrationd
该模型采用已校准的帧,这意味着在模型甚至查看图片之前就已校正了偏航和俯仰。这很重要,因为用户可以通过各种方式安装其EON,并且校准会输出转换以使其规范化。
controlsd
这是驱动汽车的主要100hz循环。它从计划者那里得到一个计划,并构造实现该计划所需的CAN数据包。它还发布了carState,这是我们通用的汽车抽象。
plannerd(位于controls目录中)
模型输出不足以驾驶汽车。它输出汽车的位置,但不知道如何将汽车送到那里。在计划程序中,我们运行3个基于ACADO的MPC控制回路,其中1个用于横向控制,而2个用于纵向控制。
radard(位于controls目录中)
这会将雷达解析为RadarState数据包。汽车具有所有不同的雷达,这使它们规范化。
paramsd(位于controls目录中)
这是基于汽车的参数的学习者,例如轮胎刚度,转向角偏移和转向比。
loggerd
该守护程序预订所有套接字和摄像机,并将它们写出到日志中。
uploader/deleter
记录数据后,我们必须将其存储到云中。但是并非所有数据都将其存储到云中,我们删除旧数据以确保始终有可用空间。就像真正的行车记录仪一样。
UI
这是主要的驾驶界面。这是一个2300行的混乱局面,需要重构,但确实可以工作。
apk.frame
这是外边界。很快,它将被合并到C++UI中。其来源就在这里。
apk.offroad
这是设置菜单,入门教程,里程显示以及逗号白金版广告。它是用ReactNative编写的,并且源码在这里。
athenad
这项服务可让您与停放的汽车进行实时通信。查看API访问这里。
manager/thermald
这将启动和停止使openpilot工作的进程群。
updated
该守护程序管理openpilot更新。
logmessaged/tombstoned/logcatd/proclogd
这些是处理或系统行为异常时记录数据的助手。
NEOS用户空间
这是EON上基于termux的用户空间。它在Android上提供了类似Linux的环境。
openpilot总体架构图如下:
全部评论 (0)