8 个扭矩桶、4000 点门槛:横向扭矩在线估计与三层「可用」

作者:

在

结论:横向扭矩响应的在线估计把样本分进八个扭矩桶,用全最小二乘拟合「扭矩—横向加速度」的斜率与偏置,并以残差离散度近似摩擦。但它对外暴露的「可用」其实是三层不同的门:顶层消息有效位来自输入通信检查,内层参数有效位要求各桶达到 [100, 300, 500, 500, 500, 500, 300, 100] 的最小点数且总数达到 4000,「是否使用参数」则只是品牌白名单与调校类型门。三者互不推导,控制侧甚至在未检查内层有效位的情况下就可能使用估计值。

采样门:从健康位到扭矩桶

采样横向加速度按「车速 × 校准偏航率 − sin(滚转) × 重力」计算。进入桶之前要逐层过关:上游各健康位全真、扭矩历史缓冲填满、横向控制已连续激活并稳定 2 秒且驾驶员未覆盖、车速大于 15 m/s、扭矩绝对值大于 0.02、横向加速度绝对值不超过 1。入桶时扭矩值还要落在八个开右端点的 [−0.5, 0.5) 区间之一,区间外的点会被静默忽略。

门 条件 备注
健康位 / 历史缓冲 全真且历史填满 前置门,不满足则不入桶
激活稳定性 连续激活 2 秒、无驾驶员覆盖 —
车速 >15 m/s 严格大于
扭矩绝对值 >0.02 严格大于
横向加速度 ≤1 m/s² 超限不入正常桶

有个容易被忽略的边界:给车控、执行输出与车况的时间戳加的是「当时」的延迟,而设备观测用的是消息内部时间戳。若延迟被置成负值,用于插值的时间窗可能为空;由于对空序列的判断特性,即便激活历史全假、驾驶员覆盖全真,样本也可能被放行。正常延迟名义上是正的,这只是一个「函数本身没有拒绝异常延迟」的说明,并不代表生产环境会收到负延迟。

八个桶与 4000 点门槛

「能算」和「算得可信」是两个不同的门:只要每个桶里至少有一个点,就可以先输出原始拟合;但要标记为有效,各桶必须达到各自的最小点数,且总点数不少于 4000。进度百分比取「总量完成率」与「最低桶完成率」的平均后取整——这意味着某些桶偏少时,整体进度会被拉低。

桶(扭矩区间,左闭右开) 最小点数
第 1 桶 100
第 2 桶 300
第 3 ~ 6 桶 各 500
第 7 桶 300
第 8 桶 100
合计 ≥4000

全最小二乘与负斜率的坑

拟合在「扭矩、常数 1、横向加速度」组成的点阵上做全最小二乘(SVD),把样本随机抽到最多 2000 点,只捕获线性代数异常。斜率与摩擦分别被约束在离线调校的 ±30% 与 ±50% 之内,偏置没有同类限幅。合成验证给出一个值得记住的结论:当斜率为负时(例如拟合 y = −2x + 0.5),斜率本身能被正确恢复,但摩擦却显著非零——原因是把斜率转成旋转角时用了平方根,结果恒为非负,负斜率下的残差没有沿直线方向被消去。这是合成负斜率分支的源码/数值结论,并不证明正常车型会出现负扭矩因子。

数值健壮性还有一处边界:发布与滤波前只用「空值 / 非数」判断拟合结果,没有显式检查正负无穷;在合成输入下,偏置为无穷仍可能带着内层有效位进入滤波。这提示序列化与滤波层都需要独立的有限值校验。

三层「可用」不是同一门

层 来源 实际含义
顶层消息有效 输入主题的通信/频率/有效性检查 不表示拟合已经成熟
内层参数有效 桶分布与数量达标、拟合非空非非数 估计是否成熟
是否使用参数 品牌白名单 + 调校类型 与样本量、内层有效位无关

关键消费事实是:控制侧在扭矩车型上只要求「主题通信健康」与「是否使用参数」为真,就调用参数更新,没有检查内层有效位。因此未完成新标定时,也可能使用初始离线值或历史滤波值——不能把「内层无效」误读为「控制器必然停用」。滤波本身按一阶方式更新,衰减时间从 50 持续增大到最多 250;一次更新里会先用旧系数更新滤波值,再用增大后的衰减重算系数。整个过程最终仍要经过车辆接口与 panda 安全策略,估计插件不得直接发送 CAN。

持久化与恢复的边界

缓存键是持久参数。恢复时先核对车型指纹与恢复键:匹配且内层有效时恢复三个滤波值与缓存点;兼容但内层无效时,仍会加载缓存点并恢复衰减值。恢复不是事务式提交——一旦解析中途异常,内存中已经装载的部分状态可能保留,而已写入的缓存键会被删除,形成一个「条件性部分恢复」的风险;车型指纹或版本不匹配时则跳过缓存但不删除键。

插件化边界

做插件化时,扭矩估计器宜先作为只读影子实例,输出独立候选主题,控制端只允许单一权威发布者。插件契约需要显式携带车型/调校版本、延迟时间语义、坐标系、采样覆盖率、顶层通信有效位、内层拟合有效位与输出年龄。切换为权威源前必须证明缓存恢复、缺失或异常输入、横向激活与驾驶员覆盖门以及回放等价性,且不得绕开既有安全许可。

常见问题

每个扭矩桶里有点,就等于参数可用了吗?

不等于。「能算」只要求每个桶非空,可以先输出原始拟合;「可信」还要求各桶达到 100/300/500 的最小点数且总数达到 4000,才会把内层参数有效位标为真并更新滤波值。

从缓存恢复的估计点一定是本次标定的吗?

不一定。兼容时无论内层有效位真假,都会加载缓存点并恢复衰减值;缓存恢复不是事务式提交,解析中途异常可能留下部分内存状态,因此只能视为条件性部分恢复。

为什么负斜率的摩擦估计会明显偏大?

因为把斜率转成旋转角时使用了平方根,结果恒为非负,负斜率下的残差没有沿直线方向被消去,于是垂直残差偏大、摩擦被高估。这是合成负斜率分支的结论,不证明正常车型会出现负扭矩因子。

内层参数标记为无效,控制器会不会停用估计值?

不会仅凭这一点停用。控制侧只检查主题通信健康与「是否使用参数」,不检查内层有效位,因此未完成新标定时仍可能使用初始离线值或历史滤波值;最终输出还要经过车辆接口与安全策略。

延伸阅读

参考资料

  • 项目 02 —— openpilot-research/TORQUED_LATERAL_TORQUE_LEARNING_DEEP_DIVE.md(采样门、八个扭矩桶与 4000 点门槛、全最小二乘与滤波、三层有效位、持久化与插件边界)

说明:本文为对固定源码快照的静态结构分析,未运行完整测试套件、未连接硬件、未验证目标车型的真实参数组合。文中所有桶阈值、点数门槛与配置均出自源文档,标注为未验证的结论保留其原有边界;合成点拟合结论不代表实车扭矩响应。

更新记录

首次发布 2026-10-11 最近核对:2026-10-11

评论

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注