End-to-end robotics data collection, annotation, export & quality scoring pipeline.
Built for VLA model training (OpenVLA, RT-2, π0) with the SO-101 robot arm.
Record (MCAP) → Annotate (NL Grounding) → Score (Quality) → Export (HDF5 / RLDS / LeRobot)
| Module | Purpose |
|---|---|
praxis.core |
MCAP recording with synchronized camera + motor telemetry |
praxis.export |
Format conversion: MCAP → HDF5, RLDS (TFRecord), LeRobot v2.1 |
praxis.annotation |
Natural language grounding — manual + CLIP zero-shot classification |
praxis.kinematics |
URDF/MJCF parsing, automated calibration, forward kinematics |
praxis.versioning |
Hardware manifests and session metadata versioning |
praxis.quality |
Per-episode quality scoring (completeness, smoothness, coverage, NL) |
praxis.ui |
Tkinter collection UI + Foxglove review server |
# Install
pip install -e ".[dev]"
# Record a session (mock hardware)
python scripts/record_session.py --mock --cameras 0 --output ./recordings/session.mcap
# Annotate with CLIP
python scripts/annotate_dataset.py ./recordings/ --auto --output annotations.json
# Score quality
python scripts/score_dataset.py ./recordings/ --output quality_report.json --print
# Export to all formats
python scripts/export_dataset.py ./recordings/ --format hdf5 rlds lerobot --output ./exports/| Format | Target Consumer | Structure |
|---|---|---|
| HDF5 | robomimic, custom training | data/demo_N/obs/... hierarchy |
| RLDS | TensorFlow Datasets, Open X-Embodiment | TFRecord with observation/image, action, language_instruction |
| LeRobot v2.1 | HuggingFace LeRobot | Parquet + MP4 + meta/ directory |
Each episode receives a composite score (0–100) from five dimensions:
- Completeness (25%) — all channels present, no dropped frames
- Smoothness (25%) — jerk metric on joint trajectories
- Coverage (20%) — end-effector workspace diversity
- NL Presence (20%) — language instruction attached and validated
- Calibration (10%) — recency of kinematic calibration
# Run tests
pytest tests/ -v
# Format check
ruff check praxis/