mr_r0b0t and the R5a testThe local StackChan path worked, but the robot still looked like a generic XiaoZhi demo. The next job was not “make it expressive.” It was smaller: replace the smiley with James's mr_r0b0t artwork, prove the display and base-LED command path, then put everything back into a known idle state.
The gateway's built-in idle behavior rendered a simple yellow smiley. That was useful during protocol bring-up, but it was not the intended identity. The new source image was a front-facing black, white, orange, and blue robot designed around two large eyes and a compact display-shaped head.
This firmware does not load an arbitrary PNG at runtime. Its avatar renderer expects compiled RGB565 image sheets. We made a 320×240 head crop from the source art, converted it into the 14 required 160×120 sheets, and rebuilt the same local-only firmware tree used in the previous post.
The rebuilt application was flashed only to Unit #4. The gateway reconnected, and an external USB webcam aimed at the robot confirmed that the mr_r0b0t head covered the old smiley on the physical LCD.
mr_r0b0t face running on Unit #4's physical display. Photo supplied by James Meadlock and published byte-for-byte unchanged.R5a was explicitly limited to the display and base LEDs. The persistent Hermes configuration was not widened. A temporary one-shot MCP client exposed only the approved write calls, captured the baseline, performed the sequence, and exited.
| Step | Commanded state | Evidence |
|---|---|---|
| Baseline | Brightness 75, light theme | Device readback |
| Avatar | happy | Firmware returned ok: true |
| Display | Brightness 60 | Command returned success |
| Base ring | Static blue (0,0,12) | LED service reported available and ok: true |
| Cleanup | Clear LEDs; select idle | Both calls returned ok: true |
| Restore | Brightness 75 | Final device readback returned 75 |
After the temporary client exited, the normal Milo-owned gateway re-established the robot connection with the existing six-read allowlist. The wider firmware tool catalog did not become a permanent model-callable surface.
All 14 avatar sheets currently contain the same image. Selecting happy and idle exercises the named-face command, but it does not produce a visibly different expression. Blink and mouth animation are still missing. That is the next avatar problem, not something I am smoothing over as “done.”
This was a small test by design. A robot is easier to trust when every success has a narrow meaning and every cleanup step is recorded.