Skip to content

Roadmap

Ahmed Dabak edited this page Jul 25, 2026 · 5 revisions

Roadmap

What is planned, in plain language -- no versions, no dates, just the work ahead. Nothing already shipped depends on any of these; each is additive.

Non-blocking motion engine

Today every movement call blocks: Legs::walkForward(2) returns only when the walk is finished, so the robot is blind and deaf while moving. This is the single biggest thing raw OttoDIYLib cannot do.

Planned: movements that run in the background.

Legs::startWalkingForward();
if (Eyes::closerThanCm(15)) Legs::stop();   // react WHILE walking

with Legs::isMoving() to check state and OttoFlow::update() called from loop() to drive the motion step by step. The current API names were chosen specifically so this can be added without breaking any existing sketch. See Movement.

Event system

Instead of polling a sensor yourself every loop, register what should happen and let the framework watch for it.

Events::onObstacleCloserThanCm(15, onObstacle);   // runs when triggered
Events::everyMs(500, blinkMouth);                  // runs on a timer

This removes hand-written if/else state machines from reactive sketches. It depends on the non-blocking engine -- events must be able to fire mid-movement -- so it comes after it.

Bench mode in one call

OttoFlow::benchMode() -- shorthand for the desk-testing setup: all servos detached (Motion::disable()), sounds muted (Voice::mute()), and the serial console started, plus a clear indicator on the matrix that the robot is in test mode. Today that is three calls; see Bench Testing.

Custom icons and animations

The matrix currently offers the built-in OttoDIYLib mouth shapes plus single-pixel drawing. Planned: define your own 8x8 icons and multi-frame animations, and show them like built-ins.

OTTOFLOW_ICON(MyAlien,
  0b00111100,
  0b01111110,
  ...);
Mouth::showCustom(MyAlien);

Stored in flash (PROGMEM), so they cost no RAM. See Mouth.

Servo calibration wizard

The trim API exists (Legs::setTrimsDegrees(), saveTrimsToEeprom()), but tuning still means edit, flash, look, repeat. Planned: an interactive session in the serial console.

> trim legleft -3     (servo moves immediately, judge by eye)
> trim save           (stored in EEPROM, loaded on every start)

See Calibration.

Example sketches

A numbered examples/ folder, beginner to advanced, shown in both the Arduino IDE and PlatformIO example browsers:

  1. HelloHeart -- start the robot, show a heart.
  2. ObstacleAvoidance -- roam and react to obstacles.
  3. SerialConsole -- bench-test hardware from the Serial Monitor.
  4. HumanoidArms -- the arms preset and arm moves.
  5. PowerUser -- custom config, module layer, raw-driver escape hatch.

Written once the feature set settles, so they never go stale.

Publish to library registries

Submit to the PlatformIO Registry and the Arduino Library Manager so anyone can install OttoFlow by name -- lib_deps = OttoFlow, or an IDE library search -- instead of a git URL. Best done after the API has survived real users without breaking changes. See Installation.

ESP32 / ESP8266 support

Support the WiFi-capable Otto variants. OttoDIYLib already compiles for ESP32; OttoFlow needs conditional servo and tone backends and a test robot on that board. This opens the door to web-based remote control later.

More add-on modules

Most kit extras already ship (touch, sound sensor, photoresistor, Bluetooth with the app protocol, MPU-6050). Still open, each following the extension guide -- a good way to contribute:

  • RGB LEDs -- mood colours.
  • APDS-9960 -- hand-gesture, colour, and proximity sensor found in some kits.
  • Tilt-reactive behaviours -- use the MPU-6050 to detect a fall and get up, or protest when picked up. The sensor module exists; the behaviours do not yet. See Balance.

Clone this wiki locally