Important changes to repositories hosted on mbed.com
Mbed hosted mercurial repositories are deprecated and are due to be permanently deleted in July 2026.
To keep a copy of this software download the repository Zip archive or clone locally using Mercurial.
It is also possible to export all your personal repositories from the account settings page.
Fork of InverseKinematics2 by
Revision 0:fdc9474c08b9, committed 2011-01-28
- Comitter:
- ms523
- Date:
- Fri Jan 28 19:45:20 2011 +0000
- Commit message:
- First test of a robotic leg
Changed in this revision
diff -r 000000000000 -r fdc9474c08b9 AX12.lib --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/AX12.lib Fri Jan 28 19:45:20 2011 +0000 @@ -0,0 +1,1 @@ +http://mbed.org/users/chris/code/AX12/#ced71d1b2558
diff -r 000000000000 -r fdc9474c08b9 GetAngles.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/GetAngles.cpp Fri Jan 28 19:45:20 2011 +0000 @@ -0,0 +1,32 @@ +#include "ServoAngles.h" + +LegAngles GetAngles(int X, int Y) { +// Begin by working out L + float L = (X*X) + (Y*Y); + L = sqrt(L); + +// Work out the Knee angle + float Knee = (FEMUR*FEMUR)+(TIBIA*TIBIA)-(L*L); + Knee = Knee / (2*FEMUR*TIBIA); + Knee = acos(Knee); + +// Work out Alpha + float Alpha = (FEMUR*FEMUR)+(L*L)-(TIBIA*TIBIA); + Alpha = Alpha / (2*FEMUR*L); + Alpha = acos(Alpha); + +// Work out Beta + float Beta = (float) X/(float) Y; + Beta = atan(Beta); + +// Finally work out the Hip angle + float Hip = PI - Alpha - Beta; + +// Convert the angles to degrees... + LegAngles Angles; + Angles.Knee = Knee * 180 / PI - 30; + Angles.Hip = 360 - (Hip * 180 / PI) - 30; + +// Return the hip and knee angles... + return(Angles); +} \ No newline at end of file
diff -r 000000000000 -r fdc9474c08b9 Globals.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/Globals.cpp Fri Jan 28 19:45:20 2011 +0000 @@ -0,0 +1,6 @@ +#include "ServoAngles.h" + +/************************************************************************** +Global variables +**************************************************************************/ +Serial PC(USBTX, USBRX); \ No newline at end of file
diff -r 000000000000 -r fdc9474c08b9 ServoAngles.h --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/ServoAngles.h Fri Jan 28 19:45:20 2011 +0000 @@ -0,0 +1,27 @@ +#include "mbed.h" +#include "AX12.h" + +/************************************************************************** +Global Defines +**************************************************************************/ +#define FEMUR 100 //Femer length +#define TIBIA 140 //Tibia length +#define PI 3.1415926 + +/************************************************************************** +Global structures +**************************************************************************/ +struct LegAngles { + float Hip; + float Knee; +}; + +/************************************************************************** +Function Declarations +**************************************************************************/ +LegAngles GetAngles(int X, int Y); + +/************************************************************************** +Global variables +**************************************************************************/ +extern Serial PC; \ No newline at end of file
diff -r 000000000000 -r fdc9474c08b9 main.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/main.cpp Fri Jan 28 19:45:20 2011 +0000 @@ -0,0 +1,32 @@ +#include "ServoAngles.h" + +int main() { + AX12 AX12_Hip(p9, p10, 1), AX12_Knee(p9, p10, 2); + Timer t; + float Time; + int x,y; // x & y positions for the foot + LegAngles Answer; // Struct containing joint angles + + t.start(); + while (1) { + Time = t.read(); + if (Time>=2){ // Work on a 4 second cycle + t.reset(); + Time = 0; // Reset Time + } + if (Time<=1) { // Leg on it's forward stroke + x = (200 * Time) - 100; + y = 200; + } else { // Leg on it's backward stroke + x = (200 * (2 - Time)) - 100; + y = 195; + } + Answer = GetAngles(x,y); // Work out the joint angles + + // Print the answers to terminal to debug + PC.printf("\n\rX = %d, Hip = %.2f, Knee = %.2f",x,Answer.Hip,Answer.Knee); + + AX12_Hip.SetGoal(Answer.Hip); + AX12_Knee.SetGoal(Answer.Knee); + } +} \ No newline at end of file
diff -r 000000000000 -r fdc9474c08b9 mbed.bld --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/mbed.bld Fri Jan 28 19:45:20 2011 +0000 @@ -0,0 +1,1 @@ +http://mbed.org/users/mbed_official/code/mbed/builds/9a9732ce53a1