Skip to main content
Profile
Ainekio Project
Ainekio’s build journal: an eight-servo original and a twelve-servo companion in development, with measured servo feedback, a rebuilt body and learning from real walking.
V2 · 12 servosDated experiment

Freestyle: teaching targets, speed and recovery

Editable motion examples, compact Qwen inference on the Q6A, measured shaft arrival, and the October 26 Stand-training results.

Current status →

On this page
  1. From timed frames to measured arrival#
  2. Editing what the model will learn#
  3. Q6A inference and physical corrections#
  4. October 26: learning to acquire Stand#
  5. Records#

October 27 follow-up: finite programs replace the continuation loop, with a new model and a supported stretch trial.

The new motion work asks a small trained model to generate joint, foot and body movements from a request and the robot’s measured state. Freestyle now has an editable training library, compact output, and a target-and-speed execution path. The existing gait solver still handles gait execution.

This is a different experiment from the October 21 Walk/Run optimizer. That loop compares gait parameters during normal walking. Freestyle learns how to turn an instruction and feedback into a sequence of movements.

From timed frames to measured arrival#

Part of a motionEarlier generated sequencesNew target-and-speed path
Requested movementJoint/foot/body operations compiled into timed framesJoint/foot/body targets with speed_pct
Advance to the next targetSequence timingFresh shaft feedback confirms arrival within the configured tolerance
Deliberate pauseAuthored durationAn explicit hold retains its duration
Something has not moved as expectedRecord the discrepancy and request correctionRetain the target and powered support; send current measurements and unfinished intent for reassessment
Start another requestExisting Stop/replacement behaviorSame owner; pending arrival does not prevent replacement

The fourth wires measure servo shafts. They do not measure whether a foot is actually touching the floor. Foot clearance is calculated from linkage geometry and attitude, so carpet contact and loaded motion still need observation.

The current 0.8.127 firmware source moves boot/wake standing and inactivity rest requests to Freestyle. Manual Body Control retains the legacy library. This change needs matching model, host and firmware versions; the October 26 model activation did not flash the robot. The separate body entry records the latest supported firmware trials.

Editing what the model will learn#

Body Control’s motion library exposes the exact compact training input and target. I can edit a movement, send that draft directly to the robot, review the result, and export the dataset for another training pass.

ControlWhat changes
Save training exampleUpdates the local library; superseded targets are replaced
Send motion to robotExecutes the displayed target, including unsaved changes, without another model call
Export training dataDownloads the current training split, held-out files and matching tool contract
Train and activateProduces and selects new weights; saving an example alone does not update the model

The October 25 working-library record contains 889 active examples after six superseded targets were removed. A committed training snapshot can travel between machines; the working SQLite database and model weights remain local. Later Stand training uses its own frozen dataset, rather than treating every library edit as already learned.

Q6A inference and physical corrections#

The compact Q6A model reduces the text needed to describe the same motion. For one uncached happy-face/10 mm foot-lift request, the recorded comparison was:

Q6A CPU measurementEarlier v8Compact candidate
Input tokens3,154823
Output tokens9149
Generation time72.89 s17.90 s
Decoded operations44
Authored movement time2 s2 s

These are individual requests, not average response times. A later check of the activated model took 10.23 seconds for the same frozen request.

The first physical foot-lift attempt failed my visual review. A repeat after a power cycle and Stand setup worked, but subsequent small lifts were too subtle, slow and disturbed balance. A rear-crouch/25 mm brisk-lift correction passed review and was saved for training.

A separate rear-sway trial exposed a host preparation bottleneck. Moving IK preparation out of the gateway’s Python thread reduced the same authored 2.8-second sway from 9.96 to 5.03 seconds end to end. Shortening the authored sway to 1.28 seconds produced a 2.54-second trial that I approved. The recorded shaft discrepancies remain; the approved example was still pending retraining.

October 26: learning to acquire Stand#

The latest continuation uses 1,261 examples: 900 general-motion examples and 361 feedback-conditioned Stand examples, including 40 synthetic starting geometries. The teacher uses the existing posture solver and installed servo mapping. Its examples cover lift/place/lower, lag, slip, settling, completion and gyro attitude. They are geometric training examples, not successful robot trials.

EvaluationEarlier v8Stand-entry-balanced
Requests attempted148148
Completed outputs147146
Reference matches among 145 mutually completed cases2659
Target translation/compilation failures in each run2612

Reference agreement improved, but the model still struggles to reach Stand from other starting poses. In three offline trials that fed each generated result into the next request:

Starting caseResult
Already standingRaised, returned to nominal and finished in three responses
Lower starting postureFinished with a maximum nominal-joint error of 53.51°
Held-out spread-leg postureRepeated an off-target pose through all 24 evaluation rounds

Only the already-standing case reached the geometric goal. One compound request also grew from a 58-call reference to 476 generated calls. Three later ending-data corrections are not included in these weights.

After reviewing those failures, I activated the Qwen3.5-0.8B LoRA exported as Q8_0 on the workstation on October 26. The live API returned a nominal-Stand program in 0.663 seconds, using a saved synthetic observation and sending no robot commands. The Q6A deployment was not changed. The failures above remain the next training work: entry selection, advancing after arrival, and stopping when the requested movement is complete.

Records#

Download the evaluation summary and source record. The reviewed files are experiments/freestyle/README.md, CURRICULUM.md, program.py, the frozen stand-entry-balanced/final-review.json, and its later activation/verification.json. The activation record supersedes the evaluation’s earlier “not deployed” status; it does not change its scores.

Freestyle: teaching targets, speed and recovery
https://ainek.io/posts/2026-10-26-freestyle-targets-and-training/
Author
Ainekio
Published at
2026-10-26
License
CC BY-NC-SA 4.0