3D printed quadruped robot

Public Chat
Similar projects worth following
A 3D printed quadruped Robot, RoDog.
I first started developing this Robot in my freshmen year, multiple iterations have been made and various versions, converging to it's current form.
it is controlled by a custom stm32f4 board that I designed, my goal is to develop a reliable, hobby-level quadruped robot with relatively accessible parts. I plan to release the project files once I'm confident enough of its performance.

3D printed, Fully accessible!

this particular design implements:

  •  12 RC servos actuators, each having position and force feedback.
  •  9 DOF inertial measurement unit, Gyroscope, accelerometer, magnetometer
  • ESP32-S camera for streaming and WiFi connectivity.
  • 2S Li-ion charging circuit with the USB port
  • OLED display (optional use)
  • some peripherals breakout (I2C , UART) for additional interfaces
  • 2 flex cable ports for add-ons I have in mind


Solidworks 2020 student edition assembly, simplified by fusing fixed parts together, you can still articulate the robot, there are 2 assemblies, one has the chassis fixed and legs free, the other has the legs fixed and the chassis can move (static movements)

x-zip-compressed - 46.52 MB - 10/06/2021 at 17:36


knee pivot.png

drawing for the knee pivot

Portable Network Graphics (PNG) - 16.01 kB - 09/25/2021 at 21:51


rod drawing.png

drawing for the leg rod

Portable Network Graphics (PNG) - 10.64 kB - 09/25/2021 at 21:51



eagle files, png and manufacturing files for the PCB control board

x-zip-compressed - 4.68 MB - 09/24/2021 at 17:07



stm32 MCU pinout

ioc - 12.35 kB - 09/24/2021 at 16:36


View all 6 files

  • 1 × Main control board the motherboard, has components on both faces, you can order it from any capable manufacturer that can assemble components on both faces, or solder the yourself if you know how to
  • 4 × 18650 Li-ion battery I would recommend any battery that has > 2500mah
  • 12 × Servos although the robot is fairly light ~ 1.3kg, I would recommend using DS3218 servos or any equivalent, you can try with weaker servos like the MG996R on your own risk
  • 12 × Aluminium servo horn Plastic horns that come with the servos are fine, but if you have the means I would recommend the Aluminium ones
  • 2 × M4x60mm standoffs these standoffs really help connecting the two ends of the robot rigidly, any metal material is fine.

View all 24 components

  • Some Pics :)

    Wissam Tedros11/12/2021 at 11:30 0 comments

    figured It's about time to take some respectable Pics of the robot, so here goes nothing

  • Simulation

    Wissam Tedros09/20/2021 at 15:50 0 comments

    with the help of a MATLAB Simulink trial, I managed to animate My CAD assembly, to get a feel of how to manage the inverse kinematic model control on my embedded system.

    here is the Block diagram of my Simulink:

    A Bezier curve is generated from 13 data points, to generate the path of the end effector as the robot walks, this curve widens as the velocity of the body increases. it is also rotated based on the "heading" angle,  that dictates the walking direction of the robot.
    this curve is then sent to the "body orientation" block, where, to handle the rotation of the local frames, to keep the end effector static to the world frame.
    finally, the XYZ of each end effector is sent to the Inverse kinematic solver for the leg, that outputs the 3 necessary angles for each joint (H , L and K).
    I have plans to make a DXF to timeseries converter, to make the robot move along the path drawn, but that is a future non-primary goal. I still have some control to do for the body velocity, as I don't have a convincing feedback of it. 

    Here are some of the outputs I got with this block diagram:

  • Current Mechanical design

    Wissam Tedros06/14/2021 at 23:10 0 comments

    I think this is what I'll settle for as a final-ish mechanical design, it is as compact as I wanted it to be, main body is 20x10x5cm, it has some vibrations, I'm suspecting the backlash in the RC servo, I have some thoughts to add light spiral springs to solve that. I'm currently animating the Model using Simulink Simscape Multibody, once happy I'm going to apply my control loop to the embedded system I made.

  • PCB

    Wissam Tedros06/14/2021 at 22:56 0 comments

    I finally Got time to assemble my PCB for the robot, 4 layers, controlled by an STM32f405RGT6,

    it features:

    • 12 PWM outputs for controlling RC servos
    • 12 ADC position feedback, from the Servos' potentiometer
    • 12 Shunt resistors of 0.1ohms, for current feedback, this signal is then amplified with a non-inverting op-amp circuit to a good readable range, 0~2.7V, an AD7490 handles the reading and is connected to the MCU by an SPI bus
    • 9DOF (accelerometer , gyroscope , magnetometer) inertial measurement unit MPU9250 connected to the MCU by I2c
    •  small FPC connectors(for future plans), I have a plan to make a small 360 scanner, using a hard disk DC motor, so I also added an H-bridge for that, and some GPIOS. 
    • BQ5887 for 2S Li-ion/Li-Po batteries charging and balancing, to charge the robot from the USB port
    • USB-Hub for STM32 output and cp2102 USB to UART bridge to program the ESP32-camera 
    • 4mb external flash memory
    • additional UART/I2c breakouts and an optional port for a small OLED display
    • USB B-micro for charging/ and differential pair connected to the MCU
    • SWD interface for the STM32 

    I have turned on the board, computer sees it, and the ST-LINK recognizes it, we're looking Good! 

  • earlier versions (v2)

    Wissam Tedros03/20/2021 at 00:16 0 comments

    for version 2 , I used a teensy 3.5 and a raspberry Pi 3A+, connected together on a breakout PCB that I milled on a hobby CNC engraver, the teensy was a good deal between performance and accessibility, but I knew that I had to design my own board someday for a better performance. Version 2 was a really good example of CAD != reality, this project being my first major one, I just thought that by perfectly defining all my constraints in CAD and fully defining an assembly, I would achieve a perfect fit, a smooth as silk mechanism, and rigid bodies that absolutely won't twist, bend, or even crack under load, especially 3D printed parts, lets just say that I did not completely know what I was doing, just having fun in CAD. The design was not terrible, it just didn't match my expectations, it is important to note that I don't really have a lot of experience in CAD, I taught myself how to use SolidWorks.

    my Leg mechanism was a constrained 4 DOF manipulator, a very stiff spring sets a constraint length between the end effector leg link and one of the cranks attached to the motor, the idea was to let the spring absorb any sort of load on the robot. As stated in a previous log, I actually swapped replaced this weird mechanism, and replaced it with a normal leg mechanism, where the joint are just connected serially, each motor on a joint instead of parallel control, I achieved with that design my first static movements, (pitch roll yaw, and XYZ body translations) with an inverse kinematic model.

  • earlier versions

    Wissam Tedros03/19/2021 at 23:13 0 comments

    these first few project logs are going to describe the various iterations of this robot, before I decided to publish it on Hackaday,  I first tried the approach of the 5 bars mechanism for the legs for versions one and 2, version one was not even assembled as I felt it was never going to work, after assembling version 2, I had some successful static motions, but the robot was consuming a lot of power, because the mechanism was just over-constrained, so I kept the same chassis and electronics and just went with a normal leg mechanism, where all the joints are actuated in a serial manner, I Got worlds of difference in performance, and the power consumption was exactly what you'd expect from 12 digital Servos, I just used an Arduino Uno and a raspberry Pi in my first prototype I knew it was just a test, so I ended up only printing the leg mechanism, to test it, and realized that it wasn't capable of actuating a robot. So I immediately started designing version 2 

View all 6 project logs

  • 1
    Servo cable install

    As mentioned in the components sections, you will need to change the cables that come with the servos, seeing that we will need an additional pin to read directly from the servo's potentiometer for position feedback, and since I need to edit the cable for that anyway, I decided to go with a smaller pitch so there's enough space for 12 headers on the board, with the standard 2.54mm pitch header, I may had to go with an overall bigger board, or another breakout board for the servos.

    Note that I'm demonstrating this instruction with a weaker servo ( but it still stands for any RC servo

    -Before you remove the back cover screws of the servo, be sure you have a horn on the servo secured with a screw, so the gearbox cover doesn't fall off.

    - Now you can remove the back cover screws and remove the plastic cover itself, remove the wire by heating the pads One by one,  Do not rip the wire off cold by hand

    once removed you can save the wire for a later project, you won't need it For RoDog.


    Before you start soldering on the new cable, insert in the rubber retaining the wires in.

    The internal board of your servo should be marked with an "S" on the pad where the signal PWM should be wired to,  the middle pad is V+, and the next one is ground, next, you would need to solder the last wire to the middle pad of the potentiometer, and you're done, now do that 11 more times :) 

    make sure you have a good connection, I would recommend adding some fresh solder on the pads to combine unleaded factory solder with yours, and the rubber retainer is a good strain relief for the cables, you can have a look at the CAD model and estimate how long you want your cable, because some motors are close to the board and having long cables could result in a mess, use the full whole cable length for the knee servos.

    I personally went with a header on the servo instead of directly wiring the cable, but it is fairly harder, Would not recommend it. You can do it like that, just double and triple check each pin and probably go with cables that have pins on both ends, directly connected, meaning the first pin on one side goes to the opposing pin directly.

View all instructions

Enjoy this project?



rraetz wrote 10/01/2021 at 13:59 point

Your concept with the 12 motor controller board with position and current feedback makes a lot of sense! Do you plan to sell it (maybe on tindie)? A lot of others could massively profit from such a board if it's easily available. Great project, keep up the good work :-)

  Are you sure? yes | no

Wissam Tedros wrote 10/01/2021 at 16:02 point

hello! Glad you like my work :) 

You can see the Eagle files(schematic and board layout) above, and there are assembly files too for manufacturing if you're really interested, but please know that this is still in development, position and force feedback works, already tested them, but the firmware is still in development. this project is open source, need more info? PM me :)

  Are you sure? yes | no

rraetz wrote 10/03/2021 at 19:40 point

Thanks for your reply! Unfortunately I don't have the time at the moment to work on a quadruped, but it's definitely on my todo list and I will certainly come back to your PCB. Nice to know that current and position feedback works. Looking forward to any updates on Hackaday from you! 

  Are you sure? yes | no

Dejan Ristic wrote 07/19/2021 at 06:03 point

Cool project! Looking forward to seeing future developments.

  Are you sure? yes | no

Wissam Tedros wrote 09/24/2021 at 22:22 point

sorry for the late reply, never actually noticed there is a comment in there! thanks a lot! I'm really glad people are appreciating my work! 

  Are you sure? yes | no

Similar Projects

Does this project spark your interest?

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