Nous ressuscitons l'hexapode. Partie trois

Comme la pratique l'a montré, l'abondance de code dans l'article n'affecte pas très bien sa lisibilité. Mais pour comprendre comment tout cela fonctionne, il faut parfois faire travailler votre cerveau. Objectif de la publication précédente. Aujourd'hui, je vais essayer de compléter la série d'articles sur le bourrage de logiciels hexapodes en donnant un bref aperçu de ce que nous n'avons pas appris.

Le cycle des articles précédents:


Comment nous avons imprimé l'hexapode et ce qui en est
ressorti. Première partie
Nous faisons revivre l'hexapode. Deuxième partie

Configuration


Les caractéristiques physiques du robot sont définies dans le programme comme un ensemble de paramètres de configuration et transférées dans un fichier de configuration séparé config.h . Parmi ces paramètres, les principaux groupes suivants peuvent être distingués:

Tailles des membres et caractéristiques de leur mouvement
COXA_LENGTH()
FEMORA_LENGTH()
TIBIA_LENGTH()
TIBIA_OFFSET()
COXA_ANGLE_0()
FEMORA_ANGLE_0()
TIBIA_ANGLE_0()
COXA_ANGLE_INVERSE
FEMORA_ANGLE_INVERSE
TIBIA_ANGLE_INVERSE


L'emplacement et l'orientation des membres du robot par rapport à son centre
LEFT_FRONT_FOOT_POSITION
LEFT_MIDLE_FOOT_POSITION
LEFT_BACK_FOOT_POSITION
RIGTH_FRONT_FOOT_POSITION
RIGTH_MIDLE_FOOT_POSITION
RIGTH_BACK_FOOT_POSITION
LEFT_FRONT_FOOT_ROTATION
LEFT_MIDLE_FOOT_ROTATION
LEFT_BACK_FOOT_ROTATION
RIGTH_FRONT_FOOT_ROTATION
RIGTH_MIDLE_FOOT_ROTATION
RIGTH_BACK_FOOT_ROTATION


Plages angulaires admissibles pour les servocommandes
COXA_MIN_ANGLE
COXA_MAX_ANGLE
FEMORA_MIN_ANGLE
FEMORA_MAX_ANGLE
TIBIA_MIN_ANGLE
TIBIA_MAX_ANGLE
COMPLEX_ANGLE_LIMITS_1
MIDLE_COXA_MIN_ANGLE
MIDLE_COXA_MAX_ANGLE


Caractéristiques de mouvement du robot
MOTION_JOB_PERIOD()
MOVE_STEP()
ROTATE_STEP()


Mathématiques


Pour calculer la cinématique avant et arrière du robot, des calculs vectoriels et matriciels sont nécessaires. Cela se fait à l'aide des classes Vector3D et Matrix3D déclarées dans 3d_math.h

struct Vector3D
struct Vector3D {
  float x,y,z;

  Vector3D operator -(void) {
    return {-x, -y ,-z};
  }                        

  Vector3D& operator=(const Vector3D a);
  
  float len();
};


struct Matrix3D
struct Matrix3D {
  float a[3][3];

  Vector3D operator *(Vector3D& v) {
    Vector3D p;
    p.x = v.x*a[0][0] + v.y*a[0][1] + v.z*a[0][2];
    p.y = v.x*a[1][0] + v.y*a[1][1] + v.z*a[1][2];
    p.z = v.x*a[2][0] + v.y*a[2][1] + v.z*a[2][2];
    return p;
  };                                               

  Matrix3D operator *(Matrix3D m) {
    Matrix3D r;
    for(int i=0; i<3; i++) {
      for(int j=0; j<3; j++) {
        r.a[i][j] = 0;
        for(int k=0; k<3; k++)
          r.a[i][j] += a[i][k]*m.a[k][j];
      }
    }
    return r;
  };
};

Surcharge de l'opérateur et fonctions d'assistance
Vector3D operator +=(Vector3D left, const Vector3D right);
Vector3D operator -=(Vector3D left, const Vector3D right);
Vector3D operator- (Vector3D a, Vector3D b);
Vector3D operator+ (Vector3D a, Vector3D b);
Vector3D operator* (Vector3D a, Vector3D b);
Vector3D operator* (float a, Vector3D b);
Vector3D operator* (Vector3D a, float b);
Vector3D operator/ (Vector3D a, int b);
//        r = {rx, ry, rz}
Matrix3D rotMatrix(Vector3D r);  //   
Matrix3D rotMatrix2(Vector3D r);  //   
//  
float arcctn(float);


Code source


Tous les fichiers source sont désormais disponibles sur GitHub . Vous y trouverez le projet d'application pour Android et les modèles pour l'impression 3D. La section Arduino se compose de deux sections:

  • main - l'ensemble principal de fichiers pour le contrôleur Arduino
  • wifi - firmware pour esp8622 nécessaire pour organiser un canal de communication via Wi-Fi

Et après?


Malgré le fait que cet article soit de nature finale, les thèmes de l'organisation d'un canal de communication via Wi-Fi et du contrôle via Android sont restés hors de vue. Si ces sujets présentent un intérêt ou si d'autres problèmes non résolus persistent, écrivez à ce sujet dans les commentaires ou la correspondance personnelle. J'essaierai certainement de donner une réponse détaillée ou d'y consacrer un article séparé.

Le projet Geksa poursuivra son développement. Dans un avenir proche, il est prévu de changer la composition des composants électroniques, d'étendre les fonctionnalités, de finaliser le corps du robot, de faire des ajouts logiciels. Je serai heureux de recevoir de vous des commentaires ou suggestions constructifs.

Remercier!

All Articles