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
- Robot behavior improves when visual tracking is paired with independent distance sensing.
- Splitting perception and actuation across a Raspberry Pi and STM32 creates a cleaner control architecture.
- Mechanical outputs are most reliable when the software state machine accounts for timing and physical recovery between actions.