3D printed quadruped robot

Similar projects worth following
A 3D printed quadruped Robot, RoDog,
I first started developing this Robot in my freshmen year, multiple iterations has been made and various versions, converging to it's current form. it implements 12 RC servos, 12 position feedback and 12 current sensing for each joint, an on-board 9DOF imu, all controlled by an stm32f4 MCU based board that I personally designed, my goal is to develop a good, hobby-level quadruped robot with relatively accessible parts. I plan to release the project files once I'm confident enough of its performance

A 3D printed quadruped robot, made with off the shelf hardware, in hopes to make this field of robotics available to every curious mind that sat and watched videos of Spot, MIT cheetah and MIT mini cheetah, and wondered if  such a complex machine could be made at home, and still learn how the control of these legs result in a dancing, jumping, balancing and exploring robot dog.

  • Simulation

    Wissam Tedros18 hours ago 1 comment

    with the help of a MATLAB Simulink trial Subscription, I managed to animate My CAD assembly with a bit of control, 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 speed of the body increases. the curve is rotated based on the heading angle, the angle that dictates the walking direction of the robot.
    this curve is then sent to the body orientation block, where, based on the body translation and rotation, adjusts the XYZ points of that curve to keep them in place with respect to the world frame.
    finally, the XYZ of each end effector is sent to the Inverse kinematic solver for the leg, outputting the 3 necessary angles for each joint.
    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 with 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 desgin, 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, or maybe the non-uniform material? the legs have an 8mm steel shaft and all the surrounding parts are just PLA, so maybe making them out aluminum or carbon fiber might fix this issue, I'm currently simulating some gaits and static motions on 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:

    1. 12 PWM outputs for controlling RC servo motion
    2. 12 ADC from the internal potentiometer inside the servos
    3. 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
    4. 9DOF(accelerometer , gyroscope , magnetometer) inertial measurement unit MPU9250 connected to the MCU by an I2c bus
    5.  small FPC connectors(for future plans), I have a plan to make a small 360 scanner, so one of them has an output from a small H-bridge to drive a small hard disk motor with some GPIOs
    6. BQ5887 for 2S Li-ion/Li-Po batteries charging and balancing, to charge the robot from the USB port
    7. USB-Hub for STM32 output and cp2102 USB to UART bridge to program the ESP32-camera 
    8. 4mb external flash memory
    9. additional UART/I2c breakouts and an optional port for a small OLED display
    10. USB B-micro for charging/ and differential pair connected to the MCU
    11. 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 gave a good balance 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 as 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, everyone learn from their own mistakes. The design was not terrible, it just didn't match my expectations, and totally did not match the perfect medium of CAD, it is important to note that I don't really have a long experience in CAD modelling, I taught myself how to use SolidWorks, only the 3D modelling part of it, without any simulations and estimators.

    my Leg mechanism was a constrained 4 DOF manipulator, the 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 pipelined, 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 chasis 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 as I just knew it was just a test, I ended up only printing the leg mechanism, testing it, and realising that it was horribly not capable of actuating a robot. So I immediately started designing version 2 

View all 5 project logs

Enjoy this project?



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

Cool project! Looking forward to seeing future developments.

  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