All posts by joshpieper

Assembling all the legs

Last time we had a dozen motors, controllers, and brackets assembled.  In this installment we’ll build up the mammal legs.

First is mounting the upper leg and upper pulley on each motor and assembling the lower leg:

Partially assembled legs
Upper leg, pulley, and lower leg assembled
Lower leg close-up
Lower leg close-up
Upper leg close-up
Upper leg close-up
Upper pulley close-up
Upper pulley close-up

Then we stick the upper leg, pulley, and lateral motor together, leaving the lower leg loose:

Four mostly assembled legs
Four mostly assembled legs

Next I created wiring harnesses to connect all the pieces together:

Leg wiring harnesses

And finally, put them all together!

Next time, we’ll mount everything up on the chassis.

Assembling individual actuators

Now that I have all the parts in hand, and all the controllers populated, it is time to start the big build!

First up was installing magnets on all the motors:

Motors with magnets attached

Next up is mounting the motors into the brackets:

Motors mounted in brackets
Motors mounted in brackets

Then I soldered the phase wires onto each of the motors, including shortening the BE8108 wires:

Controllers soldered to motors
Half the controllers soldered to motors

After that was thermal pasting and bolting the controllers to the brackets.  The BE8108’s I got for this run were slightly different, and required more spacing of the sensing magnet.  Thus I ended up using two heatsink plates back to back.  At this point I powered, flashed, and calibrated each of the motors.


Next up, the remainder of the leg hardware!


Populating r3.1 moteus controller boards

I am a big fan of MacroFab.  They’ve built a PCB + assembly + more service that is transparent, high quality, and nearly completely self service.  They appear to be making money, so hopefully they will stay in business for some time.

On top of that, they offer a “quick turn” option which gives you populated boards shipped 10 business days after you order them (and I’ve even had them ship out a few days early from time to time)!  The only annoyance is that the quick turn option is limited, as I’ve mentioned before, to boards that meet certain criteria, among them having 20 or fewer items on the bill of materials.  To try and get this first quadruped prototype up and running quickly, I’ve been exclusively relying on quick turn boards, which means making some compromises.  Even after some moderate design sacrifices, I haven’t been able to get the servo controller board to 20 parts.  At the moment it is 23.  Thus, when I received the first big-ish PCB order I’ve made (qty 28), I got to spend a morning populating the remaining 3 components on all 28 boards.

Unfortunately, as painful as that was, it was still worth it as opposed to waiting an additional 3 weeks for the non “quick turn” service.

For posterity’s sake, the only difference between the r3 and r3.1 board is some silk screen changes, and one or two equivalent part substitutions.


All parts received!

I’ve now managed to get all the custom and long lead time parts in house for the first version of a quadruped based on the new actuators I’ve been designing.

All The Parts!
All The Parts!

That includes all the motors, custom brackets, and at least moderately working versions of all the custom PCBs.  Now I just have to get the local rework done, get the software into a semi-reasonable state, and put it all together!

Quadruped chassis

Now that I have a semi-reliable actuator, I need to connect 4 of them together into a single quadruped robot.  Additionally, it needs to be able to mount a battery, the turret, and all the other miscellaneous pieces of a walking robot.

My draft design looks like this in CAD:


The four corners each are set to mount one leg to.  The central cavity will eventually house a battery compartment.  On the top is a mounting location for the turret, and the front has mounting studs for a power distribution PCB.  Each of the screw holes is designed to take a thermoplastic insert heat fit into place.

This, printed on the Prusa MK3s looks like:

Quadruped Chassis
Quadruped Chassis printed on Prusa MK3s

This is in Prusament PETG Jet Black at 0.15m layer height, 3 width perimeters, and custom supports.  With one leg, a battery resting in its cavity, and the junction board mounted, it looks like:

Quadruped Chassis Test Fit
Quadruped Chassis Test Fit

Next, I need to get an actual battery tray installed and build enough legs to attach all four of them.

Quadruped Junction Board

The full quadruped robot needs to both distribute power from the primary battery and RS485 serial network to all 12 servos.  To make the wiring of that easier, I’ve made up a junction board to provide power connectors, distribute the data network, and act as the IMU for when that is necessary.


The RS485 network is bridged between two halves of the robot.  One connection comes in from the controlling PC and two separate links go out, one for the left side and one for the right side.  This could eventually allow the controller on the junction board to take intelligent actions itself, such as querying the force applied on all 12 servos.  It could then return the result in a single RS485 transaction to the host computer.  I am expecting that will be necessary to achieve closed loop control approaching 1kHz.

It also includes a Bosch MEMS IMU.  The junction board will be rigidly mounted to the quadruped chassis, which means it is an ideal location for an attitude reference.  I haven’t integrated the IMU software from the gimbal yet, but have verified that the IMU is operational.

Finally, it has a 3.3V regulator on board to power all the logic level chips from the primary 18V supply.  I managed to toast two of these by not having sufficient input capacitance, and hot-plugging a lab supply to the power lead.  The inductive transient caused the regulators to over-voltage, resulting in a short from power to ground.  This is apparently a relatively common design mistake with this part according to TI’s E2E.  I attempted to rework replacement parts on the board, but due to a cascade of failures from USPS to my soldering, I gave up and just spun another revision.

In the meantime, I took one board and manually powered its 3.3v supply to bring up the firmware, and I’ve converted the other to a “dumb” mode, where it has no 3.3v supply and all the RS485 ports are just hard-wired together.  (Note the very tidy blue-wiring and hot glue.)

"Dumb" IMU Junction Board
“Dumb” IMU Junction Board

That should be enough to make progress with getting the full mech working, even if the control frequency is limited.

Prusa MK3s printed legs

All my testing to date on the improved actuators for SMMB have used 3d printed parts from Shapeways.  Both to have a faster iteration time, and to reduce costs, I’ve optimized all the parts to be printed on my Prusa MK3s.

Here’s all of the individual parts:

Leg parts laid out in Slic3r Prusa Edition
Leg parts laid out in Slic3r Prusa Edition

Them assembled into a leg with the other necessary hardware:

Prusa MK3s Printed Leg
Prusa MK3s Printed Leg

And some jumping on that leg (caveat, this video is from the previous endurance testing post):

A full set of leg parts can be printed in PETG in about 12 hours and uses a little less than 90 grams of plastic.


My simplest ever PCB

While wiring up the first 3 degree of freedom mammal actuator, I knew I was going to have a need to distribute power to each of the three motor controllers.  Thus, enter my simplest ever PCB.  It is just 4 holes for each of power and ground with traces connecting them.

moteus busbar PCB
moteus busbar PCB

It took an annoying amount of time to actually solder in all the necessary wires, but it was still better than the alternative of a bunch of ring terminals bolted together.

busbar installed in actuator
busbar installed in actuator

moteus brushless servo open source release

moteus is an open source brushless servo actuator designed for use in highly dynamic robots.  It consists of PCB designs, software, and mechanical designs necessary to construct powerful brushless servos, and link them together into legged robots.  Today I’ve published the full source and designs for all of this work on github under an Apache 2.0 License –

moteus r3 controller installed on leg
moteus r3 controller installed on leg

These are the software and designs I have been developing in order to replace the actuators on Super Mega Microbot (which will probably get a new name shortly as well).  It isn’t done, but at least the controller is working well enough now that I have a pre-production verification run of ~30 controllers in flight.  Even still, I expect that further evolution, both on the controller board and in the mechanical systems is inevitable.

The software is largely C++ and python, compiled with bazel and designed to run on an STM32F4.  The PCBs are all designed with Eagle, and the mechanical systems are all designed with FreeCAD.

I definitely want to acknowledge Ben Katz, who was a big inspiration for this effort.  While this isn’t a direct derivative of any of his work, I really appreciate the open source releases he did make.

CAVEATS: As with any actual hardware project, especially one that can apply large amounts of power to small brushless motors, actually using these designs risks burning down your house, injuring your body, and all sorts of other bad things.  If you choose to try these out, you are on your own!