60 秒窗与 0.15–0.65 秒区间:横向执行延迟的在线估计

作者:

在

结论:横向执行延迟的在线估计,本质是「用一个 60 秒滑动窗、凑够 25 秒有效样本,再用 FFT 互相关找响应滞后」的过程。它默认在 dt=0.05 s 的离散点上搜索 0.15 秒到小于 0.65 秒的延迟,要求相关峰 ≥0.95、峰宽置信度 ≥0.7;只有攒够 5 个完整块、块间标准差 ≤0.1 秒,状态才标为已估计,否则回退车型初值。进度百分比只是「被接受的估计块数」的量度,不是传感器或控制器的安全认证。

采样窗与节拍:60 秒窗、25 秒门槛

采样用一个 60 秒滑动窗保存时间、目标横向加速度、实际横向加速度与「样本是否可用」的掩码。一个容易踩的细节是:窗口一创建就被零值预填满,队列长度从一开始就是满的,究竟有多少有效数据要看「有效样本计数」而不是队列长度。估计类初始延迟取车型转向执行延迟再加 0.2 秒,并以名义 4 Hz 的节拍对外发布。

估计用的两个量分别是目标横向加速度(目标曲率乘车速平方)与实际横向加速度(校准偏航率乘车速)。只有实际横向加速度有足够动态跨度(不小于 0.5 m/s²)且自上次估计后有新的有效点时,才允许提交新估计。

参数 取值 说明
滑动窗长度 60 秒 创建即被零值与无效掩码预填
有效样本门槛 25 秒 不足则即使执行拟合并算相关也不提交
动态跨度门槛 ≥0.5 m/s² 实际横向加速度跨度
分块粒度 每 100 次接受汇成 1 块,最多 50 块 区分「已完整块」与「含当前未满块的预览值」

采样资格:一组门的组合

每个样本要同时满足多项条件才被标记为可用:横向控制处于激活、驾驶员未介入方向盘、控制未饱和、车速高于 50 mph、偏航率绝对值达到默认门、外参已标定、位姿有效且偏航率与其标准差都小于 1、实际横向加速度不超过 2、目标与实际横向加速度之差不超过 0.6 m/s²。激活中断、驾驶员覆盖、饱和或姿态/加速度非法之后,还需要连续恢复至少 2 秒。

门 阈值 备注
车速 >50 mph 严格大于
偏航率及其标准差 两者均 <1 姿态有效才参与
实际横向加速度 ≤2 超限不入窗
目标与实际之差 ≤0.6 m/s² —
恢复时间 连续 ≥2 秒 覆盖、饱和、姿态非法后重新计时

有一个反直觉的边界:默认的偏航率绝对值门是 0,因此零偏航率也能通过这道门,静态直道并不会被它筛掉——真正限制静态样本的是拟合阶段对动态跨度的要求。

相关性拟合:互相关与「置信度」

拟合先用长度为 5、标准差为 1 的高斯权重对有效样本做掩码平滑(无有效邻域时输出无效值),再用 FFT 做带掩码的归一化互相关来搜索响应延迟,峰位置做抛物线插值。FFT 长度由一组只含 2、3、5、7、11 因子的「下一个合适尺寸」决定。这里的「置信度」来自高相关候选连续区间的宽度,不是统计置信区间,因此不能按统计意义解读。

还有两个数值层面的坑需要说明:其一,全常量信号在部分位移处会出现接近 1 的数值伪峰,所以不能只凭单个高相关值就认定存在有效动态证据(完整流程另有动态跨度门);其二,互相关实现可能原地修改调用方传入的浮点数组,这是实现细节层面的副作用,而非估计语义。

状态与回退:estimated 需要 5 个完整块

估计状态分三种:未估计、已估计、无效。只有至少 5 个完整块、块均值与标准差都不是无效值、且标准差不超过 0.1 秒,才会给出「已估计」;此时生效的延迟会被夹在 0.15 到 0.65 秒之间。未估计或块间离散度过大时,生效延迟回退为车型初值,但仍会把单独的估计值与标准差填进消息供观察。

状态 条件 生效延迟
unestimated 有效样本或完整块不足 车型初值(转向执行延迟 + 0.2 秒)
estimated ≥5 个完整块、标准差 ≤0.1 秒 估计均值,夹到 [0.15, 0.65] 秒
invalid 块间离散度过大等异常 回退车型初值

下游消费与缓存恢复的坑

控制侧直接读取生效延迟并叠加一个平滑量传给横向控制器,在使用点没有显式检查这条消息的顶层有效位或内层状态;而另一个消费者在整体输入检查失败时则不处理输入。两者对同一条消息的消费门并不相同,因此插件化时不能只给一个泛化的 healthy 字段。

缓存恢复还有两个必须知道的边界:其一,恢复的是缓存里的「估计值」与「块数」,而不是生效延迟,恢复校验既不检查估计值是否有限、是否落在搜索区间内,也不要求状态为已估计;其二,块数字段是有符号整数且只检查上界,负数可以通过,从而在界面上产生负的进度百分比。此外,一个标为「未估计」但已携带 5 个块的缓存,在恢复后可能直接让下一次输出报告为「已估计」,即使本次启动并未接受任何新的估计——这是缓存状态与重新计算结果之间的差异,不等于真实延迟已被重新标定。

插件化边界

延迟估计器适合先作为影子主题与原有输出比对,保留输入时间域、掩码、相关度与置信度、块数、状态、回退初值与缓存版本。权威源必须只有一个;异常或过期数据应有独立的消费门与保守回退,且插件不得改变安全策略。上述结论均来自固定源码快照的静态与合成数值分析,合成测试不能证明真实的时序对齐、乱序多主题消息或实车延迟稳定性。

常见问题

相关度达到 0.95 就算估计成功了吗?

不是。0.95 只是相关峰的门槛,还要峰宽置信度 ≥0.7、样本门通过,并攒够 5 个完整块且块间标准差 ≤0.1 秒,状态才会标为已估计;任一条件不满足都不会提交新估计。

为什么估计进度到 100% 也不能当安全认证?

因为进度百分比是「被接受的估计块数」的量度,反映的是估计成熟度,与传感器健康、控制器安全性没有直接关系。估计值随时可能因离散度过大而回退车型初值。

从缓存恢复的延迟一定是本次重新标定的吗?

不一定。恢复的是缓存里的估计值与块数,校验既不要求状态为已估计,也不检查数值是否落在搜索区间;一个标为未估计但已带 5 个块的缓存,甚至可能让下一次输出直接报告为已估计。

车辆一直直线行驶,能估出延迟吗?

不能单靠直道。默认偏航率门虽然允许零偏航率通过,但拟合阶段另要求实际横向加速度有足够动态跨度(不小于 0.5 m/s²),因此持续静态行驶无法形成有效估计。

延伸阅读

参考资料

  • 项目 02 —— openpilot-research/LAGD_LATERAL_DELAY_ESTIMATION_DEEP_DIVE.md(采样窗与门、FFT 互相关与置信度、状态与回退、下游消费与缓存恢复)

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

更新记录

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

评论

发表回复

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