GUBI LABS ACADEMY — EXPRESSION KIT
Original teaching exercises. Not Disney software, pretrained policies or a motor driver.
Research and guided labs: https://gubilabs.com/academy/motion-studio

START (no dependencies beyond Python 3.10+)
1. Unzip into a new folder. Open a terminal in that folder.
2. python3 clip_tools.py analyze curious.csv
3. python3 clip_tools.py scale curious.csv --amplitude 0.5 --stretch 2 --out gentle.csv
4. python3 clip_tools.py analyze gentle.csv
5. python3 behavior_lab.py --out behavior-log.csv
Windows may use py instead of python3. In your existing activated course environment use python.

STUDIO EXPORT
Download my-gesture.csv from the website and place it beside these scripts.
Header: t_s,head_yaw_deg,head_pitch_deg,head_roll_deg,neck_pitch_deg
Time starts at zero and increases. Angles are semantic offsets in degrees, NOT motor positions.
CSV is 60 samples/second. analyze estimates speeds and accelerations using finite differences;
it does not certify intersample peaks, jerk, collision clearance, torque or stability.
Scaling amplitude by a and stretching time by s scales velocity by a/s and acceleration by a/s².

BDX-R MODEL PREVIEW (MuJoCo; requires all original XML/assets, not just one XML)
Use the BDX-R-Deploy clone from course module 10 at commit:
d4f3671a44f8ca2c02e31b23607aa8d7fdc076a3
Install into the course virtual environment: python -m pip install mujoco
Record: python -m pip freeze > environment.txt
python clip_tools.py inspect BDX-R-Deploy/xml/bdxr.xml
python clip_tools.py preview gentle.csv --xml BDX-R-Deploy/xml/bdxr.xml --map joint-map.example.json --headless
macOS interactive viewer: mjpython clip_tools.py preview gentle.csv --xml BDX-R-Deploy/xml/bdxr.xml --map joint-map.example.json
Linux/Windows viewer: python clip_tools.py preview gentle.csv --xml BDX-R-Deploy/xml/bdxr.xml --map joint-map.example.json
Paths above assume the clone is inside this folder; otherwise substitute its absolute path in quotes.
The example map follows joint axes in that pinned XML. Its envelope is ONLY a teaching preview range,
not verified physical calibration. Confirm each sign, neutral, limit and body clearance yourself.
Only four hinge channels are mapped. Do not add ears/legs without a separate model/control review.
This preview sets qpos and calls mj_forward, never mj_step: it is not dynamics, balance or collision clearance proof.
The rest of the model remains at its XML default qpos. Close the viewer window to exit.

BEHAVIOR LAB
behavior_lab.py prints idle/notice/return/stopped states and writes a CSV.
It represents attention with a synthetic target event; no camera or person tracking is included.
Stop remains latched until an explicit reset. Reset does not resume the previous gesture.
This high-level mock does not implement or test a physical emergency stop.

WHAT HARDWARE STILL NEEDS
A revision-specific controller adapter, verified motor sign/zero/units, motion limits and arbitration,
fresh timestamped feedback, watchdog and commissioned physical stop behavior. Do not stream these CSVs
into CAN, overwrite leg actions or run upstream hardware deploy scripts as a shortcut.
Use modules 39–42 to trace the control contract and commission a measured supported gesture.
For unsupported head/torso commands, build and evaluate a compatible simulation controller first.

PAPERS
Links are in sources.txt and each lesson. Papers/assets are not redistributed in this kit.
