Wir beleben den Hexapod wieder. Teil drei

Wie die Praxis gezeigt hat, wirkt sich die Fülle an Code im Artikel nicht sehr gut auf die Lesbarkeit aus. Aber um zu verstehen, wie das alles funktioniert, kostet es manchmal, Ihr Gehirn zu belasten. Worauf die vorherige Veröffentlichung abzielte. Heute werde ich versuchen, eine Reihe von Artikeln über das Füllen der Hexapod-Software zu vervollständigen, indem ich einen kurzen Überblick darüber gebe, was wir nicht hatten, um uns zu treffen.

Der Zyklus früherer Artikel:


Wie wir den Hexapod gedruckt haben und was
daraus wurde. Wir beleben den Hexapod wieder. Erster Teil
Wir beleben den Hexapod wieder. Zweiter Teil

Aufbau


Die physikalischen Eigenschaften des Roboters werden im Programm als Satz von Konfigurationsparametern definiert und in eine separate Konfigurationsdatei config.h übertragen . Unter diesen Parametern können die folgenden Hauptgruppen unterschieden werden:

Größen der Gliedmaßen und Merkmale ihrer Bewegung
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


Die Position und Ausrichtung der Gliedmaßen des Roboters relativ zu seiner Mitte
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


Zulässige Winkelbereiche für Servoantriebe
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


Roboterbewegungseigenschaften
MOTION_JOB_PERIOD()
MOVE_STEP()
ROTATE_STEP()


Mathematik


Zur Berechnung der Vorwärts- und Rückwärtskinematik des Roboters sind Vektor- und Matrixberechnungen erforderlich. Dies wird getan , um die Verwendung von Vector3D und Matrix3D Klassen deklariert 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;
  };
};

Überlastung des Bedieners und Hilfsfunktionen
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);


Quellcode


Alle Quelldateien sind jetzt auf GitHub verfügbar . Dort finden Sie den Anwendungsentwurf für Android und Modelle für den 3D-Druck. Der Arduino- Abschnitt besteht aus zwei Abschnitten:

  • main - Der Hauptsatz von Dateien für den Arduino-Controller
  • wifi - Firmware für esp8622 wird benötigt, um einen Kommunikationskanal über Wi-Fi zu organisieren

Was weiter?


Trotz der Tatsache, dass dieser Artikel endgültiger Natur ist, sind die Themen Organisation eines Kommunikationskanals über WLAN und Steuerung über Android nicht in Sicht. Wenn diese Themen von Interesse sind oder andere ungelöste Probleme bestehen bleiben, schreiben Sie dies in den Kommentaren oder in der persönlichen Korrespondenz. Ich werde auf jeden Fall versuchen, eine detaillierte Antwort zu geben oder einen separaten Artikel dazu zu verfassen.

Das Geksa-Projekt wird weiterentwickelt. In naher Zukunft ist geplant, die Zusammensetzung elektronischer Komponenten zu ändern, die Funktionalität zu erweitern, den Roboterkörper fertigzustellen und Software-Ergänzungen vorzunehmen. Ich würde mich freuen, von Ihnen konstruktive Kommentare oder Vorschläge zu hören.

Danke!

All Articles