HaRoCo robots are designed to help us achieve personal goals, become healthier, and feel more emotionally grounded. They use adorable expressions, behaviors, and tactility to earn your affections and form strong emotional bonds.
We'll be developing later versions of the robots during our fellowship, including some useful motor drivers and a variety of other tricks.
We sourced fancy new fur for the HaRoCo-12, Christine sewed a new pattern and trimmed it, and now he looks so friendly! Makes me think of a big guinea pig, or the capybara he's modeled on. He has longer fur on top (which gets trimmed into shape with a pet hair clipper) and slightly shorter and much softer fur on the belly.
We assembled the fur and head silicone recently, and discovered that the little plastic pieces that connect the stepper motors to the eyebrows actually rub quite a lot, robbing them of much-needed power. Even with a lot of trimming, there wasn't enough surplus force to be certain that it wouldn't shift and stall.
This lead me deep back into TMC5041 documentation and register land to try to juice more power out of it, and try to produce better dynamics when it did drag. Hours of trial-and-error later and it was a little better, but not enough.
Inspection with power supply and multimeter makes me think that it's not really cramming enough amps into the stepper motors, despite the specs suggesting otherwise. How does a stepper driver decide how many amps to provide? It measures the drop across a current sense resistor, one per coil.
The official breakout boards that I've been using, the TMC5041-BOB, come with a 0.27 ohm sense resistor. Yep, that's about a quarter of an ohm. If I reduce this value, the current supplied to the motors increases. Our local Fry's stocks resistors at 0.22, so off I went to buy 1/2 watt wire-lead resistors (huge) to sub in for 1206 SMD resistors (not so huge).
Here's the result:
Cosmetically a bit Enterprise-ish, but sure does make more power! I've just received real 1206 resistors of the right values (going to go even lower!) and so today I'll be swapping in properly sized components.
Bonus! When temporarily removing a lot of jumper wires, I really like to use one of these tweezers to hold them all in the right order... and also take a photo just in case. You can also see the original resistor that was blown while still extremely hot into the plastic header, and embedded there.
I unfolded the wax into a flat-faced structure, poured resin over it, melted the wax out, and poured silicone. The result? Same shapes as the wax, but now it's a squishy, flexible, reproducible structure.
I build a lot of critters, and I get this question a lot. Sometimes they're meant to look like animals we know, but usually they aren't.
Animals we know come with a lot of pre-set stories and associations. Dogs are loyal. Cats are aloof. Birds are smart. If you've owned an animal, your expectations are stronger and more specific. Dogs quirk their eyebrows in a specific way, cats lash their tails in a specific a way.
I avoid building robots that claim to be dogs or cats. If your user has high contact with the animal, there's very little you can do to fulfill their expectations. It's better to save yourself some time and have a little fun making a whole new critter, or imitating an animal that is real but unfamiliar.
Just because your critter is not a dog or a cat doesn't mean people won't be reminded of their pets. On the contrary, I find that I can hand people almost anything and they'll compare it to a pet as long as it completes the need illusion.
Plus, making up your own critter allows you to carefully balance the associations and feelings that you want your user to have as they interact with your robot. Like character design for a video game or animated film, but more IRL.
HaRoCo-12 is wondrous a mix of animals, and I'll be excited to talk about that when we finally post pics! But you can definitely be sure: it's not a dog or a cat, but something entirely new.
One of the unique features of our robot design is that it's warm and has a squishy tummy. This is a surprisingly hard effect to achieve once you factor in safety, long-term reliability, and manufacturability. I'd originally looked at electric hot water bottles, because then some other company would be taking care of all those problems, and I'd just have to make it easy to plug in. Not so much. The short version is that every one I tested or researched had one or more terrible problems, from scalding people to short lifespans.
The longer version is that I was pretty enamored with one of the heated bottles. The Amazon description was filled with confidence-inspiring words and phrases like "made in USA" and "reliable". Upon arrival, however, the sticker on it actually says "made in China."
The design itself is pretty smart, with several layers of waterproof bladder to make it tough.
The more recent reviews mention that it starts out heating up rapidly and to a (maybe too high) temperature, and then gradually tapering off until it doesn't heat at all. Inside the bladder you can see why:
These are some uuugly heating elements, clearly corroding already, and the liquid inside was tapwater rather than some oil or inert gel. They must dissolve or cake over until they no longer work.
Add to this my general discomfort with putting a 120V AC device inside our otherwise low voltage DC product, and this solution is dead.
So we're building our own bladders and heater and controller! We've already been experimenting with this silicone heating pad, which is much safer with its 12V needs (from which we can charge the electronics, too) and completely encapsulated heating elements. This fancy fellow even has a temperature sensor built in! Heats our test bladder up to toasty in just 10 minutes, too.
Since the last time I talked about robot skulls, we've done a couple of small updates. As you know, one tool doesn't fit every project, and last time I showed off a combo of lasercut struts to hold modular motors in a 3D-printed skull. Since then, I've updated the skull to be a bit more realistic (read: creepy) and also added silicone parts for softness. After all, your critter's boop-able nose shouldn't be made of hard plastic.
It's pretty easy to model the part you want...
Turn that into a mold...
Print the mold...
Fill with silicone, and wait for it to set...
And add it to your skull!
Voila! Squishy, happy nose on a 3D-printed skull. In this case, I made a little silicone button so that the nose would sit on the skull, but I'm currently printing some better attachments with integrated plastic parts that should make it easier to clip onto the head.
I've been working on a fairly platform-agnostic library for the fantastic Trinamic motion controller chips that we're using in the HaRoCo-12, and much progress has been made! These first functions make the basic operations we need incredibly simple to use. The register configuration (both necessary to do and unnecessarily complex in structure) is buried for now, but has been carved up and commented into a more understandable state.
Here's a video of a NEMA-8 size stepper driving back and forth ~180 degrees:
It doesn't look like much, but it took a lot of datasheet reading to make the code this simple. The motion controller is performing a bunch of tasks for the Arduino, including those lovely velocity curves and counting the steps so there's no longer timing-critical tasks on the Arduino. Here's how simple it is:
You can see that I'm using some blocking whiles as a test for the reachedTarget function, but they're not necessary. The 1 second delay in between changing direction is to create an asymmetry in the behavior so I can check some other features I'm working on now like braking and acceleration curves.
If you're desperate to get started with the TMC5041 let me know and I'll send you the current library!
Protip: If a register has bit-by-bit important configurations, don't muck up the readability by converting that into hex. It's a jerk move. Keep it in binary so it's easy to modify and understand in the future, like this:
Rapid prototyping tools are amazing. They allow us to create quickly without a lot of education on machine or process limitations, and also let us run our creativity without the overhead of modeling those limitations.
There is a downside, however. Once you've grown experienced with one tool, you try to solve all problems with it. As the expression goes, everything looks like a nail. Plenty of design problems are well-suited to 3D printing or lasercutting, but others are solved more quickly, easily, and cheaply by an alternative and, dare I say, traditional approach. Many times you can buy a part that's close and modify it with a drill press or bandsaw, and end up with a much tougher and more precise part than you would have with a 3D print.
I've run afoul of these tool biases many times, and have some shameful notoriety for doing mechanical engineering work like gearbox design in Illustrator because I'm going to lasercut the parts... which is itself kind of insane.
Materials are like this, too. Acrylic, plywood, and POM (Delrin) all have distinct strengths and weaknesses, but there's a ton of use for cardboard, posterboard, and foamcore--even in precision engineering. I use them for test fits, size mockups, even quick thought experiments for mechanisms. The advantage of the papery materials is that they're dirt cheap, cut very fast, and make your throwaways more environmentally friendly. Plus, the smoke's not as toxic.
Bringing this all back around to our cute robot, we're making an active effort to use the right tools and materials. This leads to many hybrid solutions, like the lasercut motor mounts inside the 3D printed skull. The accuracy of the laser cutter (as long as you compensate for the kerf) exceeds what we can expect from the prints, and the 3D prints have sculptural surfaces that we couldn't get out of the laser cutter. That, and the lasercut holders fitting into a predefined socket in the 3D print means that we can iterate both parts independently. We're printing a new skull right now, and the previous motors and holders will fit in perfectly. Later we can swap servos or BLDCs into the skull without redoing a very long print. It speeds up all the parts of the process.
In this photo you can see three materials being used: PLA for complex parts, acrylic for the rigid mounts, and Delrin for the press-fit arms (where acrylic would crack).