From 143e23360d88188f709799f57f79bcc6196b47b3 Mon Sep 17 00:00:00 2001 From: Lars H Date: Sat, 2 Dec 2017 13:21:05 +0100 Subject: [PATCH] updated --- Hippie.cpp | 166 +++++++++++++++++++++++++++++++++++++++++++++++------ Hippie.h | 23 ++++---- 2 files changed, 160 insertions(+), 29 deletions(-) diff --git a/Hippie.cpp b/Hippie.cpp index 82900a9..919bea1 100644 --- a/Hippie.cpp +++ b/Hippie.cpp @@ -146,12 +146,22 @@ void Hippie::setRestState(bool state){ //--------------------------------------------------------- void Hippie::jump(float steps, int T){ - int up[]={90,90,150,30}; + int up[]={90,90,165,15}; _moveServos(T,up); int down[]={90,90,90,90}; _moveServos(T,down); } +//--------------------------------------------------------- +//-- Hippie Test Positions (bring feets and hips in certain position) +//--------------------------------------------------------- +void Hippie::test_pos(){ + + int left_feet_up[4]={90,0,90,30}; //watch from view of robot: [3] = left leg ... by + value: turn right + _moveServos(1000,left_feet_up); // [4] = right leg ... by + value: right side up + +} + //--------------------------------------------------------- //-- Hippie gait: Walking (forward or backward) @@ -169,9 +179,11 @@ void Hippie::walk(float steps, int T, int dir){ //-- -90 : Walk forward //-- 90 : Walk backward //-- Feet servos also have the same offset (for tiptoe a little bit) - int A[4]= {30, 30, 20, 20}; - int O[4] = {0, 0, 4, -4}; + int A[4]= {30, 30, 40, 40}; //20 + int O[4] = {0, 0, 4, 30}; //-4 double phase_diff[4] = {0, 0, DEG2RAD(dir * -90), DEG2RAD(dir * -90)}; + + if ( dir == -1) { double phase_diff[4] = {0, 0, DEG2RAD(dir * 90), DEG2RAD(dir * 90)}; } //-- Let's oscillate the servos! _execute(A, O, T, phase_diff, steps); @@ -193,16 +205,17 @@ void Hippie::turn(float steps, int T, int dir){ //-- the right leg are bigger than the left. So, the robot describes an //-- left arc int A[4]= {30, 30, 20, 20}; - int O[4] = {0, 0, 4, -4}; + int O[4] = {0, 0, 4, 30}; double phase_diff[4] = {0, 0, DEG2RAD(-90), DEG2RAD(-90)}; if (dir == LEFT) { - A[0] = 30; //-- Left hip servo + A[0] = 50; //-- Left hip servo A[1] = 10; //-- Right hip servo } else { A[0] = 10; - A[1] = 30; + A[1] = 50; + A[2] = 40; } //-- Let's oscillate the servos! @@ -221,7 +234,7 @@ void Hippie::bend (int steps, int T, int dir){ //Parameters of all the movements. Default: Left bend int bend1[4]={90, 90, 62, 35}; - int bend2[4]={90, 90, 62, 105}; + int bend2[4]={90, 90, 62, 105+60}; int homes[4]={90, 90, 90, 90}; //Time of one bend, constrained in order to avoid movements too fast. @@ -250,6 +263,121 @@ void Hippie::bend (int steps, int T, int dir){ } +//-------------------------------------------------------- +//-- New Walk Move +//-- number of steps +//-- T: Period of one steps +//-- dir: direction of movement +//-------------------------------------------------------- +void Hippie::new_walk(int dir, float steps, int T){ + if(dir==1){ + // Positions of walking + int Pos_A[4] = {90,90,180, 90}; + int Pos_B[4] = {90,90,180, 180}; + int Pos_C[4] = {90,45,90, 180}; + int Pos_D[4] = {45,45,90,90}; + + int Pos_E[4] = {45,45,30,30}; + int Pos_F[4] = {150,150,30,90}; + int Pos_G[4] = {150,150,90,90}; + + // run movements + for (int i=0;i