Advanced · power users only · ZSL-1 LowLevel Leg order: FR=0 · FL=1 · RR=2 · RL=3 · joints: abad · hip · knee (rad)
Low-level motor lab
Per-leg motor targets (separate from Blockly HighLevel)
← Brain Blocks
Risk: wrong angles or gains can stress hardware. Targets are clamped server-side to conservative ranges. Entering low-level releases HighLevel — Blockly and POST /cmd pause until you click Exit to Blockly bridge. Where to run the bridge (important): lowlevel_gentle_interactive.py works on the dog because LowLevel uses the same machine as motion control (SHM / loopback). If scratch_bridge runs on your laptop while the page uses that laptop as Bridge URL, getMotorState() often stays empty and Stream / Read from robot look dead — even though Enter low-level returns OK. Run scratch_bridge.py on the robot as a pure LowLevel shell, e.g. python3 scratch_bridge.py --loopback --lowlevel-only, then open this page at http://<robot-ip>:8766/brainblocksll.html. SDK behavior: stand first on HighLevel (Stand up), then enter low-level. The reference script lowlevel_gentle_interactive.py streams at 500 Hz (DT=0.002), kp=80, kd=1, and idle _hold_track_state. This page updates targets over HTTP; the Firefly bridge keeps the latest target alive at 500 Hz. Keep scratch_bridge running. Low-level is POST /lowlevel/enter in the same Python process. Do not call HighLevel /connect in this page; HighLevel and LowLevel compete for the same SDK port. Open this page from Brain Blocks Low-level motor lab (or set Bridge URL to http://<robot-ip>:8766) so requests hit the Firefly process. Order: Connect → use Stand up (or Brain Blocks) while still in HighLevel → then Enter low-level. You cannot use POST /cmd after entering low-level until you exit.
Bridge URL
Robot IP
Mode: unknown — set Bridge URL and connect.

Aegis Pose Editor

URDF/STL model · drag feet · sliders fine tune
Loading D1 URDF model...