本文档介绍了 openpilot 的数据记录和分析系统,涵盖了驾驶数据的收集、存储、访问和分析方式。有关测试框架和回放系统的信息,请参阅 测试框架 和 回放系统。
openpilot 在驾驶过程中收集大量数据,用于
默认情况下,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)来源: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
用于访问和分析日志数据的主要工具是 tools/lib/logreader.py 类。
来源:tools/lib/logreader.py257-329 tools/lib/route.py163-176 tools/lib/route.py249-296 tools/lib/logreader.py95-144
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 是一个用于可视化 openpilot 日志中时间序列数据的强大工具
脚本 juggle.py 提供了一个便捷的接口,用于
来源: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
回放系统允许您通过回放记录的消息来模拟驾驶会话,这对于
基本回放用法
来源:tools/replay/README.md1-148
openpilot 默认收集驾驶数据以改进系统。数据收集包括
仅当在设置中明确启用时,才会记录面向驾驶员的摄像头。用户可以通过 connect.comma.ai 访问自己的数据,并且该系统是开源的,允许用户根据需要禁用数据收集。
# 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"
来源: tools/lib/logreader.py315-328 tools/plotjuggler/juggle.py82-102 tools/replay/README.md14-26
数据记录和分析系统是 openpilot 的关键组成部分,能够持续改进、调试和研究。灵活的日志格式和 LogReader、PlotJuggler 和回放系统等强大工具为开发人员提供了通过数据驱动分析来理解和改进系统行为所需的各项能力。