Q8bot Robot Dog
Q8bot is a miniature, dynamic quadruped robot powered by 8 Dynamixel motors (hence the name :D).
The biggest highlight of q8bot is its mechanical simplicity. It has ZERO wires and cables - everything is directly plugged into the center PCB, greatly reducing complexity, weight, and cost. Despite the mechanical simplicity, q8bot is capable of agile movements like jumping and various gaits, as demonstrated by the following videos.
This project is a great representation of my interdisciplinary engineering skills: mechanical design, electronics design, firmware development, robotics, and more.
Q8bot is lucky to be featured in a number of blog posts:
- Hackaday: https://hackaday.com/2024/10/29/little-quadruped-has-pcb-spine-and-no-wiring/#comments
- Hackster.io: https://www.hackster.io/news/a-step-up-for-diy-robotics-8b04a2320861?f=1
- Interesting Engineering: https://interestingengineering.com/innovation/palm-sized-quadruped-robot-redefines-design
- Techblog: https://www.techeblog.com/spot-robot-dog-q8bot/
Latest jumping test in slow motion
Robot Details (Rev1.1)
Except for what's inside the Dynamixel motors, There are zero wires or cables involved anywhere on the robot. To assemble q8bot, simply sandwich the PCB with two MJF-printed frames (which also serve as battery holders), attach the motors with their internal fasteners, and attach the 5-bar linkages as legs.
I also took effort in designing q8bot for manufacturing. Many of the custom parts are identical copies placed on the opposite sides of the robot, reducing the number of unique parts and therefore cost of manufacturing. I am only using standard hardware like M2 self-tapping screws, 3mm dowel pins, and 683ZZ mini ball bearings.
Inspiration
The inspiration of a PCB-centered robot came from the Dynamixel XL-330 motor, a smart actuator from Robotis. Each of them is equipped with a magnetic encoder and a Cortex-M0 MCU for current-based position control. Each motor has a pair of male connector pointing the opposite side of the output wheel, which perfectly mates with standard 0.1'' female headers on my center PCB. To further minimize stack-up, I detached the bottom housing of the motors and attached them directly to the center frame using the same screws.
Single-Leg Test
To prove that such an actuator is powerful and fast enough to perform some agile movements, I built a testing rig with a linear rail to see how well a single leg can jump. The same test setup was later used to optimize the robot's leg geometry for optimal jumping performance.
Optimizing leg geometry through controlled testing
Rev 0: Tethered Robot
For the first full robot prototype, I decided to only focus on the mechanical design. Therefore, my first PCB only contains the connectors to each motor, and an input connector that allows me to use the off-the-shelf motor controller module from Dynamixel. Although this meant I was stuck with a tethered robot, it allowed me to test out different robot movements without worrying whether the custom electronics would work.
It was also at this point that I developed the rudimentary software for my robot, including forward and inverse kinematics, gait generation algorithms, and a versatile keyboard control script using Pygame. The repository is available on Github.
Rev 1: Functional Electronics
With the mechanical design close to being finalized, I turned my focus for the next revision to stand-alone electronics. To add wireless control capability to my robot, I decided to employ ESPNow because if its versatility. The Seeed Studio XIAO ESP32C3 turned out to be a great off-the-shelf MCU for both soldering onto my custom PCB and becoming a USB dongle for my laptop.
By using two AA-sized lithium-ion batteries, I came up with a fully symmetric iteration to the previous Rev chassis design. The two batteries will be attached to the chassis via spring contacts, which will be situated within the 3D-printed housing and soldered directly to the center PCB. In this way, I can completely eliminate battery wires and connectors, both are potential weight addition and failure points. I can also then easily swap the batteries and charge them separately.
I designed all of my printed circuit boards (PCBs) in Altium. I then ordered the blank PCBs from JLCPCB, applied solder paste using a professional stencil, placed the SMD component, and reflowed the board using a hot plate.
Rev 2: WIP
Rev2 is hopefully the last revision I need to leave the project at a satisfactory stage for now. Some of the changes include:
- Improve jumping sequence through software and joint PID tuning.
- Two-way communication through ESPNow to receive robot information on my laptop.
- Add a battery fuel gauge IC to the PCB.
- Add a switch circuit to preserve battery power when not in use.
- Improve mechanical structure to simplify assembly.
- Optimize leg geometry through modeling and prototyping.
- Reduce overall weight.
- Modify all MJF parts to be injection-molding ready.
-...