The World Robot Olympiad (WRO) is a prestigious international competition that challenges students from around the globe to solve problems through creative, functional, and technically sound robotic solutions. One of its most engaging categories is Future Engineers, which focuses on developing advanced technologies to tackle real-world challenges, encouraging innovation, critical thinking, and collaborative work.
This year's challenge in the Future Engineers category is particularly exciting: to design and build an autonomous vehicle capable of making intelligent decisions and adapting to a dynamic environment. The challenge offers a unique opportunity for young engineers to explore the fundamentals of modern robotics, including motor control, sensor processing, and autonomous navigation.
This repository documents the hardware and software architecture developed to build an autonomous vehicle designed to compete in the Future Engineers category of the WRO. The system has been carefully designed to address two specific challenges defined by the competition:
-
Open Challenge: The vehicle must complete three laps on a closed track, where inner walls are randomly placed each run. The robot must avoid collisions through accurate obstacle detection.
-
Obstacle Challenge: Along the route, the robot will encounter colored pillars acting as traffic signals. Red pillars indicate the robot should drive on the right, while green pillars indicate it should drive on the left. The vehicle must navigate without knocking over these signals, and at the end of the route, it must detect a parking zone and autonomously perform parallel parking.
The design integrates multiple technologies: ultrasonic sensors, a gyroscope, a Pixy2 camera, DC motors, and an H-bridge, all controlled by an Arduino Uno microcontroller. The system includes a voltage regulator and capacitors to protect sensitive components and ensure safe, stable operation. This documentation serves as a technical guide for the development process and as a reference for future teams participating in similar robotics challenges
The goal of this project is to design, build, and program an autonomous robot using open-source hardware, environmental sensors, and adaptive motion algorithms. The robot dynamically perceives its surroundings and makes decisions based on sensor feedback, enabling efficient navigation and autonomous obstacle avoidance.
Core development goals:
- Strengthen real-world engineering skills such as problem-solving and teamwork.
- Apply sensor-based motion control for precise navigation.
- Develop an optimized autonomous driving strategy for robotics challenges.
- Contribute to the open-source robotics community by documenting the solution for future teams.
-
π§ The Arduino UNO acts as the brain of the vehicle, receiving data from sensors and sending control signals to actuators to coordinate movement.
-
π The ultrasonic sensors send distance information to the Arduino about side obstacles, allowing adjustment of direction and speed to avoid collisions.
-
π The MPU-6050 gyroscope provides orientation and angular velocity data to the Arduino, which uses it to stabilize and correct the vehicleβs trajectory.
-
π₯ The Pixy2 camera complements the systemβs vision by detecting objects and helping the Arduino follow routes or identify specific targets.
-
βοΈ The HG7881 H-Bridge receives commands from the Arduino to control the direction and speed of the DC motors, enabling forward, backward, and turning movements.
-
π© The DC motors execute the commands received from the HG7881, converting electrical energy into physical movement to drive the vehicle.
-
π The voltage regulator supplies stable and safe voltage to the Arduino, sensors, servo, and HG7881 controller, protecting the electronic components.
-
βͺοΈ The servo motor adjusts steering or sensor orientation based on control signals from the Arduino, improving maneuverability and environmental scanning.
-
π The capacitors filter electrical noise and stabilize voltage, ensuring sensors, Arduino, and HG7881 operate without interference.
-
π§© The protoboard facilitates physical connections and distribution of power and signals among all components, allowing organized and flexible assembly without soldering.
Each component depends on the information or energy it receives and transmits to others, creating a coordinated system where sensors detect the environment, the Arduino processes information, and actuators like motors and servos execute the necessary actions for the vehicleβs proper operation.
The designed strategy combines mechanical, electronic, and perception components to simulate an intelligent vehicle that autonomously navigates a route under conditions similar to a controlled urban environment. The key elements to meet the challenges are:
-
βοΈ Motorization and Steering:
An electric motor drives the rear wheels of the vehicle, while a servo motor on the front axle allows left and right steering maneuvers, imitating a real car's steering system. -
π₯ Vision and Perception:
A front-mounted camera enables detection of obstacle distances and traffic light colors (red or green), a critical decision factor to deviate either right or left. This visual component acts as the main perception system for the frontal environment. -
π‘ Side Sensors:
Two ultrasonic sensors located on the vehicle's sides measure the distance to obstacles on each side. Based on this data, the system determines the safest side to turn when detecting an obstruction or needing to take a curve. -
π§ Orientation System:
A gyroscope allows the vehicle to recognize its spatial orientation, record the initial position, and ensure that at the end of the route it parks parallel at the same starting position. This component is essential to meet the precise navigation requirements of the competition.
This project is divided into functional modules that manage the behavior of an autonomous robot. Below is an overview of the main components of the code:
Essential libraries are included to:
- Control the servo motor.
- Enable I2C communication.
- Interface with the MPU6050 gyroscope sensor.
These libraries simplify hardware interaction and keep the code modular.
Microcontroller pins are assigned to the motors, ultrasonic sensors, and servo. Objects are also created for the servo and gyroscope to manage their operation.
Constants define decision thresholds (e.g., safe distances to avoid obstacles), and global variables are used to store values like rotation and timing.
In the setup() function:
- Pins are configured.
- I2C communication is initialized.
- The MPU6050 sensor is initialized and tested.
- The servo motor is attached.
The serial monitor confirms whether sensors are functioning correctly.
Functions are included to measure distance using ultrasonic sensors on the left and right. This helps the robot detect obstacles and make directional decisions accordingly.
Basic movement functions are defined:
- Move forward
- Move backward
- Stop
These directly control the motor pins and determine the robot's mobility.
The core of the program:
- Gyroscope data is captured.
- Rotational velocities are integrated to calculate orientation angles.
- Data is printed to the serial monitor for debugging or tuning.
There is also commented-out logic that could enable obstacle-avoidance behavior using the ultrasonic sensors.This modular structure makes it easy to scale the system, such as adding more sensors, a camera, or other peripherals without overcomplicating the main codebase.
To work on this project, you need the appropriate environment. It is recommended to use the Arduino IDE, preferably version 1.8.19 or higher, to ensure compatibility with all the libraries used and to avoid compilation errors.
π Required Libraries:
Servo.h: Enables control of servo motors.Pixy2.h: Provides functions necessary to communicate with the Pixy2 vision sensor.
These libraries can be easily installed from the Arduino IDE Library Manager or manually downloaded from their respective repositories.
The source code must be organized properly to ensure correct functionality. All .ino files should be located within the same folder, which must be named exactly as the main file (usually main.ino). This structure is required by the Arduino IDE to properly compile the different modules of the project.
Before compiling the code, configure the environment as follows:
- Go to Tools > Board, and select the appropriate board model β in this case, Arduino UNO.
- In the same menu, select the COM port to which your device is connected.
- Once configured, click the Verify button (βοΈ) to compile the code. This action translates the source code to machine language and detects syntax errors or library issues.
Once the code is compiled:
- Connect the Arduino UNO board to your computer via USB cable.
- Press the Upload button (β‘οΈ) in the IDE to load the program into the microcontrollerβs memory.
- After upload completes, you can monitor the system behavior using the Serial Monitor accessible from Tools > Serial Monitor, which is especially useful for debugging and data flow verification
This project was developed by the Neo Engineers team for the WRO 2025 competition.
Participants:
- Nelson Figueroa
- Gabriela Cisnero
- Jesus Alfonzo









