菜单

数据日志与分析

相关源文件

本文档介绍了 openpilot 的数据记录和分析系统,涵盖了驾驶数据的收集、存储、访问和分析方式。有关测试框架和回放系统的信息,请参阅 测试框架回放系统

数据记录概述

openpilot 在驾驶过程中收集大量数据,用于

  1. 训练更好的模型并提高 openpilot 的性能
  2. 使开发人员能够分析和调试系统行为
  3. 通过 connect.comma.ai 为用户提供对其驾驶数据的访问权限

默认情况下,openpilot 会记录面向道路的摄像头、CAN 消息、GPS、IMU、磁力计、热传感器读数、崩溃和系统日志。仅当在设置中明确启用时,才会记录面向驾驶员的摄像头。

来源:README.md100-106 tools/lib/logreader.py tools/plotjuggler/juggle.py

日志数据结构

路线和分段

openpilot 中的驾驶数据组织为路线和分段

  • 路线:一个完整的驾驶会话,由 dongle_id|timestamp 格式标识(例如,a2a0ccea32023010|2023-07-27--13-01-19
  • 分段:路线的细分(通常为 1 分钟片段),通过在路线名称后附加分段编号来标识

来源:tools/lib/route.py20-60 tools/lib/logreader.py50-94

日志类型

每个分段包含几种类型的日志文件

文件类型描述格式目的
rlog.bz2/zst原始日志Cap'n Proto 序列化消息完整的、详细的全部数据日志
qlog.bz2/zst查询日志Cap'n Proto 序列化消息数据子集,优化以实现快速查询
fcamera.hevc前置摄像头H.265/HEVC 视频路面摄像头录像
dcamera.hevc驾驶员摄像头H.265/HEVC 视频驾驶员面向摄像头录像(如果已启用)
ecamera.hevc广角摄像头H.265/HEVC 视频广角路面摄像头(在 comma 3 上)
qcamera.ts快速摄像头MPEG 传输流较低质量视频,用于快速查看

日志文件包含序列化的 Cap'n Proto 消息,每条消息都包含一个时间戳(logMonoTime)和一个类型指示符。

来源:tools/lib/route.py12-17 tools/lib/logreader.py31-79

读取和访问日志数据

LogReader 类

用于访问和分析日志数据的主要工具是 tools/lib/logreader.py 类。

来源:tools/lib/logreader.py257-329 tools/lib/route.py163-176 tools/lib/route.py249-296 tools/lib/logreader.py95-144

分段范围 API

openpilot 提供强大的分段范围 API 用于指定要加载的分段

344c5c15b34f2d8a   /   2024-01-03--09-37-12   /     2:6    /       q
[   dongle_id     ] [       timestamp        ] [ segments ]  [ log type]

分段范围使用示例

分段范围描述
route_name/4仅第四个分段
route_name/4:6第四个和第五个分段
route_name/-1最后一个分段
route_name/:5前五个分段
route_name/1除第一个分段外的所有分段
route_name/4/q第四个分段,使用 qlog
route_name/4/r第四个分段,使用 rlog(默认)

来源:tools/lib/README.md35-59 tools/lib/route.py249-296 tools/lib/logreader.py95-144

基本用法示例

读取和分析日志数据

来源:tools/lib/README.md1-33 tools/lib/logreader.py257-329

分析工具

openpilot 提供了多种用于分析日志数据的工具

PlotJuggler 集成

PlotJuggler 是一个用于可视化 openpilot 日志中时间序列数据的强大工具

脚本 juggle.py 提供了一个便捷的接口,用于

  • 从路线或分段加载数据
  • 使用 DBC 文件解析 CAN 消息
  • 应用预配置的布局进行常见分析
  • 从正在运行的 openpilot 实例流式传输实时数据

来源:tools/plotjuggler/juggle.py19-139 tools/plotjuggler/README.md1-74

调试实用程序

openpilot 包含几个用于分析系统性能特定方面的实用程序

实用工具目的
check_timings.py分析消息时序统计数据
check_freq.py监控消息频率
check_lag.py检测消息传递中的异常延迟

来源:selfdrive/debug/check_timings.py selfdrive/debug/check_freq.py selfdrive/debug/check_lag.py

回放系统

回放系统允许您通过回放记录的消息来模拟驾驶会话,这对于

  • 无需车辆即可进行调试和开发
  • 可视化系统行为
  • 使用先前记录的驾驶数据测试更改
  • 在没有真实硬件的情况下使用 UI

基本回放用法

来源:tools/replay/README.md1-148

数据收集与隐私

openpilot 默认收集驾驶数据以改进系统。数据收集包括

  • 面向道路的摄像头
  • CAN 消息
  • GPS、IMU 和磁力计数据
  • 热传感器读数
  • 崩溃日志
  • 系统日志

仅当在设置中明确启用时,才会记录面向驾驶员的摄像头。用户可以通过 connect.comma.ai 访问自己的数据,并且该系统是开源的,允许用户根据需要禁用数据收集。

来源:README.md97-107

常见数据分析工作流

1. 分析特定驾驶

# Read logs from a specific route
lr = LogReader("dongle_id|timestamp")

# Visualize with PlotJuggler
cd tools/plotjuggler && ./juggle.py "dongle_id|timestamp"

# Replay the drive
cd tools/replay && ./replay "dongle_id|timestamp"

2. 提取特定数据

3. 性能分析

4. CAN 分析

来源: tools/lib/logreader.py315-328 tools/plotjuggler/juggle.py82-102 tools/replay/README.md14-26

结论

数据记录和分析系统是 openpilot 的关键组成部分,能够持续改进、调试和研究。灵活的日志格式和 LogReader、PlotJuggler 和回放系统等强大工具为开发人员提供了通过数据驱动分析来理解和改进系统行为所需的各项能力。