I started with some very cheap dollar store wooden parts for a frame to build on. After coming up with a design in Fusion360, I used hot glue to attach 3d prints that hold the motors and wrap around the bottom of the frame. The motors are screwed into those prints. Another 3d print was attached with hot glue to hold the caster wheel in the back
The wheels are 3d printed in two parts: the rim and spokes with medium infill for strength, and a replaceable central hub print with high infill for a strong press-fit directly onto the motor shafts. I didn't want to have to reprint the entire wheel if the press-fit became loose. I used foam-rubber weather stripping wrapped around the outside for softness and traction, with hot glue to join the ends. These have worked great, they have excellent traction and are still very tightly connected to the motors after months.
The motors are 12V geared motors with encoders built in. They're controlled using an L298N motor driver and a PWM signal from the pi 4. Due to manufacturing differences the left motor only needs around 90% of the PWM duty cycle to spin at the same rate as the right.
Power is provided by a 2200mAh 3S lipo battery which is attached to the bottom of the robot to help keep the center of gravity low. A buck converter drops the 12V down to 5V to power to the pi 4 and neck servos.
A voltage display is visible to the camera, so the driver can see the battery voltage without the hassle of converting it to data. A separate display on the front shows the time, temperature, and wifi information.
The servos for the neck are controlled using a Pololu Maestro 12 connected to the pi 4 via USB. The Maestro has 10 unused channels, so in the future this robot might get a grabber or nerf blaster.
Software is all in python. I used depthai to access the Oak-D, opencv and flask to stream the video to the web browser, and pigpio to generate the PWM for the motors.
Roy
Hendra Kusumah
Aviv Butvinik
Max.K
Daniel James Evans