Skip to content

Latest commit

 

History

History
318 lines (224 loc) · 14.3 KB

README.md

File metadata and controls

318 lines (224 loc) · 14.3 KB

Balancio-Kit

license_MIT   stars   language_en language_sp


Proyecto educativo de un robot 🤖 de autobalanceo de ultra bajo costo, capaz de correr una red neuronal para mantener el equilibrio y de ser controlado de manera inalámbrica 🖲️.

Desarrollado con fines didácticos para enseñar conceptos de RL, ML, AI y control.

Versiones

Estabilidad Facilidad de Armado Requiere I3D Tiempo de I3D Plano de Impresión 3D Foto de la versión
V 0.7 (Recomendado) ⭐ ⭐ ⭐ ⭐ ⭐ ⭐ SI
  • Baterias 47m
  • Cuerpo 2:36 h
Versión 0.7 I3D
V 0.6 AKA:Wall-e ⭐ ⭐ ⭐ SI
  • C_Inferior 5:25h
  • C_Superior 5:11h
  • P_inferior 58m
  • P_superior 55m
  • Cabeza 3:19 h
Versión 0.6 I3D
V 0.5 ⭐ ⭐ ⭐ SI
  • Aro 49m
  • Cuerpo 4:42h
Versión 0.5 I3D

Configuración de Impresión

  • Espesor de boquilla: 0.4 mm
  • Altura de Capa: 0.3 mm
  • Perimetros: 3
  • Capas Solidas Top y Bottom: 3
  • Infill: 20%

Componentes

Componente Imagen del Componente
Placa base (estructura en impresion 3D)
Microcontrolador NodeMCU ESP32
IMU MPU 6050
2 motorreductores de 6v con rueda "para Arduino"
Puente-H L298N
2 baterías 18650 con su correspondiente porta-pilas
Cargador de baterias doble
BMS FCD-2S-2
Switch
10 Cables DuPont
1m Cable eléctrico unipolar (2x50 cm. c/u)

Plano Electrico

Ensamblaje Mecánico

  1. Imprimir en 3D alguna de las versiones.
  2. Encastrar piezas en su posición final.
  3. Sostener los motores con precintos y/o pegamento.
  4. Conectar los componentes siguiendo el plano electrico.

Instalación 💾

En primer lugar, se debe clonar el repositorio. Esto se puede realizar tanto descargando el mismo como un .ZIP, o ejecutando git clone https://github.com/UDESA-AI/balancio-kit.git en consola.

La instalación consta de 3 módulos principales: Microcontrolador, simulación y aplicación. Éstos son fundamentales para el funcionamiento completo del proyecto, pero la instalación de cada uno de ellos se puede realizar en distinto orden.

Microcontrolador

Instalación de la IDE Para programar y compilar el NodeMCU ESP32 usaremos la IDE 2 de Arduino. Para esto se debe instalar la misma siguiendo los pasos que se especifican en el siguiente [link](https://www.arduino.cc/en/software) .
Configuración del Microcrontolador Una vez instalada la IDE, se debe habilitar el microcontrolador que vamos a usar. Para esto se deben seguir los siguientes pasos:
  1. En la IDE, ir a 'File' (Archivos) → 'Preferences' (Preferencias)

  2. En el campo "Additional Boards Manager URLs", agregar lo siguiente: https://dl.espressif.com/dl/package_esp32_index.json. (Luego clickear 'OK').

  3. Ir a 'Tools' → 'Board: ' → 'Boards Manager…'

  4. Buscar "esp32", e instalar "esp32 by Espressif Systems" (version 2.x) presionando el botón 'Install'.

  5. Indicarle a la IDE que vamos a utilizar un esp32. Ir a 'Tools' → 'Board:' → 'ESP32 Arduino' → 'NodeMCU-32S'

  6. En 'Tools' → 'Port', seleccionar el puerto correspondiente a donde está conectado el microcontrolador.

Librerias de Arduino Luego procederemos a instalar las librerías de arduino que vamos a utilizar:
  • Para eso ir a 'Sketch' → 'Include Library' → 'Manage Libraries…'

  • Buscar e instalar las siguientes librerias, especificando la versión correspondiente:

    • MPU6050 by Electronic Cats (version 1.0.0)
    • PS3 Controller Host by Jeffrey van Pernis (version 1.1.0)
    • EloquentTinyML by Simone Salerno (version 0.0.7)
Ejecución inicial Para comprobar la instalación, ejecutaremos un ejemplo de prueba: - ir a 'File' → 'Examples' → 'WiFi' → 'WiFiScan' - En el sketch generado, presionar el botón de carga ('Upload') 📲 - Si todo funcionó correctamente, debe aparecer un mensaje 'Done uploading' en la consola.

Posibles errores:

  • Si no se puede cargar el programa al microcontrolador, intentar mantener presionado el botón "boot" presente en la placa, mientras se realiza la carga. Esto se debería realizar solo la primera vez.

Simulación

La simulación es opcional, no es necesaria para el funcionamiento y armado del robot. Se puede pasar directamente a la parte de calibración.

La simulación corre en Python 🐍, y utiliza diversos paquetes. Para facilitar la instalación de los mismos, utilizaremos Conda.

Se debe seguir con los siguientes pasos:

  1. Para el uso e instalación de conda, descargaremos miniconda (también se puede instalar Anaconda), siguiendo con los pasos que se especifican en el siguiente link.
  2. Crearemos un 'Environment' de conda, donde alojaremos nuestros paquetes. Esto se puede realizar tanto desde la consola (en el caso de haber descargado Miniconda) o desde una GUI (en caso de haber descargado Anaconda). Respectivamente:
    • Miniconda: Ejecutar el siguiente comando en la consola: conda env create -f requirements.yml. Donde requierments.yml es el archivo que se encuentra dentro del repositorio y ya fue descargado.
    • Anaconda: En la GUI de Anaconda: En la pestaña environments, hacer clik en import y especificar archivo en file

  1. Activar el environment creado, llamado balancio:
    • Miniconda: Ejecutar en terminal conda activate balancio
    • Anaconda: En la pestaña environments, hacer clik en el ambiente que se quiere activar
  2. Dentro del environment activado, ejecutar el archivo setup.py: python setup.py
  3. Probar la instalación, corriendo el siguiente script: python pid.py

Variables Físicas de la versión 0.7

Cuerpo

Masa sin ruedas: 0.244 kg

Posición del centro de masa con respecto al eje de los motores y el centro simétrico del cuerpo:

  • x = 1.55
  • y ~= 0 mm
  • z = 31 mm

Inercia sin ruedas desde el centro de masa (kg.m2):

  • Ixx = 0.0006945
  • Ixy ~= 0
  • Iyy = 0.0006536
  • Ixz = -0.000013447
  • Iyz ~= 0
  • Izz = 0.0001937

Rueda

Masa de una rueda: 0.029 kg

Posición del centro de masa con respecto al eje de los motores y el borde del agarre:

  • x = 0 mm
  • y = 15.6 mm
  • z = 0 mm

Inercia de la rueda desde el centro de masa (kg.m2):

  • Ixx = 0.000011729
  • Ixy ~= 0
  • Iyy = 0.000021531
  • Ixz ~= 0
  • Iyz ~= 0
  • Izz = 0.000011729

Aplicación

La aplicación está creada en MIT App Inventor .

Simplemente entrar al website e importar el .aia en App Balancio . Luego de esto, se puede usar la aplicación mediante bluethooth desde un celular.

Calibración

Estas instrucciones asumen conocimiento del uso de la IDE arduino

Calibración del IMU 1. Abrir `Balancio-kit/Mcu/Src/imu_calibration/imu_calibration.ino` con el IDE Arduino
  1. Colocar el robot con la IMU paralela al piso y mantenerlo firme

  2. Subir el programa a la placa y usar el monitor serial para obtener las compensaciones de la IMU

  3. Modificar las compensaciones de giróscopo en el archivo balancio-kit/mcu/src/main/config.h en:

// IMU calibration parameters
#define X_ACCEL_OFFSET -1775
#define Y_ACCEL_OFFSET  756
#define Z_ACCEL_OFFSET  2706
#define X_GYRO_OFFSET   181
#define Y_GYRO_OFFSET   77
#define Z_GYRO_OFFSET   60
  1. Para las compensaciones de Acelerómetro debe ser tenido en cuenta la gravedad, solo midiendo las compensaciones con la gravedad perpendicualar a esa direcci
Calibración del angulo de equilibrio 1. Abrir `balancio-kit/mcu/src/main/main.ino`
  1. Sostener el robot en la posición de equilibrio

  2. Subir el programa a la placa y usar el monitor serial para obtener las compensaciones de angulo

  3. Modificar en angulo de equilibrio en el archivo balancio-kit/mcu/src/main/config.h en la línea:

// Angle of (approximate) static equilibrium
#define STATIC_ANGLE -0.04 // Calibrated point
Calibración de las constantes PID
  1. Sacar el jumper de 12v en el driver

  2. Elegir parámetros PID

  3. modificar las constantes del PID en el archivo balancio-kit/mcu/src/main/config.h en las líneas:

// PID Constants for pitch control
#define KP 2000
#define KI 22000
#define KD 20.0
  1. Probar las constantes, si se sacó el jumper se puede probar incluso con el cable conectado. Cuidado al hacer esto!

Una vez configurado correctamente el robot, se pueden seleccionar distintos parametros de configuracion en el archivo correspondiente (config.h).

Entre ellos, se puede seleccionar el tipo de controlador deseado para estabilizar el Balancio.

Por ejemplo, en caso de querer utilizar un controlador PID:

// Control algorithm type
#define CONTROL_ALGO "PID"

En caso de querer utilzar un agente de aprendizaje por refuerzo:

// Control algorithm type
#define CONTROL_ALGO "RL"

TODO

  • initial commit
  • Desarrollar aplicación bluetooth
  • Crear agente RL
  • Diseño mecánico
  • Publicar STL del diseño mecánico
  • Publicar STEP del diseño mecánico
  • Crear diagrama electrónico
  • Aclarar que datos levantar del imu calibration.

Bugs conocidos

  • Wheel spins on startup

Contribuciones

Las pull requests son bienvenidas, para cambios mayores, por favor abrir un issue para discutir los cambios deseados

Licencia

MIT