rerun
机器人多模态数据的实时可视化与训练数据管道
加载项目详情…
本应用为开源项目,仅供学习研究,请遵守其开源协议。
机器人多模态数据的实时可视化与训练数据管道
加载项目详情…
本应用为开源项目,仅供学习研究,请遵守其开源协议。
想象你正在训练一台自动驾驶汽车,它需要同时处理来自摄像头的图像、激光雷达的点云、GPS的定位数据、车速传感器的时序信息——这些"多模态"数据来自不同传感器,采样率各不相同,格式也天差地别。如何把它们统一起来、可视化出来、查出来、用起来?这是 Rerun 想要回答的问题。
Rerun 诞生于物理 AI(Physical AI)领域的实际痛点。在机器人开发中,工程师经常面对这样的困境:传感器日志散落在多个文件里,图像是一套格式,点云是另一套,时间戳对不上,想看一眼数据长什么样得写一堆定制代码。Rerun 的核心思路是把这一切统一到一个共享的列式存储层——底层基于 Apache Arrow,以".rrd"(Rerun Data)格式追加写入。
开发者只需要调用 Python/Rust/C++ 的 SDK,轻量级 API 就能把点云、图像、坐标变换、关节状态、时序数据"日志"进去,Rerun 的内置查看器(Viewer)实时渲染所有数据,并支持时间轴拖动、传感器并排对比、CV 流水线实时观测等操作。你甚至可以把查看器编译成 WebAssembly,直接在浏览器里运行。
Rerun 的核心引擎是 Rust 写的,这并非偶然。Rust 提供了内存安全保证和接近 C++ 的性能,对于处理大规模传感器数据流至关重要。代码库采用 Cargo workspace 组织的 monorepo 结构,主要模块包括:
有意思的是,Rerun 的数据类型系统(Archetypes)非常丰富——Points3D、Image、Camera、Transform3D、JointState、SegmentationImage……这些都不是简单的图像,而是有空间语义的结构化数据。ARCHITECTURE.md 指出,所有日志数据都编码为 Apache Arrow 格式,既能直接序列化到 .rrd 文件,也能通过 gRPC 实时流式传输到 Viewer 或远端服务器。
Python SDK(rerun_py)和 C++ SDK(rerun_cpp)都绑定到 Rust 核心。Python SDK 用 PyO3 实现 Rust→Python 的绑定,安装方式是 pip install rerun-sdk;C++ SDK 用 CMake 构建,安装需要单独安装 rerun-cli 二进制。
Rerun 最直接的价值在于开发调试。当你写了一个 SLAM 算法,跑一遍,点云和轨迹能实时显示在 Viewer 里,算法工程师可以直观看到哪里出了问题,而不必盯着日志里的数字发呆。这一点对做计算机视觉的人特别有吸引力——你可以在同一时间轴上同时看到输入图像、检测框、分割图、跟踪轨迹,一目了然。
更进一步,Rerun 的 DataFrame 查询能力(基于 Apache DataFusion)让它不仅仅是个调试工具,还可以直接拿来做数据筛选和标注。你可以在 Viewer 里选中某个时间窗口的数据,用 SQL 查出来做分析,甚至直接接入训练管道——Rerun 支持把数据流直接推给训练框架,不需要导出的中间步骤。
官网提供了 rerun.io/viewer 的浏览器版本,方便不安装任何东西先体验。
Rerun 提供了两种可视化方式:
内置 Viewer(推荐):Python 开发者 pip install rerun-sdk 后,直接调用 rr.spawn(),Viewer 进程自动启动并连接到当前程序,零配置。rr.serve() 则启动一个 Web 服务器,可以在浏览器里看(原理是 gRPC→WASM)。
独立 Viewer:安装 rerun-cli 二进制(Rust 编译),直接运行 rerun mydata.rrd,查看 .rrd 文件或监听网络端口接收日志流。C++ 和纯 Rust 用户只能通过这种方式。
官方提供了 CI 用的 Dockerfile(ci_docker/Dockerfile),但这不是给最终用户用的,而是用来在 CI 环境中构建/测试项目的。没有 docker-compose 文件,也没有 Kubernetes manifest——所以不能算"一键部署"。裸金属上安装 Rust 编译环境比较重,CI Dockerfile 是多阶段构建的,但最终镜像是用于构建而非运行。
从硬件需求看,Rerun 的 Viewer 是一个轻量级图形应用,不需要 GPU,普通开发机就能跑。但如果你要用 Rerun 处理高分辨率视频流,建议 4GB+ 内存。
Rerun 的所有数据默认存储在本地 .rrd 文件,或通过 gRPC 直接点对点传输,没有任何云端依赖。日志数据不离开你的机器(除非你主动用 rr.connect() 把数据流发给其他机器)。这对于处理敏感的机器人数据(如工厂内部视觉数据)非常重要。
Rerun 也有它的问题。首先,Rust 核心的编译非常慢——BUILD.md 提到需要安装 Rust 工具链,且 Windows 上需要额外安装 nasm 以获得最佳视频解码性能,这对新手不够友好。其次,.rrd 文件格式尚未实现完全的向后/向前兼容,不同版本之间可能有兼容性问题。再次,C++ SDK 依赖独立的 rerun-cli 安装,割裂感比较强,Python 用户体验明显更好。
Rerun 背后代表着一个更大的趋势:物理 AI(Physical AI)需要专用的数据基础设施。传统互联网数据用 JSON 或 Parquet 就够了,但机器人、自动驾驶、无人机这类物理 AI 系统产生的是高维、时序、多模态、空间化的数据——现有的通用数据工具并不擅长处理这类数据。
Rerun 的列式块存储(Columnar Chunk Storage)是为"多采样率"数据设计的:摄像头可能是 30fps,而 IMU 可能是 1000Hz,温度传感器可能是 0.1Hz,这些数据能共存于同一个 Timeline 而不需要插值或对齐。Apache Arrow 作为底层格式,让数据可以零拷贝地流入训练框架——这是 Rerun 作为"训练数据管道"定位的关键。
从 GitHub stars 突破 10,000 的势头来看,Rerun 已经成为自动驾驶和机器人领域事实上的可视化标准工具之一。它的存在填补了 CV/ML 调试工具和正式数据管道之间的空白。