Makech - Quadruped Robot
July 11, 2023
Block Party and Open Sauce Announcement!
April 8, 2023
Robot Block Party!
The Robot Block Party was a success! It didn't came without last minute surprises though, the night before the event I decided to test the robot one last time to make sure everything was in working order and what do you know - all actuators started misbehaving one after another. I have seen this type of misbehave before so I quickly diagnosed loose magnets for the position sensors. A very dear friend of mine and myself stayed up until 4:00 am (the day of the event) disassembling all 12 actuators, gluing down the magnets to the magnet holder, gluing the magnet holder to the hallow actuator shaft and assembling the whole thing back. I thought the press fit of the 3D printed magnet holders was enough, but the very aggressive motions of the robot proved to be more than they could take. Fortunately, by morning we had a fully working robot, tested and packed to take to the party. We had a lot of fun during the party talking with a bunch of interested individuals about Quadruped robots and about SimpleFOC!
April 3, 2023
Design Sprint - Part 8
April 3rd marks the date where Makech stood tall for the first time. This means the BOM of this first iteration of Makech is frozen and I will be publishing it sometime soon after the Block Party. Without counting the 12x Dagor Brushless Controllers, the BOM price is ~1,200 USD, which is a fair cost for the performance I expect out of this hardware.
For the Block Party I will be using the same simple Quadruped Framework I developed for DAGR for the controls: position control at joint space, inverse kinematics model with gait trajectory generation. Needless to say, this new hardware can be taken much further and this is something I intend to work on more in the future.
For now, here is a list of features I've implemented in for the current framework:
Inverse Kinematics
X, Y and Z translation
Pitch, Yaw and Roll
Control through remote's joysticks
Gait generation
Adjustable parameters:
Step size X, Y and Z
Yaw angle
Swing/ stand timing
Combination of any input
X and Y translation, Yaw and Pitch rotation
Acceleration/ deceleration curves
Control through remote's joysticks
Robot state
Height and stance width that adjusts kinematics and gait generation
Cartesian position of robot's geometric center and rotational state
Adjustable ground direction (with a fully symmetrical robot, like DAGR and Makech, it is possible to "flip" the direction of the ground by negating every calculated result)
Adjustable robot constants
Link lengths, robot dimensions, offset and reduction ratios
Compatibility with any robot by adjusting the constants
March 29, 2023
Design Sprint - Part 7
Not a big update, but we have some basic first movements tested with 6 degrees-of-freedom. Something important that was tested here was that changing the WiFi Channel was enough to separate the packets that are meant for DAGR or for Makech, as there is no other identifier in the packets as of right now. I will re-think how the packets are sent and processes once I work on bi-directional communication, but for now this is enough to have an operational robot for the Robot Block Party. DAGR will operate in channel 1 and Makech will operate in channel 6.
Just like DAGR, I determined the operational time of the robot with the selected batteries by measuring the power consumed.
March 20, 2023
Design Sprint - Part 6
The actuators, metal plates, and rest of components are here and it's time to start the assembly. The 3D printers have been going 24/7 for about a week and most parts are almost ready. The tibia was very hard to print with the correct belt tension, I originally decided to not put a tensioning mechanism to save time, but it ended up taking a lot of time iterating to get the correct tension, which will deteriorate as the belts stretch over time. This is something I hope to circle back after the design sprint is over. The SendCutSend parts look amazing and I can't wait to see how it look in the robot, I think the stainless steel accents will look very cool. The parts seem to be deburred with no extremely sharp edges, but I still went softly with a file to make the edges a little smoother.
Even though all the actuators were designed to be assembled exactly the same, the assembly procedure I followed is a little different between the knee, hip and shoulder. Generally, the procedure is the following:
Hot glue the actuator wires right at the body opening to avoid breaking the wires right at this spot from manipulating the part.
Cut the actuator's wires to exactly the following lengths, measured from the tangent of the edge of the body:
Red -> 19 mm
Black -> 12 mm
White -> 20 mm
Super-glue a diametrically polarized magnet to the 3D printed adapter.
Press-fit the adapter to the hallow shaft in the back of the actuator, make sure the magnet does not wobble or looks uneven.
Note: This is me from the future, make sure to super-glue also the adapter into the hallow shaft, press-fitting cannot take the movements of the quadruped and loose magnets were a huge pain point in the future.Grab an Actuator Back Plate A and populate the M2.5 screws for the shoulder/hip, or populate the M2.5 and M3 screws for the knee actuator. Make sure to use medium strength threat-locker on all screws (I've been using orange Permatex Threadlocker with great success).
Solder a 2x4 programming header to the Dagor Controller, straight connector for the hip and shoulder actuators, 90 degree connector for the knee actuators.
Cut the respective length of 18 AWG silicon wire for the power input of the Dagor Controller:
Knee -> 350 mm
Hip -> 80 mm
Shoulder -> 280 mm
Solder the power wires to the Dagor Controller with the wires coming from the top of the board.
Solder the motor phases U, V and W to the Dagor Controller board, red wire being U, black V and white W, with the wires coming from the underside of the board.
Secure the board to the actuator plate A with 4x M2.5 x 10mm screws. Make sure to not over tighten to not stress the board, the screws touching the board is enough.
Connect the WiFi antenna to the ESP32 on the Dagor Controller board.
Screw down the Back Plate B to the Back Plate A with 7x M2.5 x 16mm screws, make sure the Plate B corresponds to the correct actuator (hip, shoulder or knee). Do not over tighten the screws as the screws thread into plastic. For the knee actuator, do not screw the Plate B, because this plate has to be screw down to the hip actuator first and then screwed to the knee actuator.
After an actuator is prepared with electronics, it has to be further assembled into a knee, hip or shoulder actuator, as it goes into the leg assembly, from now on called J1 J2 and J3 respectively. For J2 (hip actuator), the front flange that holds the big output bearing has to be removed and in its place the J2 Steel Front Plate with a PETG flange is held with 6x M2.5 x 16mm screws. Afterwards the J3 Back Plate B is screwed down with 3x M3 x 20mm screws. All screws should be fastened using medium strength thread-locker. Tape is added to the electronics facing face to avoid a short in case the screws back out.
For J3 (knee actuator), the input pulley is fastened with 3x M3 x 20mm screws (not forgetting the thread-locker), and then the tibia (belt-transmission) assembly is mounted. The last step is to grab a J2 assembly and mount the J3 Back Plate B to the J3 assembly with 7x M2.5 x 16mm screws.
The J1 assemblies get mounted to the J1 Mount Steel Plate with 6x M2.5 x 16mm screws, there is a PETG shim in between steel plate and actuator, that is held by the same mounting holes, which functions to friction hold the 4x short carbon fiber rods and give structure to the robot's torso. This steel plate has two more 3D printed shims that friction hold the 2x long carbon fiber rods. There is a TPU grommet in the bore in the center of the plate where the power cables come in to connect to the power distribution board. The shoulder actuator then gets the 3D printed J1-J2 Mount fastened with 3x M3 x 14mm screws, this is where the J2 Steel Front Plate gets secured with 2x M2.5 x 20mm screws.
March 14, 2023
Design Sprint - Part 5
Parts are starting to come in (rods, 3D filament, bearings, actuators), and I have to wrap-up the mechanical design so I can focus on manufacturing and assembly. 3D printing will take a decent amount of time, which I will leverage to polish out the final details. I have the final dimensions of the robot, during the design process I took great care of the length to width ratio of the robot. This ratio is very important because it can make the robot look more animal-like by avoiding a ratio close to 1:1. Canines and felines have a ratio closer to 2:1. Take for instance Boston Dynamic's Spot, it has a ratio of ~2:1, or the MIT Mini Cheetah, which has a ratio of ~1.77:1, they both look very elegant and their style does not make it seem like a great leap to go from machine to something one might see in nature. Being very hard to pack everything together to achieve complete symmetry, Makech ended up having a ratio of 1.54:1, which is more square than I wanted, but by bringing the feet a little closer together (and sacrificing some natural stability), I can achieve a look closer to 1.65:1 to 1.7:1.
There are two custom metal parts in the design, the first one is the plate that holds the two shoulder actuators (one plate per half), and is fixed in place by the actuator fix points and the adapter that friction-holds the carbon fiber rods. I sent them out to be made out of 0.074" 304 stainless steel. The second plate goes in between the knee and hip actuators (2 plates per robot half). The rigidity of this plate is very important because it would see a huge moment due to the substantial lever arm that the leg forms. I sent them out to be made from 0.125" 304 stainless steel, which is overkill, but I prefer to be safe than sorry given the time crunch. I've been using SendCutSend for any of my laser/ water cut necessities. On the meantime, while waiting for the actuators and the plates, I've been testing the assembly with 3D printed plates and the 3 actuators I had previously bought.
March 14, 2023
Design Sprint - Part 4
I took a little break from the mechanical design and designed a new power distribution board. Just like DAGR, Makech will have two power distribution boards, each powering each half of the robot (6 actuators) and the circuits will be completely independent. The power-on switch will be again (like in DAGR) an XT90 anti-spark loop key, which also servers as inrush protection, by placing a 5ohm resistor in series with the load when inserting the loop key, and skipping the resistor when fully inserted. The loop key gets connected to the board through an XT-90 male to XT-60 male adapter. As shown in the picture, each leg branch will have its dedicated breaker, I'm using 6A automotive breakers that I found on Amazon. I tested their trip curve and validated they can sustain <20A for a couple seconds before tripping, this should be more than enough for jumps and explosive movements. The battery connects to the board through a XT-60 male connector and power gets broken out to 6x XT30 female connectors, power should always be broken out to female connectors. The design is open-source and can be found in this Github repository.
March 06, 2023
Design Sprint - Part 3
I reached out to SteadyWin (manufacturer?) and purchased 8x GIM4305 and 4x GIM4310. While figuring out the details I inquired about the material of the gears and they confirmed that the gears on the GIM4305 were made of aluminum, while the gears of the GIM4310 were steel. I asked if it was possible to purchase GIM4305 with steel gears and they said that it was, and that they were planing on a release soon; the 8x GIM4305 I bought have steel gears in them. I anticipate that these steel gears will make this actuators last longer. While I would have liked to conduct a stress test, I am currently committed to this design challenge, only time will reveal their true strength.
To prepare for the actuators arrival I have been printing different pulleys to test the new reduction ratio. I cannot afford the length of the tibia to increase a lot because that would mean the knees would collided when the legs are completely tucked in (when the robot is resting on it's belly). I am increasing the teeth of the input pulley and decreasing the number of the output pulley while trying to maintain the distance between them with the same size belts. After a bunch of printing and trial and converged to an input pulley of 24 teeth and an output pulley of 27 teeth, giving the knee a reduction ratio of 1:1.125. I would have preferred to have a reduction ratio closer to 1:1 or a multiplication ratio, but 24T is the biggest pulley that fits inside the tibia assembly, and 27T is the smallest the output pulley can go without the tibia length increasing too much.
February 27, 2023
Design Sprint - Part 2
I settled on a torso frame based on carbon fiber rods, just like DAGR, but in a different configuration. This time the robot has 6 carbon rods with the intention, 2 that traverse the whole length of the robot, and 4 that go up to the plates that support the shoulder actuators. This 6-rod configuration should provide support to the outward plates that double brace the shoulder actuation, and also provide torsional rigidity, which is very important for the flight time during a gait. The main reason I decided to keep this style of frame is because it is incredibly flexible; mounting any accessories is very simple, either a zip-tie fastened or a friction fastener does the trick. There is a volume of ~184 cm^3 inside the torso, which should be plenty for batteries and power distribution, as well as other add-ons I might want down the line.
I did some quick calculations to estimate the torque required during the flight time of the gait. My optimistic assumption being that the holding torque on the knee standing on two legs equals the torque on the knee during the flight time of the gait. This number should provide a good enough approximation to have an idea of the torque required. I'm estimating the overall mass of the robot to be around 4.5kg, including batteries, power distribution and some overhead in case I want to put compute on board.
The GIM4305 has a continuous torque rating of 1Nm and a peak torque rating of 3Nm; from the calculations it looks like we need ~2Nm of continuous torque, this is achievable, but I don't plan of having any type of cooling in the robot. Fortunately, there is a bigger brother in the same family (GIM4310), which claims to be able to do 3Nm continuous and peak 5Nm. As the name states, the only difference is the brushless motor is a 4310 instead of a 4305. There is one big drawback though, the rated speed drops significantly to 120 rpm compared to the 300 rpm of the GIM4305. This shouldn't pose an issue for walking, but I definitely want to robot to be able to jump. I calculated the angular speed of the knee motor for the jumping leg to be ~260rpm (27 rads/s), considering the 1:1.33 reduction at the knee (with the belt drive), the knee joint has to move ~190rpm (20 rads/s). If I change the ratio at knee to something close to 1:1, or maybe even multiplication, there should be nice balance between continuous torque and speed. Another downside of the GIM4310 is that it has 40% more mass than the GIM4305 and the phase resistance is closer to 2Ω.
February 24, 2023
Mechanical Design Challenge / Design Sprint - Part 1
Unsurprisingly, I decided to design a new Quadruped Robot based around the GIM4305. I am giving myself exactly 6 weeks to finish the design, manufacture and assemble the whole robot just in time for the 2023 Bay Area Robot Block party, which will take place this April 8th. Success will mean showcasing the robot at the event, walk around greeting participants and, if I'm lucky, interact with Boston Dynamic's Spot. There as some items from the development of DAGR that I will be leveraging to finish the challenge on time:
I have the last 12 Dagor Brushless Controllers (Alpha version) from before the semi-conductor shortage. Originally intended as my personal backup stash for DAGR and other personal projects, I am thrilled to employ them for this challenge.
I have already figured out a good way to mount my motor controllers to the back of the actuators with a 3D printed plate.
The femur and knee mechanism is already designed, though I believe I'm going to be making some minor tweaks here and there.
I intend to utilize the same tried-and-tested open-loop Kinematics model and gait generation stack that DAGR presently employs. The day I finish assembling the robot should be the same day it takes its first steps.
I browsed all night through the Quadruped Robot Discord Server looking for design inspiration and decided to stick with the classic MIT Mini Cheetah actuator configuration. However, I decided to introduce a unique modification to the design: in this modified version, the shoulder actuator securely holds the hip+knee actuators by the center of mass of the assembly, deviating from the traditional placement at the longitudinal center of the hip actuator. I decided to avoid parallel mechanisms for translating the knee motion because I wanted to preserve full front/back and up/down symmetry, the reason as to why I wanted to do this will be apparent down the line. This means that I had to place the tibia to the side of the femur, instead of having them co-planar, fortunately, this simplified a lot the knee mechanism (and it's precisely what I have already designed).
January 23, 2023
Jumping test stand 2.0
I bought two more GIM4305s and built a brand new jumping test stand with some linear rails I bought off Amazon. I decided against using 20x20 aluminum extrusions with a v-slot wheel carrier, like the jumping stand for DAGR, because I found the v-slot wheels would bind on their way up as the leg applied torque in the Z axis while pushing off the ground. This was solved in the new design by utilizing the two smooth linear rails with linear bearings, the downside being that the carrier assembly weighs more than 200 grams on it's own, while the 2 DOF leg weighs around 700 grams.
It took me a considerable amount of controller tuning and experimentation to start seeing some air. Initially, the actuators were operating at a significantly reduced speed due to my attempts to power the leg using a 3S lipo battery. This works well with DAGR, because the phase-phase resistance of the brushless motors in it are in the mΩ range. However, the phase-phase resistance of the GIM4305 is around 1.2Ω, so in order to achieve higher rotational speed I borrowed a 4S lipo battery, which immediately resulted in promising air time. Subsequent parameter tuning and adjustments to the jump trajectory enabled me to consistently achieve 250mm jumps, knocking the record of 150mm with DAGR actuators out of the park. Needless to say I'm very happy with this actuators with regards to the performance:cost ratio.
September 20, 2022
DAGR's prosthetic leg
I couldn't not try and develop something for my DAGR quadruped robot to keep experimenting with the GIM4305, so I ended up designing a drop-in replacement knee + femur for DAGR. This is where my system of wireless actuators shine, all I had to do was flash the firmware for the Dagor Controller indicating it was the knee actuator of leg number 0, and it was ready to go. The femur ended up being a little shorter that the rest because I designed the actuator around these belts that I found on Amazon. The test was successful and it showed the torque density and angular speed of the GIM4305 (including the 1:3.65 reduction in the knee), to be superior to the actuators on DAGR; I think I will be making a jumping test stand next.
September 16, 2022
The GIM4305
While looking for cheap brushless motors to use in my projects I came across the GIM4305, an integrated 10:1 gearbox + 4305 brushless motor for a very reasonable price. Undoubtedly, I had to get my hands on a sample, and so I did. After receiving the unit there were a couple things to investigate so a tear-down was in order. The tear-down revealed that unlike other integrated actuators, the gearbox sat on top of the outrunner, instead of inside of it; the gears appear to be machined aluminum, the sun gear being worryingly small, which rises some concerns regarding the units longevity. The mass of the unit came of to around 160 grams.
I built a tiny test stand to do some torque measurements and quick bring-up. Using one of my Dagor Brushless Controllers and SimpleFOC I was able to start doing some motions after a bit of parameter tuning. The somewhat questionable datasheet seems accurate and measured peak torque was of 3Nm. Overall I'm very happy with the actuator, though there are a few caveats.
Positive observations:
Different bolt patterns in the back which gave me flexibility when designing a plate to attach the Dagor Controller.
Finish and machining were better than expected.
Affordable price.
Torque density for the price and form factor is great for projects where a quasi-direct drive solution is needed.
I like the 3x M3 bolt patter and locating features in the output.
It's very easy to attach a diametrically polarized magnet with a tiny 3D printer adapter on the back of the unit for the position sensor of my motor controllers.
Negative observations:
The single strand enamel wire is thin and easy to break. Fixing a broken wire right where the wires output the body was very challenging.
Not a fan of the three very small M2.5 bolt system that holds everything together, though I cannot come up with a better way to do this without altering the mass and form factor. Maybe using 5-6 bolts would provide better force distribution.
I have my doubts about the longevity of the 12T input gear,