Project overview

This project was built around a small four-wheel car platform with an embedded perception and actuation stack. A Raspberry Pi paired with a Pi Camera 3 handled human tracking, while a time-of-flight sensor added distance awareness so the robot could keep the person within a defined range instead of only chasing a visual target.

The Pi sent processed tracking and distance information to an STM32, which translated those commands into the appropriate drivetrain response. The rover adjusted its motion to keep the human centered in frame and within a specific distance band. When the person was close enough and no longer moving, the system triggered a flywheel setup that fired foam balls toward the target.

System architecture

Perception

The Raspberry Pi and Pi Camera 3 identified and tracked the human target, producing position information for centering behavior.

Ranging

A ToF sensor supplied distance feedback so the rover could decide whether to advance, hold, or back off from the target.

Control

The STM32 handled the physical response layer, including drivetrain commands and the foam-ball flywheel sequence.

Proof artifacts

Architecture diagram

Show camera input, target position, ToF distance, Pi processing, STM32 command handoff, drivetrain output, and launcher state.

Behavior table

Document the state machine for searching, centering, following, holding distance, stopping, and triggering the flywheel response.

Test clips

Add short demo cuts for tracking, distance correction, target stop detection, and recovery after a launch sequence.

What made it interesting

The core challenge was making separate subsystems behave like one robot. Vision tracking alone was not enough because the car also needed range context, motion decisions, and a reliable handoff from the Raspberry Pi to the STM32. The project forced the software and hardware decisions to meet in real time: image position, measured distance, target motion, motor control, and launcher timing all had to line up.

The flywheel mechanism added a useful mechanical layer to the project. It turned the rover from a pure follower into a robot with a conditional response, which made the state machine more interesting and made timing, safety, and repeatability matter more.

What I took away