UMI Whole-System Runtime + Tools
Current system description:
- docs/UMI_SYSTEM_DESCRIPTION.md
- docs/UMI_USER_STORIES.md
- docs/UMI_TASK_BREAKDOWN.md
- docs/UMI_SYSTEM_ARCHITECTURE.md
- docs/UMI_STATE_MACHINE.md
Read in this order if you want the current whole-system definition:
- docs/UMI_SYSTEM_DESCRIPTION.md
- docs/UMI_USER_STORIES.md
- docs/UMI_TASK_BREAKDOWN.md
- docs/UMI_SYSTEM_ARCHITECTURE.md
- docs/UMI_STATE_MACHINE.md
- docs/UMI_SYSTEM_SOLUTION_SKELETON.md
This repo provides:
- A Rerun-based live visualizer (
apps/rerun_visualizer.py) - A Rerun-based three-point session review tool for head / left palm / right palm playback in browser (
apps/rerun_three_pose_review.py) - A PyPI-packaged Rerun review CLI (
umi-rerun-review) and remote session-selection service (umi-rerun-session-review) that open Rerun Web Viewer directly from RDK-hosted data - The current
PICOpose path plus legacyQuestcompatibility readers (vr_umi_sdk/pico/,vr_umi_sdk/quest/) - A device-side recording and export runtime (
vr_umi_sdk/) + CLI (apps/record.py) - A board-local debug helper + optional debug web shell for setup and field debugging
- Supporting docs for the evolving RDK X5 whole-system design
For convenience, the old root-level scripts (vr_umi_ui.py, vr_umi_record.py, etc.) are kept as thin wrappers.
PyPI Rerun review package
The PyPI package is intentionally self-contained for field review. After:
python3 -m pip install Delta-UMI-Viewer==0.4
the installed environment provides:
umi-rerun-review --session /path/to/session
umi-rerun-session-review --host 0.0.0.0 --port 8768 --session-root 运行数据=/home/sunrise/vr_umi_runs
For systemd deployments, point ExecStart= at the installed
umi-rerun-session-review binary. No repo clone or PYTHONPATH is required for
the Rerun picker service.
Integrated target runtime profile
The integrated target whole-system lane in this repo is now expressed through:
- board profile:
config/board_profiles/pico_dual_runtime.json - startup contract:
config/startup_self_check_pico_dual_runtime.json
That target shape is:
1Pico2servo ports2cameras (4camera nodes expected by startup check)2buttons2lights- board power voltage present on the runtime power socket
- robot-gateway WebSocket updates over
apps/umi_robot_gateway.py
The systemd deployment units under deploy/systemd/ now point at this integrated profile/config pair.
For wave-1 packaging prep, treat the shipped systemd lane as the authoritative packaged topology:
umi-runtime.serviceumi-button.serviceumi-board-power.serviceumi-board-light.serviceumi-debug-helper.service
Code-level CLI defaults that still point at config/board_profiles/current_validation_board.json
and config/startup_self_check.json remain available for local development / compatibility only.
They are not the packaged defaults; deploy/systemd/ overrides them to the integrated pair above.
Separate export-worker packaging is still deferred in this checkout. Runtime/export sidecars exist,
but there is no shipped deploy/systemd/umi-export-worker.service unit in the current packaged lane.
The next gate after wave-1 packaging prep is on-target validation:
docs/ON_TARGET_ACCEPTANCE_CHECKLIST.mddocs/ON_TARGET_ACCEPTANCE_RUNBOOK.mddocs/ON_TARGET_ACCEPTANCE_EVIDENCE_TEMPLATE.md
Live visualization
- Start the visualizer (captures local cameras + listens for pose JSON):
python vr_umi_rerun_visualizer.py --listen 0.0.0.0:9001
Legacy Quest note (the active project target is now PICO; keep these steps only for the old Quest visualizer path):
adb devices
adb forward tcp:5050 tcp:5050
- Start the Quest TCP reader and forward poses to the visualizer:
python tcp_quest_reader.py --visualizer 127.0.0.1:9001 --send-hz 60 --auto-send
Notes:
- If you omit
--auto-send, use L/R Trigger to start sending; other buttons stop. - Camera devices:
- Linux:
/dev/video0,/dev/video2, ... - macOS:
0,1, ...
- Linux:
Recording a session (dataset)
python vr_umi_record.py --cam-fps 15 --sample-hz 60 --action-mode vr_pose
Optional (USB grippers):
python vr_umi_record.py --gripper-left-port /dev/ttyUSB0 --gripper-right-port /dev/ttyUSB1 --gripper-baudrate 115200
This writes a session folder under data/vr_umi_sessions/<timestamp>/.
See docs/DATASET_FORMAT.md.
Non-Pico bring-up lane
For board-side bring-up without Pico, use the dedicated non-Pico entrypoint:
python -m apps.non_pico_bringup \
--board-config config/board_profiles/non_pico_dual_bringup.json \
--acceptance-stage stage_gate \
--duration-s 60 \
--cam-fps 30 \
--gripper-left-port /dev/ttyUSB0 \
--gripper-right-port /dev/ttyUSB1 \
--print-summary
To inspect what the board currently auto-detects before a real run:
python -m apps.non_pico_bringup --print-discovery
Notes:
- This lane is for
2 buttons + 2 lights + 2 servo reads + 2 cameras. - It keeps Pico out of scope and does not change startup self-check.
- The bundled dual-button / dual-light board profile is a provisional bring-up profile aligned to the current schematic shape: two 3-pin button connectors and two 4-pin light connectors. Keep treating the runtime-side naming as provisional until the real on-device mapping is fully confirmed.
- The run writes the normal sidecars plus
bringup_summary.json,button_events.jsonl, andlight_events.jsonl.
Legacy Local UI Shell
python vr_umi_ui.py
Notes:
- This is a legacy local development shell kept for compatibility.
- It is not the target whole-system recording interface.
- Formal whole-system control should go through the device runtime / CLI path.
- The target UI role is setup, debugging, status inspection, and guided repair.
Convert to LeRobotDataset (v3)
python vr_umi_to_lerobot.py --input data/vr_umi_sessions --output data/lerobot/vr_umi_dataset --overwrite
One-command viz pipeline
python apps/viz_pipeline.py --session data/vr_umi_sessions/<session_name>
Repo layout
vr_umi_sdk/: runtime, hardware, capture, export, and debug helper codeapps/: CLI entrypoints and board-local/local debug helper shellsdocs/: system description, architecture, state machine, requirements, and dataset docstools/: development utilities (camera smoke/tuner)examples/: small scripts
Release files for Delta-UMI-Viewer 0.4
For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.
Source distribution (sdist)
| File | Size | Uploaded | |
|---|---|---|---|
| delta_umi_viewer-0.4.tar.gz | 26.9 kB | Details |
Built distribution (wheel)
| File | Interpreter | ABI | Platform | Reset |
|---|---|---|---|---|
| delta_umi_viewer-0.4-py3-none-any.whl | Python 3 | none | any | Details |
Total release size: 54.8 kB
Release files / delta_umi_viewer-0.4.tar.gz
| Download URL | delta_umi_viewer-0.4.tar.gz |
|---|---|
| Size | 26.9 kB |
| Tags | Source |
|
SHA-256 checksum How to use checksums |
3da2933d16ee845cfb694614d8038aa796be09c9c40983f38295df67d37c7aef
|
|
BLAKE2b-256 checksum How to use checksums |
553bdab3672d4978808d03b1199a2242a22e376eb0d876d0f5bef9437b4fa594
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
twine/6.2.0 CPython/3.12.7
|
Release files / delta_umi_viewer-0.4-py3-none-any.whl
| Download URL | delta_umi_viewer-0.4-py3-none-any.whl |
|---|---|
| Size | 27.9 kB |
| Tags | Python 3 |
|
SHA-256 checksum How to use checksums |
bbbdcc04a9f8aa6b21d94cd127ae2637707af0d4c7012dd0905511e8edee56bb
|
|
BLAKE2b-256 checksum How to use checksums |
9c3a8ef2bb869fdbe2baf0eea18e39fd3d6896ce323fa197f654d8f82f837a8f
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
twine/6.2.0 CPython/3.12.7
|