Configure Fixo Controller

Set up a Fixo controller to compile your robot's hardware configuration into purpose-built firmware.

Pro Tip

Fixo compiles your configuration directly into the firmware binary. This means zero runtime overhead on the microcontroller, but any configuration change requires a rebuild. The build process is automatic and takes only a few seconds because LLVM/Clang is embedded in the Agent.


Before you start

You need:


Two ways to get a preset

Fastest: start from a built-in template (RC car, tracked vehicle, hexapod). The wizard fills in actuators, lobes, and stanza wiring; you just answer "which board?" and a couple of parameters.

Most control: open the Fixo Studio and build a preset by hand from scratch.

The next sections cover both. If you're new to OctoMY™, start with the template flow.


Path A — From a built-in preset template (the Fixo wizard)

The Fixo wizard is the gentle path: a four-page walkthrough that goes from "fresh agent" to "firmware running on the board" with no source reading.

  1. Launch the wizard from the agent's Set up Fixo entry — it pushes automatically when the controller-config step of the agent unboxing flow is reached. You can also re-enter any time via the agent main menu's Controller row.
  2. Page 1 — Introduction. A one-sentence overview of what Fixo does. Click Continue; click Learn more for the Fixo overview doc.
  3. Page 2 — Pick template. A filterable list of templates. The four default filter toggles are Official / Vetted / Popular / Unbadged; Official and Vetted are on by default. Templates:
  4. Page 3 — Configure template. A reactive form built from the template's declared parameters. Every edit re-runs PresetTemplate::instantiate() and writes through to the live preset; the Build & Inject band at the bottom reflects the state in real time. There are no Save buttons — the preset is always the latest snapshot of what you've typed. Continue is enabled only when the live instantiate result is complete enough to build.
  5. Page 4 — Build & inject. The centred BuildInjectWidget drives the compile → flash → handshake pipeline. Click Build to compile the AVR firmware via the embedded LLVM/Clang, Flash when a serial port is detected to push the .elf, and watch the band transition to Running when the firmware responds. Click Done to exit the wizard with Green completion on the controller_config row of the agent unboxing wizard.

The wizard's skip semantics are spelled out in the wizard reference. The headline: you're always free to leave — a Skip — set up Fixo later button is reachable from every page.

For the longer template walkthrough see the Use a preset template how-to.


Path B — From scratch in the Preset Editor

  1. Open the Fixo Studio from the Agent main menu.

  2. Navigate to Preset Manager and click New to create an empty preset.

  3. The Preset Editor opens with empty actuator/sensor/stanza tables.

  4. Set the board from the dropdown — populated from the FixoBoardTypeBook.

  5. Add actuators — one row per actuator. Columns:

    Column Description
    Type rc_servo / dc_motor / stepper_motor / relay
    Name Free-text label
    Pin Physical pin number; leave blank to auto-assign
    Trim Symmetric trim around centre
    Min / Max Range bounds in actuator-native units
    Reverse Flip the output sign
  6. Add sensors — one row per sensor (digital, analog, encoder, limit-switch, tachometer).

  7. Add stanzas — each stanza pairs a lobe with an actuator mapping. The stanza-set view at the bottom shows which stanzas share actuators (mutually exclusive sets are derived automatically).

  8. Save. The preset persists as a fixo.json file under <personality>/fixo/presets/.

The Fixo Studio reference has the full UI tour.


Build and inject

Once you have a preset:

  1. Open the FixoRuntime view (or the Build & Inject screen, if your build still ships the legacy controller activity).
  2. Click Build. The runtime transitions through Compiling → CompileSucceeded. Progress and any compiler diagnostics show inline.
  3. Click Inject. The runtime transitions through Flashing → FlashSucceeded, writing the AVR ELF to the connected board via stk500v2.
  4. Click Start. The runtime transitions through Loading → Running, opening the numex serial link and (when wired) loading the matched native .so for node-side lobe execution.

The state machine is documented in the FixoRuntime reference.


Drive the robot from Remote

With a Running runtime, the fixo-runtime ConfigSync section publishes everything Remote needs: channels, per-stanza inputs, scenes, sensor list. The Remote-side activity you pick depends on what control surface fits your robot:


Troubleshooting

Build fails with "firmware too large"

Your firmware exceeds the board's available flash memory.

Solution Description
Remove unused actuators Each actuator adds code
Switch to Arduino Mega 2560 256 KB flash vs 32 KB on Uno
Reduce sensors with interrupts Each interrupt-driven sensor adds ISR code

Build fails with compilation errors

Check the build log for the specific error. Common causes:

Cause Solution
Pin conflicts Two actuators or sensors assigned to the same pin
Invalid pin number Pin number exceeds the board's available pins
LLVM not available The Agent was built without LLVM support — rebuild with OC_USE_FEATURE_LLVM

Changes don't take effect

Fixo requires a rebuild after every preset change. Click Build and Inject again to compile and flash the updated firmware.

Serial monitor shows garbled data

Cause Solution
Baud rate mismatch The numex protocol runs at 115 200 baud; older sketches at 38 400 will look garbled
Wrong board selected Verify the board in your preset matches the connected hardware