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.
Diff: Walk_Forward.cpp
- Revision:
- 0:0965dacb3caf
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/Walk_Forward.cpp Sun Aug 21 08:25:00 2011 +0000
@@ -0,0 +1,61 @@
+#include "ERIC.h"
+
+#define Z_OFFSET 150 // Offset for Z-axis
+#define RATE 2 // Time in seconds to complete one step
+#define ELLIPSE_HGT 20 // b constant for ellipse calculation
+
+//Serial pc(USBTX,USBRX); // To communicate with TeraTerm
+
+void Walk_Forward(int stride) {
+ Timer t; // Used to control the ellipse
+
+ float RHS_Y, RHS_Z; // Variables for the right leg
+ float LHS_Y, LHS_Z; // Variables for the left leg
+ float a = stride / 2; // The a constant for ellipse calculation
+ float angle = 360 / RATE; // The constant to make algorithm calculate for full 360°
+ angle = angle * PI / 180; // Convert into radians
+ float time = 0; // Variable to hold the timer value.
+
+ // Create variables to hold the joint angles & current set points
+ Joint_Angles LHS, RHS; // Variables for joint angles
+
+ t.start(); // Start the timer
+
+ while (t < RATE) {
+ time = t.read(); // Read the timer
+
+ // For the right leg...
+ RHS_Y = sin(time*angle); // Calculate the Y position
+ RHS_Y = a * RHS_Y;
+ RHS_Z = cos(time*angle); // Calculate the Z position and correct for Z-axis offset
+ RHS_Z = ELLIPSE_HGT * RHS_Z;
+ RHS_Z = RHS_Z - Z_OFFSET;
+
+ // For the left leg...
+ LHS_Y = sin((time+RATE/2)*angle); // Calculate the Y position
+ LHS_Y = a * LHS_Y;
+ LHS_Z = cos((time+RATE/2)*angle); // Calculate the Z position and correct for Z-axis offset
+ LHS_Z = ELLIPSE_HGT * LHS_Z;
+ LHS_Z = LHS_Z - Z_OFFSET;
+
+ // Calculate the required joint angles...
+ RHS = IK_Engine(70,RHS_Y,RHS_Z);
+ LHS = IK_Engine(-70,LHS_Y,LHS_Z);
+
+ // Translate the joint angles into Servo Angles
+ RHS.lateral = 165 - RHS.lateral;
+ RHS.hip = 340 - RHS.hip;
+ RHS.knee = 320 - RHS.knee;
+ LHS.lateral = LHS.lateral + 135;
+ LHS.hip = LHS.hip - 40;
+ LHS.knee = LHS.knee - 20;
+
+ // And finally move the leg to the current set point
+ Right_Hip_Lateral.SetGoal((int)RHS.lateral);
+ Right_Hip.SetGoal((int)RHS.hip);
+ Right_Knee.SetGoal((int)RHS.knee);
+ Left_Hip_Lateral.SetGoal((int)LHS.lateral);
+ Left_Hip.SetGoal((int)LHS.hip);
+ Left_Knee.SetGoal((int)LHS.knee);
+ }
+}