Tabla de contenido:

¿Una forma de utilizar una unidad de medida inercial?: 6 pasos
¿Una forma de utilizar una unidad de medida inercial?: 6 pasos

Video: ¿Una forma de utilizar una unidad de medida inercial?: 6 pasos

Video: ¿Una forma de utilizar una unidad de medida inercial?: 6 pasos
Video: 🚗¿Qué es la inercia?🚀 EJEMPLOS ⚽️ [Fácil y Rápido] | FÍSICA | 2024, Noviembre
Anonim
¿Una forma de utilizar una unidad de medida inercial?
¿Una forma de utilizar una unidad de medida inercial?

El contexto:

Estoy construyendo por diversión un robot que quiero mover de forma autónoma dentro de una casa.

Es un trabajo largo y lo estoy haciendo paso a paso.

Ya publiqué 2 instructivos sobre ese tema:

  • uno sobre hacer un codificador de rueda
  • uno sobre la conexión wifi

Mi robot funciona con 2 motores de CC con la ayuda de mi codificador de rueda hecho en casa.

Actualmente estoy mejorando el control de movimiento y he pasado algún tiempo con giroscopio, acelerómetro e IMU. Me complacería compartir esta experiencia.

¿Quieres saber más sobre la localización? Aquí hay un artículo sobre cómo combinar inteligencia artificial y ultrasonidos para localizar el robot.

Paso 1: ¿Por qué utilizar una unidad de medida inercial?

¿Por qué utilizar una unidad de medida inercial?
¿Por qué utilizar una unidad de medida inercial?

Entonces, ¿por qué usé una IMU?

La primera razón fue que si el codificador de rueda es lo suficientemente preciso como para controlar el movimiento recto, incluso después de afinar, no pude obtener una precisión para la rotación de menos de + - 5 grados y eso no es suficiente.

Entonces probé 2 sensores diferentes. Primero utilizo un magnetómetro (LSM303D). El principio era simple: antes de que la rotación obtenga la orientación norte, calcule el objetivo y ajuste el movimiento hasta que se alcance el objetivo. Fue un poco mejor que con el codificador pero con demasiada dispersión. Después de eso intenté usar un giroscopio (L3GD20). El principio era simplemente integrar la velocidad de rotación proporcionada por el sensor para calcular la rotación. Y funcionó bien. Pude controlar la rotación en + - 1 grado.

Sin embargo, tenía curiosidad por probar algunas IMU. Elijo un componente BNO055. Pasé algún tiempo para comprender y probar esta IMU. Al final, decidí seleccionar este sensor por las siguientes razones

  • Puedo controlar la rotación tan bien como con el L3GD20
  • Puedo detectar una ligera rotación cuando me muevo en línea recta
  • Necesito obtener la orientación norte para la localización del robot y la calibración de la brújula del BNO055 es muy simple

Paso 2: ¿Cómo utilizar BNO055 para la localización 2D?

¿Cómo utilizar BNO055 para la localización 2D?
¿Cómo utilizar BNO055 para la localización 2D?

BNO055 IMU es un sensor inteligente de 9 ejes de Bosch que podría proporcionar una orientación absoluta.

La hoja de datos proporciona una documentación completa. Es un componente de alta tecnología, es un producto bastante complejo y pasé algunas horas para aprender cómo funciona y probar diferentes formas de usarlo.

Creo que podría ser útil compartir esta experiencia.

En primer lugar utilicé la biblioteca Adafruit que proporciona una buena herramienta para calibrar y descubrir el sensor.

Al final y después de muchas pruebas decidí

  • use la biblioteca Adafruit solo para guardar la calibración
  • utilice 3 de todos los modos posibles de BNO055 (NDOF, IMU, Compss)
  • dedicar un Arduino Nano para calcular la localización basada en las medidas BNO055

Paso 3: Punto de hardware de Vue

Punto de hardware de Vue
Punto de hardware de Vue
Punto de hardware de Vue
Punto de hardware de Vue
Punto de hardware de Vue
Punto de hardware de Vue

BNO055 es un componente I2C. Por lo tanto, necesita fuente de alimentación, SDA y SCL para comunicarse.

Solo tenga cuidado con el voltaje Vdd de acuerdo con el producto que compró. El chip Bosch funciona en el rango: 2.4V a 3.6V y puedes encontrar componentes de 3.3vy 5v.

No hay dificultades para conectar el Nano y el BNO055.

  • El BNO055 funciona con Nano
  • SDA y SCL están conectados con resistencias pull-up de 2 x 2k.
  • 3 LED conectados al Nano para diagnóstico (con resistencias)
  • 2 conectores utilizados para definir el modo después del arranque
  • 1 conector hacia el BNO (Gnd, Vdd, Sda, Scl, Int)
  • 1 conector hacia el Robot / Mega (+ 9V, Gnd, sda, Scl, Pin11, Pin12)

Un poco de soldadura y listo.

Paso 4: ¿Cómo funciona?

Como funciona ?
Como funciona ?

Desde el punto de comunicación de vue:

  • El Nano es el maestro de bus I2C
  • El Robot / Mega y el BNO055 son esclavos I2C
  • El Nano lee permanentemente los registros BNO055
  • El Robot / Mega sube una señal numérica para solicitar la palabra del Nano

Desde el punto de cálculo de vue: el Nano combinado con el BNO055 ofrece

  • El rumbo de la brújula (utilizado para la localización)
  • Un rumbo relativo (utilizado para controlar las rotaciones)
  • El rumbo y la posición absolutos (utilizados para controlar los movimientos)

Desde el punto funcional de vue: The Nano:

  • gestiona la calibración BNO055
  • gestiona los parámetros y comandos del BNO055

El subsistema Nano y BNO055:

  • calcular para cada rueda de robot el rumbo absoluto y la localización (con un factor de escala)
  • calcular el rumbo relativo durante la rotación del robot

Paso 5: la arquitectura y el software

La arquitectura y el software
La arquitectura y el software

El software principal se ejecuta en un Arduino Nano

  • La arquitectura se basa en la comunicación I2C.
  • Elegí dedicar un Nano debido al hecho de que el Atmega que ejecuta el robot ya estaba cargado y esta arquitectura hace que sea más fácil de reutilizar en otros lugares.
  • El Nano lee los registros BNO055, calcula y almacena el encabezado y la localización en sus propios registros.
  • El Arduino Atmega que ejecuta el código del robot, envía la información de los codificadores de las ruedas al Nano y lee los encabezados y la localización dentro de los registros del Nano.

El código del subsistema (Nano) está disponible aquí en GitHub

La herramienta de calibración Adafruit si está aquí en GitHub (la calibración se almacenará en eeproom)

Paso 6: ¿Qué aprendí?

Respecto a I2C

Primero intenté tener 2 maestros (Arduino) y 1 esclavo (sensor) en el mismo bus, pero al final es posible y más fácil configurar solo el Nano como maestro y usar la conexión GPIO entre los 2 Arduinos para "solicitar el token".

Respecto a BNO055 para orientación 2D

Puedo concentrarme en 3 modos de funcionamiento diferentes: NDOF (combinar giroscopio, acelerómetro y Compas) cuando el robot está inactivo, IMU (combinar giroscopio, acelerómetro) cuando el robot se está moviendo y Brújula durante la fase de localización. Cambiar entre estos modos es fácil y rápido.

Para reducir el tamaño del código y mantener la posibilidad de usar la interrupción BNO055 para detectar colisiones, prefiero no usar la biblioteca Adafruit y hacerlo por mi cuenta.

Recomendado: