← Build log
2026-04-15

Building Motion Into a Small AI Robot

Building Motion Into a Small AI Robot

A small robot with a strong AI stack still feels dead if it doesn’t move well. This is a note on the work that went into making a desktop robot feel present.

The trap

It’s tempting to think of motion as a final polish step — get the AI working, then add movement. In practice, motion is what makes the rest of the system legible. A robot that turns its head when you speak, that leans toward what it’s looking at, that holds eye contact, communicates things that text and audio alone cannot.

So motion got pulled forward in the project. It stopped being a finishing touch and started being part of the interface.

What mattered

  • Smoothness over speed. A fast, jerky robot is uncanny. A slow, smooth one feels alive. The target wasn’t “respond in 50ms” — it was “respond with no visible steps”.
  • Calibration is forever. Servo tolerances are wider than you’d expect. A calibration routine that runs on every boot, not just once at the factory, is worth the extra time.
  • Motion libraries pay off. Hand-crafting servo timings is fine for a one-off demo; it doesn’t scale. Building even a small library of reusable motions (look, nod, lean, idle) made the rest of the project faster.
  • Idle is a state, not an absence of state. A robot that sits perfectly still is unsettling. A robot that breathes — small, slow, continuous movement when nothing else is happening — reads as alive.

What’s next

A proper inverse kinematics layer so the robot can aim a camera, point, and reach. And a much bigger motion library so the robot can express more than just “head turn”.