void inclinar(){
int braco = 300;
int a = 0;
int ctrl;

espera_mov();
//-------conf veloc 40 ---------------------------------------------------------
for(int i = 1;i<23;i++)
       dxl_write_word(i, MOVING_SPEED, 40);

//for (ctrl = 0; ctrl<3; ctrl++){
//------ inclina robo para o lado esquerdo ------------------------------------
if (a == 0){
//------conf veloc para os braços ---------------------------------------------
dxl_write_word(4, MOVING_SPEED, 200);
dxl_write_word(7, MOVING_SPEED, 200);
//------ inclina robo para o lado esquerdo ------------------------------------
dxl_write_word(13, P_GOAL_POSITION_L, 498);
dxl_write_word(19, P_GOAL_POSITION_L, 512);
dxl_write_word(15, P_GOAL_POSITION_L, 498);
dxl_write_word(21, P_GOAL_POSITION_L, 508);
espera_mov();
dxl_write_word(13, P_GOAL_POSITION_L, 498-inclina);
dxl_write_word(19, P_GOAL_POSITION_L, 512-inclina);
dxl_write_word(15, P_GOAL_POSITION_L, 498-inclina);
dxl_write_word(21, P_GOAL_POSITION_L, 508-inclina);
dxl_write_word(4, P_GOAL_POSITION_L, 274+braco);
dxl_write_word(7, P_GOAL_POSITION_L, 675);
espera_mov();
usleep(500000);
a=1;
}
//------ inclina robo para o lado direito ------------------------------------
if (a == 1){
//------conf veloc para os braços ---------------------------------------------
dxl_write_word(4, MOVING_SPEED, 200);
dxl_write_word(7, MOVING_SPEED, 200);
//------ inclina robo para o lado direito ------------------------------------
dxl_write_word(13, P_GOAL_POSITION_L, 498);
dxl_write_word(19, P_GOAL_POSITION_L, 512);
dxl_write_word(15, P_GOAL_POSITION_L, 498);
dxl_write_word(21, P_GOAL_POSITION_L, 508);
espera_mov();
dxl_write_word(13, P_GOAL_POSITION_L, 498+inclina);
dxl_write_word(19, P_GOAL_POSITION_L, 512+inclina);
dxl_write_word(15, P_GOAL_POSITION_L, 498+inclina);
dxl_write_word(21, P_GOAL_POSITION_L, 508+inclina);
dxl_write_word(4, P_GOAL_POSITION_L, 274);
dxl_write_word(7, P_GOAL_POSITION_L, 675-braco);
espera_mov();
usleep(500000);
a=0;
}
}
//===================================================================================
//-----------------------------------------------------------------------------------
void andar_rapido(int passo)
{

#define ALTURA_PE 0.03
#define LARGURA_PASSO 0.042 // Largura do passo
#define MEIO_PASSO 0.021    // MEIO_PASSO = LARGURA_PASSO/2
#define PASSO_3DE4 0.0315    // PASSO_3DE4 = LARGURA_PASSO*(3/4)
#define PASSO_1DE4 0.0105    // PASSO_1DE4 = LARGURA_PASSO*(1/4)

//dxl_write_word(3, MOVING_SPEED, 270);
//dxl_write_word(3, P_GOAL_POSITION_L, 838);

//dxl_write_word(6, MOVING_SPEED, 270);
//dxl_write_word(6, P_GOAL_POSITION_L, 178);

espera_mov(); // Aguarda termino de alguma atividade

inverse_kinematic_right_leg(0, 0.008, 0, 500); // abaixa o corpo
inverse_kinematic_left_leg(0, 0.009, 0, 500); //abaixa o corpo
usleep(100000);

inclina_plano(LEG_RIGHT, 54, 45, 0); // inclina para direita
inclina_plano(LEG_LEFT, 56, 45, 0);  // inclina para direita
usleep(100000);
inverse_kinematic_right_leg(0, 0.008, 0, 500); // abaixa o corpo
inverse_kinematic_left_leg(0, 0.010, 0, 600); //abaixa o corpo
usleep(80000);
inverse_kinematic_right_leg(0, 0.008, 0, 200); // abaixa o corpo
inverse_kinematic_left_leg(0, 0.012, 0, 300); //abaixa o corpo
usleep(70000);
//espera_mov_legs();
inclina_plano(LEG_RIGHT, 70, 50, 0); // inclina para direita - 45
inclina_plano(LEG_LEFT, 64, 45, 0); // 40

// Levanta pé curva de aceleração e desaceleração -----
inverse_kinematic_left_leg(0, ALTURA_PE-0.02, 0, 300); // levanta pé esquerdo
usleep(54000);
inverse_kinematic_left_leg(0, ALTURA_PE-0.01, 0, 700); // levanta pé esquerdo
usleep(50000);
inverse_kinematic_left_leg(PASSO_1DE4, ALTURA_PE, 0, 400); // levanta pé esquerdo
usleep(65000);
//-------------------------------------------

//-------------------------------------------------------------
// Compensação pelo torque do pé direito
avoid_swing_right();
//-------------------------------------------------------------


//for(int x=0; x<2; x++)
while(DECISION_ACTION_A == 1)
{

// avança o pé esquerdo -------------------------------
//inclina_plano(LEG_LEFT, 60, 30, 0);
inclina_plano(LEG_LEFT, 96, 600, -15);
inverse_kinematic_left_leg(PASSO_3DE4, ALTURA_PE, 0, 400); // avança pé esquerdo
usleep(35000);
inverse_kinematic_left_leg(LARGURA_PASSO, ALTURA_PE+.01, -6, 700); // avança pé esquerdo
usleep(55000);
inverse_kinematic_left_leg(LARGURA_PASSO, ALTURA_PE, -4, 300); // avança pé esquerdo
//espera_mov();
usleep(70000);
inclina_plano(LEG_LEFT, 96, 65, -20);

//-----------------------------------------------------
//espera_mov();
//---- abaixa pé --------------------------------------
inclina_plano(LEG_RIGHT, 55, 45, 5);
inverse_kinematic_right_leg(0, 0.008, 1, 300); // movimenta corpo pra frente
inverse_kinematic_left_leg(LARGURA_PASSO, 0.025, 2, 350); //abaixa pé esquerdo
usleep(30000);
inverse_kinematic_left_leg(LARGURA_PASSO, 0.025, 2, 600); //abaixa pé esquerdo
usleep(50000);
inverse_kinematic_right_leg(0, 0.007, 1, 300); // movimenta corpo pra frente
inverse_kinematic_left_leg(LARGURA_PASSO, 0.02, 2, 200); //abaixa pé esquerdo
//espera_mov();
inclina_plano(LEG_RIGHT, 50, 45, 5);
inclina_plano(LEG_LEFT, 80, 60, -20);
usleep(60000);
//-----------------------------------------------------
inclina_plano(LEG_RIGHT, 45, 100, 0);
inclina_plano(LEG_LEFT, 65, 60, 0);
inverse_kinematic_left_leg(MEIO_PASSO, 0.014, 0, 200);
inverse_kinematic_right_leg(-MEIO_PASSO, 0.008, -1, 100);

//---- volta da inclinação -----------------------------
inclina_plano(LEG_RIGHT, 0, 70, 0); // volta da inclinação ficando reto
inclina_plano(LEG_LEFT, -20, 70, 0);  // volta da inclinação ficando reto
usleep(10000);
inclina_plano(LEG_RIGHT, 0, 100, 0); // volta da inclinação ficando reto
inclina_plano(LEG_LEFT, -10, 100, 0);  // volta da inclinação ficando reto
usleep(35000);
inverse_kinematic_left_leg(MEIO_PASSO, 0.010, 0, 100);
inclina_plano(LEG_RIGHT, 0, 50, 0); // volta da inclinação ficando reto
inclina_plano(LEG_LEFT, 0, 50, 0);  // volta da inclinação ficando reto
espera_mov_legs();
//------------------------------------------------------
//usleep(100000);

inclina_plano(LEG_RIGHT, -65, 55*1.2, 0); // inclina para esquerda // **editar aqui para mexer a inclinacao do andar**
inclina_plano(LEG_LEFT, -45, 38*1.2, 0);  // inclina para esquerda
inverse_kinematic_left_leg(PASSO_1DE4, 0.008, 3, 100*0.4);
inverse_kinematic_right_leg(-PASSO_3DE4, 0.0095, 2, 120*0.4);
espera_mov_legs();
//usleep(100000);

inclina_plano(LEG_LEFT, -51, 40, -5);
inclina_plano(LEG_RIGHT, -62, 40, 0);
inverse_kinematic_left_leg(0, 0.01, 2, 100);

// curva de aceleração e desaceleração levantar pé--------
inverse_kinematic_right_leg(-LARGURA_PASSO, ALTURA_PE, 0, 300); //levanta pé direito
usleep(50000);
inverse_kinematic_right_leg(-LARGURA_PASSO, ALTURA_PE, 0, 600); //levanta pé direito
usleep(50000);
inverse_kinematic_right_leg(-LARGURA_PASSO+.02, ALTURA_PE, 0, 400); //levanta pé direito
//espera_mov_legs();
usleep(95000);

//--------------------------------------------------------
inverse_kinematic_left_leg(0, 0.008, 2, 100); // volta com o corpo um pouco pra frente
inclina_plano(LEG_RIGHT, -90, 30, 20);//incluido posteriormente para nao raspar a perna direita----------------------=========<<
//---- avança pé direito --------------------------------
inverse_kinematic_right_leg(LARGURA_PASSO, ALTURA_PE+.005, 0, 400); // avança o pé direito
usleep(35000);
inverse_kinematic_right_leg(LARGURA_PASSO, ALTURA_PE+.005, 0, 700); // avança o pé direito
usleep(35000);
inclina_plano(LEG_RIGHT, -80, 40, 20);
inverse_kinematic_right_leg(LARGURA_PASSO, ALTURA_PE-0.005, 0, 500); // avança o pé direito
//espera_mov();
usleep(70000);
//-------------------------------------------------------

inclina_plano(LEG_RIGHT, -45, 60, -10);
inclina_plano(LEG_LEFT, -38, 60, 0);

//----- abaixa pé no chão -------------------------
inverse_kinematic_left_leg(0, 0.008, 4, 80);//movimenta um pouco com o corpo pra frente
inverse_kinematic_right_leg(LARGURA_PASSO, 0.016, -5, 150); // abaixa pé sem chutar o chão
usleep(30000);
inverse_kinematic_right_leg(LARGURA_PASSO, 0.016, -5, 300); // abaixa pé sem chutar o chão
usleep(40000);
inverse_kinematic_right_leg(LARGURA_PASSO, 0.016, -5, 80); // abaixa pé sem chutar o chão
espera_mov_legs();
//-------------------------------------------------

usleep(60000);
inverse_kinematic_right_leg(MEIO_PASSO, 0.012, 0, 80);
inverse_kinematic_left_leg(-MEIO_PASSO, 0.008, 0, 80);
//inclina_plano(LEG_LEFT, -36, 60, 0);

// volta da inclinação -------------------------------
inclina_plano(LEG_RIGHT, 0, 70, 0);//volta da inclinação ficando reto
inclina_plano(LEG_LEFT, 0, 60, 0); //volta da inclinação ficando reto
usleep(10000);
inclina_plano(LEG_RIGHT, 0, 200, 0);//volta da inclinação ficando reto
inclina_plano(LEG_LEFT, 0, 170, 0); //volta da inclinação ficando reto
usleep(32000);
inclina_plano(LEG_RIGHT, 0, 50, 0);//volta da inclinação ficando reto
inclina_plano(LEG_LEFT, 0, 43, 0); //volta da inclinação ficando reto
espera_mov_legs();
//----------------------------------------------------

inclina_plano(LEG_RIGHT, 45, 40, 0); //inclina para a direita
inclina_plano(LEG_LEFT, 60, 40, 0);  //inclina para direita
inverse_kinematic_right_leg(PASSO_1DE4, 0.008, 0, 200); // abaixa o corpo
inverse_kinematic_left_leg(-PASSO_3DE4, 0.009, 0, 200); //abaixa o corpo
espera_mov_legs();

inclina_plano(LEG_RIGHT, 65, 40, 0); //inclina para a direita
inclina_plano(LEG_LEFT, 64, 40, 10);
inverse_kinematic_left_leg(-PASSO_3DE4, 0.013, 2, 100);
// curva de aceleração e desaceleração levantar pé--------
inverse_kinematic_left_leg(-LARGURA_PASSO, ALTURA_PE-0.01, 0, 300); //levanta pé esquerdo
usleep(50000);
inverse_kinematic_left_leg(-LARGURA_PASSO, ALTURA_PE-0.01, 0, 500); //levanta pé esquerdo
usleep(50000);
inverse_kinematic_left_leg(-LARGURA_PASSO+.02, ALTURA_PE-0.01, 0, 400); //levanta pé esquerdo
//espera_mov();
usleep(65000);
//--------------------------------------------------------------------------------------------------------------------
// avança o pé esquerdo -------------------------------
//inclina_plano(LEG_LEFT, 60, 30, 0);
inclina_plano(LEG_RIGHT, 70, 40, 0); //inclina para a direita
inclina_plano(LEG_LEFT, 64, 40, 10);
inverse_kinematic_right_leg(PASSO_1DE4, 0.008, 2, 200);
usleep(65000);
}

inclina_plano(LEG_RIGHT, 60, 40, 0);
inverse_kinematic_right_leg(PASSO_1DE4, 0.008, 2, 200);
inverse_kinematic_left_leg(0, ALTURA_PE-0.005, 0, 300);
espera_mov_legs();
inverse_kinematic_right_leg(0, 0.008, 0, 100);
inverse_kinematic_left_leg(0, 0.015, 0, 100);
espera_mov();
inclina_plano(LEG_RIGHT, 0, 65, 0);
inclina_plano(LEG_LEFT, 0, 65, 0);
inverse_kinematic_left_leg(0, 0.009, 0, 100);
espera_mov();
inverse_kinematic_left_leg(0, 0.008, 0, 100);
usleep(50000);

inverse_kinematic_right_leg(0, 0.008, 0, 300);
inverse_kinematic_left_leg(0, 0.008, 0, 300); /* teste*/


}
//===================================================================================
//-----------------------------------------------------------------------------------
void andar_lento()
{

#define ALTURA_PE 0.03
#define LARGURA_PASSO 0.042 // Largura do passo

espera_mov(); // Aguarda termino de alguma atividade

inverse_kinematic_right_leg(0, 0.008, 0, 500); // abaixa o corpo
inverse_kinematic_left_leg(0, 0.009, 0, 500); //abaixa o corpo
usleep(100000);

inclina_plano(LEG_RIGHT, 54, 45, 0); // inclina para direita
inclina_plano(LEG_LEFT, 56, 45, 0);  // inclina para direita
usleep(100000);
inverse_kinematic_right_leg(0, 0.008, 0, 500); // abaixa o corpo
inverse_kinematic_left_leg(0, 0.010, 0, 600); //abaixa o corpo
usleep(80000);
inverse_kinematic_right_leg(0, 0.008, 0, 200); // abaixa o corpo
inverse_kinematic_left_leg(0, 0.012, 0, 300); //abaixa o corpo
usleep(70000);
inclina_plano(LEG_RIGHT, 70, 50, 0); // inclina para direita - 45
inclina_plano(LEG_LEFT, 64, 45, 0); // 40

// Levanta pé curva de aceleração e desaceleração -----
inverse_kinematic_left_leg(0, ALTURA_PE-0.02, 0, 300); // levanta pé esquerdo
usleep(54000);
inverse_kinematic_left_leg(0, ALTURA_PE-0.01, 0, 700); // levanta pé esquerdo
usleep(50000);
inverse_kinematic_left_leg(PASSO_1DE4, ALTURA_PE, 0, 400); // levanta pé esquerdo
usleep(65000);
//-------------------------------------------

//-------------------------------------------------------------
// Compensação pelo torque do pé direito
//avoid_swing_right();
//-------------------------------------------------------------


//for(int x=0; x<2; x++)
//while(DECISION_ACTION_A == 1)
//{

// avança o pé esquerdo -------------------------------
//inclina_plano(LEG_LEFT, 60, 30, 0);
inclina_plano(LEG_LEFT, 96, 600, -15);
inverse_kinematic_left_leg(PASSO_3DE4, ALTURA_PE, 0, 400); // avança pé esquerdo
usleep(35000);
inverse_kinematic_left_leg(LARGURA_PASSO, ALTURA_PE+.01, -6, 700); // avança pé esquerdo
usleep(55000);
inverse_kinematic_left_leg(LARGURA_PASSO, ALTURA_PE, -4, 400); // avança pé esquerdo
//espera_mov();
usleep(70000);
inclina_plano(LEG_LEFT, 96, 65, -20);

//-----------------------------------------------------
//espera_mov();
//---- abaixa pé --------------------------------------
inclina_plano(LEG_RIGHT, 55, 45, 5);
inverse_kinematic_right_leg(0, 0.008, 1, 300); // movimenta corpo pra frente
inverse_kinematic_left_leg(LARGURA_PASSO, 0.025, 2, 400); //abaixa pé esquerdo
usleep(30000);
inverse_kinematic_left_leg(LARGURA_PASSO, 0.025, 2, 600); //abaixa pé esquerdo
usleep(50000);
inverse_kinematic_right_leg(0, 0.007, 1, 300); // movimenta corpo pra frente
inverse_kinematic_left_leg(LARGURA_PASSO, 0.02, 2, 200); //abaixa pé esquerdo
//espera_mov();
inclina_plano(LEG_RIGHT, 50, 45, 5);
inclina_plano(LEG_LEFT, 80, 60, -20);
usleep(60000);

//-----------------------------------------------------
inclina_plano(LEG_RIGHT, 45, 100, 0);
inclina_plano(LEG_LEFT, 65, 60, 0);
inverse_kinematic_left_leg(MEIO_PASSO, 0.014, 0, 200);
inverse_kinematic_right_leg(-MEIO_PASSO, 0.008, -1, 100);

//---- volta da inclinação -----------------------------
inclina_plano(LEG_RIGHT, 0, 70, 0); // volta da inclinação ficando reto
inclina_plano(LEG_LEFT, -20, 70, 0);  // volta da inclinação ficando reto
usleep(10000);
inclina_plano(LEG_RIGHT, 0, 100, 0); // volta da inclinação ficando reto
inclina_plano(LEG_LEFT, -10, 100, 0);  // volta da inclinação ficando reto
usleep(35000);
inverse_kinematic_left_leg(0, 0.010, 0, 100);
inclina_plano(LEG_RIGHT, 0, 50, 0); // volta da inclinação ficando reto
inclina_plano(LEG_LEFT, 0, 50, 0);  // volta da inclinação ficando reto
espera_mov_legs();

//------------------------------------------------------
//usleep(100000);

inclina_plano(LEG_RIGHT, -65, 55*1.5, 0); // inclina para esquerda // **editar aqui para mexer a inclinacao do andar**
inclina_plano(LEG_LEFT, -45, 38*1.5, 0);  // inclina para esquerda
inverse_kinematic_left_leg(PASSO_1DE4, 0.008, 3, 100*0.5);
inverse_kinematic_right_leg(-PASSO_3DE4, 0.0095, 2, 120*0.5);
espera_mov_legs();
//usleep(100000);

inclina_plano(LEG_LEFT, -51, 50, -5);
inclina_plano(LEG_RIGHT, -62, 50, 0);
inverse_kinematic_left_leg(0, 0.01, 2, 120);

// curva de aceleração e desaceleração levantar pé--------
inverse_kinematic_right_leg(-LARGURA_PASSO, ALTURA_PE, 0, 300); //levanta pé direito
usleep(50000);
inverse_kinematic_right_leg(-LARGURA_PASSO-0.02, ALTURA_PE, 0, 700); //levanta pé direito
usleep(50000);
inverse_kinematic_right_leg(0, ALTURA_PE, 0, 300); //levanta pé direito
//espera_mov_legs();
usleep(100000);

inverse_kinematic_right_leg(0, 0.012, 0, 120);
inverse_kinematic_left_leg(0, 0.008, 0, 120);
usleep(70000);

// volta da inclinação -------------------------------
inclina_plano(LEG_RIGHT, 0, 70*1.2, 0);//volta da inclinação ficando reto
inclina_plano(LEG_LEFT, 0, 60*1.2, 0); //volta da inclinação ficando reto
usleep(10000);
inclina_plano(LEG_RIGHT, 0, 200, 0);//volta da inclinação ficando reto
inclina_plano(LEG_LEFT, 0, 170, 0); //volta da inclinação ficando reto
usleep(32000);
inclina_plano(LEG_RIGHT, 0, 50, 0);//volta da inclinação ficando reto
inclina_plano(LEG_LEFT, 0, 43, 0); //volta da inclinação ficando reto
espera_mov_legs();

inverse_kinematic_right_leg(0, 0.008, 0, 300);
inverse_kinematic_left_leg(0, 0.008, 0, 300); /* teste*/

}
void andar()
{
robo_ereto();
espera_mov();

inclina_plano(LEG_RIGHT, 50, 40, 0); // inclina para direita
inclina_plano(LEG_LEFT, 50, 40, 0);  // inclina para direita
espera_mov();
inclina_plano(LEG_LEFT, 56, 40, 0);
inverse_kinematic_left_leg(0, 0.02, 0, 300); // levanta pé esquerdo
espera_mov();
for(int x=0; x<3; x++)
{
inverse_kinematic_left_leg(0.02, 0.02, 0, 100); // avança pé esquerdo
espera_mov();
inverse_kinematic_right_leg(-0.01, 0.005, 0, 200); // moviemnta corpo pra frente
inverse_kinematic_left_leg(0.01, 0.006, 0, 200); //abaixa pé esquerdo
inclina_plano(LEG_RIGHT, 40, 60, 0);
inclina_plano(LEG_LEFT, 40, 60, 0);
espera_mov();
inverse_kinematic_left_leg(0.01, 0.005, 0, 300);
inclina_plano(LEG_RIGHT, 0, 40, 0); // volta da inclinação ficando reto
inclina_plano(LEG_LEFT, 0, 40, 0);  // volta da inclinação ficando reto
espera_mov();
sleep(1);
inclina_plano(LEG_RIGHT, -45, 40, 0); // inclina para esquerda
inclina_plano(LEG_LEFT, -48, 40, 0);  // inclina para esquerda
espera_mov();
inclina_plano(LEG_LEFT, -55, 40, 0);
inclina_plano(LEG_RIGHT, -58, 40, 0);
inverse_kinematic_left_leg(0, 0.005, 0, 100); // volta com o corpo um pouco pra frente
inverse_kinematic_right_leg(-0.01, 0.03, -10, 300); //levanta pé direito
espera_mov();
inverse_kinematic_right_leg(0.02, 0.03, -10, 100); // avança o pé direito
espera_mov();
inclina_plano(LEG_RIGHT, -40, 60, 0);
inclina_plano(LEG_LEFT, -40, 60, 0);
inverse_kinematic_right_leg(0.01, 0.01, -5, 100); // abaixa pé sem chutar o chão
inverse_kinematic_left_leg(-0.01, 0.005, 0, 100);//movimenta um pouco com o corpo pra frente
espera_mov();
inverse_kinematic_right_leg(0.01, 0.005, 0, 100);//abaixa pé direito
inclina_plano(LEG_RIGHT, 0, 40, 0);
inclina_plano(LEG_LEFT, 0, 40, 0);
espera_mov();
inclina_plano(LEG_RIGHT, 50, 40, 0); //inclina para a direita
inclina_plano(LEG_LEFT, 50, 40, 0);  //inclina para direita
espera_mov();
inclina_plano(LEG_LEFT, 56, 40, 0);
inverse_kinematic_left_leg(-0.01, 0.02, 0, 300); //levanta pé esquerdo
espera_mov();
}

inverse_kinematic_left_leg(0, 0.02, 0, 300);
espera_mov();
inverse_kinematic_right_leg(0, 0.005, 0, 100);
inverse_kinematic_left_leg(0, 0.006, 0, 100);
espera_mov();
inclina_plano(LEG_RIGHT, 0, 40, 0);
inclina_plano(LEG_LEFT, 0, 40, 0);
espera_mov();
inverse_kinematic_right_leg(0, 0, 0, 300);
inverse_kinematic_left_leg(0, 0, 0, 300);

}
//===================================================================================
//-----------------------------------------------------------------------------------
void andar_veloz(int passo)
{

#define ALTURA_PE_v 0.035
#define LARGURA_PASSO_v 0.07   // Largura do passo
#define MEIO_PASSO_v 0.035     // MEIO_PASSO_v = LARGURA_PASSO/2
#define PASSO_3DE4_v 0.0525    // PASSO_3DE4_v = LARGURA_PASSO*(3/4)
#define PASSO_1DE4_v 0.0175    // PASSO_1DE4_v = LARGURA_PASSO*(1/4)

espera_mov(); // Aguarda termino de alguma atividade

inverse_kinematic_right_leg(0, 0.008, 0, 500); // abaixa o corpo
inverse_kinematic_left_leg(0, 0.009, 0, 500); //abaixa o corpo
usleep(100000);

inclina_plano(LEG_RIGHT, 60, 45, 0); // inclina para direita
inclina_plano(LEG_LEFT, 64, 45, 0);  // inclina para direita
usleep(100000);
inverse_kinematic_right_leg(0, 0.008, 0, 500); // abaixa o corpo
inverse_kinematic_left_leg(0, 0.010, 0, 600); //abaixa o corpo
usleep(100000);
inverse_kinematic_right_leg(0, 0.008, 0, 200); // abaixa o corpo
inverse_kinematic_left_leg(0, 0.012, 0, 300); //abaixa o corpo
espera_mov_legs();
inclina_plano(LEG_RIGHT, 68, 50, 0); // inclina para direita - 45
inclina_plano(LEG_LEFT, 64, 45, 0); // 40

// Levanta pé curva de aceleração e desaceleração -----
inverse_kinematic_left_leg(0, ALTURA_PE_v-0.01, 0, 300); // levanta pé esquerdo
usleep(50000);
inverse_kinematic_left_leg(0, ALTURA_PE_v-0.005, 0, 600); // levanta pé esquerdo
usleep(40000);
inverse_kinematic_left_leg(PASSO_1DE4_v, ALTURA_PE_v-0.005, 0, 600); // levanta pé esquerdo
inclina_plano(LEG_RIGHT, 67, 40, 0); // inclina para direita
//espera_mov();
usleep(55000);
//-------------------------------------------


for(int x=0; x<2; x++)
{
// avança o pé esquerdo -------------------------------
inclina_plano(LEG_LEFT, 54, 30, 2);
inverse_kinematic_left_leg(PASSO_3DE4_v, ALTURA_PE_v, 0, 600); // avança pé esquerdo
usleep(35000);
inverse_kinematic_left_leg(LARGURA_PASSO_v, ALTURA_PE_v+.01, 7, 900); // avança pé esquerdo
usleep(35000);
inverse_kinematic_left_leg(LARGURA_PASSO_v, ALTURA_PE_v, 7, 500); // avança pé esquerdo
//espera_mov();
usleep(40000);

//-----------------------------------------------------
//espera_mov();
//---- abaixa pé --------------------------------------
inclina_plano(LEG_RIGHT, 50, 45, 5);
inclina_plano(LEG_LEFT, 52, 40, 5);
inverse_kinematic_right_leg(0, 0.008, 0, 80); // movimenta corpo pra frente
inverse_kinematic_left_leg(LARGURA_PASSO_v, 0.025, 5, 500); //abaixa pé esquerdo
usleep(30000);
inverse_kinematic_left_leg(LARGURA_PASSO_v, 0.02, -5, 800); //abaixa pé esquerdo
usleep(50000);
inverse_kinematic_left_leg(LARGURA_PASSO_v, 0.015, -5, 300); //abaixa pé esquerdo
//espera_mov();
usleep(40000);

//-----------------------------------------------------
inclina_plano(LEG_RIGHT, 45, 60, 0);
inclina_plano(LEG_LEFT, 50, 60, -10);
espera_mov();

//usleep(70000);
inverse_kinematic_left_leg(MEIO_PASSO_v, 0.01, 0, 100);
inverse_kinematic_right_leg(-MEIO_PASSO_v, 0.008, 2, 100);

//---- volta da inclinação -----------------------------
inclina_plano(LEG_RIGHT, 0, 60, 0); // volta da inclinação ficando reto
inclina_plano(LEG_LEFT, 0, 65, 0);  // volta da inclinação ficando reto
usleep(10000);
inclina_plano(LEG_RIGHT, 0, 150, 0); // volta da inclinação ficando reto
inclina_plano(LEG_LEFT, 0, 170, 0);  // volta da inclinação ficando reto
usleep(45000);
inclina_plano(LEG_RIGHT, 0, 50, 0); // volta da inclinação ficando reto
inclina_plano(LEG_LEFT, 0, 55, 0);  // volta da inclinação ficando reto
espera_mov();
//------------------------------------------------------
//usleep(100000);

inclina_plano(LEG_RIGHT, -50, 45, -10); // inclina para esquerda
inclina_plano(LEG_LEFT, -41, 45, 0);  // inclina para esquerda
inverse_kinematic_left_leg(PASSO_1DE4_v, 0.008, 5, 100); //==============================Ponto sensivel a queda =========
inverse_kinematic_right_leg(-PASSO_3DE4_v, 0.013, 0, 200); //==============================Ponto sensivel a queda =========
espera_mov_legs();

inclina_plano(LEG_LEFT, -50, 40, 0);
inclina_plano(LEG_RIGHT, -58, 40, -10);
inverse_kinematic_left_leg(0, 0.01, 4, 100);

// curva de aceleração e desaceleração levantar pé--------
inverse_kinematic_right_leg(-LARGURA_PASSO_v, ALTURA_PE_v, -5, 300); //levanta pé direito
usleep(50000);
inverse_kinematic_right_leg(-LARGURA_PASSO_v, ALTURA_PE_v, -7, 600); //levanta pé direito
usleep(50000);
inverse_kinematic_right_leg(-LARGURA_PASSO_v+.02, ALTURA_PE_v+.005, -7, 500); //levanta pé direito
//espera_mov();
usleep(60000);
//--------------------------------------------------------
inverse_kinematic_left_leg(0, 0.008, 2, 100); // volta com o corpo um pouco pra frente

//---- avança pé direito --------------------------------
inverse_kinematic_right_leg(LARGURA_PASSO_v, ALTURA_PE_v+.005, -5, 500); // avança o pé direito
usleep(35000);
inverse_kinematic_right_leg(LARGURA_PASSO_v, ALTURA_PE_v+.005, -5, 700); // avança o pé direito
usleep(65000);
inverse_kinematic_right_leg(LARGURA_PASSO_v, ALTURA_PE_v-0.005, 0, 500); // avança o pé direito
//espera_mov();
usleep(70000);
//-------------------------------------------------------

inclina_plano(LEG_RIGHT, -40, 60, -10);
inclina_plano(LEG_LEFT, -40, 60, 0);

//----- abaixa pé no chão -------------------------
inverse_kinematic_left_leg(0, 0.008, 4, 80);//movimenta um pouco com o corpo pra frente
inverse_kinematic_right_leg(LARGURA_PASSO_v, 0.02, -5, 150); // abaixa pé sem chutar o chão
usleep(30000);
inverse_kinematic_right_leg(LARGURA_PASSO_v, 0.02, -5, 300); // abaixa pé sem chutar o chão
usleep(50000);
inverse_kinematic_right_leg(LARGURA_PASSO_v, 0.019, -2, 80); // abaixa pé sem chutar o chão
espera_mov();

//-------------------------------------------------
//usleep(65000);
inverse_kinematic_right_leg(MEIO_PASSO_v, 0.01, 0, 80);
inverse_kinematic_left_leg(-MEIO_PASSO_v, 0.008, 0, 80);

// volta da inclinação -------------------------------
inclina_plano(LEG_RIGHT, 0, 65, 0);//volta da inclinação ficando reto
inclina_plano(LEG_LEFT, 0, 65, 0); //volta da inclinação ficando reto
usleep(10000);
inclina_plano(LEG_RIGHT, 0, 200, 0);//volta da inclinação ficando reto
inclina_plano(LEG_LEFT, 0, 200, 0); //volta da inclinação ficando reto
usleep(32000);
inclina_plano(LEG_RIGHT, 0, 50, 0);//volta da inclinação ficando reto
inclina_plano(LEG_LEFT, 0, 50, 0); //volta da inclinação ficando reto
espera_mov();

//----------------------------------------------------
inclina_plano(LEG_RIGHT, 50, 50, 0); //inclina para a direita
inclina_plano(LEG_LEFT, 46, 50, 0);  //inclina para direita
inverse_kinematic_right_leg(PASSO_1DE4_v, 0.008, 2, 100); // abaixa o corpo//==============================Ponto sensivel a queda =
inverse_kinematic_left_leg(-PASSO_3DE4_v, 0.013, 2, 200); //abaixa o corpo//==============================Ponto sensivel a queda ==
espera_mov_legs();

inclina_plano(LEG_LEFT, 50, 45, 10);
inverse_kinematic_right_leg(0, 0.008, 0, 100);


// curva de aceleração e desaceleração levantar pé--------
inverse_kinematic_left_leg(-LARGURA_PASSO_v, ALTURA_PE_v, 0, 300); //levanta pé esquerdo
usleep(50000);
inverse_kinematic_left_leg(-LARGURA_PASSO_v, ALTURA_PE_v, 0, 500); //levanta pé esquerdo
usleep(50000);
inverse_kinematic_left_leg(-LARGURA_PASSO_v+.02, ALTURA_PE_v, 0, 400); //levanta pé esquerdo
//espera_mov();
usleep(65000);


//--------------------------------------------------------
}

inverse_kinematic_left_leg(PASSO_3DE4, ALTURA_PE, 0, 400); //extra
usleep(35000);
//espera_mov();
inverse_kinematic_left_leg(0, ALTURA_PE_v-0.01, 0, 300);
espera_mov();
inverse_kinematic_right_leg(0, 0.008, 0, 100);
inverse_kinematic_left_leg(0, 0.012, 0, 100);
espera_mov();
inclina_plano(LEG_RIGHT, 0, 65, 0);
inclina_plano(LEG_LEFT, 0, 65, 0);
espera_mov();
inverse_kinematic_right_leg(0, 0, 0, 300);
inverse_kinematic_left_leg(0, 0, 0, 300); /* teste*/

}
Example #6
0
//============================================================================================
//--------------------------------------------------------------------------------------------
int virar_esquerda(unsigned short int valor)
{
//if(espera_mov()) return 0; // Aguarda termino de alguma atividade
//inverse_kinematic_right_leg(0, 0.008, 0, 500); // abaixa o corpo
//inverse_kinematic_left_leg(0, 0.008, 0, 500); //abaixa o corpo
//usleep(100000);

if(valor > 90)
    valor = 90;
if(valor < 35)
    valor = 35;

float altura_pe  = 0.050;
if(espera_mov()) return 0;

dxl_write_word(7, P_GOAL_POSITION_L, StandupPos[6]-20);//512

inverse_kinematic_right_leg(0, 0.008, 0, 500); // abaixa o corpo
inverse_kinematic_left_leg(0, 0.009, 0, 500); //abaixa o corpo
usleep(100000);


//------------------------------------------------------
inclina_plano(LEG_RIGHT, -50, 45, -10); // inclina para esquerda
inclina_plano(LEG_LEFT, -41, 45, 0);  // inclina para esquerda
inverse_kinematic_right_leg(0, 0.014, -5, 100);
if(espera_mov()) return 0;

inclina_plano(LEG_LEFT, -52, 50, -3);
inclina_plano(LEG_RIGHT, -62, 50, -10);
//inverse_kinematic_left_leg(0, 0.008, 5, 100);

// curva de aceleração e desaceleração levantar pé--------
inverse_kinematic_right_leg(0, altura_pe-.01, -4, 400); //levanta pé direito
usleep(50000);
inverse_kinematic_right_leg(0, altura_pe-.02, -4, 600); //levanta pé direito
usleep(50000);
inclina_plano(LEG_RIGHT, -62, 50, 0);
inverse_kinematic_right_leg(0, altura_pe-.02, -4, 500); //levanta pé direito
//if(espera_mov()) return 0;
usleep(60000);

//inclina_plano(LEG_LEFT, -45, 50, -3);
inverse_kinematic_left_leg(0, 0.009, -1, 100); //ajusta centro de massa
dxl_write_word(15, MOVING_SPEED, 150);
dxl_write_word(15, P_GOAL_POSITION_L, StandupPos[14]+ valor); //vira perna
usleep(100000);

//--------------------------------------------------------
inclina_plano(LEG_LEFT, -50, 80, -8);
inclina_plano(LEG_RIGHT, -70, 100, 25);
inverse_kinematic_right_leg(0, altura_pe-.02, -4, 400); //abaixa pé direito
usleep(100000);
inverse_kinematic_right_leg(0, altura_pe-.035, -4, 200); //abaixa pé direito
usleep(100000);
inclina_plano(LEG_LEFT, -35, 100, -15);
usleep(100000);
inclina_plano(LEG_RIGHT, -70, 400, 20);
inverse_kinematic_right_leg(0, altura_pe-.038, -4, 200); //abaixa pé direito
usleep(100000);
inclina_plano(LEG_RIGHT, -70, 100, 10);
inclina_plano(LEG_LEFT, -30, 100, -5);
usleep(200000);

// -- centraliza o corpo ----------------------------------------------
inclina_plano(LEG_LEFT, 5, 84, -10);
inclina_plano(LEG_RIGHT, -5, 100, -4);
usleep(200000);
inverse_kinematic_right_leg(0, 0.007, 0, 100); // abaixa o corpo
inverse_kinematic_left_leg(0, 0.007, 0, 100); //levanta pé direito
/*
usleep(100000);
inclina_plano(LEG_LEFT, 35, 80, 4);
inclina_plano(LEG_RIGHT, -5, 90, 20);
inverse_kinematic_left_leg(0, 0, 0, 100); //levanta pé direito
usleep(50000);

//--- inclina para direita-----
inverse_kinematic_left_leg(0, 0, 0.008, 200); //levanta pé direito
inverse_kinematic_right_leg(0, 0.005, 0, 100); // abaixa o corpo
inclina_plano(LEG_RIGHT, 20, 45, 0); // inclina para direita
inclina_plano(LEG_LEFT, 40, 45, 15);  // inclina para direita
usleep(100000);


//--- inclina para direita------------------------------------------
//inclina_plano(LEG_RIGHT, 54, 45, 0); // inclina para direita
//inclina_plano(LEG_LEFT, 95, 45, 0);  // inclina para direita
//usleep(100000);
//inverse_kinematic

dxl_write_word(15, MOVING_SPEED, 150);
dxl_write_word(15, P_GOAL_POSITION_L, StandupPos[14]);
usleep(70000);

if(espera_mov_legs()) return 0;
//usleep(65000);
inclina_plano(LEG_RIGHT, 59, 50, 0);
inverse_kinematic_right_leg(0, 0.008, 0, 200);
inverse_kinematic_left_leg(0, 0.013, 0, 200);

if(espera_mov_legs()) return 0;
inclina_plano(LEG_RIGHT, 0, 60, 0);
inclina_plano(LEG_LEFT, 0, 60, 0);
inverse_kinematic_left_leg(0, 0.009, 0, 80);
if(espera_mov_legs()) return 0;
inverse_kinematic_right_leg(0, 0.008, 0, 100);
inverse_kinematic_right_leg(0, 0.008, 0, 100);
usleep(50000);

//inverse_kinematic_right_leg(0, 0, 0, 300);
//inverse_kinematic_left_leg(0, 0, 0, 300); /* teste*/


//inverse_kinematic_right_leg(0, 0, 0, 300);
//inverse_kinematic_left_leg(0, 0, 0, 300); /* teste*/
dxl_write_word(15, MOVING_SPEED, 150);
dxl_write_word(15, P_GOAL_POSITION_L, StandupPos[14]); //volta a perna
usleep(70000);
inverse_kinematic_right_leg(0, 0.008, 0, 100);
inverse_kinematic_right_leg(0, 0.008, 0, 100);
inclina_plano(LEG_LEFT, 0, 100, 0);
inclina_plano(LEG_RIGHT, 0, 100, 0);
usleep(50000);
dxl_write_word(7, P_GOAL_POSITION_L, StandupPos[6]);
if(espera_mov_legs()) return 0;

/*teste*/
return 0;
}
Example #7
0
//============================================================================================
//--------------------------------------------------------------------------------------------
int virar_direita(unsigned short int valor)
{
//if(espera_mov()) return 0; // Aguarda termino de alguma atividade
//inverse_kinematic_right_leg(0, 0.008, 0, 500); // abaixa o corpo
//inverse_kinematic_left_leg(0, 0.008, 0, 500); //abaixa o corpo
//usleep(100000);

if(valor > 90)
    valor = 90;
if(valor < 35)
    valor = 35;

float altura_pe  = 0.055;
if(espera_mov()) return 0;

inverse_kinematic_right_leg(0, 0.008, 0, 500); // abaixa o corpo
inverse_kinematic_left_leg(0, 0.009, 0, 500); //abaixa o corpo
usleep(100000);

inclina_plano(LEG_RIGHT, 56, 45, 0); // inclina para direita
inclina_plano(LEG_LEFT, 58, 45, 0);  // inclina para direita
usleep(100000);
inverse_kinematic_right_leg(0, 0.008, 0, 500); // abaixa o corpo
inverse_kinematic_left_leg(0, 0.010, 0, 600); //abaixa o corpo
usleep(100000);
inverse_kinematic_right_leg(0, 0.008, 0, 200); // abaixa o corpo
inverse_kinematic_left_leg(0, 0.012, 0, 300); //abaixa o corpo
if(espera_mov()) return 0;
inclina_plano(LEG_RIGHT, 68, 50, 0); // inclina para direita - 45
inclina_plano(LEG_LEFT, 70, 45, 0); // 40

dxl_write_word(7, P_GOAL_POSITION_L, StandupPos[6]-25); // Abre braço para não enganchar na perna

// Levanta pé curva de aceleração e desaceleração -----
inverse_kinematic_left_leg(0, altura_pe-0.04, 0, 300); // levanta pé esquerdo
usleep(50000);
inverse_kinematic_left_leg(0, altura_pe-0.03, 0, 500); // levanta pé esquerdo
usleep(50000);
inverse_kinematic_left_leg(0, altura_pe-0.03, 0, 300); // levanta pé esquerdo
//if(espera_mov()) return 0;
usleep(65000);
//-------------------------------------------

inverse_kinematic_right_leg(0, 0.008, 0, 200); // ajusta centro de massa
dxl_write_word(9, MOVING_SPEED, 150);
dxl_write_word(9, P_GOAL_POSITION_L, StandupPos[8]- valor);
usleep(100000);

//--------------------------------------------------------
inclina_plano(LEG_LEFT, 70, 80, 0);
inclina_plano(LEG_RIGHT, 65, 800, 0);
inverse_kinematic_left_leg(0, altura_pe-.03, 0, 400); //abaixa pé esquerdo
usleep(100000);
inverse_kinematic_left_leg(0, altura_pe-.038, 0, 200); //abaixa pé direito
usleep(100000);
inclina_plano(LEG_RIGHT, 45, 100, 0);
usleep(100000);
inclina_plano(LEG_LEFT, 70, 800, -25);
inverse_kinematic_left_leg(0, altura_pe-.038, 0, 200); //abaixa pé direito
usleep(100000);


// -- centraliza o corpo ----------------------------------------------
inclina_plano(LEG_RIGHT, -5, 80, 0);
inclina_plano(LEG_LEFT, 5, 90, 0);
inverse_kinematic_right_leg(0, 0.007, 0, 200); // abaixa o corpo
inverse_kinematic_left_leg(0, 0.007, 0, 200); //levanta pé direito
usleep(100000);

dxl_write_word(9, MOVING_SPEED, 150);
dxl_write_word(9, P_GOAL_POSITION_L, StandupPos[8]);
usleep(100000);

inverse_kinematic_right_leg(0, 0.008, 0, 100);
inverse_kinematic_right_leg(0, 0.008, 0, 100);
inclina_plano(LEG_LEFT, 0, 100, 0);
inclina_plano(LEG_RIGHT, 0, 100, 0);
usleep(50000);
dxl_write_word(7, P_GOAL_POSITION_L, StandupPos[6]);
if(espera_mov_legs()) return 0;
/*teste*/

return 0;
}