Kami menghidupkan kembali hexapod. Bagian ketiga

Seperti yang telah ditunjukkan oleh praktik, kelimpahan kode dalam artikel tidak memengaruhi keterbacaannya dengan baik. Tetapi untuk memahami bagaimana itu semua bekerja, kadang-kadang perlu biaya untuk menegangkan otak Anda. Apa tujuan publikasi sebelumnya. Hari ini saya akan mencoba untuk menyelesaikan serangkaian artikel tentang isian perangkat lunak hexapod dengan memberikan gambaran singkat tentang apa yang tidak kita ketahui.

Siklus artikel sebelumnya:


Bagaimana kami mencetak hexapod dan apa yang terjadi
, kami menghidupkan kembali hexapod. Bagian Satu
Kami menghidupkan kembali hexapod. Bagian kedua

Konfigurasi


Karakteristik fisik robot didefinisikan dalam program sebagai satu set parameter konfigurasi dan ditransfer ke file konfigurasi config.h yang terpisah . Di antara parameter-parameter ini, grup utama berikut dapat dibedakan:

Ukuran anggota tubuh dan fitur gerakan mereka
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


Lokasi dan orientasi tungkai robot relatif terhadap pusatnya
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


Rentang sudut yang diizinkan untuk drive servo
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


Karakteristik pergerakan robot
MOTION_JOB_PERIOD()
MOVE_STEP()
ROTATE_STEP()


Matematika


Untuk menghitung kinematika maju dan mundur robot, diperlukan perhitungan vektor dan matriks. Ini dilakukan dengan menggunakan kelas Vector3D dan Matrix3D dideklarasikan dalam 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;
  };
};

Kelebihan operator dan fungsi pembantu
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);


Kode sumber


Semua file sumber sekarang tersedia di GitHub . Di sana Anda dapat menemukan rancangan aplikasi untuk Android dan model untuk pencetakan 3D. Bagian Arduino terdiri dari dua bagian:

  • main - set utama file untuk pengontrol Arduino
  • wifi - firmware untuk esp8622 diperlukan untuk mengatur saluran komunikasi melalui Wi-Fi

Apa berikutnya?


Terlepas dari kenyataan bahwa artikel ini bersifat final, topik pengorganisasian saluran komunikasi melalui Wi-Fi dan kontrol melalui Android tetap tidak terlihat. Jika topik ini menarik atau masalah lain yang belum terselesaikan, tulis tentang ini di komentar atau korespondensi pribadi. Saya pasti akan mencoba memberikan jawaban terperinci atau mencurahkan artikel terpisah untuk ini.

Proyek Geksa akan melanjutkan pengembangannya. Dalam waktu dekat, direncanakan untuk mengubah komposisi komponen elektronik, memperluas fungsionalitas, menyelesaikan tubuh robot, membuat penambahan perangkat lunak. Saya akan senang mendengar dari Anda komentar atau saran yang membangun.

Terima kasih!

All Articles