yuanfangssj 发表于 2015-1-13 13:24:58

我自己写的一段控制六足机器人的程序,不能正确运行

我写的六足机器人程序,想实现每个按键作为控制一条腿的命令,大家帮忙看一下有什么问题,程序编译也没有问题,就是机器人没有按照我写的要求动作
/*
* Auto-Generated by NUKE!
*   http://arbotix.googlecode.com
*/

#include <ax12.h>
#include <BioloidController.h>
#include <Commander.h>
#include "nuke.h"

// Define one or the other depending upon which servo type you are using.
#define AX12_HEXAPOD
//#define AX18_HEXAPOD

Commander command = Commander();
int multiplier;
int id;

#define LEG_COUNT6
#define RIPPLE_SPEED    1
#define AMBLE_SPEED   3
#define TRIPOD_SPEED    5

/*Servo IDs */
#define RM_TIBIA 18
#define RF_COXA 2
#define LR_TIBIA 11
#define LF_FEMUR 3
#define RF_TIBIA 6
#define RM_FEMUR 16
#define RM_COXA 14
#define RR_COXA 8
#define LF_TIBIA 5
#define LF_COXA 1
#define LR_FEMUR 9
#define RR_FEMUR 10
#define LM_TIBIA 17
#define RF_FEMUR 4
#define LM_FEMUR 15
#define RR_TIBIA 12
#define LM_COXA 13
#define LR_COXA 7

/* Actual positions, and indices of array. */
extern ik_req_t endpoints;
#define RIGHT_FRONT    0
#define RIGHT_REAR   1
#define LEFT_FRONT   2
#define LEFT_REAR      3
#define RIGHT_MIDDLE   4
#define LEFT_MIDDLE    5

#ifdef AX12_HEXAPOD
#define TOP_SPEED      10
#endif

#ifdef AX18_HEXAPOD
#define TOP_SPEED      12
#endif

void setup(){
pinMode(0,OUTPUT);
// setup IK
setupIK();
gaitSelect(AMBLE_SMOOTH);
// setup serial
Serial.begin(38400);

// wait, then check the voltage (LiPO safety)
// delay (1000);
// float voltage = (ax12GetRegister (1, AX_PRESENT_VOLTAGE, 1)) / 10.0;
//Serial.print ("System Voltage: ");
// Serial.print (voltage);
//Serial.println (" volts.");
//if (voltage < 10.0)
//while(1);

// stand up slowly
bioloid.poseSize = 18;
bioloid.readPose();
doIK();
bioloid.interpolateSetup(1000);
while(bioloid.interpolating > 0)
{
    bioloid.interpolateStep();
    delay(3);
}
multiplier = AMBLE_SPEED;
}

void loop()
{
// take commands
if(command.ReadMsgs() > 0){
    digitalWrite(0,HIGH-digitalRead(0));
    // select legs
    if(command.buttons&BUT_R1)
   {

      RIGHT_FRONT;
      multiplier=AMBLE_SPEED;
          Serial.println("####################");
          Serial.println("Initializing RIGHT_FRONTLeg Tests");
          Serial.println("####################");
          delay(500);
      if((command.walkV) > 5 );
      {
       endpoints.x = endpoints.x +10;
       endpoints.y = 118;
       endpoints.z = 97;
       bioloid.poseSize = 3;
       bioloid.readPose();
       doIK();
       bioloid.interpolateSetup(1000);
       while(bioloid.interpolating > 0)
       {
         bioloid.interpolateStep();
         delay(3);
       }

      }
      if((command.walkV < -5) );
      {
       endpoints.x = endpoints.x -10;
       endpoints.y = 118;
       endpoints.z = 97;
       bioloid.poseSize = 3;
       bioloid.readPose();
       doIK();
       bioloid.interpolateSetup(1000);
       while(bioloid.interpolating > 0)
       {
         bioloid.interpolateStep();
         delay(3);
       }

       }
      if((command.walkH) > 5 );
       {
         endpoints.x = 52;
         endpoints.y = endpoints.y +10;
           endpoints.z = 97;
         bioloid.poseSize = 3;
         bioloid.readPose();
         doIK();
         bioloid.interpolateSetup(1000);
         while(bioloid.interpolating > 0)
           {
         bioloid.interpolateStep();
         delay(3);
         }


       }
      if((command.walkH < -5) );
       {
                endpoints.x = 52;
                endpoints.y = endpoints.y -10;
                endpoints.z = 97;
      bioloid.poseSize = 3;
       bioloid.readPose();
       doIK();
       bioloid.interpolateSetup(1000);
       while(bioloid.interpolating > 0)
       {
         bioloid.interpolateStep();
         delay(3);
       }


       }
      if((command.lookH) > 5 );
       {
          endpoints.x = 52;
          endpoints.y = 118;
            endpoints.z = endpoints.z -50;
      bioloid.poseSize = 3;
       bioloid.readPose();
       doIK();
       bioloid.interpolateSetup(1000);
       while(bioloid.interpolating > 0)
       {
         bioloid.interpolateStep();
         delay(3);
       }


       }
      if((command.lookH < -5) );
       {
                endpoints.x = 52;
                endpoints.y = 118;
                endpoints.z = endpoints.z +50;
       bioloid.poseSize = 3;
       bioloid.readPose();
       doIK();
       bioloid.interpolateSetup(1000);
       while(bioloid.interpolating > 0)
       {
         bioloid.interpolateStep();
         delay(3);
       }

      }
      }
    if(command.buttons&BUT_R2);
{
      RIGHT_MIDDLE;
      multiplier=AMBLE_SPEED;
          Serial.println("####################");
          Serial.println("Initializing RIGHT_MIDDLELeg Tests");
          Serial.println("####################");
           delay(500);
       if((command.walkV) > 5 );
      {
       endpoints.x = endpoints.x +10;
       endpoints.y = 118;
       endpoints.z = 97;
       bioloid.poseSize = 3;
       bioloid.readPose();
       doIK();
       bioloid.interpolateSetup(1000);
       while(bioloid.interpolating > 0)
       {
         bioloid.interpolateStep();
         delay(3);
       }

       }
      if((command.walkV < -5) );
      {
       endpoints.x = endpoints.x -10;
       endpoints.y = 118;
       endpoints.z = 97;
       bioloid.poseSize = 3;
       bioloid.readPose();
       doIK();
       bioloid.interpolateSetup(1000);
       while(bioloid.interpolating > 0)
       {
         bioloid.interpolateStep();
         delay(3);
       }

       }
      if((command.walkH) > 5 );
       {
         endpoints.x = 0;
         endpoints.y = endpoints.y +10;
         endpoints.z = 97;
          bioloid.poseSize = 3;
       bioloid.readPose();
       doIK();
       bioloid.interpolateSetup(1000);
       while(bioloid.interpolating > 0)
       {
         bioloid.interpolateStep();
         delay(3);
       }


       }
      if((command.walkH < -5) );
       {
                endpoints.x = 0;
                endpoints.y = endpoints.y -10;
                endpoints.z = 97;
      bioloid.poseSize = 3;
       bioloid.readPose();
       doIK();
       bioloid.interpolateSetup(1000);
       while(bioloid.interpolating > 0)
       {
         bioloid.interpolateStep();
         delay(3);
       }

       }
      if((command.lookH) > 5 );
       {
          endpoints.x = 0;
          endpoints.y = 118;
         endpoints.z = endpoints.z -50;
       bioloid.poseSize = 3;
       bioloid.readPose();
       doIK();
       bioloid.interpolateSetup(1000);
       while(bioloid.interpolating > 0)
       {
         bioloid.interpolateStep();
         delay(3);
       }

       }
      if((command.lookH < -5) );
       {
                endpoints.x = 0;
                endpoints.y = 118;
                endpoints.z = endpoints.z +50;
       bioloid.poseSize = 3;
       bioloid.readPose();
       doIK();
       bioloid.interpolateSetup(1000);
       while(bioloid.interpolating > 0)
       {
         bioloid.interpolateStep();
         delay(3);
       }

      }

    }
    if(command.buttons&BUT_R3);
{
      RIGHT_REAR;
      multiplier=AMBLE_SPEED;
          Serial.println("####################");
          Serial.println("Initializing RIGHT_REARLeg Tests");
          Serial.println("####################");
           delay(500);
      if((command.walkV) > 5 );
      {
       endpoints.x =endpoints.x+10;
       endpoints.y = 118;
       endpoints.z = 97;
       bioloid.poseSize = 3;
       bioloid.readPose();
       doIK();
       bioloid.interpolateSetup(1000);
       while(bioloid.interpolating > 0)
       {
         bioloid.interpolateStep();
         delay(3);
       }

       }
      if((command.walkV < -5) );
      {
       endpoints.x = endpoints.x -10;
       endpoints.y = 118;
       endpoints.z = 97;
       bioloid.poseSize = 3;
       bioloid.readPose();
       doIK();
       bioloid.interpolateSetup(1000);
       while(bioloid.interpolating > 0)
       {
         bioloid.interpolateStep();
         delay(3);
       }

       }
      if((command.walkH) > 5 );
       {
         endpoints.x = -52;
         endpoints.y = endpoints.y +10;
           endpoints.z = 97;
          bioloid.poseSize = 3;
       bioloid.readPose();
       doIK();
       bioloid.interpolateSetup(1000);
       while(bioloid.interpolating > 0)
       {
         bioloid.interpolateStep();
         delay(3);
       }


       }
      if((command.walkH < -5) );
       {
                endpoints.x = -52;
                endpoints.y = endpoints.y -10;
                endpoints.z = 97;
       bioloid.poseSize = 3;
       bioloid.readPose();
       doIK();
       bioloid.interpolateSetup(1000);
       while(bioloid.interpolating > 0)
       {
         bioloid.interpolateStep();
         delay(3);
       }


       }
      if((command.lookH) > 5 );
       {
          endpoints.x = -52;
          endpoints.y = 118;
            endpoints.z = endpoints.z -50;
       bioloid.poseSize = 3;
       bioloid.readPose();
       doIK();
       bioloid.interpolateSetup(1000);
       while(bioloid.interpolating > 0)
       {
         bioloid.interpolateStep();
         delay(3);
       }

       }
      if((command.lookH < -5) );
       {
                endpoints.x = -52;
                endpoints.y = 118;
                endpoints.z = endpoints.z +50;
       bioloid.poseSize = 3;
       bioloid.readPose();
       doIK();
       bioloid.interpolateSetup(1000);
       while(bioloid.interpolating > 0)
       {
         bioloid.interpolateStep();
         delay(3);
       }

      }

    }
   
    if(command.buttons&BUT_L4)
{
      LEFT_FRONT;
      multiplier=AMBLE_SPEED;
          Serial.println("####################");
          Serial.println("Initializing Left_FRONTLeg Tests");
          Serial.println("####################");
           delay(500);
   if((command.walkV) > 5 );
      {
       endpoints.x = endpoints.x+10;
       endpoints.y = -118;
       endpoints.z = 97;
       bioloid.poseSize = 3;
       bioloid.readPose();
       doIK();
       bioloid.interpolateSetup(1000);
       while(bioloid.interpolating > 0)
       {
         bioloid.interpolateStep();
         delay(3);
       }

       }
      if((command.walkV < -5) );
      {
       endpoints.x = endpoints.x -10;
       endpoints.y = -118;
       endpoints.z = 97;
       bioloid.poseSize = 3;
       bioloid.readPose();
       doIK();
       bioloid.interpolateSetup(1000);
       while(bioloid.interpolating > 0)
       {
         bioloid.interpolateStep();
         delay(3);
       }

       }
      if((command.walkH) > 5 );
       {
         endpoints.x = 52;
         endpoints.y = endpoints.y +10;
           endpoints.z = 97;
          bioloid.poseSize = 3;
       bioloid.readPose();
       doIK();
       bioloid.interpolateSetup(1000);
       while(bioloid.interpolating > 0)
       {
         bioloid.interpolateStep();
         delay(3);
       }

       }
      if((command.walkH < -5) );
       {
                endpoints.x = 52;
                endpoints.y = endpoints.y -10;
                endpoints.z = 97;
       bioloid.poseSize = 3;
       bioloid.readPose();
       doIK();
       bioloid.interpolateSetup(1000);
       while(bioloid.interpolating > 0)
       {
         bioloid.interpolateStep();
         delay(3);
       }

       }
      if((command.lookH) > 5 );
       {
          endpoints.x = 52;
          endpoints.y = -118;
         endpoints.z = endpoints.z -50;
      bioloid.poseSize = 3;
       bioloid.readPose();
       doIK();
       bioloid.interpolateSetup(1000);
       while(bioloid.interpolating > 0)
       {
         bioloid.interpolateStep();
         delay(3);
       }

       }
      if((command.lookH < -5) );
       {
                endpoints.x = 52;
                endpoints.y = -118;
                endpoints.z = endpoints.z+50;
       bioloid.poseSize = 3;
       bioloid.readPose();
       doIK();
       bioloid.interpolateSetup(1000);
       while(bioloid.interpolating > 0)
       {
         bioloid.interpolateStep();
         delay(3);
       }

      }

          }
    if(command.buttons&BUT_L5)
    {
      LEFT_MIDDLE;
      multiplier=TRIPOD_SPEED;
          Serial.println("####################");
          Serial.println("Initializing Left_MIDDLELeg Tests");
          Serial.println("####################");
           delay(500);
      if((command.walkV) > 5 );
      {
       endpoints.x = endpoints.x +10;
       endpoints.y = -118;
       endpoints.z = 97;
       bioloid.poseSize = 3;
       bioloid.readPose();
       doIK();
       bioloid.interpolateSetup(1000);
       while(bioloid.interpolating > 0)
       {
         bioloid.interpolateStep();
         delay(3);
       }

       }
      if((command.walkV < -5) );
      {
       endpoints.x = endpoints.x-10;
       endpoints.y = -118;
       endpoints.z = 97;
       bioloid.poseSize = 3;
       bioloid.readPose();
       doIK();
       bioloid.interpolateSetup(1000);
       while(bioloid.interpolating > 0)
       {
         bioloid.interpolateStep();
         delay(3);
       }

       }
      if((command.walkH) > 5 );
       {
         endpoints.x = 0;
         endpoints.y = endpoints.y +10;
           endpoints.z = 97;
      bioloid.poseSize = 3;
       bioloid.readPose();
       doIK();
       bioloid.interpolateSetup(1000);
       while(bioloid.interpolating > 0)
       {
         bioloid.interpolateStep();
         delay(3);
       }

       }
      if((command.walkH < -5) );
       {
                endpoints.x = 0;
                endpoints.y = endpoints.y-10;
                endpoints.z = 97;
       bioloid.poseSize = 3;
       bioloid.readPose();
       doIK();
       bioloid.interpolateSetup(1000);
       while(bioloid.interpolating > 0)
       {
         bioloid.interpolateStep();
         delay(3);
       }

       }
      if((command.lookH) > 5 );
       {
          endpoints.x = 0;
          endpoints.y = -118;
          endpoints.z = endpoints.z-50;
       bioloid.poseSize = 3;
       bioloid.readPose();
       doIK();
       bioloid.interpolateSetup(1000);
       while(bioloid.interpolating > 0)
       {
         bioloid.interpolateStep();
         delay(3);
       }

       }
      if((command.lookH < -5) );
       {
                endpoints.x = 0;
                endpoints.y = -118;
                endpoints.z = endpoints.z +50;
       bioloid.poseSize = 3;
       bioloid.readPose();
       doIK();
       bioloid.interpolateSetup(1000);
       while(bioloid.interpolating > 0)
       {
         bioloid.interpolateStep();
         delay(3);
       }

      }

            
      }
    if(command.buttons&BUT_L6){
      LEFT_REAR;
      multiplier=TOP_SPEED;
          Serial.println("####################");
          Serial.println("Initializing Left_REARLeg Tests");
          Serial.println("####################");
           delay(500);
      if((command.walkV) > 5 );
      {
       endpoints.x = endpoints.x+10;
       endpoints.y = -118;
       endpoints.z = 97;
       bioloid.poseSize = 3;
       bioloid.readPose();
       doIK();
       bioloid.interpolateSetup(1000);
       while(bioloid.interpolating > 0)
       {
         bioloid.interpolateStep();
         delay(3);
       }

       }
      if((command.walkV < -5) );
      {
       endpoints.x = endpoints.x-10;
       endpoints.y = -118;
       endpoints.z = 97;
       bioloid.poseSize = 3;
       bioloid.readPose();
       doIK();
       bioloid.interpolateSetup(1000);
       while(bioloid.interpolating > 0)
       {
         bioloid.interpolateStep();
         delay(3);
       }

       }
      if((command.walkH) > 5 );
       {
         endpoints.x = 0;
         endpoints.y = endpoints.y+10;
           endpoints.z = 97;
      bioloid.poseSize = 3;
       bioloid.readPose();
       doIK();
       bioloid.interpolateSetup(1000);
       while(bioloid.interpolating > 0)
       {
         bioloid.interpolateStep();
         delay(3);
       }


       }
      if((command.walkH < -5) );
       {
                endpoints.x = 0;
                endpoints.y = endpoints.y-10;
                endpoints.z = 97;
       bioloid.poseSize = 3;
       bioloid.readPose();
       doIK();
       bioloid.interpolateSetup(1000);
       while(bioloid.interpolating > 0)
       {
         bioloid.interpolateStep();
         delay(3);
       }

       }
      if((command.lookH) > 5 );
       {
          endpoints.x = 0;
          endpoints.y = -118;
         endpoints.z = endpoints.z-50;
      bioloid.poseSize = 3;
       bioloid.readPose();
       doIK();
       bioloid.interpolateSetup(1000);
       while(bioloid.interpolating > 0)
       {
         bioloid.interpolateStep();
         delay(3);
       }

       }
      if((command.lookH < -5) );
       {
                endpoints.x = 0;
                endpoints.y = -118;
                endpoints.z = endpoints.z+50;
       bioloid.poseSize = 3;
       bioloid.readPose();
       doIK();
       bioloid.interpolateSetup(1000);
       while(bioloid.interpolating > 0)
       {
         bioloid.interpolateStep();
         delay(3);
       }


      }

    }
}
}
    // set select leg
   // if((command.walkV) > 5 || (command.walkV < -5) )
    //{
   // Xspeed = (multiplier*command.walkV)/2;
   // }
    //else
    //{
    //Xspeed = 0;
   // }
   
   // if((command.walkH) > 5 || (command.walkH < -5) ){   
   // Yspeed = (multiplier*command.walkH)/2;
   // }
   // else
   // {
    // Yspeed = 0;
   // }
   
   // if((command.lookH) > 5 || (command.lookH < -5) ){
   // Rspeed = -(command.lookH)/100.0;
   // }
   // else
   // {
    //Rspeed = 0;
   // }
   
// Use the phoenix code if you want pretty body rotation. :)   
//
//    if((command.buttons&BUT_LT) > 0){
//      bodyRotY = (((float)command.lookV))/300.0;
//      bodyRotZ = ((float)command.lookH)/300.0;
//      bodyRotX = ((float)command.walkH)/300.0;
//      Rspeed = 0;
//      Xspeed = 0;
//      Yspeed = 0;
//    }

//}

// if our previous interpolation is complete, recompute the IK

suoma 发表于 2015-1-13 14:34:46

仔细检查,如果给别人看,添加注释

yuanfangssj 发表于 2015-1-13 14:58:35

好的,谢谢,我把注释加上

Super169 发表于 2015-1-14 00:24:30

樓主在玩的, 是 Bioloid 的套件機械人嗎?

yuanfangssj 发表于 2015-1-14 11:39:32

是的,由18个AX-12的舵机组成的一个六足机器人

Super169 发表于 2015-1-14 12:20:58

yuanfangssj 发表于 2015-1-14 11:39 static/image/common/back.gif
是的,由18个AX-12的舵机组成的一个六足机器人

18 個 AX-12 舵機, 用的是 ArbotiX RoboController, 真的不簡單.應該不會便宜吧.
這樣高級的配置, 廠家應該有一定的支援吧.

yuanfangssj 发表于 2015-1-14 12:29:23

没有,是直接从美国代购买回来的,一万多吧。只有网站上的一些原demo,我现在想实现单腿控制模式,就写了上面那个程序,结果没调试同呢,愁啊
页: [1]
查看完整版本: 我自己写的一段控制六足机器人的程序,不能正确运行