Once all the individual legs were assembled, I needed to wire them up into the chassis. Part of that was building the necessary data harnesses and actually running the power wires from the junction board.
Next up is getting everything talking.
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:
Then we stick the upper leg, pulley, and lateral motor together, leaving the lower leg loose:
Next I created wiring harnesses to connect all the pieces together:
And finally, put them all together!
Next time, we’ll mount everything up on the chassis.
First up was installing magnets on all the motors:
Next up is mounting the motors into the brackets:
Then I soldered the phase wires onto each of the motors, including shortening the BE8108 wires:
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!
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.
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.
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!
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:
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:
Next, I need to get an actual battery tray installed and build enough legs to attach all four of them.
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:
Them assembled into a leg with the other necessary hardware:
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.
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.
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.
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 – https://github.com/mjbots/moteus
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.
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!
After my self-education on MLCC derating I spun yet another low-volume prototype run of the servo controller. This one has more than double the effective capacitance by doubling the number of capacitors and by selecting capacitors that have less derating. I also fixed an incorrect pad geometry for the 6 pin ZH connector, optimized the BOM count a bit and reselected parts that were no longer available.
To validate that this controller revision was robust enough to get a full mech’s worth of them made, I wrote up a simple test tool which ran the leg through a continuous jump cycle. The goal was to validate the thermal design of the controller and motor, and while I’m at it, test the robustness of the 3d printed mechanical leg parts.
I knew endurance testing would be a process. That said, this was a pretty interesting one.
First up: The RS485 cable joined into a screw terminal in part of the cable that moved up and down during a jump. This had been coming loose on and off for me previously, and now was a limiting factor. The fix was simple, move the terminal block further down the cable harness so that it didn’t move during a jump.
Next, an even simpler problem. The leg wore through some gaffer tape I had on my sheet of jumping foam and it became stuck to the adhesive. I just moved the leg so that it didn’t jump on tape.
Now, an exercise in thermal management. I gradually decreased the current used during the jump and landing phase until the steady state temperature of the controllers didn’t exceed my somewhat arbitrary 60C. At that point, the 3d printed parts were starting to outgas a bit, so I figured that was a decent upper limit.
With those changes, I was able to get it pogo-sticking pretty reliably for 6 or 7 minutes at a time. Here’s a video of the end of one of those runs, at which point you can see the next problem.
As seen above, after jumping for approximately 6 or 7 minutes, eventually the yaw axis would fail in a way that resulted in the electrical phase detection becoming offset. The offset appeared to grow over time. Eventually, this resulted in a loss of control in the lateral axis servo, when the D and Q currents became swapped.
This problem was most mysterious. The lateral motor is basically doing nothing in these tests, the overall torque applied is maybe 1/50th of that which the upper and lower leg motors are generating. My first thought was that perhaps the magnet which was attached to the shaft was faulty or had become demagnetized. So I swapped it out, and while I was at it, added a spacer so that the magnet was closer to the magnetic encoder.
No dice. Same failure, although this time I got 15 minutes of jumping in before it failed.
Another thought was that the rotor was somehow slipping on the axle. However, the set screw was definitely still firmly in place, and this seemed pretty unlikely anyhow, since there was almost no torque on it. The upper and lower leg motor with 100x the torque were not slipping.
Finally, I concluded that the bracket itself was deforming, resulting in the magnet changing alignment with the magnetic sensor. In this configuration, the entire leg is cantilevered out. Additionally, the linear rail fixture results in a large amount of torque being applied to the yaw bracket.
I already had beefier brackets coming in for other reasons. I swapped them in, along with some new leg hardware to be described later. Now with some forced air cooling I was able to even jump a reasonable height without stopping. Here’s an endurance run showing the most aggressive jumping it could do indefinitely.
And here’s another video showing the max height I could get on this jumping fixture, which it could do for about 2 minutes before exceeding my safe temperature limit.
And for fun, a snapshot of my desk while recording one of the endurance videos. It is quite tedious to let the leg jump for hours at a time while hoping nothing goes wrong!