Robot Data Audit (RDA)
Audit robot dataset quality. Local only.
RDA checks LeRobot-format datasets for data integrity, temporal consistency, and motion anomalies. It flags problematic episodes and reports what's wrong. RDA is a diagnostic tool only — it does not guarantee training success rate improvements.
Quick Start
pip install robot-data-audit # install
rda audit /path/to/dataset # audit → text + JSON report in <dataset>/rda_report.json
Sample Output
$ rda audit ~/datasets/my_robot_data
── Verdict ──
PASS: 180 (90.0%)
REVIEW: 15 ( 7.5%)
EXCLUDE: 5 ( 2.5%)
── Top Issues ──
1. [HIGH ★] Action discontinuity: 3421 spikes across 195 episodes
2. [MEDIUM] High idle ratio: median 72% idle, 28% effective motion
3. [LOW] Extreme acceleration spikes: 2847 across 180 episodes
Output options: --format json for scripting, -o FILE to save elsewhere.
Real Audit Results
Audited on ArmnetBench (SO-101 arm, 2,499 episodes) and DROID (100 episodes):
| Metric | ArmnetBench (200 ep subset) | DROID (100 ep) |
|---|---|---|
| Action spikes detected | 5,229 | 1,428 |
| Median idle ratio | 68.6% | 70.7% |
| Median episode duration | 22.4s | 15.0s |
| Verdict | All PASS | All PASS |
Both are curated benchmark datasets — all episodes pass. RDA also runs on noisier, real-world collections where REVIEW/EXCLUDE verdicts appear more frequently.
Full calibration analysis (ArmnetBench, comparing successful vs failure episodes by label): docs/ARMNETBENCH_CALIBRATION_REPORT.md
Design
- Local only — No data leaves your machine. Runs entirely offline.
- Diagnostic, not predictive — RDA identifies data issues. Whether fixing them improves training is a separate question and depends on your task, model, and setup.
- Statistical anomaly detection — Uses MAD on reference distributions instead of fixed thresholds (no hardcoded 3σ rules). Adapts to each dataset's characteristics.
- Universal core metrics — Primary ranking uses 3 platform-independent metrics (duration, spike_count, effective_motion_ratio). Platform-specific signals (velocity, path_length) are optional diagnostics.
See docs/MVP_PRODUCT_SPEC.md for full metric definitions.
Metrics
| Tier | Metric | Detects | Cross-platform? |
|---|---|---|---|
| L1 | Timestamp monotonicity | Clock resets, duplicates | ✅ |
| L1 | Frame interval consistency | Irregular sampling | ✅ |
| L1 | Schema compliance | Missing/extra fields | ✅ |
| L2 | Temporal gap detection | Time discontinuities | ✅ |
| L2 | Sensor synchronization | Multi-sensor drift | ⚠️ |
| L2 | Temporal sufficiency | Idle vs active structure | ✅ |
| L3 | Velocity spikes | Implausible jumps | ️ |
| L3 | Motion discontinuities | Jerky trajectories | ⚠️ |
| L3 | Idle frame detection | Paused segments | ✅ |
| L4 | Duration outliers | Too short / too long | ✅ |
| L4 | Spike count outliers | Unusual jerk profiles | ✅ |
| L4 | Effective motion ratio | Low-activity episodes | ✅ |
CLI Reference
rda audit
rda audit /path/to/dataset [OPTIONS]
| Option | Description |
|---|---|
-o, --output FILE |
Save JSON report (default: <path>/rda_report.json) |
--format [json|text] |
Output format (default: text) |
--platform TEXT |
Robot platform name for Tier 3 normalization |
-v, --verbose |
Verbose output |
Exit codes: 0 = no EXCLUDE, 1 = error, 2 = at least one EXCLUDE.
Python API
from rda.audit.dataset_audit import DatasetAuditor
from rda.io.lerobot_loader import iter_episodes, load_lerobot_dataset
dataset_info = load_lerobot_dataset("/path/to/dataset")
auditor = DatasetAuditor()
result = auditor.audit_dataset(dataset_info, iter_episodes("/path/to/dataset"))
print(f"PASS: {result.verdict_counts['PASS']}")
Development
git clone https://github.com/liesliy/rda.git
cd rda
pip install -e ".[dev]"
pytest
Citation
@software{robot_data_audit,
title = {Robot Data Audit: Quality Auditing for Robot Manipulation Datasets},
author = {Niu Su Tech},
year = {2026},
url = {https://github.com/liesliy/rda}
}
License
MIT
Release files for robot-data-audit 0.9.13
For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.
Source distribution (sdist)
| File | Size | Uploaded | |
|---|---|---|---|
| robot_data_audit-0.9.13.tar.gz | 252.2 kB | Details |
Built distribution (wheel)
| File | Interpreter | ABI | Platform | Reset |
|---|---|---|---|---|
| robot_data_audit-0.9.13-py3-none-any.whl | Python 3 | none | any | Details |
Total release size: 500.4 kB
Release files / robot_data_audit-0.9.13.tar.gz
| Download URL | robot_data_audit-0.9.13.tar.gz |
|---|---|
| Size | 252.2 kB |
| Tags | Source |
|
SHA-256 checksum How to use checksums |
836957e6d613d2e520f0b90dc01ffcb5019c7d42ba2d47129c4569ae0d414de9
|
|
BLAKE2b-256 checksum How to use checksums |
8be7d252c8b17b0fae637ca2309f1703ac305c61983e24a2e21edf063da1227d
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
twine/6.2.0 CPython/3.13.12
|
Release files / robot_data_audit-0.9.13-py3-none-any.whl
| Download URL | robot_data_audit-0.9.13-py3-none-any.whl |
|---|---|
| Size | 248.2 kB |
| Tags | Python 3 |
|
SHA-256 checksum How to use checksums |
2b8596d4f76a3faa0b63f2eb7e09dd579da4ff87c6e9a04e49cbf93d7aea693b
|
|
BLAKE2b-256 checksum How to use checksums |
4f877ddaaf907a45ba13838325a77d962de0c7d2045d85e9cecf501704dabf01
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
twine/6.2.0 CPython/3.13.12
|