本技能聚焦数据接入 Rerun 时的建模决策,而非 API 调用。核心模型为:Dataset → Segment → Layer → Recording → Entity → Component → Chunk。Entity 是由路径命名的事物,Component 是其上的一个带类型字段,Archetype 是标准组件组合。每个值落在两个轴上:位置(实体路径+组件)与时间(某条时间线或 static)。Segment 对应一个 episode,注册后 recording_id 成为 segment_id;Layer 是叠加在 segment 上的额外 .rrd,仅靠匹配 recording_id 附着。
建模前应先填映射表(源、实体路径、Archetype、组件、时间线、静态/时序、base/layer、是否属性),再写转换代码。机制选择优先用 reader + lenses:MCAP→McapReader、URDF→UrdfTree、parquet→ParquetReader、HDF5→Hdf5Reader、RRD→RrdReader、LeRobot 目录→log_file_from_path,由 reader.stream() 产生 chunk。仅当源为真正外部元数据或无通用 reader 时,才用 Chunk.from_columns。
关键决策:同一实体加组件用于同实例的辅助数据(如逐点置信度),新实体用于独立空间坐标系、标注上下文或需独立显示/清除/共享者;属性用于每个 episode 一份的元数据(操作员、机器人、站点、任务、日期);static 用于不变项(标定、坐标系、机器人网格),会被所有时间线的同组件时序值遮蔽;时序时间戳可用 ns since epoch 或序列号,不要重采样到统一频率,查询时 latest-at 通过保持各组件最后样本对齐多速率流。base 为原始流忠实转换,layer 放派生数据(如由 URDF 与关节状态计算的 FK、由深度与内参计算的点云),两者分开存为 .rrd。
常见陷阱:查询中组件列返回为 ListArray,索引 [0]/[0][0](DataFrame 0 基,SQL 1 基);layer 必须共享 segment 的 recording_id 才能附着,application_id 注册时被丢弃;send_columns/send_chunks 不自动添加 log_time/log_tick,须显式传入所需时间线;同一帧对上每个实体只允许一个 Transform3D/Pinhole 关系;实体路径不是文件路径。用默认 RecordingStream 写 catalog layer 会注入 /__properties 块,可能在与 base 段按 recording_id 合并时冲突,导致打开时数据集默认蓝图失效,应以 send_properties=False 构造该 layer 的流。