Revivimos el hexápodo. Parte tres

Como ha demostrado la práctica, la abundancia de código en el artículo no afecta muy bien su legibilidad. Pero para entender cómo funciona todo, a veces cuesta forzar el cerebro. A qué apuntaba la publicación anterior. Hoy intentaré completar una serie de artículos sobre el relleno del software hexapod dando una breve descripción de lo que no tuvimos tiempo de conocer.

El ciclo de artículos anteriores:


Cómo imprimimos el hexápodo y qué salió de
él. Revivimos el hexápodo. Primera parte
Revivimos el hexapod. La segunda parte

Configuración


Las características físicas del robot se definen en el programa como un conjunto de parámetros de configuración y se transfieren a un archivo de configuración independiente config.h . Entre estos parámetros, se pueden distinguir los siguientes grupos principales:

Tamaños de extremidades y características de su movimiento.
IdentificadorDescripción de la característica
COXA_LENGTHLongitud del hombro (mm)
FEMORA_LONGITUDLongitud del muslo (mm)
TIBIA_LONGITUDShin longitud (mm)
TIBIA_OFFSET()
COXA_ANGLE_0()
FEMORA_ANGLE_0()
TIBIA_ANGLE_0()
COXA_ANGLE_INVERSE
FEMORA_ANGLE_INVERSE
TIBIA_ANGLE_INVERSE


La ubicación y orientación de las extremidades del robot en relación con su centro.
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


Rangos de ángulo permitidos para servoaccionamientos
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


Características del movimiento del robot.
MOTION_JOB_PERIOD()
MOVE_STEP()
ROTATE_STEP()


Matemáticas


Para calcular la cinemática directa e inversa del robot, se requieren cálculos vectoriales y matriciales. Esto se hace usando las clases Vector3D y Matrix3D declaradas en 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;
  };
};

Sobrecarga del operador y funciones auxiliares
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);


Código fuente


Todos los archivos fuente ahora están disponibles en GitHub . Allí puede encontrar el borrador de la aplicación para Android y modelos para impresión 3D. La sección arduino consta de dos secciones:

  • main : el conjunto principal de archivos para el controlador Arduino
  • wifi : se necesita firmware para esp8622 para organizar un canal de comunicación a través de Wi-Fi

¿Que sigue?


A pesar de que este artículo es de carácter final, los temas de organización de un canal de comunicación a través de Wi-Fi y control a través de Android han permanecido fuera de la vista. Si estos temas son de interés u otros problemas no resueltos permanecen, escriba sobre esto en los comentarios o correspondencia personal. Definitivamente intentaré dar una respuesta detallada o dedicar un artículo separado a esto.

El proyecto Geksa continuará su desarrollo. En un futuro cercano, se planea cambiar la composición de los componentes electrónicos, ampliar la funcionalidad, finalizar el cuerpo del robot, realizar adiciones de software. Estaré encantado de saber de usted comentarios constructivos o sugerencias.

¡Gracias!

All Articles