A few decades ago, I had a side gig writing for a couple of computer magazines (can you say, “Byte”?) and was paid by the word. I developed some bad habits from that. Nonetheless, here is a longish story, taken from my personal blog, about how I got my robot to autonomously charge itself after a couple of days of work (not counting the months I spent 3D printing the mechanical, two mating pieces). For your amusement, only. This was written for the non-technically obsessed.
2026 07 31 Friday
All I wanted to do was to have my robot be able to charge its battery itself, without me getting involved.
It just needed to know that the battery was getting low, know where the charging station was, drive to it, plug itself in, wait until the battery was recharged, and then go back to whatever it was doing.
Oh, child. Things always seem easy until you get into the details. And so begins another adventure with Sigyn, my attention-needing robot.
A few weeks ago, maybe a few months now, I began working on pysical the part of this problem where the robot would plug itself into the charger. There would be a part attached to a wall that contained the actual charger. On the robot, there would be a part that would need to be mated to the wall part. Once the two parts connected, electricity would happen.
Robots, as a rule, don’t make precise movements. The two parts would have to work if the robot couldn’t quite get itself precisely at the needed spot. In my case, the robot is heavy and is rolling on three wheels. The up and down position of the charging port attached to the robot wasn’t going to move much. There isn’t a suspension system, the robot doesn’t really flex when it moves. All I really need to worry about is left-to-right alignment of the two parts when they mate. Oh, and the forward and back alignment. To solve the left/right alignment problem, I began to design two parts that would work even if the left/right alignment was a bit off.
My first designs were two pins on the robot that stuck out, and two rectangular plates on the wall. The plates were somewhat wide, and as long as the pins touched anywhere along the plate, a good contact would be made. But my robot charges using a 42-volt system, and there are a few regulations about how much voltage you can have on exposed contacts. There are several rules that can apply, but somewhere between 15 and 30 volts seems to be about the most you can have and still make some claim to being safe. So the parts had to have no exposed metal when electricity was flowing.
My next designs were a pair of pyramids that mated. On the robot, the pyramid pointed outward, toward the charger, and the charger’s pyramid pointed inward. At the tip of each pyramid, I tried various kinds of commercial plugs. But the friction was usually too high, making it hard to uncouple after charging was complete, or there was too much wear on the contacts, so the connection would fail after a few thousand matings.
I’m now on, I think, version 21 of my design attempts. It is two cones. And at the top of the cone on the robot side is a square tower with two brass plates on opposite sides. Obviously, the wall side has an inverted cone and a tower that goes inward rather than outward. Its two brass plates are spring-loaded and at a slight angle. When the robot starts to mate, the two cones can be quite far apart as the insertion begins, and the cones will force alignment as the robot moves forward. And when the robot-side tower penetrates the wall-side tower, the two pairs of brass plates slide past each other. The springs make sure they press against each other. The length of the brass plates means that the robot doesn’t have to have a precise penetration distance to make a connection. It has more than an inch of working room where the contacts will work. So, the robot can be a bit off in left/right position as it mates, and it doesn’t have to precisely move forward to successfully mate.
That was the easy part. Other than it taking 21 attempts at experimenting with different shapes, angles, lengths, thicknesses, mountings for springs, sizing the spring forces, figuring out what angle to use so that the pairs of brass plates would self-clean as they slid past each other, figuring out how to allow the wires that attached to the brass plates to not interfere with the springs, and making sure the brass plates wouldn’t slip out of their holders. All easy stuff if you’re a mechanical engineer. I am not.
I stopped working on the robot for a couple of months so that I could learn a new skill, in my lifelong journey of knowing how to do everything. I’m learning to sew. But yesterday I decided to take a break from that and get back to working on the robot charging system. I powered up several computers and, wouldn’t you know it, things did not work. In this case it was because I had changed how my home network worked. I have a “mesh” system in my home with the idea that as the robot moved throughout the house it would always find a way to get a really fast network connection so the robot could talk to other computers, especially those I use to remotely watch what the robot is up to.
It turns out that Google’s mesh routers do not like to provide high-speed connections throughout the house—they interfere with each other and only work well when you accept slower data speeds. Unless you change the way they talk to each other. I made that change and it required that I change all the network settings for all of the computers involved in the robot. And, while I was at it, I changed the antenna system on the robot so that the body of the robot didn’t interfere with the WiFi system, which meant I had to change the way WiFi worked on the robot. The result of just changing the network was that much of the software no longer functioned correctly.
How could that be an issue? Well, let me tell you that the robot networking software works rather differently when the robot thinks it’s talking directly to Wi-Fi and not to an intermediate device, which it was before. This led me down to doing network analysis of the data traffic from the robot to the other computers.
I’ve been working on computers since the days of kerosene computers, and I’ve worked on nearly every part of a computer. I’ve designed small computers and supercomputers, I’ve written operating systems, language compilers, linkers, loaders, code optimizers, simulators, and on and on. The thing I know least about computers is networking. In this case, the hardest problem that I had to find is that someone else’s software package I had added to my robot decided that for one of the data types the robot produces, in this case it was the “odometry” data, or where the robot thinks it has moved over time, this other software package was configured to store a thousand readings before sending out the data. When you aren’t using Wi-Fi to send signals, sending out 1000 messages is nothing, it’s instantaneous. With Wi-Fi, it takes seconds for the data to show up (yes, lots of details are omitted). And the robot does not work if data is not pretty much instantaneous. The robot has absolutely no use for data of where the robot was some seconds ago—it will happily crash into things if you don’t give it up-to-date data and lots of it.
Well, that took a few hours to track down and fix. As a side note, I had to also fix all of the “quality of service” configurations for all of the parts of the robot that were sending and receiving data. This was not an issue when I was using Ethernet for communication, but it sure became an issue when I went to Wi-Fi. When Halloween comes around, look up “WiFi Retransmission Storms” for your ghost stories to tell around the campfire.
I had anticipated having to write quite a bit of original software to get the robot to move into position to mate with the charger, especially dealing with moving those last few millimeters where it would be easy to break things if the robot wasn’t pretty close to the position and angle it needed to be and moved too fast or exerted too much pressure as it mated. Just before I began writing the code, after having spent a couple of hours writing out the specifications for what I thought I needed to do, I decided to look at the built-in facility provided by the open-source software that I use as the base for my robot. I expected the provided solution to be a farce, a “placeholder” where you would replace it with real software.
It turned out, though, that the built-in software was fairly well designed for my robot. All I needed to do was to be able to tell the software where the charger was, within a few millimeters, and where the robot was, within a few millimeters, and to tell the software when the robot had successfully mated with the charger.
The first part was technically hard but actually easy. You’ve seen QR codes, those things that are going to replace bar codes soon (they are just waiting until they are sure the last store in Zambia has equipment to read the QR codes)? Well, there is a simpler version of those graphics called April Tags. You print them out on your laser printer, paste them to a surface, add a camera to your robot, and (magic steps omitted), if the robot can see an April Tag it can tell you with rather surprising accuracy where your robot is from that picture. So I taped up a tag right next to the charger. Now I could tell the software exactly where the robot was and where it needed to be for mating to occur.
The second part was technically easy but actually hard. In order to tell if mating had succeeded, I needed to measure if current was flowing from the charger into the robot. I already had four similar sensors in the robot already, but they measured current flow for other pieces of the robot. It was easy to add a fifth sensor except that I had to nearly completely dismantle the robot to get at the needed wires and add a few new wires. Sigyn is not designed to be quick to disassemble. It is designed to survive a lot of vibration, which means a lot of screws have to come off, and a lot of cable ties have to be untied. That was about a four-hour effort just for that. The April Tags were also a smaller issue, but that’s a tale for another day.
So, all the pieces were in place. I downloaded new pieces of software to make it all work. There was software to operate a new camera (also another story to be told). There was software to recognize the April Tags. Then I found that the software I was using was abandoned years ago, and I had to search again to find something which was still being maintained. Then I had to create fairly accurate descriptions of where the camera was mounted on the robot, relative to the dead center of the robot, describe how the charging monitor needed to scale its values, create a relay circuit to get around that 1000 message queue problem, write code that took that charging sensor and made it part of the safety system of the robot, and also converted it to a message that other parts of the system could know that charging was happening, and then just give it a try.
And, of course, it all failed. Spectacularly. At first, it was all that communication problem from the network. Then it was a problem in that “where is the April Tag relative to the robot” problem where a forgotten piece of configuration data made the distances way off. Then it was a problem that the April Tags were physically too big, and the charging system physically obscured the tag so the camera couldn’t always see that tag as it approached the charger. Then it was another piece of configuration that contradicted the location of the charging station—the robot had to run into the wall a couple of times before I fixed that.
And then it worked.
Once.
Tomorrow I’ll try it for a second time. For now, I’ll revel in my accomplishment.
--
You received this message because you are subscribed to the Google Groups "HomeBrew Robotics Club" group.
To unsubscribe from this group and stop receiving emails from it, send an email to hbrobotics+...@googlegroups.com.
To view this discussion visit https://groups.google.com/d/msgid/hbrobotics/5703F41A-DB70-493B-BB4B-8273931E7F49%40gmail.com.
To view this discussion visit https://groups.google.com/d/msgid/hbrobotics/CAG61pbf1M9ycfe-PF_1AEbi4Om8Vs%3Deai%2Bj4aynaHatsyNBsRA%40mail.gmail.com.


To view this discussion visit https://groups.google.com/d/msgid/hbrobotics/7E8167FA-2A60-40C0-ADC0-D554E54F96FC%40gmail.com.
On Aug 1, 2026, at 2:39 AM, Dave Everett <daveev...@gmail.com> wrote:
On Aug 1, 2026, at 10:51 AM, Sergei Grichine <vital...@gmail.com> wrote:
I agree with the wireless point, but I'd guess that ~50 W power (12v, ~5A) would require something like a split iron core transformer with quite precise positioning. And yes, 12x5=60 and high frequency makes it more efficient.As for the contacts - I would never try a solution that just bumps contacts into each other. You need to slide them over or in between.
<image.png>Your typical $20 60A A/C Disconnect box has a pretty good pair, you can see it live in Home Depot:
To view this discussion visit https://groups.google.com/d/msgid/hbrobotics/CA%2BKVXVP05hnM%2B90eBfCPQMQ--ShT8Cf6KQuD-_p83hmij55zFg%40mail.gmail.com.
![]() | |
--
You received this message because you are subscribed to the Google Groups "HomeBrew Robotics Club" group.
To unsubscribe from this group and stop receiving emails from it, send an email to hbrobotics+...@googlegroups.com.
To view this discussion visit https://groups.google.com/d/msgid/hbrobotics/9479876F-C4AF-4401-B4F4-969AE0BA4DA4%40gmail.com.
Yet another criterion to add to safety, reliability and utility -- serviceability.
Why Stormy the Stingray uses thumbscrews instead of button head hex screws and the rover has a hinged top.
James H Phelan "Nihil est sine ratione cur potius sit quam non sit" Leibniz
--
You received this message because you are subscribed to the Google Groups "HomeBrew Robotics Club" group.
To unsubscribe from this group and stop receiving emails from it, send an email to hbrobotics+...@googlegroups.com.
To view this discussion visit https://groups.google.com/d/msgid/hbrobotics/BA7E5625-9EF0-4291-ADC1-AE632E656E8A%40gmail.com.
On Aug 3, 2026, at 5:13 AM, 'James H Phelan' via HomeBrew Robotics Club <hbrob...@googlegroups.com> wrote: