Outstanding job building this humanoid.

You are to be greatly congratulated!

Why not try lowering the center of gravity

and have the knees bent somewhat... it

should do something to improve stability

and decrease rocking time, plus improve

walking. Just a thought...

Humanoido

For now I'm just studying the stability and balance issue to see what might be done about it by reacting actively to imbalances. A lot of you have done nice work using gyros in your bots, and I'll probably end up doing something similar to what you guys have already done, but I'll get there at my own slow pace. It's fun to think about!

The Robo-one competitors use the "crouch walking" techinique to improve stability, but it's not very "realistic" in the sense of mimicking the way humans walk. It got so bad that they had to change the rules to limit the amount of knee bending that was permissible while walking. Some of the robots (like King Kizer) seem to still crouch down in that odd way when doing some attacks which is apparently not banned.

The latest "unrealistic" walking idea that the Robo-one bots seem to use is what I call "crab walking". Fast side-stepping appears to be more stable than fast normal walking (probably because the large front-back foot base can more effectively kill the forward momentum at the end of walking). So these bots tend to turn their sides toward the direction they want to go, then quickly crab-walk toward their target. It's kind of comical at first but after seeing it all the time I find it a bit irritating. I think it will be much harder for the Robo-one folks to ban crab-walking so we're probably stuck with it.

Both in the case of bent knees and side-stepping, I prefer to try for a more reasonable gait. I'm still a long way from taking any steps, so I can be an idealistic dreamer!

http://paulgraham.com/anybots.html

Pay particular attention to the ankles at the beginning of the video. That's obviously way more advanced than anything I'm planning to do, but it's fascinating anyway and I thought you all would enjoy it if you hadn't seen it yet.

- * Some of the brackets have come a bit loose from the servo horns

* The foot pad attachment scheme is failing already and there's no way it can take the pounding, so I'm going to think about a better solution

* The attachment of the torso turn servo to the upper torso is not as strong as I'd like

* There are occasional intermittent losses of serial communication. Not often but troublesome enough to look into

* The bizarre dual-IMU setup that I ended up with will be too hard to deal with when the torso is turned so I need to combine the best of both into the lower torso. That means the gyros from the upper torso and the accelerometers from the lower torso, so it all has to be torn apart.

* One servo has become somewhat difficult to turn, and I need to check out what's wrong

So Bing will be torn apart for a while. I'm not surprised by this though I'd rather be making forward progress.

In the meantime I have a bunch of software stuff to work on. I'm going to let the 'balance' issue rattle around in my brain for a while and work on the next project:

So far I just have one "neutral pose" but actually I want to have a whole class of them, expressed in a way that I can specify the foot positions and angles, and torso height, and have the joint angles calculated automatically. More than that, I want to specify the foot positions in millimeters, which means that I need to figure out an Inverse Kinematics scheme to set the joint angles. If you haven't thought about how you'd do that, it actually is not a simple problem. In Bing's case it MIGHT be possible to find an analytic solution (making the computation easy), but so far I have not been able to figure one out, largely due to my rusty math skills but maybe because it isn't tractable. If I can't find such a solution I'll need another answer.

I have what I think is a good reason for wanting to specify exact foot positions like this -- it will allow me to keep the feet stationary and move the "robot zero" (and the center of mass) arbitrarily without the feet moving. I think this will be important for shifting weight as part of walking, and for killing momentum as part of balancing.

Not sure how long all this will take until a reassembled Bing will be running the new cool software features, but whenever it is, a video will be forthcoming!

As for

(figure out where the bot will fall and try to make sure a foot is there to catch it).

as a robotics proff and my university says, it's all about having good mathematical models that don't needs a ton of conditional clauses to operate (so no individual pre-programmed movements, no 'if you feel yourself falling to the left, do this' type stuff), the model should take care of it all. As fas as i can tell, Zero Moment Point seems to be currently the most elegant way of doing it.

All the best, this really is a top-shelf project!

The basic walking model views a step as a gravity-assisted pivot about a stationary foot, while the other foot is then freed up to move to its new position. The pivot consists of a guided adaptive trajectory of the robot's center of mass with respect to the pivot foot's ground contact patch. A normal walking phase consists of four overlapping parts:

- The Landing - this is where the moving foot contacts the ground

The Pivot - this is where the pivot foot has an opportunity to guide the center of mass a bit, primarily with the ankle and hip

The Takeoff - energy is added to get the trajectory going in the desired direction

The Swing - for a time, while the robot pivots on one foot, the takeoff foot will have no pressure on it. During that time, the foot needs to move to the location of its next landing.

Before I work on that full step sequence, I want to focus on starting and stopping, which leads to the idea of a "half step" -- starting in one stable position, step to another one. The start offers an opportunity not available during a normal step -- a time when both feet are on the ground.

So: how to start a step? It looks like there are three available tools:

- 1) Shifting the center of mass using both legs, by moving the hips around.

2) Pushing off using the ankle joint

3) Pushing off using the knees

Once Bing is fully reassembled, this will be my focus.

bigger: http://happyrobots.com/badfeet.jpg

So I decided to make a spacer for the middle of the foot which would get screwed on through the four middle screws. The bottom plate is then securely fastened to that plate, in such a way that a little bit of pressure is put on all four sensors at all times. This reduces the range of the sensors and in other ways decreases their accuracy, but for rubustness it's worth it.

bigger: http://happyrobots.com/goodfeet.jpg

For driving Bing around, I plan to use some sort of keypad to select actions, and a 6 degree of freedom input device called a "Space Navigator" for general directional input. It's a pretty nifty little device.

bigger: http://happyrobots.com/snav.jpg

If you're curious, check it out at http://www.3dconnexion.com/

I have been tuning a parameterized set of "neutral poses", which are a reduced-dimensionality set of stable standing poses. The dimensions are:

- 1: Foot angle. Both feet have the same outward angle.

2: Foot spread. Both feet are spread horizontally by the same amount

3: Foot forward/back. One foot forward, one foot back, by the same amount

4: Height, or "crouchiness" (knee bending)

I attached those dimensions to four inputs on the Space Navigator so I can play with the different poses. Here's a video of the current result with bing upside down so the foot positions can be clearly seen. It's not quite perfect yet but getting close (the camera angle and tilt makes it look a little worse than it actually is):

phpBB [media]

Bigger: http://happyrobots.com/bing2.wmv

Now, the next step is another parameterized simplification -- starting with any one of these neutral poses, change the pose so that it is still stable and the feet stay in the same position. I want the degrees of freedom to be the location of robot zero along a line connecting the foot centers (which shifts weight from one foot to another), the angle of the torso, so the torso can "Twist", and the "crouchiness". I'm working on the math but it's not finished yet.

Just about three months to RoboGames!

phpBB [media]

bigger: http://happyrobots.com/bing3.wmv

Things are far enough along now that I can start to think about the preliminaries of walking, which means programming some simple shifting and pushing motions and studying the results on my graphs and in the bot's behavior.

Now is when things start to get difficult!

Yes, the current stuff is all based around IK calculations for the leg. In a coordinate system centered on the hip rotation axis, I can specify a desired X and Y location for the foot center, a rotation angle for the foot, and a leg length. Then the joint angles are computed. A constraint for this purpose is that the foot should be parallel to the torso. A further constraint that makes the calculation go smoothly and provides a unique solution is that the line segment connecting the two knee joints is parallel to the line segment connecting the hip and ankle. That constraint turned all the geometry into nice right triangles and from there Pythagoras and simple trigonometry provided the answers.

Given that IK calculation for each leg, the three degrees of freedom illustrated in the video are simple geometric transformations of the foot positions, which then get changed to the leg-centric coordinate system and then the IK calculation gets run.

I skipped one step in that description -- I have another function that takes the foot X, Y, and angle, and returns a range of valid Z height values. Then the valid ranges for both legs are intersected to get the range for "crouchiness" given the other parameters. This cuts down the number of cases where the IK cannot find a solution.

Whew. Kind of a lot of effort just to wiggle around a bit but it's nice that it's completely flexible.