Introduction

In the dynamic realm of robotics, the pursuit of innovation knows no bounds. My journey embarked with a bold ambition: to surpass the existing world record for the smallest humanoid robot, all while adhering to a stringent budget. With the record standing at 141mm, I was determined to push the limits of what was deemed achievable.

Figure 1: Previous Record of 141mm

Development Plan

My quest was clear: to challenge conventions and redefine possibilities in robotics. The goal was to create a compact yet efficient robot using the most economical means possible. Extensive research into existing designs guided my path as I scouted for miniature components, from motors to controllers and Bluetooth modules. Armed with this knowledge, I ventured into the intricate process of crafting my diminutive marvel.

The journey was not without its hurdles, from sourcing miniature components to optimizing spatial constraints and reverse-engineering communication protocols. However, each obstacle served as a catalyst for innovation, pushing me to refine my design with each iteration.

To ensure cost-effectiveness, I committed to using off-the-shelf Chinese parts exclusively, eschewing custom or expensive components. Additionally, I imposed a challenge upon myself to solely utilize 3D-printed parts, crafting everything from scratch.

Central to the project was the motion of the robot's joints. While tempted by simpler alternatives, I concluded that only a servo driver would meet the project's complexity requirements. Hence, I selected the 2g servo motor sourced from AliExpress.

The brain of the operation required a microcontroller capable of executing intricate code, managing multiple servo motors, and enabling Bluetooth or Wi-Fi communication for remote control. After considering various options, I settled on the ESP32 paired with the Adafruit PCA9685 16-Channel Servo Driver.

Powering this miniature marvel demanded a pair of 200mAh LiPo batteries alongside a minuscule step-up converter to meet the 5V requirements of the servo motors.

Armed with a collection of components hastily procured from AliExpress, I eagerly embarked on the quest to break the world record, aiming for a remarkable 30% improvement with a target height of 100mm.

Progress Updates

Each milestone achieved was meticulously documented, with photos and videos capturing the evolution of my creation. From initial sketches to prototype refinements, the journey epitomized perseverance and determination.

Week #1

The bulkiness of the PCA9685 servo driver posed a significant challenge, threatening to hinder the project's progress. Recognizing the need for a more streamlined solution, I discovered the "WitMotion 16 Channel Bluetooth PWM Servo Driver," an all-in-one board that reduced the footprint by 33%. Acquiring this board marked a significant step forward in the project's development.

Figure 2: WitMotion 16ch Bluetooth servo driver

Week #2

Upon receiving the WitMotion board, I quickly realized the PC software  wasn't suitable for controlling the robot due to its uncomfortable UI and limited USB (UART) connection.

Figure 3: The commercial PC software

Undeterred, I sniffed the UART communication data and discovered a simple protocol with periodic keepalive packets every second. By connecting with pyserial and sending the same keepalive message, I received the expected response from the board, confirming that communication was possible with a Python script.

I then analyzed more commands from the commercial software and found the motor control packet to be an intuitive 5-byte structure. I developed a Python package capable of the 5 necessary commands for the robot, although it doesn't support uploading and erasing entire programs for offline use. This package is available on PyPi.

Figure 4: Example packet structure for motor position control

Week #3

So now I’m able to control the robot with the...

Read more »