Autonomous RC Car
An RC car system guided by an external overhead vision module and a stationary STM32 command center.
Author: VULTURESCU Victor Cristian
GitHub Project Link: https://github.com/UPB-PMRust-Students/fils-project-2026-VictorVulturescu
Description
A remote-controlled car system where a stationary command center uses an overhead camera to detect the car and obstacles, plans a safe path, and wirelessly sends movement commands to the vehicle.
Motivation
The motivation for this project is to study a different approach to guiding a small autonomous vehicle. Instead of relying only on sensors mounted directly on the car, the system uses an external overhead view of the environment. This way, the car, obstacles and available space will all be viewed at once.The goal is to explore a centralized control architecture for obstacle avoidance, while still keeping the vehicle itself simple and controlled wirelessly.
Architecture
The project is split into two main parts: a stationary command center and a mobile vehicle node.
The stationary command center is built around an STM32 board. It receives data from the overhead camera, interprets the position of the car and obstacles, computes a safe path or movement decision, and transmits commands through the 2.4 GHz wireless transceiver.
The mobile vehicle node receives the commands sent by the command center and follows them by controlling the motors through the motor driver.
Main architecture components:
- Perception module: receives object data from the overhead camera and extracts useful information such as car position and obstacle positions.
- Planning module: uses the perceived environment to choose a safe direction or path toward the target position.
- Wireless communication module: sends movement commands from the command center to the car using the 2.4 GHz radio transceivers.
- Vehicle control module: receives commands on the car and converts them into motor driver signals.
- Actuation module: drives the two motors of the RC car.
Log
Week 2 - 7 March
- Came up with the original project idea;
- Researched possible approaches for external obstacle detection and wireless vehicle control.
Week 16 - 20 March
- Received and tested the first main hardware components;
- Verified that the STM board and DC motors worked as expected;
- Continued comparing possible sensing solutions for the project.
Week 23 - 29 March
- Researched the required software crates and communication protocols;
- Finalized the initial project idea and submitted the assignment proposal.
Week 30 March - 3 April
- Received the remaining hardware components;
- Tested the basic components individually before starting system integration.
Hardware
-
STM32 NUCLEO-U545RE-Q: serves as the stationary command center of the system. It receives data from the overhead camera, processes the detected position of the car and obstacles, computes movement decisions, and transmits commands to the vehicle through the wireless transceiver.
-
STM32F411 Black Pill: mounted on the vehicle and used as the local car controller. It receives wireless commands from the command center and generates the control signals required by the motor driver.
-
DFRobot HUSKYLENS Vision Sensor: used as the overhead sensing module. It detects color-coded objects in the arena, such as the car and obstacles, and sends compact object-position data to the command center.
-
nRF24L01+ 2.4 GHz Transceiver Modules (x2): provide the wireless communication link between the stationary command center and the mobile vehicle node.
-
SparkFun TB6612FNG Motor Driver: drives the two DC motors of the vehicle based on PWM and direction signals generated by the Black Pill.
-
2WD Robot Chassis with DC Motors: forms the mechanical base of the car and provides differential-drive movement using two independently controlled wheels.
-
ST-LINK Programmer/Debugger: used to flash and debug the STM32F411 Black Pill during development.
Communication interfaces: I2C or UART for communication between the HUSKYLENS sensor and the command center; SPI for the nRF24L01+ wireless transceivers; GPIO and PWM for the motor driver control signals.
The command center is powered through USB, either from a laptop or an external power adapter. The mobile vehicle node is powered by rechargeable batteries mounted on the chassis, which supply the motor driver and the onboard controller.
The system is divided into a stationary sensing and planning node and a mobile execution node. The stationary node observes the environment from above and sends movement commands wirelessly, while the vehicle node focuses only on receiving commands and controlling the motors.
Schematics
Will be added after the final wiring and architecture diagrams are completed.
Bill of Materials
| Device | Usage | Price |
|---|---|---|
| NUCLEO-U545RE-Q | Stationary command center used for camera communication, path planning, and wireless command transmission | 104 RON |
| STM32F411 Black Pill Development Board | Vehicle controller used for receiving wireless commands and controlling the motors | 71 RON |
| Round Robot Chassis Kit - 2WD with DC Motors | Mechanical base of the RC vehicle | 86 RON |
| SparkFun Dual TB6612FNG Motor Driver | Drives the two DC motors using PWM and direction signals from the vehicle controller | 70 RON |
| DFRobot Gravity: HUSKYLENS with Silicone Case | Overhead vision sensor used for detecting the color-coded car and obstacles | 252 RON |
| 400-Point Breadboard | Prototyping board used for testing and connecting circuits during development | 7 RON |
| Male-to-Male Dupont Wires, 20 cm, 10 pcs | Jumper wires used for prototyping connections | 6 RON |
| Female-to-Male Dupont Wires, 20 cm, 10 pcs | Jumper wires used for connecting modules and development boards | 1 RON |
| Female-to-Female Dupont Wires, 20 cm, 10 pcs | Jumper wires used for connecting pin headers between modules | 2 RON |
| Rechargeable 18650 Li-Ion Batteries, 3.6 V, 2600 mAh, 4 pcs | Battery cells used to power the mobile vehicle node | 66 RON |
| MP1584EN Mini DC-DC Step-Down Converter Module | Voltage regulator used to obtain a stable lower voltage from the battery pack | 8 RON |
| XTAR VC2 Li-Ion Battery Charger/Tester | Charger and tester for the 18650 Li-Ion battery cells | 54 RON |
| ST-LINK V2 Programmer/Debugger | Used for flashing and debugging the STM32F411 Black Pill board | 23 RON |
| 2 x 18650 Battery Holder, 2S | Battery holder for mounting two 18650 cells on the vehicle | 13 RON |
| Heltec 0.96 inch OLED Display, 128x64, I2C | Optional display used for debugging or showing system status information | 54 RON |
| nRF24L01+ 2.4 GHz Wireless Transceiver Module | Wireless module used for communication between the command center and the vehicle | 41 RON |
| nRF24L01 3.3 V Adapter Module | Adapter board used to provide stable 3.3 V power and easier wiring for the nRF24L01+ module | 39 RON |
| 253-Piece Electronic Components Kit | Assorted electronic components used for prototyping and testing | 99 RON |
| Total | 939 RON |
Software
| Library | Description | Usage |
|---|---|---|
| embassy-stm32 | Embassy hardware abstraction layer for STM32 microcontrollers | Used to configure and control the STM32 peripherals, including GPIO, PWM, SPI, I2C/UART, and timers |
| embassy-executor | Async task executor for embedded systems | Used to run the firmware tasks, such as sensor communication, radio communication, and vehicle control |
| embassy-time | Timekeeping and async delays for Embassy applications | Used for delays, timeouts, periodic tasks, and motor command timing |
| embassy-sync | Synchronization primitives for Embassy applications | Used for communication between async tasks, such as passing commands or sensor data inside the firmware |
| embedded-hal | Common hardware abstraction traits for embedded Rust drivers | Used as the common interface for external peripheral drivers and hardware-independent code |
| embedded-nrf24l01 | Pure Rust driver for nRF24L01+ wireless transceivers | Used for the 2.4 GHz wireless communication link between the command center and the vehicle node |
| defmt | Logging framework for embedded Rust | Used for lightweight debugging and status messages during firmware development |
| defmt-rtt | RTT transport for defmt logs | Used to send debug logs from the STM32 board to the development computer |
| panic-probe | Panic handler for embedded Rust projects | Used to report panic information during debugging |
| cortex-m | Low-level support crate for ARM Cortex-M microcontrollers | Used for Cortex-M specific functionality required by the embedded runtime |
| cortex-m-rt | Runtime support for Cortex-M microcontrollers | Used for startup and memory initialization in no_std embedded firmware |