So......
::bites bottom lip:: I've been putting off this branch of development on my quadruped for a while; like... two years. If I have a resolution for 2018, it's that I get my child moving like he aught to... and learn whatever fancy-shmancy code-doing is required to pull this off.
The last time I seriously did a meditation on NoodleFeet's walking abilities was in 2015 (the year he was born). It yielded some results, but only made apparent his mechanical flaws and limitations due to his overall design.
HARDWARE IMPROVMENTS:
I've made tiny strides here and there over the past two years, improving his body where it was necessary to facilitate in the walking. He's received stronger aluminum leg bones, high torque metal gear servo motors, more accurate hip gears with a higher tooth count, and squishy silicon tips for his feet that conform to the surface he stands on in order to improve traction and stability. As a machine, he is everything he can be at this phase of development.
Now that walking isn't constrained by any hardware issues, my problem is developing software.
SOFTWARE IMPROVEMENTS:
I don't code. lol
I mean... I do.... but in the same sense that a toddler draws on the wall with ketchup to make art. So, while I enter this second wave of development regarding noodle's walking, I welcome all advice, feedback, help, and criticism along the way. Please shout at me via twitter @spetku ! ...or here on hackaday.io of course.
HERE ARE THE PARAMETERS FOR THE CHALLENGE:
- Noodle is a quadruped. I know, six or eight or ten legs is more stable than four, BUT Noodle has four legs and I don't plan on changing this. <3
- He is top heavy. The bulk of Noodle's weight is in his head... =/
- His center of gravity is high. Noodle also happen to carry all of this head weight high above the ground.
- Each leg has two ranges of motion. There is a motor that pulls a tendon straight up, allowing the leg to lift- and there is a motor in the hip which rotates the femur in a socket, allowing the leg to twist.
- I'm writing my code in Arduino. I don't know how limiting this is right now, but I'll need to made due with what I've got.
- I'm not good at math. I'm assuming some part of this is going to involve writing some function or formula in my code that dictates pace, or rate, or how two legs move in relation to one another... and I'm not going to understand how to leverage the needed math to my advantage. If there is anything I'm not, it's a math beast.
HERE IS WHERE I'M AT:
With all of this being said... Here is my Noodle Walk-Gait code on GitHub. Be nice.
If anyone wants to take on the walking challenge based on the information I've provided, I welcome you to. If you go so far as to develop a few lines of code that dictate a step or two, I will test it out on Noodle during one of my streams, so that everyone can see how it works (and of course I will give you credit for the effort).
I'm rooting for you here, and I can't wait to see Noodle galloping across the room, but from my own experiments with #Tote and #Katka I can already tell you that you are not going to get a proper walk (locomotion independent from surface friction) with just two degrees of freedom per leg. You will probably need to add a third servo at some point, allowing it to bend the leg in its knee. There are two reasons for this:
1. In order to walk independently of the floor friction (that is, walk on any surface), once a leg is set on the floor, it has to stay in the same place until it is lifted again. Since the body of the robot is moving forward in a straight line during that time, the tip of the leg has to move in a straight line in respect to the robot's body. In its current configuration, Noodle can only move its legs in arcs — you need some way to move the tip closer and farther from the body along this arc, to straighten it out into a line.
2. In theory, with the right order of legs (in a figure 8), you can keep the center of gravity within the support triangle formed by the legs that are touching the floor at all times. In practice, since Noodle is top-heavy, and there is also inertia involved, you want to have larger margins. The easiest way to do that is to move the whole body of the robot away from the leg that it is about to lift. But to do that, you have to be able to shift the robot's body horizontally without moving the tips of the legs on the ground, which again requires one more servo in the leg.
By the way, I really recommend this paper as an introduction to the problem: http://www.diva-portal.org/smash/get/diva2:9172/FULLTEXT01.pdf