AllBot 4 -> AllBot6

Hello All,

This bot is a real entertainment for my cat. Can resist to a bunch of paws better than little robots I built before.

The four legged allbot is unstable (with or without the cat) and I added 2 legs.

I kindly program it to move 3 legs at the same time.

frontLeft
rearLeft
middleRight

at the same time and opposite for the next step.

walk forward
walk backward
turn left
turn right

I will try a Infra Red sensor to track the cat in his basket.

Here is the program used, to be implemented with smartphone IR transmitter. It is in test mode.

kindest regards

===============================
#include <Servo.h>                        // The ALLBOT library needs the servo.h library
#include <ALLBOT.h>                       // Do not forget to include the ALLBOT library, download it from the manuals.velleman.eu website

ALLBOT BOT(12);                            // Number of motors

enum MotorName {                          
  hancheAvantGauche,
  hancheAvantDroite,
  hancheMilieuDroite,
  hancheMilieuGauche,
  hancheArriereGauche,
  hancheArriereDroite,
  genouAvantGauche,
  genouAvantDroite,
  genouMilieuDroite,
  genouMilieuGauche,
  genouArriereGauche,
  genouArriereDroite
};

int sounderPin = 13;                      // Declaring what pin the sounder on the VRSSM is connected to
int times;                                // Global variable that stores part the received IR command
int speedms;                              // Global variable that stores part the received IR command

int positionHancheAvantGauche=135;
int positionHancheAvantDroite=135;
int positionHancheArriereGauche=45;
int positionHancheArriereDroite=45;
int positionHancheMilieuGauche=90;
int positionHancheMilieuDroite=90;
int genouPoser=45;
int genouLever=65;

void setup() {
  // NAME.attach(motorname, pin, init-angle, flipped, offset-angle);
  BOT.attach(hancheAvantGauche,   A1,  positionHancheAvantGauche, 1, 0);
  BOT.attach(hancheAvantDroite,   A0,  positionHancheAvantDroite, 0, 0);
  BOT.attach(hancheArriereGauche,  9,  positionHancheArriereGauche, 1, -2);
  BOT.attach(hancheArriereDroite,  4,  positionHancheArriereDroite, 0, 0);
  BOT.attach(hancheMilieuGauche,  A4,  positionHancheMilieuGauche, 1, 0);
  BOT.attach(hancheMilieuDroite,  A5,  positionHancheMilieuDroite, 0, 0);
 
  BOT.attach(genouAvantGauche,    11,  genouPoser, 1, 0);
  BOT.attach(genouAvantDroite,     2,  genouPoser, 0, 0);
  BOT.attach(genouArriereGauche,  10,  genouPoser, 1, 0);
  BOT.attach(genouArriereDroite,   3,  genouPoser, 0, 0);
  BOT.attach(genouMilieuGauche,   A3,  genouPoser, 1, 0);
  BOT.attach(genouMilieuDroite,   A2,  genouPoser, 0, 0);
  // INIT sounder
  pinMode(sounderPin, OUTPUT);
  // Chirp for ready
  chirp(1, 50);
  chirp(1, 255);
  chirp(3, 0);

}

void loop() {
  // put your main code here, to run repeatedly:
  //walkforward(steps,speedms,longueurPas)
  //walkforward(3,50,10);
  walkbackward(3,50,10);
  //turnleft(3,50,10);
  //turnright(3,50,10);
}
//--------------------------------------------------------------
void chirp(int beeps, int speedms){

  for (int i = 0; i < beeps; i++){
    for (int j = 0; j < 255; j++){
      digitalWrite(sounderPin, HIGH);
      delayMicroseconds((355-j)+ (speedms*2));
      digitalWrite(sounderPin, LOW);
      delayMicroseconds((355-j)+ (speedms*2));
    }
     delay(30);
  }
}

void chirpi(int beeps, int speedms){

  for (int i = 0; i < beeps; i++){
    for (int j = 255; j > 0; j--){
      digitalWrite(sounderPin, HIGH);
      delayMicroseconds((355-j)+ (speedms*2));
      digitalWrite(sounderPin, LOW);
      delayMicroseconds((355-j)+ (speedms*2));
    }
     delay(30);
  }
}


//--------------------------------------------------------------
//
// Le devant est là où se trouve l'USB
//
//     1  2    USB   3  4
//     5  6          7  8
//     9  10         11 12
//
// Les mouvements se font en trio. Pattes avant et arrière d'un côté et patte du milieu côté opposé
//
// Trio genoux A = pattes 1, 8 et 9
// Trio genoux B = pattes 4, 5 et 12

void trioGenouA(int hauteurGenou){
      BOT.move(genouAvantGauche,   hauteurGenou);
      BOT.move(genouArriereGauche, hauteurGenou);
      BOT.move(genouMilieuDroite,  hauteurGenou);
      BOT.animate(speedms);
}

void trioGenouB(int hauteurGenou){
      BOT.move(genouAvantDroite,   hauteurGenou);
      BOT.move(genouArriereDroite, hauteurGenou);
      BOT.move(genouMilieuGauche,  hauteurGenou);
      BOT.animate(speedms);
}


void walkforward(int steps, int speedms, int longueurPas){
  bool passer=false;
  for (int i = 0; i < steps; i++){
    // on lève les pattes à la fin du script, donc si on commence le script, on les
    // lève sinon non.
    if(!passer){
      // on leve les pattes 1, 8 et 9
      trioGenouA(genouLever);
      passer=true;
    }
    
    // on va chercher le pas avec les hanches 2, 7 et 10
    BOT.move(hancheAvantGauche, positionHancheAvantGauche     + longueurPas);
    BOT.move(hancheArriereGauche, positionHancheArriereGauche + longueurPas);
    BOT.move(hancheMilieuDroite, positionHancheMilieuDroite   + longueurPas);
    BOT.animate(speedms);
    
    // on repose les pattes 1, 8 et 9
    trioGenouA(genouPoser);
    
    // on lève les pattes 4, 5 et 12
    trioGenouB(genouLever);

    // on ramène le premier pas
    BOT.move(hancheAvantGauche,   positionHancheAvantGauche);
    BOT.move(hancheArriereGauche, positionHancheArriereGauche);
    BOT.move(hancheMilieuDroite,  positionHancheMilieuDroite);
    BOT.animate(speedms);

    // on va chercher le pas avec les hanches 3, 6 et 11
    BOT.move(hancheAvantDroite,   positionHancheAvantDroite   + longueurPas);
    BOT.move(hancheArriereDroite, positionHancheArriereDroite + longueurPas);
    BOT.move(hancheMilieuGauche,  positionHancheMilieuGauche  + longueurPas);
    BOT.animate(speedms);

    // on repose les pattes 4, 5 et 12
    trioGenouB(genouPoser);
    
    // on leve les pattes 1, 8 et 9
    trioGenouA(genouLever);

    // on ramène le pas avec les hanches 3, 6 et 11
    BOT.move(hancheAvantDroite,   positionHancheAvantDroite);
    BOT.move(hancheArriereDroite, positionHancheArriereDroite);
    BOT.move(hancheMilieuGauche, positionHancheMilieuGauche);
    BOT.animate(speedms);
  }
}

//--------------------------------------------------------------
//     1  2    USB   3  4
//     5  6          7  8
//     9  10         11 12
void walkbackward(int steps, int speedms, int longueurPas){
  bool passer=false;
  for (int i = 0; i < steps; i++){
    // on lève les pattes à la fin du script, donc si on commence le script, on les
    // lève sinon non.
    if(!passer){
      // on leve les pattes 1, 8 et 9
      trioGenouA(genouLever);
      passer=true;
    }
    
    // on va chercher le pas avec les hanches 2, 7 et 10
    BOT.move(hancheAvantGauche, positionHancheAvantGauche     - longueurPas);
    BOT.move(hancheArriereGauche, positionHancheArriereGauche - longueurPas);
    BOT.move(hancheMilieuDroite, positionHancheMilieuDroite   - longueurPas);
    BOT.animate(speedms);
    
    // on repose les pattes 1, 8 et 9
    trioGenouA(genouPoser);
    
    // on lève les pattes 4, 5 et 12
    trioGenouB(genouLever);

    // on ramène le premier pas
    BOT.move(hancheAvantGauche,   positionHancheAvantGauche);
    BOT.move(hancheArriereGauche, positionHancheArriereGauche);
    BOT.move(hancheMilieuDroite,  positionHancheMilieuDroite);
    BOT.animate(speedms);

    // on va chercher le pas avec les hanches 3, 6 et 11
    BOT.move(hancheAvantDroite,   positionHancheAvantDroite   - longueurPas);
    BOT.move(hancheArriereDroite, positionHancheArriereDroite - longueurPas);
    BOT.move(hancheMilieuGauche,  positionHancheMilieuGauche  - longueurPas);
    BOT.animate(speedms);

    // on repose les pattes 4, 5 et 12
    trioGenouB(genouPoser);
    
    // on leve les pattes 1, 8 et 9
    trioGenouA(genouLever);

    // on ramène le pas avec les hanches 3, 6 et 11
    BOT.move(hancheAvantDroite,   positionHancheAvantDroite);
    BOT.move(hancheArriereDroite, positionHancheArriereDroite);
    BOT.move(hancheMilieuGauche, positionHancheMilieuGauche);
    BOT.animate(speedms);
  }
}

//--------------------------------------------------------------
//     1  2    USB   3  4
//     5  6          7  8
//     9  10         11 12
void turnleft(int steps, int speedms, int longueurPas){
  for (int i = 0; i < steps; i++){
      // on leve les pattes 1, 8 et 9
      trioGenouA(genouLever);
    
    // on va chercher le pas avec les hanches 2, 7 et 10
    BOT.move(hancheAvantGauche, positionHancheAvantGauche     - longueurPas);
    BOT.move(hancheArriereGauche, positionHancheArriereGauche - longueurPas);
    BOT.move(hancheMilieuDroite, positionHancheMilieuDroite   + longueurPas);
    BOT.animate(speedms);
    
    // on repose les pattes 1, 8 et 9
    trioGenouA(genouPoser);
    
    // on lève les pattes 4, 5 et 12
    trioGenouB(genouLever);
    
    // on ramène le premier pas
    BOT.move(hancheAvantGauche,   positionHancheAvantGauche);
    BOT.move(hancheArriereGauche, positionHancheArriereGauche);
    BOT.move(hancheMilieuDroite,  positionHancheMilieuDroite);
    BOT.animate(speedms);

    // on va chercher le pas avec les hanches 3, 6 et 11
    BOT.move(hancheAvantDroite,   positionHancheAvantDroite   + longueurPas);
    BOT.move(hancheArriereDroite, positionHancheArriereDroite + longueurPas);
    BOT.move(hancheMilieuGauche,  positionHancheMilieuGauche  - longueurPas);
    BOT.animate(speedms);
    
    // on repose les pattes 4, 5 et 12
    trioGenouB(genouPoser);
    
    // on ramène le pas avec les hanches 3, 6 et 11
    BOT.move(hancheAvantDroite,   positionHancheAvantDroite);
    BOT.move(hancheArriereDroite, positionHancheArriereDroite);
    BOT.move(hancheMilieuGauche, positionHancheMilieuGauche);
    BOT.animate(speedms);
  }
}
//--------------------------------------------------------------
//     1  2    USB   3  4
//     5  6          7  8
//     9  10         11 12
void turnright(int steps, int speedms, int longueurPas){
  for (int i = 0; i < steps; i++){
      // on leve les pattes 1, 8 et 9
      trioGenouA(genouLever);
    
    // on va chercher le pas avec les hanches 2, 7 et 10
    BOT.move(hancheAvantGauche, positionHancheAvantGauche     + longueurPas);
    BOT.move(hancheArriereGauche, positionHancheArriereGauche + longueurPas);
    BOT.move(hancheMilieuDroite, positionHancheMilieuDroite   - longueurPas);
    BOT.animate(speedms);
    
    // on repose les pattes 1, 8 et 9
    trioGenouA(genouPoser);
    
    // on lève les pattes 4, 5 et 12
    trioGenouB(genouLever);
    
    // on ramène le premier pas
    BOT.move(hancheAvantGauche,   positionHancheAvantGauche);
    BOT.move(hancheArriereGauche, positionHancheArriereGauche);
    BOT.move(hancheMilieuDroite,  positionHancheMilieuDroite);
    BOT.animate(speedms);

    // on va chercher le pas avec les hanches 3, 6 et 11
    BOT.move(hancheAvantDroite,   positionHancheAvantDroite   - longueurPas);
    BOT.move(hancheArriereDroite, positionHancheArriereDroite - longueurPas);
    BOT.move(hancheMilieuGauche,  positionHancheMilieuGauche  + longueurPas);
    BOT.animate(speedms);
    
    // on repose les pattes 4, 5 et 12
    trioGenouB(genouPoser);
    
    // on ramène le pas avec les hanches 3, 6 et 11
    BOT.move(hancheAvantDroite,   positionHancheAvantDroite);
    BOT.move(hancheArriereDroite, positionHancheArriereDroite);
    BOT.move(hancheMilieuGauche, positionHancheMilieuGauche);
    BOT.animate(speedms);
    
  }
}

Thank you for sharing this!

We would love to see a cat playing with a ALLBOT =)

Hello,

I think this cat to be finished with pee.

Climbing in the ficus on border of window, runing under the carpet, climbing on the curtains to have high observe point, coming back only for meal.

Amazing first, he give some paws fight, do big round back front of robot, runs and come back to give another fight, and finish to smell bot when switched off. And this is my turn to tap on desk void him to jump completly afraid. I’ll remember to share video when occure.

To come back on subject, I find that placing some routines in sub void patterns, like “trioGenouA”, the Bot is really quiker than repeating the pattern in main program. It’s about arduino, I think.

– your’s

Got a video yet? :slight_smile:

I’m curious of your build, regardless of the cat interaction. (although that would be a nice addition)