ALADDIN AKRAMI / SELECTED WORK
All projects
The XRP robot during bench integration, with its controller, wiring and camera mount.

02 / Embedded machine learning / Robotics / 2025

See the task.
Decide what comes next.

On-device perception and robot control, brought together for a mission involving a plate, a bucket and an exit cue.

Explore the project ↓AI Embedded Hoverer

THE PROJECT / 02

From camera pixels
to a sequence of actions.

We coupled a Coral vision board to an XRP robot controller so that what the camera sees could decide what the robot does next. Detection labels feed a state machine: follow the line, recognise a plate, search for a bucket, attempt the pickup and find the exit arrow. My own work ran through the perception data, the controller logic and the debugging of the link between the two boards, and this page is honest about which of those were validated.

WORK
Training data · embedded inference · robot state machine
PLATFORM
Coral vision system + XRP controller
OUTCOME
Development and partial integration
A handheld look at the camera assembly, wiring and robot during bench development. Original recording, 00:00–00:11.4.
01 / The view from the robot

Learn the objects
in their environment.

The training images came from the robot’s own camera in the actual room: floor reflections, changing object scale and the same objects seen from different positions. Those conditions are part of the perception problem the detector had to learn.

The detector uses four labels: arrow, picked-up bucket, bucket and plate. The images on this page are samples from that source dataset. I have not added detection boxes or confidence scores, because the record contains no measured detector output to show.

Original 320 × 320 training-camera sample. No detection output is overlaid.
Original 320 × 320 training-camera sample. No detection output is overlaid.
Original 320 × 320 training-camera sample. No detection output is overlaid.
Original 320 × 320 training-camera sample. No detection output is overlaid.
Original 320 × 320 training-camera sample. No detection output is overlaid.
Original 320 × 320 training-camera sample. No detection output is overlaid.
What this material establishes

The recovered material includes camera images, model-export folders and robot-control modules. It establishes dataset and implementation work. It does not, by itself, establish held-out detector accuracy, real-time latency or a successful complete mission.

Source: Original Drive dataset samples; project README and robot_control modules.

The camera board and mount on a bench fixture, beside handwritten object labels.
02 / The mission logic

A detection is useful
when it changes a decision.

Our controller looks for fresh detections, uses object position and apparent width during an approach, and combines vision with line, wall and encoder information. I wanted those responsibilities explicit rather than buried in one loop, so the mission is a state machine with named states and transitions.

The course mission supplies the order. Our implementation supplies the transitions, the motor actions and the fallback behaviour. The sequence below explains that logic; it is not a replay of a successful robot run.

  1. 01 · PLATE

    Find the plate and wait

  2. 02 · BUCKET

    Explore, centre and approach

  3. 03 · PICKUP

    Lower, advance and grab

  4. 04 · EXIT

    Search for the arrow and return to the line

A specific integration gap

In the recovered pickup handler, LABEL_PICKED is checked and a success or warning message is printed. Both branches then move to BACK_FROM_BUCKET, so pickup confirmation does not yet gate mission continuation. I have left that as the record shows it: a robust sequence needs a confirmed or explicitly handled pickup outcome, and we did not get there.

Source: state_machine.py, _step_pickup and _step_back_from_bucket; MF2143 assignment.

The physical test course, with floor tape, cardboard boundaries and the robot.
A fallback input / Bench test

Another way
to give a command.

I also explored keyword spotting as a fallback input for the XRP project. This recording shows that test with an on-screen maze providing feedback while I work with the board at the bench.

It documents the fallback experiment separately from the camera-driven mission. The recording does not establish recognition accuracy or completion of the robot mission. Original sound is available through the player controls.

Keyword-spotting fallback testing for the XRP project, using an on-screen maze for feedback. Identified by Aladdin; original recording, 00:06–00:36, with sound.
03 / Between two boards

Perception and motion
need a dependable conversation.

Most of my debugging went into the link between the two boards. The robot’s USB port was damaged, so I flashed the controller over SWD through a second Pico set up as a debug probe, which became our recovery route, and moved the serial console off the noisy default pins to a second UART.

The return channel from the robot to the Coral board arrived garbled. My working hypothesis is that the Coral’s UART clock, derived from an RC oscillator, drifts enough at 115200 baud to break framing after a few characters; a lower rate helped without curing it, and the measurements that would settle it are still open. The README and code comments disagree about which UART direction was working. Reliable communication in both directions remains unresolved in the project record.

  1. CORAL

    Camera input and object detections

  2. SERIAL LINK

    Message format, timing and reception

  3. XRP

    State transitions, drive and pickup control

Current presentation scope

The evidence I can show includes the camera dataset, controller implementation, prototype photographs, bench footage and a separate keyword-spotting fallback test. Reliable two-way communication, confirmed pickup and a complete autonomous mission remain unvalidated. The reviewed record does not establish detector accuracy or inference latency.

Source: README, ISSUES and coral.py; controller source; Canvas project requirements.

The development workbench, with the robot, camera fixture and debugging tools.