Close
0%
0%

RoboDog

Cheap 3D-printed robot dog: 14-DOF ESP32 quadruped with wobbly first steps, jittery servos and lots of room for hacks at around ~100€.

Similar projects worth following
This is my DIY robot dog built mostly to see how far I can push a cheap setup before everything falls apart. The goal was simple: a 3D-printed quadruped that actually walks, stays (roughly) in one piece and costs around 100€ in parts, without hiding any “oh and also a 300€ toolkit” in the fine. The dog has 14 degrees of freedom: 3 servos per leg (12 total for the legs) plus a 2-axis camera head. It’s driven by a Raspberry Pi Zero 2 W and a bunch of hobby servos, with a fully 3D-printed frame. I did all the design, wiring and code myself, so most of it is intentionally simple and hackable rather than polished. The code is still messy and there’s a long list of possible upgrades: nicer gaits, better stability, maybe ArUco marker navigation and more vision-based stuff. I don’t plan to actively work on it in the near future, so consider it a working shareable experiment, rather than a fully finished product.

This is my DIY dog made only from parts you can simply buy, no custom PCB, nothing exotic or too over-engineered. The idea was to have a 3D printed quadruped that actually walks, does not immediately disintegrate, and stays around 100€ in parts. The brain is a Raspberry Pi Zero 2 W running Python. Power comes from two 18650 cells, each with its own step-up converter: one for the Pi, one for the PCA9685 and all the servos. Grounds are connected, but power is split so the Pi does not collapse into some catastrophic brownout every time the dog moves.

The dog has 14 DOF: 3 joints per leg and 2 for the camera head. Most joints use MG90S metal gear servos, with a few TS90MD mixed in, and small 9g Miuzei servos for the camera. For vision there is a Freenove 120° 8 MP camera, so later I can play with ArUco markers and other slightly more sophisticated experiments.

All parts I modeled in FreeCAD and printed on an Anycubic Kobra 3. Right now the dog can walk in any direction, rotate in place, and the speed is adjustable. The code is still messy and a bit chaotic, but good enough to share and use as a small experimental platform. The code itself will be published a bit later, after I clean it up at least a little, remove redundant stuff and make sure there is no data I would prefer not to expose.

  • Power trouble

    Stanislav Britanishskii9 hours ago 0 comments

    Topic-wise this is the last log, but I'm thinking about adding one more with a few mini topics telling about some minor stuff.

    As I already mentioned in the legs' log, initially I was planning on using 4 18650 batteries connected in series with a step-down converter, 5 volt hobby servos and a Pi Zero 2 W, which is also running on 5 V.

    The initial test with one leg went fine; it was moving as expected and everything seemed fine. So for the ease of testing and to avoid the hassle of charging the batteries daily I switched to using the Pi's power input and was feeding one leg directly off the Pi's output.

    Later, for testing with multiple legs, I also bought myself a power supply with 5 V 30 A output.  Fed it from the power grid, connected it to ugly leftovers of some power cable. Testing was fun with this terrifying metal box hooked up to the grid and a few naked wires on the table. This time Pi and the PCA were connected in parallel, with ground and data cables connected, still everything was running.

    At this time I started noticing some weird trembling of the legs. Whenever servos were under load the leg would noticeably shake like some kind of vibrator, that was kinda okay for testing but I obviously had to fix it later.

    Finally on the third iteration of the legs I got to testing the full design. The Pi would start fine, single leg movement would be okay, but after one or two strides it would completely stop. I would get disconnected from it, but the dog still had all the lights on.

    The very first assumption I had was insufficient power, I asked ChatGPT for the calculations and it insisted that everything should be fine. The second thought I had was maybe the batteries are stopping, trying to prevent over-discharge protection, so I bought different ones with huge rated output voltage and no protection whatsoever. That still didn't help.

    I took the dog to work to check with a multimeter, which I didn't have at the moment, and to try connecting it to a lab power supply. That was pretty interesting, it turned out that while moving legs I had significant drops in voltage which I didn't expect with the step-down converter. First thing I tried was adding a couple of small capacitors on the output, which did help, now the dog could make 4–5 steps before going dark.

    The idea of using a cheap shitty step-down converter clearly wasn't working. I bought myself a cheap shitty step-up converter and started trying to run the whole dog off a single battery, well, as one could guess the result was the same. So I bought myself an expensive Pololu step-up converter for a whole 30 euros, which is roughly 30 times more than the previous. Whilst that did slightly improve the situation, the dog still couldn't operate correctly.

    That's when it hit me, I can power the Pi separately from the servos, so I put two batteries each connected to a private step-up, one connected to the Pi, the other connected to the PCA, from Pi to PCA only left ground and data cables, and, who could think, now it was working pretty well. I did measure the voltage on the PCA input, and, of course, it was still dropping from 5 to 3 volts, but everything was running.

    The only problem left were those tremors mentioned earlier. To me it seemed that the problem was with power input again, as when powered with a proper power source they seemed to work better, I was already about to give up on this and try to manage running with tremors. Luckily I noticed that not all of the joints were doing it and there was no clear dependency on their location to how much they would shake, also there was no dependency on which port they plugged into on the PCA. I decided to try more expensive servos with metal gears going from 1 euro per piece up to 4 euros, which is a significant increase for a cheap af dog with 12 DOFs in legs. Well, that helped a lot.

    From my estimation, among the initial super cheap servos roughly 80% were shaky, among the newer expensive ones...

    Read more »

  • Leg day

    Stanislav Britanishskiia day ago 0 comments

    So, let me make today a leg day.

    Designing and programming the legs was the main part of this whole project, everything else was a baby's play compared to it.

    So for the legs I would require 3 servos, one of them to move the leg sideways, one for the knee and one for the ankle. And for the code I would have a class with a few functions, the main one of them would take the desired position of the leg tip in XYZ and calculate the angles for each of the servos.

    There was a lot of tinkering around with the PCA9685, that is the servo controller, somehow the data that I was finding didn't match what was happening, the PWM cycle setting turned out to be a huge headache, after the PCA9685 finally gave up I ended up with some weird function for cycle and angle setting.

    My initial idea was to take 180 degree hobby servos and make a gear ratio of 1:2 to decrease the load on the servo but also decreasing the moving range. Somehow I thought that the servos would be too weak to carry all the weight, considering that in the beginning I was planning on using 4 18650 batteries in series with a step-down converter.

    That was my first time designing gear with FreeCAD, and, god, did it take a lot of time to figure all the details, make it perfectly fit the servos without any screws, distances between the gears and overall work, many iterations of printing, reprinting, throwing the failed versions again and again. And finally I got this:


    After the first leg version was physically complete I had to implement the calculations for the servos. I did a lot of googling, conversations with ChatGPT, they both were continuously telling me something about Inverse Kinematics, went in there, checked out a few tutorials on YouTube, turns out to be some magical transformations from linear algebra, and that was never my best understood subject. At the moment I was in another one of my idiotic relationships and I was constantly accused of wasting too much of my time with everything but her, so the project got frozen for about half a year that was taken by suffering a bit more, heavy drinking and stopping the heavy drinking.

    Finally half a year later I got back to the project and it turned out to be a very simple problem that can be solved with pen and paper in half an hour using only basic geometry.

    The leg design turned out to be very impractical, all these gear connections would constantly fall apart, the leg couldn't survive any side load, so I had to go back to FreeCAD and redesign it all once again, after tons of wasted plastic I ended up with this:

    This one I still kinda like in terms of the looks, but it was a bit too long, so again it was pretty hard for the dog actually to have enough torque, also due to many parts it wasn't very stable or easy to assemble, and the leg pieces were connected to servo horns directly, so the parts could kinda easily slide over on the horn, which meant that the angle could very quickly offset itself.

    So here we go redesigning again. Now I wanted to use the original servo connector and somehow connect to it, that would give me a lot more stable construction, in a week or two I got to this design and it was already pretty good.


    This was already pretty nice, but it was somewhat too long and the dog kept falling, so after a bit of redesigning I got to this:

    and here is one more video with a fall

    This is the final version, the body of the dog was still a bit changed later on, but legs are still the same.

  • Fighting the printer

    Stanislav Britanishskii11/26/2025 at 19:55 0 comments

    For my first private printer I chose Kobra 3. There were a few reasons. I was used to Prusa printers at the moment, but they were a bit too expensive for me, and I thought that Anycubic Slicer would be easy for me to master as it is a fork of PrusaSlicer. The announced speed of the Kobra sounded amazing and the print quality wasn’t that super important for me at that moment. And the main reason was that the Kobra was on sale then.

    The very first problem I encountered was that the filament was sent in a different shipment and arrived a couple of weeks later than the printer. So in the beginning I only had the test piece several meters long, yet that was enough to print one of the provided samples. Speed was really amazing compared to Prusa Minis, which I was used to.

    The second problem was that I didn’t do enough research and didn’t even think that this could be a case. It turned out that Anycubic Slicer doesn’t run on Linux and I don’t have any Windows devices. The internet told me that no slicers at the moment supported my printer. So I had to iterate through several different slicers, and just as expected they didn’t have the profile for the Kobra. Finally I stopped with Orca Slicer and some custom profile I found online and have been using it ever since.

    It took me a bit of tinkering around to get everything to work properly, for example Prusas are way more precise. If I had to make two parts fit each other I didn’t have to add any margin, yet with Kobra it turned out I had to give at least 0.2 mm margin for rigid connectors and something about 0.5 mm, and that did take some trial and error to find out.

    After all of this was figured out the printer was running smoothly for 7 months or so without any repairs or major changes in settings. That is until I decided to change support type in the slicer from standard trees to manual tree, some kind of trees where you explicitly choose areas to be supported. That was a long print, one of the first versions of the dog body and a few parts of legs, for around 6 hours, so I just ran it overnight. In the morning I came to check on the print and saw something weird: after half a centimeter the layers seemed to be all moved a centimeter to the side and there was a big hole on the side as if the nozzle melted into it like an icebreaker.

    The body I threw in the trash and decided to print the leg pieces one by one, they worked out okayish, but the body with supports did exactly the same thing again, also all the prints were a bit offset from where I expected them to be on the print bed. After some investigation it turned out that the nozzle was severely bent, so much that I was surprised that it could print anything at all.

    I bought a new nozzle, printed some legs and other pieces, everything was all right, until I tried to reprint that body with supports, obviously it got bent again.

    After buying a new nozzle and printing the same piece with different supports I got a confirmation that the issue was in the generated G-code and was somehow connected to that support setting.

    Other than all the stuff listed at the top, there weren’t any major difficulties with the printer; it was working pretty well, it just turned out to be a bit better to run it on the floor, as all the tables I have are too shaky.

    This isn’t the end of my sufferings, but these are all the problems I got from the printer, about the rest of the stuff I will tell in the next logs.

  • Introduction to story logs

    Stanislav Britanishskii11/25/2025 at 21:03 0 comments

    I’m very excited to share my first solo robotics project and tell the story of how it was created.

    The project is more or less finished by the time I’m writing this, so the logs won’t be real updates, but rather the journey of the creation. I believe it will take me several log posts to tell it completely. Sometimes I probably won’t follow the exact timeline, as memory was never my strong suit. Hopefully reading all of this will be worth your while. English is not my first language, so I’ll be using chat to correct the mistakes I make, but I will try to avoid that AI-generated text you can see in the description of the project.

    First let me tell a tiny bit about myself. Originally I’m from Moscow, Russia. I moved to Germany a few years ago, because I was a bit afraid for myself in the context of the situation. Unfortunately that meant that I didn’t finish my studies in computer science, and later it turned out to be close to impossible to re-enroll in Germany. After a while I got hired in a small robotics company, mainly doing software, yet due to the extremely small size of the company I was running into all kinds of tasks. That’s how I learned how to use FreeCAD, solder, and handle hardware to some extent.

    Overall, I’ve had the idea of making some kind of robot since I was a kid, yet there were always some reasons to postpone it. That could be lack of knowledge in a topic, lack of time, lack of understanding of how to approach such a project, lack of materials, and so many other reasons. Thanks to the company I got an understanding of what I needed to buy and what I would need to use in terms of hardware. Nevertheless, later it proved to take tons of time figuring out all the details.

    About a year ago I finally made up my mind and bought myself a 3D printer, a cheap soldering iron, a Pi, the first pack of servos, a PCA controller, a few batteries, a charger for them, a step-down converter and probably something else that I don’t remember.

View all 4 project logs

Enjoy this project?

Share

Discussions

Similar Projects

Does this project spark your interest?

Become a member to follow this project and never miss any updates

Image