The rover on a table: six black wheels on a silver chassis, an orange printed plate carrying the Raspberry Pi and the controller board, and the black round lidar on a raised orange plate at the back.
The finished rover, September 12, 2026.
The rover's own camera on its first outdoor drive, October 12, 2026, at twice real speed. Driven with a PS4 controller over a phone hotspot.
Drive
6 wheelsskid steer, TT motors
Computer
Pi 5, 8 GBown battery
Lidar plane
183 mmabove the floor
First go-to
3 of 3within 100 mm, by tape
Parts cost
≈ $280new parts; see list

3D model

The two orange parts are the printed plates, the same files you can download. The translucent blocks are simplified envelopes of the boards, the lidar and the standoffs, placed from the build's measurements.

Drag to turn, scroll or pinch to zoom, right-drag to pan.

Parts list

Prices are what we paid, where we recorded them. Parts we already owned have no price.

PartRoleQtyPaid
Base
SunFounder GalaxyRVR kitChassis, six TT motors, Arduino-compatible R3 board, GalaxyRVR shield, battery. Solar panel left off.1≈ $130
Computer and power
Raspberry Pi 5, 8 GBRecords camera and lidar, relays drive commands1owned
Pi case base with active coolerCooling under load1owned
microSD card, 128 GB, A2Boot and storage. Our first card failed; see lessons.1owned
52Pi EP-0225 USB-C PD boardTakes 15 V USB-C PD, gives the Pi a regulated 5 V1$29.99
Anker MagGo A1664 power bankThe Pi's own battery, 39 Wh1owned
Sensors
Arducam B031202, 12 MP IMX708Front camera, 120° diagonal, autofocus1$44.99
SLAMTEC RPLIDAR C1 kit360° single-plane lidar, with its USB adapter1$74.99
Printed and hardware
Lower plate, PLAPayload deck on the chassis1printed
Lidar carrier, PLARaised lidar deck1printed
M3 metal standoffs, 45 mm stackLidar carrier supports4owned
M3 flat-head socket screws and nutsCamera bracket (2) and standoff bases (4), up from below6owned
M3 screws and hex nutsController board into captive nuts under the plate4owned
M3 screwsPlate to chassis (4), carrier to standoffs (4)8owned
M2.5 button-head socket screwsPi, up through the plate into the EP-0225 standoffs4owned
M2.5 screwsLidar to carrier, from below, at most 4 mm into the lidar4owned
Cables and control
USB-A to USB-B cable, 5 V wire cutPi to controller board: data and ground only1owned
PS4 DualShock 4 controllerPlugged into the laptop for driving1owned
New parts bought for this build≈ $280

Screw lengths were not recorded; measure against your own stack. The kit's ESP32 camera is disconnected from the shield.

Two batteries, kept apart

Power and data wiring The rover battery powers the GalaxyRVR shield, which powers the R3 board and the six motors. The power bank powers the EP-0225 at 15 volts, which powers the Pi at 5 volts. The Pi runs the camera and the lidar. The Pi and the R3 are joined by a USB cable that carries data and ground only; its 5 volt wire is cut. Rover batterystock pack GalaxyRVR shieldmotor drivers R3 board + 6 motorsguarded drive firmware Anker power bankUSB-C PD 52Pi EP-022515 V in, 5 V out Raspberry Pi 58 GB Camera and lidarCSI ribbon, USB USB: data and ground only, 5 V wire cut

Printed parts

Both parts were printed in PLA on a Bambu Lab A1 mini. The lower plate takes the solar panel's place and bolts into the chassis's existing threaded holes. A 21 mm channel under the plate clears the chassis strip and keeps the top flat.

MaterialPLA
Walls, infill4 wall loops, 15 % gyroid
Around holesSlicer modifiers at every through-hole
OrientationLower plate top face down, so the nut pockets and channel print facing up. Carrier flat.
FastenersNo heat-set inserts: captive M3 nuts, countersunk screws from below, and the EP-0225's own standoffs
A photo of the bare aluminum chassis on graph paper, marked up by hand with hole positions and distances in millimetres, with two close-ups of a standoff and a nut.
The plate is drawn from hand measurements of the chassis, September 8.
A small orange printed test plate held in a hand, with rows of hexagonal nut pockets for M2 to M5 at three different clearances, some with nuts pressed in.
A test coupon of M2 to M5 nut pockets at three clearances, printed to choose the pocket size, September 11.

The files here are rebuilt from the build's measured specification by cad/build_parts.py (FreeCAD). They include one change made after printing: the camera bracket holes sit 5 mm farther along the plate's width, where we re-drilled them to clear the Pi's power cable. Two walls are thinner than our own 2.5 and 3 mm minimums: between two nut pockets and the channel (1.1 mm), and the roof over two Pi screw pockets inside the channel (2.6 mm).

Assembly

  1. Build the kit with SunFounder's assembly video, but leave off the solar panel and its mount. Its space becomes the payload deck.
  2. Print the lower plate and the lidar carrier.
  3. Press four M3 nuts into the hex pockets under the plate, for the controller board.
  4. Fit the camera bracket and the four standoff bases with M3 countersunk screws pointing up from under the plate, nuts on top. Build each standoff stack to 45 mm.
  5. Mount the Pi with the EP-0225 on it: four M2.5 button heads up through the plate into the EP-0225's standoffs. Do this before the plate goes on the chassis, which covers those screw heads.
  6. Mount the R3 board and shield under where the lidar will be, with M3 screws from the top into the captive nuts.
  7. Bolt the plate to the chassis with four M3 screws into the chassis threads. The channel underneath sits over the chassis strip, and the 8 mm hole clears its center screw.
  8. Fit the lidar to the carrier with four M2.5 screws from below, then screw the carrier onto the standoffs from above.
  9. Connect the camera to the Pi's CAM/DISP 0 port with a 22-pin Pi 5 ribbon. Never plug it into the kit's ESP32 camera connector: it looks similar and is not compatible.
  10. Wire it up: lidar USB adapter to a Pi USB 2 port, wrapped in film and taped where it touches the chassis; R3 to the Pi with the modified cable; power bank to the EP-0225's USB-C input.
  11. Before every drive: both batteries strapped down, loose cable coiled away from the wheels and suspension, and nothing in the lidar's scan plane.

The main parts before mounting

The RPLIDAR C1 with its cable, a USB cable and its small USB adapter board.
RPLIDAR C1 kit
The Arducam IMX708 camera board with two ribbon cables.
Arducam IMX708 and ribbons
The black 52Pi EP-0225 power board in its antistatic bag.
52Pi EP-0225
The Raspberry Pi 5 in a black case base with the active cooler fitted.
Pi 5 with active cooler
The blue Arduino-compatible R3 board from the kit.
The kit's R3 board
The black GalaxyRVR shield on the chassis with many wires plugged in.
GalaxyRVR shield

The USB cable we cut

The Pi sends drive commands to the R3 board over USB. But the R3's USB port is also powered by the rover's battery, through the shield. With the rover switched on and nothing else connected, a USB meter on the R3's cable read 5.13 V. Plugged into the Pi, that cable would have tied the rover's 5 V to the Pi's own supply, and current could flow back into the Pi.

So on a spare USB-A to USB-B cable we opened the jacket and cut the red wire, the 5 V line (VBUS). Both cut ends were insulated and the section taped closed. White (D−), green (D+) and black (ground) stay connected: the two boards share data and ground, never power.

How we checked it

Voltage with a POWER-Z KM003C USB meter; the wires with a multimeter in continuity (beep) mode, cable unplugged at both ends.

CheckHowResult
Back-feed, stock cableRover on, R3 → cable → meter, other end free5.13 V
Back-feed, cut cableSame setup with the modified cableMeter stays dark
5 V end to endA pin 1 → B pin 1Open
GroundA pin 4 → B pin 4Beeps
DataA pin 2 → B pin 2 (D−), A pin 3 → B pin 3 (D+)Both beep
No short5 V to ground, at each plugOpen
Talks to a laptopLaptop → cable → R3 running a test firmware with the motors disabled4 of 4 replies correct
Talks to the PiPi → cable → R3, wheels off the groundOne 200 ms pulse, then stopped by itself
A POWER-Z USB meter reading 5.129554 volts, 0 amps, 0 watts, held up with nothing plugged into its far end.
5.13 V coming out of the rover's USB port, with no computer attached. September 7.
The POWER-Z meter on the end of a blue USB cable through a USB-A to USB-C adapter.
The meter is USB-C, so the cable's USB-A plug goes through an adapter.
The blue USB-B plug in the R3 board's USB port, under the shield.
The R3's USB-B port, under the shield.

Software

Plain Python, no ROS. Three computers, each with one job:

The code is not in this repository yet.

Lidar map and the first go-to runs

The lidar sees one horizontal slice of the room, 183 mm above the floor. We drove around the test room for a few minutes, stitched the scans together (scan matching with loop closure) and got this map at 25 mm per cell. The rover then located itself on it with a particle filter and drove to three goals on its own, September 18, 2026.

Lidar map of the test room with the mapping drive and three go-to runs Walls and furniture legs seen by the lidar, seen from above. The table below the map lists the three runs.
RunGoal distanceTimeStopped from goal, by tape

Depth coverage in 3D

The camera fills in what the lidar's single plane misses: table legs, boxes and everything between the floor and about 0.8 m. Each camera frame gets a depth estimate from a neural network (Depth Anything V2, Large), scaled to agree with the lidar where its scan line crosses the image and with the floor, then placed along the path the lidar measured. This is 213 frames from a 71-second, 2.5 m drive on September 15, 2026, kept at 2 cm spacing.

Loading 1.7 MB of points…

Log

  1. Kit built and driven with SunFounder's app.
  2. Driven from a laptop page with a PS4 controller, through the kit's ESP32 link.
  3. Pi 5 boots from the power bank through the EP-0225 and holds about 5.05 V through a ten-minute CPU load.
  4. USB cable modified and checked; the Pi drives the motors through the R3 for the first time, wheels in the air.
  5. Plates printed and everything mounted and wired.
  6. Five-minute run driving with camera and lidar recording. The SD card started throwing write errors.
  7. Camera depth fused with the lidar into a 3D map of the room.
  8. Camera recalibrated with tilted views of a printed target: the first calibration's focal length was about 5 % too high.
  9. First drive to a point on the lidar map by itself: three of three goals, 1.3 to 1.7 m away, reached within 100 mm (77, 66 and 53 mm by tape), at 20 % power with a hand on the dead-man key.
  10. First drives outdoors, over a phone hotspot with a proportional PS4 stick: two sessions, 222 s of driving, no faults.

Lessons