数据质检
数据质检按规则扫描每条 MCAP 录制的结构化报告,对数据集给出通过或未通过的判定,并在数据集上汇总展示结论。规则分项目级与全局两级,判定可被人工覆盖,结论与系统标签、导出拦截联动。
数据质检的对象是 ROS 录制数据(当前以 MCAP 为主)。
使用前提
| 项 | 内容 |
|---|---|
| 菜单入口 | 数据 → 质检 |
| 路由 | 规则列表 /qc/rules;执行日志 /qc/logs;数据集质检详情 /qc/dataset/{id} |
| 必需权限 | 「查看质检」 |
| 相关权限 | 「执行质检」(质检执行回写)、「质检规则管理」、「数据计算/预处理」(在数据集侧手动触发质检) |
| 依赖 | 数据集为 MCAP;规则所选算法已注册且声明非空指标 schema |
| 生效规则 | 管理员不受模块权限限制;其他角色按角色默认模板生效,用户级覆盖优先于角色默认 |
模块权限的配置方式见 模块权限。各角色的模块默认级别:
| 角色 | 「查看质检 」 | 「执行质检」 | 「质检规则管理」 |
|---|---|---|---|
| 项目经理 | 只读 | 读写 | 读写 |
| 采集员 | 只读 | 读写 | 禁止 |
| 标注员 | 禁止 | 禁止 | 禁止 |
| 审核员 | 禁止 | 禁止 | 禁止 |
规则与指标
角色与规则维护范围
| 操作 | 管理员 | 项目经理 | 其他角色 |
|---|---|---|---|
| 查看规则与执行日志 | 允许 | 允许,受项目数据范围约束 | 需「查看质检」 |
| 维护项目规则 | 允许 | 允许,限所属项目 | 禁止 |
| 维护全局规则 | 允许 | 禁止 | 禁止 |
| 覆盖执行结果 | 允许 | 允许,限所属项目的数据集 | 禁止 |
全局规则的创建、编辑、删除、复制仅管理员可执行;非管理员在列表中可见全局规则,但不能修改。
质检规则
一条规则绑定一种质检算法、一个作用域与一组断言。

| 字段 | 类型 | 必填 | 默认值 | 取值范围 | 说明 |
|---|---|---|---|---|---|
| 规则名 | 文本 | 是 | — | 最多 200 字 | 规则标识 |
| 规则说明 | 文本 | 否 | 空 | 最多 500 字 | 规则用途备注 |
| 作用域 | 选项 | 是 | 项目 | 全局、项目 | 全局规则对全平台 MCAP 生效;项目规则仅对所选项目生效 |
| 匹配数据名 | 文本 | 否 | * | glob,支持 * 与 ? | 对数据集名称匹配;留空表示作用域内全部数据名 |
| 质检算法 | 选项 | 是 | — | 已注册且声明指标 schema 的算法 | 决定报告指标的来源 |
| 启用 | 开关 | 是 | 启用 | 启用、停用 | 停用后不参与匹配与自动排队 |
| 优先级 | 整数 | 是 | 100 | 整数,越小越优先 | 决定列表与执行排序;命中规则各自独立判定 |
| 断言 | 列表 | 否 | 空 | — | 见「断言」 |
有项目归属的数据集同时匹配全局规则与所属项目规则,两级规则各自产生独立的执行记录。

断言
断言是规则内的判定条件,共三种类型。
| 类型 | 判定对象 | 判定规则 |
|---|---|---|
| 数值阈值 | 报告指标 | 按比较符与阈值判定,如 frame_rate >= 20 |
| 必需 Topic | 全文件 Topic 列表 | 报告中必须出现指定 Topic |
| 禁止 Topic | 全文件 Topic 列表 | 报告中不得出现指定 Topic |
数值断言带比较符、阈值、严重度与范围:
| 属性 | 取值 | 说明 |
|---|---|---|
| 比较符 | <=、>=、<、>、==、!= | 与阈值比较 |
| 严重度 | 不通过(error)、警告(warning) | 任一不通过级断言失败即判定本次未通过;警告仅记录 |
| 范围 | 全部、按 Topic、按 Schema | 全局指标仅支持「全部」;逐 Topic 指标须选「按 Topic」或「按 Schema」 |
范围决定指标的取值来源:范围为「全部」时读取全文件指标;范围为「按 Topic」或「按 Schema」时,对匹配到的每一行 Topic 明细独立比对,任一行失败则该断言失败。按 Schema 比对前会归一化消息类型名称(小写,移除 /msg/)。
注意
全局指标与逐 Topic 指标的取值范围不通用。错误组合会直接 判定失败,失败明细标明配置错误。范围「按 Topic」或「按 Schema」的模式未匹配到任何 Topic 时,该断言判定失败。
检测指标
质检由算法容器与平台两层完成:容器扫描 MCAP 并输出结构化报告,平台依据规则中的断言对报告字段逐项评估。
全局指标
全局指标取自报告的全文件标量,配置数值断言时范围须为「全部」。
| 界面名称(单位) | 指标键 | 方向 | 检测目的 | 计算方法 | 默认建议值 |
|---|---|---|---|---|---|
| 录制时长(s) | record_duration_sec | 越大越好 | 有效录制时间过短 | 全文件所有 Topic 时间跨度的最大值减最小值 | >= 3 |
| 时间戳回退次数 | timestamp_monotonic_violations | 越小越好 | 时间戳非单调或写入乱序 | 按文件写入顺序,各 Topic 内记录时间(log_time)与消息 header.stamp 出现 t[i] < t[i-1] 的次数之和 | <= 0 |
| 输入数据异常数 | input_error_count | 越小越好 | 空消息、截断消息、非法时间戳 | 无法解码的消息数加非法时间戳消息数;大于 0 时无论规则配置如何都判不通过 | <= 0 |
| 无法解码的消息数 | undecodable_message_count | 越小越好 | 消息为空、被截断 或与 schema 不符 | 有解码器但解不开的消息条数 | <= 0 |
| 非法时间戳消息数 | invalid_header_stamp_count | 越小越好 | header.stamp 为 0、为负或纳秒溢出 | 为负、纳秒 ≥ 1e9,或在其他帧有有效时间戳的 Topic 上为 0 的消息条数 | <= 0 |
| 参考 topic 帧率(Hz) | frame_rate | 越大越好 | 主数据流平均发布频率偏低 | 参考 Topic 消息数除以文件时间跨度 | >= 20 |
| 帧间隔中位数(ms) | frame_gap_median_ms | 越小越好 | 主数据流基准间隔偏大 | 参考 Topic 相邻时间差序列的中位数 | <= 50 |
| 帧间隔 P95(ms) | frame_gap_p95_ms | 越小越好 | 间歇性发布延迟 | 同一序列的 95 分位 | <= 200 |
| 帧间隔 P99(ms) | frame_gap_p99_ms | 越小越好 | 偶发长间隔 | 同一序列的 99 分位 | <= 500 |
| 最大帧间隔(ms) | frame_gap_max_ms | 越小越好 | 单次最长发布间隔 | 同一序列的最大值 | <= 1000 |
| 丢帧次数 | drop_frame_count | 越小越好 | 相对正常节律的异常长间隔 | 参考 Topic 上相邻间隔大于 1.5 倍中位间隔的次数 | <= 0 |
| 跨 topic 同步 P95(ms) | cross_topic_sync_p95_ms | 越小越好 | 多通道时间对齐误差 | 各非参考 Topic 与参考 Topic 最近邻差 P95 的最大值 | <= 50 |
| 跨 topic 同步 P99(ms) | cross_topic_sync_p99_ms | 越小越好 |