I'm planning to do some automated endurance testing of Tardygrade later in August. I want to find out if it can whitstand a few hundred hours of movement without breaking down. I'm actually more worried about the drive servo than the 3D printed mechanism, but it remains to be seen which will buckle first.
I think PETG is a reasonable material choice for the 3D printed gears. It's quite tough and will probably not wear down easily. That being said, nylon would be even better. So I decided to try it.
I used Filamentum nylon FX256 for the tests. Not sure what is different in that formulation compared with other nylons, it's simply the one I happened to have at hand.
The small drive gear printed fine in nylon without any warping. But the main gear was another story. Most of the gear teeth would loose grip and start warping halfway through the print. I switched to a glass bed with glue stick but still got similar results. I also tried a range of different extrusion- and heat bed temperatures to no avail.
The thing was that the smaller drive gear printed with no issues despite having identical teeth. Could main gears tendency to warp have to do with its larger area?
I decided to test that theory by modifying the gear by cutting ditches all through the gear. The idea was to avoid having a big slab of material in the center pulling on the the perimeter, and thus avoid warping.
The experiment wasn't as successful as I had hoped, if at all. Although there were fewer warped teeth on the modified gear, I only printed one so it might have been a fluke. Either way the warping was not eliminated.
A straight PETG gear is much preferable over a warped nylon gear. But I might still give nylon another go in future.
While waiting for the new Tardygrade PCB to get shipped from Germany I passed the time by trying out some more exotic filaments for the chassis.
I had wanted to try using nylon CF (carbon fiber) filament. This makes for very strong parts. And they also come out considerably lighter than ones printed in PLA or PETG. Both of these properties are of course desirable. The drawback with nylon however is its tendency to warp.
Luckily Nylon CF doesn't seem to warp as much as regular nylon, but still it does warp noticeably even after getting printed perfectly flat on a glass bed.
Because of this I decided to alternate nylon and PETG parts in a layer cake fashion. Once assembled, the nylon parts gets more or less bent back into shape due to the rigidity of the PETG parts. I used nylon CF for the floor-facing parts with thin walls. This should make the robot tougher and more resistant to fall damage. Also the material looks very nice with its matte finish and almost invisible layer lines.
Initial prints had quite a bit of stringing. With other materials that's pretty easy to clean up. But with nylon CF I found the stringing tends to form shaggy carpets that are very tough and resistant to knife blades, especially inside corners. Since I rely on tight tolerances this stuff would seriously interfere with the mechanism.
After a few more tries I managed to get rid of almost all of the stringing by enabling the "Avoid crossing perimeters" option in PrusaSlicer and bumping up the retraction to 4 mm. I wouldn't generally recommend that much retraction since it can mess up the extruder on some printers, but my Prusa I3 seemed to be able to handle it.
I also lowered the extrusion rate to 95% which resulted in a smoother surface finish in my case.
The other problem was the abrasiveness of the material. To avoid friction I shaved 0.5 mm off the main hull floor to make sure neither the main gear nor the drive gear would come in contact with it.
I then added a little washer for the drive gear to rest on. It's made to have circular layer lines and can be printed separately with a low friction filament (in this case nylon FX256).
The main gear only makes contact with the eight little protrusions around the well leading down to the bottom actuator.
The steering gear doesn't move nearly as much as the two other ones, so I think a little bit of friction is ok in that case.
The leg parts were printed in black nylon FX256. Nylon is of course especially suitable for the snap fit parts. They were much easier to unsnap once inserted and should withstand many more cycles than ones made with PLA.
Next I want to try and print the legs with flexible filament. I'm waiting for two spools of TPU that should arrive next week. Let's see how that goes.
I did study some math while at university. But like many (most) of my compatriots I didn't learn math so much as I learned how to take exams. I've since lived under constant threat of that laziness coming back to bite me.
Even one of the issues I faced in this very project was dangerously close to turning into a math problem.
The issue had to do with the robots legs.
One pair of legs is attached to the upper body of the robot and the other pair to the lower body, meaning that they need to have different lengths.
So far so good.
Additionally, all four feet needs to touch the ground both when the robot is standing and when it's crouching. And hmm... There seems to be quite a few variables to take into account:
Length of the leg.
Length of the lever.
The travel of the actuator that pushes the lever.
Point on the leg where the lever hinges.
And more...
There appeared to be no way out of it this time. I resigned myself to the grim fate of actually having to solve an equation.
It ended up not being all that bad though. After some initial teeth grinding I realized I could just have the FreeCad constraint solver do all the the hard work for me.
I drew up a sketch of the linkages for both versions of legs, both in their standing and crouching positions. I set all external dimensions and then added "equidistant from ground" constraints.
I left all leg and lever lengths undefined. I set a constraint for how tall I wanted the robot to be while standing, but left it up to the solver to decide how deep the crouch would be. (8.28 mm as it turned out)
First time around the solver returned no solution.
I then added another degree of freedom by allowing the longer leg to attach to the lever at an arbitrary point.
That did the trick and the sketch turned green, meaning it was fully constrained, and a solution had been found.
For some reason I was still a bit skeptical of this working—I guess it's harder to convince yourself of that when you're cheating. But after printing and assembly, the legs worked out great and the robot didn't wiggle at all while standing nor while crouching.
I couldn't have hoped for a better turn out. And more importantly I had once more managed to keep my grey matter in its natural flabby and inert state.
Crisis averted. This time. But it was too close for comfort.
I'm not yet very far along on my journey as an amateur cad monkey.
Something I've noticed is that oftentimes (or maybe most of the time) dimensions in my drawings are dictated by some external constraint. But once in a while necessity doesn't demand one unique set of dimensions. I'm suddenly free to choose based on aesthetics or gut feeling. I find those choices disconcerting, because who's to say what THE right dimension is.
Anyways, at the end of this long and winding design process I noticed that the bounding rectangle of the robot frame somehow felt weighty and significant. Is that... the golden ratio?
Well it turned out to be off by a little bit, but still pretty darn close. I will take that as a sign that god is 99% percent satisfied with my homework.
Also, now I think I know what it feels like to recognize the face of Jesus in a piece of toast.
In evolution, the term exaptation describes the shift of function of a trait. One example is the feathers of birds, which may have evolved as thermal insulation, and were later adapted for flight.
That's a poncy way of saying I found a secondary function for one of Tardygrades parts.
The original part was devised for mounting the PCB.
Since I've been trying to avoid using any screws in the robot design, I didn't want to use any for mounting the PCB either. Instead I made a sliding block, a pair of which are used to secure the PCB on top of the robot.
A separate issue was that I hadn't come up with a good way to manage the servo cables, which are about five times as long as they need to be.
But after making the sliding blocks I realized I could re-purpose them to house the cable slack as well:
The excess cable is pulled through a hole on top of the block and folded up inside.
The block is slid in from the side. It has flanges at its base that fits cutouts in the upper body lid.
The block snaps in place thanks to a small protrusion that fits a corresponding notch on the back of the block.
The blocks overhanging lip holds the PCB in place. Neat!
"A clever man climbs the stairs. A wise man rides the escalator. An enlightened man turns his feet into stairs." Quote: some crazy biohacker
As far as I'm concerned the concept of a walking robot is just cool, and its existence needs not be justified beyond that.
What would be even cooler though, is if that robot were actually useful in some way.
In that spirit, a goal I've had for Tardygrade was to make it able to negotiate rough and undeven terrain. After all, that's the main USP of having legs rather than wheels.
The articulation of the robots legs couldn't be simpler, with only 1 DOF. But since the legs lifts off the ground it does lend itself quite well to climbing.
That's only half the battle though. If the legs can't retain grip on obstacles the robot will just slide back to where it started.
I had to go through several iterations before I ended up with a foot design that was suitable for climbing.
Here's the solution I ended up with and why I found it to be effective:
The sole of the foot has a stair-step profile with steps of increasingly large size toward the end.
When the leg is retracted, the stairs are perpendicular to the ground, to give the foot good purchase on obstacles.
As the leg extends, the stair shape turns steeper and more claw-like, which helps the foot retain its grip on the obstacle.
The backward facing leg has a spur on its heel. When that leg is extended the spur maintains purchase on the obstacle while the forward facing foot retracts for its next step.
Here's a useful 3D printing trick I picked up from Maker's Muse:
When 3D printing something that has a hole parallel to the XY-plane, you'll end up with a flat or drooping spot in the "ceiling" of that hole.
To remedy this a teardrop shaped cutout can be added to the top portion of the hole. With this method there's no need for using overly loose tolerances.
I found that an angle of 100°-120° at the edge of the teardrop works well.
Maybe this is common knowledge, but it was new to me so I thought I'd share it here.
I was on a quest to rid the robot assembly of screws.
Eventually it was down to just the one. That was the screw that mounts the main gear axle to the robot upper body and essentially holds all parts of the body together.
It was a straightforward construction, but it came with a tradeoff. Since the axle is quite thin—and is parallel with the Z axis when 3D printed—it inevitably turns out somewhat brittle.
Meanwhile, I had also wrestled with how to gracefully route the leads from the battery located on the bottom of the robot up to the electronics on top. The current solution was to have the leads run up and around the left side of the body. That's ugly and also impractical since the wires would be prone to get tangled up on stuff.
So I started to noodle on if it actually would be possible to route the leads inside the main axle, since that happens to be the only path trough the body with no moving parts. The eye of the storm so to speak.
But that's where the screw needs to go! Now how do I attach the axle to the upper body?
New main gear axle design.
It took a while figuring out, but finally I ended up with this solution:
The main axle now consists of two mirrored parts, split lengthwise along the axle. This way they can be printed lying down for maximum strength.
Each part of the axle has a groove that fits a 1.2 mm lead. The groove gets gradually deeper along the upper part of the axle.
The base of each axle part has a slot that fits the edge of the rectangular cutout in the lower body. The parts gets attached by folding them into the cutout.
To pin the axle to the upper body, a short length of 1.75 mm filament is slid horizontally through the axle, between the two leads, and is held in place by a 3D printed ring nut.
A thin sleeve is fitted over the assembly to prevent the filament from sliding out.
The PCB fits snugly on top, which in turn prevents the sleeve from getting loose.
Step by step attachment of main gear axle. Ring nut => yellow. Sleeve => purple. Guess I didn't need that screw after all. Great success!
Each of the robots legs hinges at two points. One is at the "hip". The other one is at the "foot", which connects the lever that pushes the leg back and forth.
If using screws to join these parts that would add up to a total of eight. Those screws adds weight, they look dumb, and the threads might eventually wear down the plastic around it.
Older leg design with M2.5 screws.
I had experimented with using 1.75 mm filament in place of the screws. But a major problem was that the filament would start slipping out sideways after continuous movement.
Also, each leg consists of left and right halves, which would be held together by the lower screw. Substituting filament for that screw would let the leg halves wedge apart, which is no good.
The solution I finally came up with gets assembled in four steps:
A lower joint filament pin is fixed inside channels within the two leg halves, with no holes on the sides for it to slip out of.
The leg halves are joined with a filament "shoelace" to prevent them from wedging apart. The shoelace channel has a slight bend to it, which keeps the filament from coming loose.
Another filament pin hinges the leg onto the hip joint.
Finally, the hip pin is prevented from slipping out by a sleeve built into the robot body.
I miss those bygone days when all you needed to open any device was a screwdriver set with 30 odd bits.
But in a 3D printing context screws are frowned upon (at least by me). It's just annoying to find something from Thingiverse you want to print only to realize it will involve a trip to the hardware store to pick up the right lenght of M3. Screws are simply antithetical to the Start Trek replicator dream inherent to 3D printing.
So I found myself in a dilemma when my initial design sketches seemed to call for quite a few machine screws. I didn't think I could eliminate all of them, but I wanted to bring the number down to a bare minimum.
Keeping the lid on
Both the upper and lower body sections consists of a hull part and a lid part that fits on top. When the parts are assembled the lids would be held down in the center by a screw running through the main gear axle. To secure the lids along the edges as well, some additional fasteners was needed. Of course the initial design sketch involved some screws. But I felt there had to be a better way.
Another problem was that I needed a way to fasten the leg hinges to the body. Even more screws for that? No way! To kill two birds with one stone, I went with a snap fit solution where the leg hinges snaps into the body in a way that also holds the lid down. Due to the fact that left and right legs aren't symmetrically placed, two additional clasps was added on the right side of the body.
Leg hinges. The snap fits serves double duty to keep hull and lid parts together.Before and after redesign. Upper body is pink, lower body is green and cyan..
On earlier models I had placed one servo motor on each side of the body. This meant that the clasps and snap fits wasn't enough to keep the lid secure around all edges. I had to place two additional screws on the sides. I didn't like it.
This prompted me to redraw the entire thing and place the motors front and rear instead. It was a tight fit since the upper and lower body needs to be able to swivel 15° respective to each other without hindrance. Only by offsetting the motors counter clockwise about 6° was I able to get enough clearance for everything to fit.
With this new motor arrangement I could eliminate the two extra screws on top. This also resulted in a more streamlined body shape, which made the robot lighter and gave it better balance. So it was an improvement all around.
I managed to get rid of the center screw as well. I'll get into that in a later post.