To make the robot as small as possible I had to design a custom PCB instead of using individual modules. The ESP32 actually needs very few external components to function. In order to program it a USB-Serial bridge is needed. For this part I copied some of Sparkfun's layout for the "ESP32 Thing" which uses a FT231XS.
There are cheaper solutions like the CP2104, but these are difficult to solder by hand without a hot air station. To connect the camera, there are 18 pads on the edge of the PCB. This is all it takes to program the robot and stream video.
Additional components are the DRV8833 which is a tiny stepper motor /dual brushed motor driver. For supplying power, there is a LiPo charger on board. USB power and the battery can be plugged in at the same time. There is also a small transistor for switching on higher power LEDs. However these headlight LED have not been included in the 3D printed parts yet.
Below is a little animation of the layout process in Eagle:
The PCBs were ordered from Aisler, which is a German circuit board supplier, very similar to OSHPark in the US. Less than two weeks later I had the finished boards in my mail:
Fully populated, the PCB looks like this:
The Motors are connected by two wires each. I made a small design error by placing the Battery port right in front of the printed part. Depending on the battery that's used a small adapter might be needed anyway.
Another design error are the missing i2c pullup resistors for the camera. I assumed the camera board included those, but it seems to work just fine without them.