A quadruped robot with closed-loop control to stand, pose and walk through rough terrain. The motor elements are cheap servos. Ground force feedback is sensed using force sensing resistors. Pose is established by means of an IMU. Control loop is implemented in a Teensy 3.5, using Perceptual Control Theory.
To simplify things, the robot will have 8 degrees of freedom, that is, 2 dof per leg. In order to aid steering, I may add a sideways bending spine afterwards.
Components
8×
MG90S Servo
Basic cheap servo. Can be found at very low price.
4×
1cm Round Force Sensitive Resistors
Force Sensitive Resistors to sense ground force
1×
Teensy 3.5
IO and control
2×
TLC2272CP Op amp
An op amp to amplify the load cell signal
1×
IMU (e.g. MPU6050, MPU9250, BMI160, BMA180 etc)
The IMU is needed to establish the robot's pose
This project is nearing it's end. I've completed the quadruped and tested it in quite challenging conditions, and I'm happy to report that it performs more or less as I expected it to. I've written an extensive post in my blog discussing several performance aspects and issues I've encountered.
Building this robot has been a great learning experience for me and I hope to make use what I've learned in future robotics builds.
I AM planning to release design files and code for this project, but it will happen at a later time. It's just that I really don't have any time to spare in putting everything in the correct order.
So the quadruped is finally alive! This first iteration is able to assume poses commanded from an RC transmitter and adaptively stand on uneven ground. Here's a video of said functionality below:
I still need to iron out a few bugs and then I'll be moving to design an adaptive gait that can (hopefully) allow the robot to traverse uneven terrain.
I finally managed to 3d print and assemble together all the parts of the quadruped robot – save for the PCB which I am still waiting to be delivered. The robot turned out quite sturdy, although the leg joints are a bit more elastic than what I would have desired. However that should not affect standing and walking performance significantly.
The robot weighs in at about 300g including a high capacity 3.7v li-ion battery, and can stand while being unpowered.
The focus of the design now slowly shifts to software. My first goal is to have the PCT code used in the single leg working for all four legs and then make the robot assume static poses (crouch, stand, lean etc.). Walking and research on gaits and stability comes after.
I tested the single leg assembly with a simple walking gait and the results are quite encouraging. As you can see in the video below, the leg assembly easily traverses flat terrain, and with a small change in gait it was possible to also negotiate basic obstacles to a sufficient degree.
As you will notice in the video I've replaced the hinge joints with elastic joints 3D printed in TPU. This gives a stiffer construction overall and also incorporates pre-loading in the elastic joints (in contrast to requiring an additional elastic band or spring).
At this point the design of the leg is nearing completion. Next I will be focusing on the design of the chassis, the electronics board and integration. Stay tuned!
I've redesigned the leg and implemented a force-sensing resistor (FSR) at the foot. This gives an immediate ground reaction feedback which should be faster than mounting the FSR at the leg root.
To test this leg prototype I've also built a self-standing rig made out of arrow parts and 3d printed corners. The rig is light enough that is easily lifted if the leg pushes against the ground. Therefore it is also a good setup to test whether the leg reaction to touching the ground is fast enough so as not to disturb the balance of the robot body (in a 4-leg configuration).
So far results are encouraging, as can be seen at the video below. The maximum reaction force recorded by the scale is around 50 grams. This is low enough that shouldn't be a disturbance to the quadruped stability. Even if it is, lowering the leg movement speed should be enough to improve reaction.
Next step is to write a routine to have the leg actually walk carrying the rig with it – sort of a "monopod" if you like.
In a project that comprises multiple identical parts (four legs in this case) it is always best to sort out any issues while designing the single part, before moving on to figuring out how the parts will come together. With this in mind I tried to connect and calibrate the load cells that I would be using on each leg, to the leg prototype that I built last week.
Unfortunately the deviations on the load cells were so high that it proved impossible to obtain a consistent behavior with the setup I am using, which includes an op-amp to read the strain from the load cell whetstone bridge. An alternative would be to use the HX711 ADC that is commonly in use with load cells, but that comes with it's own sets of issues (e.g. low sampling rate, drift etc.).
Instead I considered giving Force Sensitive Resistors a try. I had done an elementary test way back with an FSR and a volt meter and was not really satisfied. But yesterday I did a proper measurement circuit and got satisfactory results. So now I'm back to the drawing board to design a new FSR bracket to be located at the root of the leg.
I spent some time in the past few days to test the two leg designs that I came up with. The first one is a more "traditional" one where the two servos are placed in series just below the hip where the femur bone would be. The second one places the motors at the hip (root) of the leg, and uses a scissor mechanism to realize 2-DOF movement.
Overall I've found the second prototype to function better, providing more accurate and smoother motion, despite the fact that it's a bit harder to build.
After facing a few setbacks related to proper dimensioning in 3d printed components, I finally managed to assemble the alternative leg design today and perform a simple test using a servo tester, to verify motion behavior. The video is below:
This initial test shows satisfactory motion, although the cheap servos have a different PWM range that the servo tester supports (!) so the full range of motion can't be realized with this setup. I'll be conducting proper testing in the days to come, so stay tuned.
I just finished modeling an alternative leg design with motors mounted at root. This should allow for faster leg response, although the overall width of the design increases due to the placement of the servos. Will print and test tomorrow.