|
Download docs/LIVE_VIEWER.md from cudabenchmarktest/dropbear-locomotion: direct link, hf CLI and curl.
- Browser
- Download file 6.98 kB
-
https://huggingface.co/cudabenchmarktest/dropbear-locomotion/resolve/main/docs/LIVE_VIEWER.md
- Command line
-
hf download hf://cudabenchmarktest/dropbear-locomotion/docs/LIVE_VIEWER.md
-
curl -L -o LIVE_VIEWER.md https://huggingface.co/cudabenchmarktest/dropbear-locomotion/resolve/main/docs/LIVE_VIEWER.md
6.98 kB
| # Interactive live viewer | |
|  | |
| `scripts/play_dropbear_live.py` is a rendering/playback adapter around Isaac | |
| Lab's RSL-RL player. Isaac Sim renders RGB on the selected simulation GPU. A | |
| small Tk/Pillow helper in `scripts/dropbear_live_window.py` presents frames on | |
| the desktop and sends user input back to the simulator over line-oriented | |
| standard I/O. | |
| This separation permits an A100 to run simulation and rendering while a small | |
| display-attached GPU presents the window. The title and upper-right HUD query | |
| the actual devices; hardware names are not hard-coded. | |
| ## Controls | |
| - Drag the circular lower-left pad for body-frame planar velocity, up to | |
| 1.0 m/s by default. | |
| - Up is robot-forward (`+vx`). | |
| - Left is robot-left (`+vy`). | |
| - Right is robot-right (`-vy`). | |
| - Down is robot-backward (`-vx`). | |
| - Diagonals combine both axes and are radially clamped. | |
| - Near the rim, the left/right 90-degree sectors progressively add yaw toward | |
| that side while preserving lateral translation. The forward/back | |
| 90-degree sectors remain straight, forming a cross-shaped drive/turn map. | |
| - Release springs the command to zero. | |
| - Use the rectangular button to the right of the pad to switch between | |
| `MANUAL CONTROL` and `TRAIN LIVE`. | |
| - Click-drag elsewhere to orbit azimuth/elevation around the robot. | |
| - Resize the desktop window freely; the frame remains aspect-correct and all | |
| UI anchors follow the new size. | |
| The first pad interaction switches from the command passed on the CLI to | |
| manual joystick mode. Release intentionally keeps manual ownership at zero, | |
| rather than silently restoring the scripted command. | |
| ## Live training passthrough | |
| The `TRAIN LIVE` button displays a real environment sampled from the active | |
| vectorized trainer. It is not a rollout made independently from the newest | |
| checkpoint. The trainer publishes the sampled environment's root pose, all | |
| joint positions and velocities, command, terrain type/level, episode clock, | |
| randomized mass, and randomized contact material: | |
| ```bash | |
| python -u scripts/train_dropbear.py \ | |
| ... \ | |
| --live-preview-state /tmp/dropbear_training_live.json | |
| ``` | |
| Connect the rendering process to the same atomic state file: | |
| ```bash | |
| python -u scripts/play_dropbear_live.py \ | |
| ... \ | |
| --training-live-state /tmp/dropbear_training_live.json | |
| ``` | |
| The trainer remains headless. State publication copies only one environment | |
| and adds no camera or rendering work to the training GPU. The separate viewer | |
| mirrors the selected terrain tile and articulation on its render GPU. | |
| Successive trainer samples are interpolated for a smooth display because one | |
| environment in a large vectorized training batch advances more slowly than | |
| wall-clock real time. | |
| Manual state is saved when entering `TRAIN LIVE` and restored when returning | |
| to `MANUAL CONTROL`. Camera orbit remains available in both modes; the | |
| joystick is dimmed and ignored during passthrough. The left HUD identifies the | |
| source environment, sample age, terrain and difficulty level, randomized | |
| total mass, and static/dynamic friction. | |
| The optional `--live-preview-env <index>` trainer flag selects a particular | |
| source environment. Without it, the bridge selects the midpoint environment, | |
| which lies in the obstacle portion of the current 35/65 flat/box terrain mix. | |
| ## Simulator geometry | |
| The footprint ghosts and COM trail are USD scene geometry created at playback | |
| time, not pixels painted over the captured frame. | |
| - Blue cuboids mark historical left-foot placements. | |
| - Orange cuboids mark historical right-foot placements. | |
| - Opacity/brightness bins fade old contacts. | |
| - Thin cyan cylinder segments trace the world-space COM path. | |
| Because these are scene objects, they respond correctly to camera orbit and | |
| perspective. | |
| ## HUD | |
| The left stack reports command, COM target/actual velocity and height, body | |
| velocity, foot clearance/order, reward, episode horizon, tracking score, and | |
| fall rate. The upper-right stack identifies checkpoint, iteration, simulation | |
| GPU, display GPU, measured simulation/wall-time ratio, presentation rate, and | |
| value loss. The lower-right plot shows raw and exponentially averaged | |
| value-loss history. | |
| ## Rendering path | |
| The viewer uses native 960×540 renders at the 50 Hz policy cadence. Physics | |
| remains at 200 Hz and policy/input remain at 50 Hz. The window estimates | |
| bidirectional optical flow only between two consecutive genuine RTX frames; | |
| it never feeds an interpolated result back into the next estimate. Large scene | |
| changes are presented as hard cuts, and HUD/plot regions remain unwarped. | |
| For the smooth, physically valid manual path, keep both the one-environment | |
| simulation and RTX render on the selected CUDA device: | |
| ```bash | |
| CUDA_VISIBLE_DEVICES=1 env_isaaclab/bin/python -u \ | |
| scripts/play_dropbear_live.py \ | |
| --actor-base-lin-vel \ | |
| --viewer-com-control \ | |
| --viewer-gait-period 0.55 \ | |
| --viewer-com-stand-height 1.052 \ | |
| --viewer-com-height-delta 0 \ | |
| --viewer-directional-obstacle-terrain \ | |
| --viewer-disable-pushes \ | |
| --viewer-reset-policy-joints-only \ | |
| --viewer-reset-joint-position-range 1 1 \ | |
| --viewer-reset-joint-velocity-range 0 0 \ | |
| --task Isaac-Dropbear-Velocity-Play-v0 \ | |
| --checkpoint checkpoints/dropbear_locomotion_v0.2.0/model_10479.pt \ | |
| --follow-checkpoints logs/rsl_rl/dropbear_velocity/STAGE66_RUN \ | |
| --pin-manual-policy \ | |
| --training-live-state /tmp/dropbear_training_live.json \ | |
| --viewer-command 0.20 \ | |
| --viewer-joystick-max-speed 1 \ | |
| --viewer-joystick-max-yaw-rate 1 \ | |
| --viewer-fps 50 \ | |
| --viewer-display-fps 50 \ | |
| --viewer-render-width 960 \ | |
| --viewer-render-height 540 \ | |
| --device cuda:0 \ | |
| --num_envs 1 \ | |
| --viz none | |
| ``` | |
| `--pin-manual-policy` keeps manual control on the explicitly selected, | |
| validated checkpoint. `--follow-checkpoints` still updates the epoch, loss, | |
| and current-training-checkpoint HUD, and `TRAIN LIVE` still mirrors the real | |
| trainer. This separation avoids hot-swapping an incompletely evaluated actor | |
| into the manually controlled episode. | |
| The compact viewer atlas contains one column per semantic terrain label. | |
| Incoming trainer snapshots are mapped by labels such as `forward_box` and | |
| `left_box`, not by the trainer's numeric column index. This keeps obstacle | |
| direction correct even though the full trainer and compact viewer have | |
| different atlas dimensions. | |
| The title and HUD report the runtime-derived simulation, render, and display | |
| hardware. `sim realtime` and `rendered` are measured achieved rates; the | |
| display number is the requested desktop presentation rate. | |
| ## Checkpoint following | |
| Pass `--follow-checkpoints <run-directory>` to adopt new `model_*.pt` files as | |
| training saves them. Adoption occurs only after a file is complete and the | |
| actor state loads successfully. | |
| Add `--pin-manual-policy` when new checkpoints should update telemetry without | |
| replacing the manual-control actor. Omit it only when deliberate checkpoint | |
| hot-reload testing is desired. | |