openpilot0.9.6正式发布

模型改进

此版本有两项显着的驾驶模型改进。

Blue Diamond 模型中,我们增加了用于训练视觉模型的独特图像的数量,此外还应用了更多正则化(权重衰减)并从 FastViT 架构中删除了全局平均池化。这些变化显着提高了驾驶性能,尤其是在出口和变道等所需情况下。

洛杉矶模型中,我们更改了模型与 openpilot 其余部分之间的接口。该模型仅输出一个让汽车执行的动作,在本例中,达到所需的曲率。这使得模型和控件之间的横向 API 只是一个值,从而简化了代码并允许模型执行更多操作。这提高了性能,并为架构在未来更干净地执行强化学习做好了准备。所有这些变化仅适用于横向;我们很快就会对纵向进行类似的更改。

左图:驾驶模型预测一个计划,该计划会输入 MPC 优化算法,然后使用经典近似将其转换为所需的曲率。
中: MPC 优化是学习的,是驾驶模型的一部分。
右:模型现在直接输出所需的曲率。

新的驾驶员监控模式

新的Quarter Pounder Deluxe驾驶员监控模型现在使用更加多样化的数据集进行训练,与之前的模型相比,其独特用户数量 (3200+) 增加了 4 倍。这可以提高更多种类的汽车内饰和驾驶员的性能,同时分心警报的灵敏度保持不变。

操作系统更新至AGNOS 9

这是一个较小的 AGNOS 更新,支持 LightningHard(我们自己的基于 Snapdragon 845 的 SOM),很快将开始以逗号 3X 形式发货。本次更新还包括:

  • 修复了启动时闪烁的问题
  • 修复了罕见的音频播放问题
  • 记录设备显示时减少条带
  • USB3 支持快速启动闪存
  • 主机名中的设备序列号,例如tici->comma-aeffe5d0

机器学习控制

0.9.2 版本中,我们为雪佛兰 Bolt 引入了非线性前馈函数。尽管改进了控制,但这不是一个可扩展的解决方案。它没有考虑对速度和前进加速度等因素的依赖。即使我们确实考虑了所有变量,它也需要首先猜测参数化函数,然后学习常数的权重。最后,它涉及我们自己在实际汽车中进行测试,或者要求用户尝试一下。即使我们做了所有这些,仍然有可能无法覆盖所有场景。这个漫长而模糊的循环阻止我们将 PR 与自定义前馈函数、用户所说“感觉更好”的权重更改,甚至像twilsonco 的 NNFF这样的神经模型合并,因为没有真正的方法来彻底测试它们。

机器学习控制模拟永久链接

一个样本中的预测与真实情况(非自回归)

因此,我们开发了 MLControlsSim。这是一个基于 GPT-2 的模型,它采用汽车状态(如速度、路面滚动、加速度等)和转向输入来预测汽车在固定上下文长度下的横向响应。该模型是使用comma-steering-control数据集进行训练的。在推理过程中,模型以自回归方式运行以预测横向加速度。该模型经过良好训练后,现在可以代替汽车使用!

在一个细分市场上多次推出

Bolt 神经控制永久链接

验证控制模拟器是否按预期工作的一种简单方法是在模拟器中比较循环中的真实情况、线性和非线性前馈函数。

控制模拟器与不同的控制器循环运行

现在我们已经有了测试基础设施,我们训练了一个前馈函数来预测所需的转向输入 – 一个非常简单的 4 层 MLP。

前馈目标和预测

该模型在我们的控制模拟器中进行了循环测试,表明这是性能最佳的前馈!

控制模拟器与神经前馈循环运行

一旦我们将此前馈函数传送到主控制器中的控制器,我们就观察到驾驶模型(模型希望在 t=0 时)的 y0 预测比发布中的控制器更好。

y0依次分布

这是朝着所有平台的端到端神经控制迈出的非常令人兴奋的第一步。这将首先消除学习前馈函数过程中的所有猜测。但更重要的是,它为我们提供了一个框架来推理和比较各种算法——而无需接触汽车。然而,仍有一些悬而未决的问题。例如,模拟器无法正确模拟高频振荡,因为训练数据中大多不存在高频振荡(用户通常在振荡期间不会保持开放驾驶模式)。我们当前的首要任务是解决这些问题并发布特定于平台的模拟器模型以供社区进行实验。

openpilot 工具永久链接

段范围永久链接

在此版本中,我们引入了一种用于指定路线和路段的新格式,称为“路段范围”。让我们来分解一下:

344c5c15b34f2d8a   /   2024-01-03--09-37-12   /     2:6    /       q
[   dongle id     ] [       timestamp        ] [ selector ]  [ query type]

选择器允许您使用 Python 切片语法选择片段。在此示例中,您将获得分段[2,3,4,5]

重新设计的日志读取器永久链接

这种新格式与我们的新 LogReader 完美搭配,它使用起来更加简单,并且可以自动确定读取源。

# get rlogs from segments 2->5
lr = LogReader("344c5c15b34f2d8a/2024-01-03--09-37-12/2:6")

# get the last qlog
lr = LogReader("344c5c15b34f2d8a/2024-01-03--09-37-12/-1/q")

# get every second qlog (Python slicing syntax!)
lr = LogReader("344c5c15b34f2d8a/2024-01-03--09-37-12/::2/q")

逗号车段永久链接

我们还发布了一个新的开源汽车数据集,其中包括数千个细分市场和can数据carParams。该数据集的目标是每个平台 1000 个分段加上每个加密狗 ID 20 个分段,初始版本包含 145595 个分段。这是来自 3677 个用户和 223 个车型的 2500 小时的数据。我们计划在新平台获得支持时经常刷新此数据集,并将其扩展到我们有日志的不受支持的汽车。

我们还发布了一些笔记本作为我们内部验证汽车变更的示例。在审查 PR 时,验证更改会花费我们的大部分时间,这使得外部贡献者能够进行与我们相同级别的验证。随着该数据集的发布,所有汽车特定工作的“内部”和“外部”工作流程之间不再有区别;我们都使用相同的代码数据工具

汽车

此版本带来了对丰田 RAV4 和 RAV4 Hybrid 2023-24 的支持,它们利用车道追踪辅助系统,这是丰田新的基于角度的转向控制 API。正如在支持福特曲率控制时所做的那样,我们借此机会重构并简化了熊猫安全:

  • 重构以指定 RX 消息频率(以 Hz 为单位)以提高可读性(panda#1754
  • 重构以消除重复的 RX 和 TX 消息检查(panda#1727panda#1730
  • 添加安全代码覆盖率报告并断言整个安全文件夹的全行覆盖率(panda#1699
    • 添加 ELM327 安全测试 ( panda#1715 )
    • 添加逗号主体安全测试(panda#1716
    • 支持多个继电器故障地址,为RAV4 alpha openpilotlongitudinal做好准备(panda#1707

我们还将突变测试引入 panda,从简单的 MISRA C:2012 伪造测试 ( panda#1763 ) 开始。这很快就会扩展到汽车安全测试(panda#1755),以发现测试中可能导致安全错误的覆盖范围失误。

CAN模糊测试

openpilot 和 panda 有重复的代码来解析汽车的状态和安全逻辑。这种重复允许 panda 独立于 openpilot 执行安全模型,但它也容易出现 openpilot 和 panda 对汽车状态不一致的错误。在此版本中,我们添加了一个测试,用于模糊 CAN 字节并比较解析出的汽车状态,以确保 openpilot 和 panda 之间的一致性(#30443)。

这个新测试发现了几个错误:

  • CANParser:不要溢出无效计数器(opendbc#976
  • CANParser:不要部分更新消息信号(opendbc#977
  • 本田博世:修复备用制动地址检查竞争条件(panda#1746
  • 现代:修复刹车按下位掩码(panda#1724
  • 日产:检查公交车是否有按下刹车的消息(panda#1740
  • 安全:添加逗号踏板计数器和频率检查(panda#1735

增强功能

  • GM:检查较新车型上的盲点监视器(#30861
  • GM:通过神经横向前馈改进 Bolt EV 和 EUV 横向控制 ( #31266 )
  • 现代 CAN FD:为某些 ICE 车辆启用 alpha openpilot 纵向 ( #30034 )
  • 现代 CAN FD:改进 Tucson 2022-23 的转向调整 ( #30513 )
  • 斯巴鲁:为旧型号启用 alpha openpilot 纵向 ( #30714 )
  • 测试:并行 panda 安全测试 ( panda#1756 )
  • 测试:随机化内部汽车细分列表的子集TestCarModel,扩大覆盖范围(#30653
  • 丰田:为 RAV4 和 RAV4 Hybrid 2022-24 启用 alpha openpilot 纵向 ( #29094 )

指纹识别

此版本还重点关注改善 Comma 3X 的即插即用体验,消除许多品牌和型号对 OBD-II 端口进行指纹识别的依赖。我们还进一步改进了所有丰田车型和部分现代 CAN FD 车型的模糊指纹识别,下一版本中还将提供更多功能。

最近 100 个新指纹识别设备的每日滚动指标显示近几个月有所改善
  • 福特:不带 OBD-II 端口的指纹 ( #31195 )
  • GM:记录新一代型号上的相机固件版本(#31221
  • 现代 CAN FD:通过检测车辆是否为混合动力 ( #31237 ) 来合并一些平台 ( #31238#31235 ),从而改进较新的 Sorento 车型的模糊指纹识别 ( #31242 )
  • 马自达:不带 OBD-II 端口的指纹 ( #31261 )
  • Nissan:没有 OBD-II 端口的指纹 ( #31243 )
  • Subaru:不带 OBD-II 端口的指纹 ( #31174 )
  • 丰田:从模糊指纹中删除不相关的 ECU,改进对看不见的汽车的识别(#31043
  • VIN:不带 OBD-II 端口的查询(#31165#31224#31308#31348#31398

新增适配车型

  • 雪佛兰 Equinox 2019-22 支持感谢 JasonJSuler 和 nworb-cire!( #31257 )
  • 道奇杜兰戈 2020-21 支持 ( #31015 )
  • 现代 Staria 2023 支持感谢 sunnyhaibin!( #30672 )
  • 感谢 sunnyhaibin 的支持,起亚 Niro 插电式混合动力 2022 年!( #30576 )
  • 感谢 nelsonjchen 的雷克萨斯 LC 2024 支持!( #31199 )
  • 丰田 RAV4 2023-24 支持 ( #30109 )
  • 丰田 RAV4 混合动力 2023-24 支持 ( #30109 )