# Hardware Overview This document lists the main hardware used on our WRO Future Engineers vehicle and explains the role of each component in the system. The setup is built around a split-compute architecture: the Raspberry Pi handles vision and high-level decisions, while the STM32 handles real-time sensor reading, motor control, and low-level safety logic. ## Contents * [Compute and Control](#compute-and-control) * [Sensors](#sensors) * [Drive and Steering](#drive-and-steering) * [Power Distribution](#power-distribution) --- ## Compute and Control The vehicle uses two separate controllers. The Raspberry Pi 5 runs the vision and navigation pipeline, while the STM32 handles deterministic, timing-sensitive tasks. This separation keeps the high-level software flexible without compromising the control loop timing. ### Raspberry Pi 5 — 8 GB The Raspberry Pi 5 is used as the main onboard computer. It runs the camera pipeline, OpenCV-based detection, navigation logic, and high-level decision code. The system processes camera frames at 640×480 and targets a 30 Hz vision loop during runs. The 8 GB version was selected to provide enough memory headroom for image processing, debugging, and future software extensions without running close to system limits. **Role:** High-level compute, vision processing, navigation logic **Main specs:** Quad-core Arm Cortex-A76 @ 2.4 GHz, 8 GB LPDDR4X **Used for:** Camera capture, OpenCV processing, route decisions, communication with STM32 ### STM32F410RB Nucleo The STM32F410RB is used as the real-time controller. It reads the LiDARs and IMU, generates motor and servo signals, and handles safety-related logic. The Raspberry Pi sends high-level commands to the STM32 over UART, while the STM32 executes the low-level control loop independently. This avoids relying on Linux timing for control-critical tasks and keeps actuator updates stable during image-processing load spikes. **Role:** Real-time control and sensor interface **Main specs:** Arm Cortex-M4F @ 100 MHz, hardware FPU **Used for:** LiDAR reading, IMU reading, PWM output, servo control, motor control, watchdog logic **Control loop target:** 200 Hz **Pi communication:** UART, 115200 baud --- ## Sensors The sensor stack is designed to cover both visual and geometric information. The camera is used for field and object detection, while the LiDARs and IMU provide distance and orientation data for control and state estimation. ### Raspberry Pi Camera Module 3 Wide The Raspberry Pi Camera Module 3 Wide is the main vision sensor. The wide-angle lens gives a larger view of nearby walls, corners, and pillars, which is useful on the WRO Future Engineers field where objects can enter the frame quickly. The camera is run at 640×480 to reduce processing cost while keeping enough image detail for detection. **Role:** Main vision input **Main specs:** 12 MP Sony IMX708 sensor, wide-angle lens, autofocus **Used resolution:** 640×480 **Target frame rate:** 30 FPS **Used for:** Pillar detection, lane/wall perception, corner and field feature detection ### TFMini-S LiDAR ×3 Three TFMini-S single-point LiDAR sensors are used for distance measurement. The left and right sensors help estimate the car’s lateral position relative to the walls, while the front sensor helps detect upcoming corners and obstacles. The sensors are connected directly to the STM32, with separate UART lines to avoid bus conflicts and simplify timing. **Role:** Short-range distance sensing **Main specs:** 0.1–12 m range, up to 1000 Hz update rate **Placement:** Front, left, right **Used for:** Wall distance, centering, corner approach detection, obstacle proximity ### Adafruit 4754 — 9-DoF IMU The Adafruit 4754 IMU provides acceleration, angular velocity, and magnetic field data through the LSM6DSOX and LIS3MDL sensors. In our current setup, heading is estimated mainly from gyroscope integration. The magnetometer is not used for indoor heading correction because the competition environment and onboard electronics can introduce magnetic interference. **Role:** Orientation and motion sensing **Main chips:** LSM6DSOX + LIS3MDL **Interface:** I²C **Used for:** Heading estimation, turn tracking, lap/corner logic **Current heading source:** Gyroscope integration --- ## Drive and Steering The drivetrain uses a single brushed DC gearmotor for propulsion and a micro servo for Ackermann steering. The STM32 controls both actuators through PWM-based outputs. ### 6 V 150 RPM Mini DC Gearmotor The drive motor is a 6 V brushed DC gearmotor rated at 150 RPM. This speed range gives a usable balance between lap time and control stability. The motor is currently driven open-loop, with the STM32 setting motor power based on commands from the high-level navigation logic. **Role:** Main propulsion **Type:** Brushed DC gearmotor **Rated voltage:** 6 V **Rated speed:** 150 RPM **Control mode:** Open-loop PWM control ### DRV8833 Motor Driver The DRV8833 is used as the motor driver between the STM32 and the DC motor. The STM32 provides PWM and direction signals, while the DRV8833 handles the motor current and direction switching. **Role:** DC motor driver **Type:** Dual H-bridge **Current rating:** Approximately 1.5 A per channel **Control input:** PWM + direction **Used for:** Drive motor power switching ### EMAX ES08MA II Analog Servo The EMAX ES08MA II servo actuates the front steering linkage. It drives the Ackermann steering mechanism and receives a standard servo PWM signal from the STM32. A metal-gear servo was selected for better durability during testing and contact with the field walls. **Role:** Steering actuator **Type:** Analog micro servo **Gear type:** Metal gear **Torque:** Approximately 2.0 kg·cm at 6 V **Weight:** Approximately 12 g **Used for:** Front-wheel Ackermann steering --- ## Power Distribution The vehicle uses separate voltage rails for compute, logic/sensors, drive, and steering. This keeps high-current actuator noise away from the Raspberry Pi and sensor electronics, reducing brownout risk and improving signal stability. The main battery feeds multiple buck converters. Each subsystem receives power from its own regulated rail. ### XL4015 5 V 5 A Buck Converter The XL4015 converter powers the Raspberry Pi 5 and the camera module. This rail is kept separate because the Raspberry Pi is sensitive to voltage drops, especially under CPU and camera load. **Role:** Main compute power rail **Output:** 5 V, up to 5 A **Powers:** Raspberry Pi 5, Camera Module 3 ### 6R1ML 5 V 5 A Buck Converter The 6R1ML converter powers the low-level electronics and sensor stack. This rail is used for the STM32, LiDARs, and IMU. Keeping this rail separate from the Raspberry Pi and actuators helps maintain stable sensor readings and avoids unnecessary resets during motor load changes. **Role:** Logic and sensor power rail **Output:** 5 V, up to 5 A **Powers:** STM32F410RB, 3× TFMini-S, 9-DoF IMU ### LM2596 Buck Converter ×2 Two LM2596 buck converters are used for the actuator rails. One powers the DC drive motor through the DRV8833, and the other powers the steering servo. Using separate rails prevents motor current spikes from affecting the steering servo and keeps actuator noise isolated from the compute and sensor rails. **Role:** Actuator power rails **Output:** Adjustable, configured around 6 V **Used for:** * Drive motor rail * Steering servo rail --- ## Power Topology ```text Main battery pack ├─ XL4015 5 V / 5 A ──> Raspberry Pi 5 + Camera Module 3 ├─ 6R1ML 5 V / 5 A ──> STM32F410RB + 3× TFMini-S + 9-DoF IMU ├─ LM2596 ~6 V ──> DRV8833 + DC drive motor └─ LM2596 ~6 V ──> Steering servo ``` The power system is split into four main rails: * Compute rail * Logic/sensor rail * Drive motor rail * Steering servo rail This layout reduces cross-noise between subsystems and makes the vehicle more reliable during testing and competition runs.