Driving a robot with one forearm

Our 17-slide deck for the AWARE-AI Fall 2026 Hackathon, which won Best Presentation. Every number on it is read from the recordings and drive logs by a script.

Driving a robot with one forearm. AWARE-AI Hackathon 2026. AJ · Jose · Kiran · Xinyi.
1 · Driving a robot with one forearm
Agenda. Five parts, about a minute each. 1 · How you drive. 2 · What the signals told us. 3 · Calibration, assistance, safety. 4 · What broke. 5 · Results.
2 · Five parts, about a minute each
What we did. One forearm drives every course, with no collisions. 20.7 s. L1 Gates. median of 4 runs, 0 collisions. 26.6 s. L2 Slalom. median of 6 runs, 0 collisions. 16.3 s. L3 Corridor + Dock. median of 4 runs, 0 collisions. 51 of 51 runs finished. New driver: 2 minutes to calibrate. Score = time + 5 s per collision + 10 s per missed gate (the sim's rule). Lower is better.
3 · One forearm drives every course, with no collisions
1 · How you drive. Arm height sets speed, roll steers. STOP · arm up. GO · level. REVERSE · tip down. elbow. STEER · roll the forearm. like turning a doorknob, left or right; a bigger roll turns harder. BRAKE · firm fist. held for 0.4 s; your hand stays relaxed the rest of the time. Raise the arm once to start. Lower = faster, up to full speed at level.
4 · Arm height sets speed, roll steers
2 · What the signals told us. Muscle gestures broke once the forearm rolled. Still poses (all 5 gestures). 99% read correctly. Fist held with the forearm rolled. 38% read correctly. Rolled fists misread as: right 53, reverse 51, left 8 of 181 windows. Classifier: linear discriminant analysis on 8 EMG channels, tested on takes it never trained on.
5 · Muscle gestures broke once the forearm rolled
2 · What the signals told us. A neural network didn't beat the simple model on our data. Trained on your own calibration. TCN 68%. LDA 85%. Tested on a new driver. TCN 33%. LDA 32%. chance 17%. TCN: neural network on the raw signal. LDA: linear model on 16 features. Share of 200 ms windows read as the right pose; bar: median of 4 drivers, line: lowest to highest. New driver: each scaled by their own calibration.
6 · A neural network didn't beat the simple model on our data

The TCN's new-driver bar (33%) is the run without gain augmentation; with it, the TCN scored 17% on a new driver. Full tables: examples/TCN.md.

3 · Calibration, assistance, safety. Ready in two minutes, and it stops when unsure. 1. Record. 6 poses × 2, 3, 5 s. 2. Hold straight. 2 s at every start. 3. Raise to start. arms the robot. 4. Drive. speed, steer, brake. The robot stops when: the signal drops. the arm leaves its range. the band has moved (won't start). a fist is held 0.4 s.
7 · Ready in two minutes, and it stops when unsure
3 · Calibration, assistance, safety. Four drivers calibrated with one command. python examples/lever.py <your name>. AJ. 9.7×. Jose. 4.6×. Xinyi. 4.0×. Kiran. 1.9×. Kiran, 1st try. 0.6×. Fist ÷ relaxed muscle level (mean RMS over 8 channels). Below 1×, the fist didn't register.
8 · Four drivers calibrated with one command
3 · Calibration, assistance, safety. The gate assist nudges you through, and never steers for you. 2 of 6. approaches through gate 1 with the assist. 0 of 6. without it. 0. collisions, either way. only when you're aimed within 20° of a gate. adds at most 0.3 rad/s of turn. never picks a gate for you. off with --no-gate. Scripted off-line approaches to L1's first gate in the sim, the same assist code as the controller.
9 · The gate assist nudges you through, and never steers for you
4 · What broke. Four things broke; each fix is now a rule. Problem. Before. Fix. After. Brake fired by itself. 38% of drive time. fist pattern held 0.4 s. 0%. Right turns too weak. full turn out of reach. each side tuned from your own drives. even turns. Band moved after charging. reversed 58% of a drive. pose checked at every start. refuses to start. Myo vanished after unplugging. no Myo found. wear it, move, keep scanning. connects.
10 · Four things broke; each fix is now a rule
5 · Results. All 51 official runs finished, with no missed gates. L1 Gates. 20.7 s. L2 Slalom. 26.6 s. L3 Corridor + Dock. 16.3 s. L1, 300 ms lag + 10% drop. 21.7 s. Bar: median score. Line: best to worst run. Clean courses: 4, 6 and 4 runs; degraded: 8 runs with lag compensation on.
11 · All 51 official runs finished, with no missed gates
5 · Results. Lag compensation did no harm; benefit unproven. Lag compensation on. median 21.7 s. Off. median 22.5 s. 20 s. 22 s. 24 s. 26 s. 28 s. One dot per run, L1 at 300 ms lag and 10% drop, 2 runs per hidden session. Session medians compared with an exact two-sided permutation test: p = 0.57 for score, 0.26 for workload.
12 · Lag compensation did no harm; benefit unproven
5 · Results. What we'd test next. 1. More people. Pretrain on a 36-person Myo dataset, fine-tune on each driver's 2-minute calibration. 2. Lag gain unproven. More blind sessions before we claim lag compensation helps. 3. Top speed 1 m/s. The sim allows 2 m/s: the assist must slow from further out first.
13 · What we'd test next
Thank you. AJ · Jose · Kiran · Xinyi. Code and dataset: github.com/ajbarea/myo-lever.
14 · Thank you
Backup slides.
15 · Backup slides
Backup. Blind lag-compensation test, session by session. Measure | On | Off | p. Score (s) | 21.66 | 22.51 | 0.57. Steering jerkiness (rad/s²) | 0.66 | 0.74 | 0.63. Workload (NASA-RTLX, 0 to 100) | 43.4 | 50.4 | 0.26. Collisions (total) | 0 | 2 | –. 4 sessions on, 4 off, 2 runs each; the driver never knew which.
16 · Blind lag-compensation test, session by session
Backup. How the signals are used. Signal | What we compute | Drives. Tilt (accelerometer, 50 Hz) | forearm height and roll from gravity, never yaw (no drift) | speed, steering, reverse. Muscle (8 EMG channels, 200 Hz) | RMS and waveform length per channel, 0.2 s windows | brake only. Brake classifier | your fist vs your other poses (linear discriminant analysis) | fist held 0.4 s. Lidar (from the sim) | free space ahead and beside the robot | slow down, nudge off walls.
17 · How the signals are used