KMIDS-GFM Self-Driving Car (WRO 2025)
An autonomous rear-wheel-drive robot built for the WRO Future Engineers 2025 competition, using a Raspberry Pi 5, RPLIDAR S2 and a fish-eye camera to navigate and avoid obstacles.
- Self-driving 1:10
- Open source
- ROS 2
- 3D printable
Suggested by Robotheca, created by @Chayanon-Ninyawee (opens in a new tab), from github.com/Chayanon-Ninyawee/KMIDS-GFM-Future-Engineer-2025 (opens in a new tab). Pinned to commit aebc4ca (opens in a new tab).
- Hardware license
- MIT (opens in a new tab)
- Software license
- MIT (opens in a new tab)
- Commercial use
- Allowed
This repository contains executable files that Robotheca doesn't check. Only run them if you trust the creator.
Which files (7 scripts)
- code/raspberry-pi-5/build-arm64.sh (opens in a new tab)
- code/raspberry-pi-5/build-log_viewer-native.sh (opens in a new tab)
- code/raspberry-pi-5/build.sh (opens in a new tab)
- code/raspberry-pi-5/scripts/shutdown.sh (opens in a new tab)
- code/raspberry-pi-5/scripts/start_gfm.sh (opens in a new tab)
- code/raspberry-pi-5/upload.sh (opens in a new tab)
- code/raspberry-pi-pico-2/build.sh (opens in a new tab)
Photo and 3D model

The 3D files are too large to show here. View the original files from GitHub (96.4 MB) (opens in a new tab)
- Weight
- 48 g
What it can do
Written by Robotheca from the project's documents.
- Autonomous navigation of the WRO Future Engineers open and obstacle challenges, including three laps and parallel parking.
- Rear-wheel differential drive driven by an N20 motor with encoder, giving closed-loop speed control.
- Front-wheel Ackermann-style steering using an S0009M servo.
- Wall following and collision avoidance using the RPLIDAR S2 scanner.
- Obstacle detection and colour-based pillar recognition using a fish-eye camera.
- Turn direction is chosen from detected walls, with a fallback when no rule matches.
Bill of materials
40 parts40 of 40 parts shown
| # | Component | Quantity | Est. price | Supplier |
|---|---|---|---|---|
| 1 | Raspberry Pi 5 | 1 | – | Gammaco: buy Raspberry Pi 5, opens in a new tab |
| 2 | Raspberry Pi Pico 2 | 1 | – | Cytron: buy Raspberry Pi Pico 2, opens in a new tab |
| 3 | UPS EP-0136 | 1 | – | 52Pi: buy UPS EP-0136, opens in a new tab |
| 4 | 18650 Lithium-ion Battery | 2 | – | Cytron: buy 18650 Lithium-ion Battery, opens in a new tab |
| 5 | RPLidar S2 | 1 | – | SLAMTEC: buy RPLidar S2, opens in a new tab |
| 6 | 5MP Fish-Eye Camera | 1 | – | Cytron: buy 5MP Fish-Eye Camera, opens in a new tab |
| 7 | BNO085 IMU | 1 | – | Shopee: buy BNO085 IMU, opens in a new tab |
| 8 | S0009M Servo | 1 | – | Shopee: buy S0009M Servo, opens in a new tab |
| 9 | N20 DC Motor + Encoder | 2 | – | Shopee: buy N20 DC Motor + Encoder, opens in a new tab |
| 10 | Raspberry Pi M.2 HAT+ | 1 | – | Shopee: buy Raspberry Pi M.2 HAT+, opens in a new tab |
| 11 | DRV8871 Motor Driver | 1 | – | Shopee: buy DRV8871 Motor Driver, opens in a new tab |
| 12 | DC-DC Boost Step-Up Module | 1 | – | – |
| 13 | N-Channel MOSFET Transistor | 1 | – | – |
| 14 | 4.4 kΩ Resistor | 1 | – | – |
| 15 | Wires | – | – | – |
| 16 | eSUN PLA+ Spool | – | – | eSUN: buy eSUN PLA+ Spool, opens in a new tab |
| 17 | Screws (M2 & M2.6 & M3) | – | – | – |
| 18 | Tape | – | – | – |
| 19 | Lithium Grease | – | – | – |
| 20 | Axle Holder | 3 | – | – |
| 21 | Back Wheel Axle | 2 | – | – |
| 22 | Back Wheel Connector | 2 | – | – |
| 23 | Back Wheel Stopper | 2 | – | – |
| 24 | Chassis | 1 | – | – |
| 25 | Front Cover | 1 | – | – |
| 26 | Front Wheel Axle (Left) | 1 | – | – |
| 27 | Front Wheel Axle (Right) | 1 | – | – |
| 28 | Front Wheel Stopper | 2 | – | – |
| 29 | Lidar Plate | 1 | – | – |
| 30 | Motor Gear | 1 | – | – |
| 31 | Motor Holder | 1 | – | – |
| 32 | Motor Plate | 1 | – | – |
| 33 | T-Bone Linkage (Bottom) | 1 | – | – |
| 34 | T-Bone Linkage (Top) | 1 | – | – |
| 35 | Transfer Linkage (Left) | 1 | – | – |
| 36 | Transfer Linkage (Right) | 1 | – | – |
| 37 | Wheel Linkage (Bottom Left) | 1 | – | – |
| 38 | Wheel Linkage (Bottom Right) | 1 | – | – |
| 39 | Wheel Linkage (Top Left) | 1 | – | – |
| 40 | Wheel Linkage (Top Right) | 1 | – | – |
40 of 40 parts have no price in the source, so there is no parts total. Read from README.md at the pinned commit.
Build guide
The guide appears here as you scroll.
Guide by @Chayanon-Ninyawee (README.md), under MIT.
More guides
Wiring and electronics
Notes written by Robotheca from the project's documents.
Main parts
- Raspberry Pi 5 as the high-level processing unit.
- Raspberry Pi Pico 2 as the low-level controller for motor, servo and sensor I/O.
- N20 DC motor with encoder, driven through a DRV8871 motor driver.
- Step-up converter raising 5V to 12V for the motor supply.
- N-channel MOSFET and 4.4 kΩ resistor for switching the motor power.
- S0009M digital servo for steering.
- RPLIDAR S2 360° laser scanner.
- 5MP fish-eye Raspberry Pi camera.
- Raspberry Pi M.2 HAT+ adapter for an NVMe SSD.
Connections
- Motor power is separate from the Raspberry Pi supply, with a MOSFET and 4.4 kΩ resistor between gate and source and the drain on the step-up converter negative side.
- The Raspberry Pi Pico 2 connects to the motor driver and motor wires.
- The Pico 2 communicates with the Raspberry Pi 5 over UART.
- The M.2 HAT+ connects to the Raspberry Pi 5 through its 16-pin FPC PCIe connector.
- Two 18650 cells are wired in series in the UPS to give 7.4V nominal.
- Components are joined with jumper wires rather than a custom PCB.
Cables and connectors
From the parts list.
- Wires
- Back Wheel Connector × 2