Build guide

Assemble the robot

About 45 minutes of reading and 110 minutes of building (tutorial v1.0, 27 Sep 2025). Figures are from that tutorial. Geometry and encoder ratios are from Rezeck et al., Auton. Robot (2023).

Casters · Motors · Wheels · Battery · Encoders · Board · E-hat · Troubleshooting

PDF of the same tutorial

Casters

Take a printed caster shell, drop in a 4 mm steel ball, and crimp the rim with pliers so the ball stays in but still turns. Screw both casters to Chassis A. Set the height so the chassis sits level.

Inserting the caster ball
Ball in the cup.
Crimping the caster
Crimp just enough.
Casters on chassis A
On Chassis A.
Height adjustment
Adjust clearance.

Motors

Prefer SG90 units already converted to continuous rotation. The tutorial recommends the green-label variant (no resistor swap). Stock angular servos need a CR modification first; after that, command ~1500 µs to center.

SG90 continuous servo
SG90 ready for the printed gear.

Gear adapter

  1. Pick a stock horn that fits the printed motor gear. Cut it down to the cylindrical hub. Wear glasses — chips fly.
  2. Trim the hub until it press-fits the gear. A small drop of cyanoacrylate at the interface; keep glue off the teeth.
  3. If the servo shaft sticks out, shorten it ~1.00–1.20 mm, cut flat.
  4. Fasten with the original horn screw. Do not overtighten — friction kills the mesh.
Cutting the horn
Cut the horn to a hub.
Horn hub
Hub only.
Hub in gear
Press-fit, then glue.
Glued gear
Keep glue off the teeth.
Shortening the shaft
Shorten the shaft if needed.
Horn screw
Original horn screw.

Mount each servo on Chassis A. Align both outputs at the stop pulse (1500 µs). Leave the mount screws slightly loose so the 1:1 gear train can sit. Trim motor cables to about 10 cm.

Servo on chassis
Servo in the printed mount.
Both motors installed
Both sides aligned.

The paper’s drivetrain is a 1:1 motor–wheel gear plus a 1:6 wheel–encoder gear. Combined with the 48 PPR mouse encoder that is a 1.25° / 0.54 mm wheel step.

Wheels

Press a 623ZZ into each printed hub (vise or a flat spacer — do not hammer the bearing). Seat the O-ring. Fit the printed shaft sleeve so the wheel turns with almost no backlash and no wobble.

Wheel parts
Wheel kit.
Pressing the bearing
Press the 623ZZ.
O-ring tire
O-ring on the rim.
Finished wheel
Ready to mesh.

Install the wheel on the motor gear. The mesh should be smooth. A tiny drop of glue on the support screw into Chassis A keeps it from backing out.

Wheel on shaft
Wheel on the axle.
Gear mesh
Motor gear to wheel.
Support screw
Support screw.
Both wheels
Check for wobble.

Battery and Chassis B

Seat the 1S Li-Po (paper: 3.7 V, 1800 mAh) in the cradle between A and B. Chassis B is labeled USB and Front: battery cable through USB, motor cables through Front.

A cover screw that is too long can pierce the pack. Check length before you tighten the top shell.
Battery in cradle
Battery in the cradle.
Cable routing
USB vs Front holes.
Stacking chassis B
Stack B on A.
Four screws
Four screws.

Encoders

Mouse-style quadrature encoders. Remove the detent spring so the shaft is smooth. Solder a JST-PH header. Cut shafts to length; wear glasses.

Encoder spring
Drop the detent spring.
Encoder wiring
JST-PH on the pins.
Encoder in chassis B
Pocket in Chassis B.
Encoder gear mesh
Gear to the wheel. Sand if it binds.

Board, cover, wiring

Mount the populated PCB on Chassis B. Fit the cover with eight screws — moderate torque. Then put the wheels on for the final motor → wheel → encoder check.

Board on chassis B
Board on B.
ESP seated
ESP / NodeMCU seated.
Cover
Cover.
Cover screws
Eight screws, clear of the pack.

Servo leads: signal to PWM, red to 5 V, brown/black to GND. Battery JST last. Never reverse the pack.

Servo plugs
Servo plugs.
Battery JST
Battery JST.

E-hat

The paper’s e-hat is a 4-pin I²C/UART bus with 5 V at 800 mA. Solder male headers on the MPU6050, screw it into the printed hat, and plug the hat onto the I²C connector.

IMU headers
IMU headers.
IMU in e-hat
IMU in the hat.
E-hat on the robot
Hat on the I²C bus.
Finished robot
Mechanical check: free wheels, casters, no cable rub.

Troubleshooting

Symptom What the tutorial says to check
Motors dead or weak PWM–5 V–GND order; boost still 5 V under load; pack > 3.6 V
Wheel wobble / backlash Hub seating, bearings fully in, sand or shim the gear adapter
Encoder drops counts Detent fully gone, JST joints, no lateral shaft play
IR silent Sensor orientation, LED polarity, current-limit resistors
Board off MT3608 at 5.0 V, JST polarity, switch solder
Boost hot Stay ≤ 0.8 A continuous or add a heatsink

Next: flash firmware, join ROS, then calibrate.