Instructions: drag the yellow, green or magenta points to modify geometry 
             for optimization of design goals.  Press 'R' to reset geometry.
             
            Design Goals:
            
 
            - 
            Locus at point H should be close to a vertical line
            
- Linkage points ABC should be inline when leg is down (so force due to gravity is not transferred to motor)
            
- Point C should be vertically above same point when leg is up & down
            
            The leg linkage used on 
            Ziggy is key to the operation of the robot.  Using linkages has allowed me to 
            convert the torque from the servos into vertical lift without the need for gears 
            or belts.  This is an important design feature for me as Ziggy is designed to go
            out to the Black Rock Desert for Burning Man, and it's verrrrry dusty out there... 
            The servos are sealed with o-rings, and the leg joints are pretty well sealed so 
            dust has not been a problem.
            
            I initially prototyped the linkage using Lego Technics, which is extremely fast 
            and easy to use.  When I had an approximate design, I transfered the geometry to 
            the JavaSketchpad applet.  This applet then allowed me to tweak the lengths of 
            the various linkage bars until I had the best compromise between design goals. 
            Go ahead and try it - you can drag any of the green or yellow points above and 
            see what happens...
            
            Designing the linkage so that points ABC are inline when the leg is down gives 
            me two advantages: firstly, it maximises the force downwards at H as the leg 
            reaches its lowest point (think of straightening your arm against a weight). 
            Secondly, it means that when the leg is down, no force is transferred to the 
            servo, allowing Ziggy to stand on only 3 legs without the servos even on.  This 
            is a particularly important design feature, since the servos can burn out if 
            they are placed under extended load.  In addition, I placed a mechanical stop 
            just over centre which prevents the leg from over extending and allows solid 
            parking.
            
            The other two main design goals were to keep point C vertically above the same 
            axis when the leg is up/down, so that it can be coupled to the servo using a 
            universal linkage.  Also, the leg locus at H should be as close to vertical as 
            possible to prevent loss of force due to sideways dragging.