Previously, I described the overall plan for my improved foot. To make that work, I needed to cast a 3d printed part into the squash ball such that it would likely stay attached during operation, be suitable rigid and yet damped, and do so repeatably.
To start with, I used a random single yellow dot squash ball with a hole cut in one side using a pair of side cutters. For the casting foam, I just used Smooth-On Flex Foam-IT 17, which is what Ben Katz originally used at least. Initially I just mixed up a batch, poured it in to a random level, stuck my bracket in and hoped for the best.
Well, something sure happened! But not exactly what I wanted. The foam didn’t fill in the interior cavity, nor make a great connection overall with the bracket. On top of that, the process wouldn’t exactly be described as “repeatable”. Since I just eyeballed the level of foam, there was no way to get the same amount in.
For my next runs, I decided to do everything by weight. I tried a few different foam masses, curing orientations, and venting strategies. Eventually, I got something that seems to look pretty good. We’ll see how well it works on the actual machine shortly!
Here’s a bunch of different intermediate attempts:
And here’s a cutaway of the process I’ve settled on for now. This particular one has a slight bit of overfill on one edge that is more than is typical, but the inside fill is pretty good:
As mentioned long ago in my post on failing more gracefully, it was obvious I wanted to strengthen the lower leg and foot mechanism to remove the point of failure observed there. For now, I’m attempting to basically copy the original Mini-Cheetah foot principle, although with more 3d printing and less machining.
The basic idea is to print the entire lower leg in a single go laying on its side, so that delamination is unlikely. The foot bracket will be cast into a squash ball, then epoxied onto the lower leg.
One of the parts on the original quad A0’s leg that was prone to failure was the “knee stud”, a little cylinder that acted as the mating interface between the upper leg and the lower leg. It directly attaches to the upper leg, and has bearings that ride between it and the lower leg. The entire tension of the leg belt is born in shear by this part.
In the mk1 leg, this part was 3d printed with heat set inserts used to form the threaded holes. This mostly worked, although occasionally the stud could shear along the 3d printed lamination lines. Thus, for the mk2 leg, I’m making this part out of 6061.
The first op takes a 0.875 inch cylinder, and does all the work on one of the sides. That includes roughing it down to length, getting the outer diameter that the bearing rests on accurate, and drilling and threading the holes.
At that point, the part is turned over and bolted into a 3d printed fixture.
Then, all the tool paths are repeated on the other side, as well as the middle being cut away. I didn’t really worry about surface finish on the middle section, since it will never be seen. This of course would be much easier on a CNC lathe with live tooling, but hey, you use what you’ve got!
Since the mk2 moteus servo has slightly different dimensions and a different mounting pattern than my original, I needed up update the full rotation leg design to handle it. The basic concept is the same, except for some in-progress work on the foot design which I’ll write up later. The only significant changes were that because of the mk2 design, access to the power and data connectors is much easier.
Finally returning back to other pieces of my quad roadmap, I finished getting an updated power distribution board ready for the quad A0. This board is one I had made many months ago and mostly brought up, but then didn’t quite finish. The r1 was when I first discovered my unfortunate stm32g4 pinout problems that doomed 3 of my in flight boards. The pictures here are of r2, which suffered from yet more pinout problems, resulting in more than my usual number of blue wires. Fortunately, identifying those problems here let me fix them ahead of time for the fdcanusb and moteus r4 boards.
This version has a probably overkill XT90 input connector, 6x XT30 output connectors, a connector for a lighted toggle switch and an FD-CAN port. The CAN port will eventually allow me to implement a soft power off, although I haven’t done that yet.
When hooked up to a moteus dev kit, it does do the proper pre-charging thing:
One of the necessary pieces for bringing up the moteus brushless controller and for ongoing development with it is being able to communicate with the device on the desk. There aren’t many options for desktop FDCAN communication currently, and certainly none that are in the affordable range occupied by the CANUSB family of devices which I’ve used before and was very happy with. Thus I created “fdcanusb”, a USB to FDCAN converter that allows one to communicate with FDCAN devices via a USB interface using a documented protocol, no drivers necessary.
The notable features:
USB 2.0 full speed host interface
ISO 11898-1: 2015 FDCAN interface on industry standard DB9 connector
Standards compliant bitrates up to 1/5Mbps supported
Software controllable termination
Frame sizes up to 64 bytes
Non-standards compliant bitrates allowed
Documented CDC ACM based host protocol (virtual COM port)
Apache 2.0 licensed firmware based on the STM32G474 controller
All for an expected sales prices of around $100.
This does come with some caveats: For one there is no galvanic or optoisolation, you get a common mode range of around +- 12V. Another is that using just a USB 2.0 full speed interface means it may not be able to keep a FDCAN bus fully saturated at high bitrates. Finally, the firmware will start out with just the bare bones capabilities, but can be extended to support features such as error injection, triggers, buffering, and more compact protocols in the future.
I’ve got the first functioning prototypes of these boards in hand now:
As the first part of the new moteus servo mk2, and continuing in my seriesoflearning about CNC by building parts for the quadruped, next up I machined the input to the planet gears on my Pocket NC V2-50. This was a part, that for my quad A0 build, I used a 3d printed part in PETG as it is probably the least stringent part in the gearbox in terms of tolerances and load, although I still expect the plastic ones will likely wear and fail after some time with heavy use.
In the gearbox, this planet input interfaces to a number of different sub-assemblies:
The planet output inserts into its studs, the planet shafts insert into recessed holes in the face, and the planet input bearing fits into its center. Bolts fit through the back to pull the planet output towards the input. There is also an indexing cutaway on the outside for an eventual absolute position system.
I made these from round stock, 1.75in in diameter cut to 1″. The machining was done in two setups, each using the Sherline 4 jaw chuck mounted to the B axis of the Pocket NC.
In the first setup, the back side was roughed out, the center hole was cut out, and each of the holes for the bolts was bored along with a countersunk region.
The second setup, flipped over, first roughed, then proceeded to finish each of the necessary surfaces. There were two more interesting bits here. First, I made an alignment fixture so that I could get the holes from the back and front half to align. That consisted of a cylindrical shell that fit into the mounting pattern on the B table of the pocket NC and a thin plate that fit under the part. The thin plate just stays in place during the machining operation, where the shell pulls out.
The other interesting part was that I ended up clearing away a bit of the inside of each stud so that my bit could reach down to finish the bearing mounting surface. That way I could get away with just using an 11mm flute, which already gave a terrible enough surface finish that going longer would have only made worse.
As I’ve observed in the past, I had yet another problem with tool pullout during this part. Here, the problem was very similar to my past incident, when Fusion left a thin wall, then tried to punch through it. My fix from then was doing the right thing, however the wall was just too thick I believe, causing the toolholder to lose grip. In this clip, you can see that after it breaks through the wall, the mill cuts through some stock as it repositions over. The slip was only about 0.3mm, but that’s enough to mess things up.
However, this time I think I figured out an even better solution. Simply lie to Fusion 360 about the diameter of the cutting tool and say it is slightly undersized. That results in fusion leaving the adaptive passes closer together, and thus no thin walls or foils are left behind. It would be nice if that were just an option in the adaptive settings. I suppose you could override it in the “Compare and Edit” window, but creating a faux “tool” just for roughing makes it easier for me to see that I’ve applied the override correctly.
Here’s a video showing the different tool paths for the finished part:
The stock cut of 1″ is oversized in this part and adds a bit more than an hour to the cycle time over a minimum sized piece of stock. I need to get a setup for cutting stock smaller than an inch here soon.
As described in my roadmap, making a new revision of the moteus servo is up there on my list of things to do. The initial servos were a work of art, yes, but also pretty fragile, very labor intensive, and still not all that robust. My goals this time around are:
Manufacturability: The servo mk1 took about 2 or 3 man-days of manufacturing time per servo once all the steps were factored in. I’d like to get that down to an hour or two at most per servo.
Robustness: The planet input, outer housing, back housing, and controller cover of the mk1 servo were 3d printed, mostly to save cost and time. This necessitated adding reinforcing rings on the outer housing, as it is nearly impossible to 3d print something with the required material properties in a single print. At this point, all of these components should just be made of aluminum like the others.
Repairability: Once the mk1 was assembled, there was no way to disassemble it, as installing the stator interfered with the ability to remove the outer housing, and the outer housing in place interfered with the ability to remove the stator.
Convenience: The mk1 servo used the r3.1 moteus controller, which had RS485 connectors sticking straight out the back, and bare power wires coming out the back. That orientation for connecting things was not terribly convenient in the full rotation leg design, and required making extension cables. The newer moteus controller has the connectors sticking out the bottom, so the servo needs to accommodate that.
Changes in moteus servo mk2
The current design for the moteus servo mk2, as the exploded video above shows, has a number of changes.
First, the outer housing has been changed to be purely cylindrical. This allows it to be machined out of round tube stock, and also assembled and removed in any order. Thus the front housing now has a slightly larger outer diameter, and has threaded holes around the perimeter and 8 primary mounting holes instead of 6.
The rotor is custom machined, so that the sun gear holder assembly is no longer required. A not shown in the explosing mini 3d printed adapter will hold the magnet and fit inside the rotor bearing on the back.
The planet input now has a small indexing slot to eventually register a magnet holding assembly that can be used to sense the position of the output stage, and a position sense board is installed in the front housing to sense it.
The back housing has been updated to mount a newer moteus controller, provide heatsinking to it, and also be slightly slimmer due to being manufactured from aluminum.
The overall dimensions are approximately the same as the mk1, with the depth increasing by a few millimeters (largely because of the connectors on the new moteus controller), and the outer diameter decreasing by a few millimeters. I believe I should be able to get the weight to be about the same as the mk1, around 430-450 grams.
First, I’ll make a functional prototype to verify that all the parts fit together and work. Then I’ll work to get the weight back down to closer to the mk1, after which I’ll start producing enough of these to make more robots.