Tabla de contenido:
- Paso 1: ¿Por qué utilizar una unidad de medida inercial?
- Paso 2: ¿Cómo utilizar BNO055 para la localización 2D?
- Paso 3: Punto de hardware de Vue
- Paso 4: ¿Cómo funciona?
- Paso 5: la arquitectura y el software
- Paso 6: ¿Qué aprendí?
Video: ¿Una forma de utilizar una unidad de medida inercial?: 6 pasos
2024 Autor: John Day | [email protected]. Última modificación: 2024-01-30 08:40
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?
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?
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
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?
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
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:
Medida de tiempo (reloj de cinta métrica): 5 pasos (con imágenes)
Medida de tiempo (reloj de cinta métrica): Para este proyecto, nosotros (Alex Fiel y Anna Lynton) tomamos una herramienta de medición diaria y la convertimos en un reloj. El plan original era motorizar una cinta métrica existente. Al hacer eso, decidimos que sería más fácil crear nuestro propio caparazón para ir con
Siete segmentos diseñados a medida con LED: 5 pasos
Siete segmentos de diseño personalizado con LED: el LED es un componente muy básico en el diseño y, en algún momento, los LED hacen mucho más trabajo que solo una indicación.En este artículo veremos cómo construir una pantalla de siete segmentos de diseño personalizado usando LED. siete segmentos en el mercado pero yo
ARUPI: una unidad de grabación automática de bajo costo / unidad de grabación autónoma (ARU) para ecologistas del paisaje sonoro: 8 pasos (con imágenes)
ARUPI: una unidad de grabación automatizada de bajo costo / unidad de grabación autónoma (ARU) para ecologistas del paisaje sonoro: este instructivo fue escrito por Anthony Turner. El proyecto se desarrolló con mucha ayuda del Cobertizo de la Escuela de Computación de la Universidad de Kent (¡el Sr. Daniel Knox fue de gran ayuda!). Le mostrará cómo construir una U de grabación de audio automatizada
Cómo utilizar las respuestas de forma eficaz: 6 pasos (con imágenes)
Cómo usar las respuestas de manera efectiva: La función "Respuestas" siempre útil en Instructables es excelente. Esta grandeza, sin embargo, también corre paralela a muchos escollos. Aquí espero arrojar un poco de luz sobre cómo creo que se debe usar Answers, un esfuerzo por convertirlo en una herramienta más eficaz para fi
Cómo hacer una unidad flash que copie los archivos de los usuarios de forma silenciosa y automática: 7 pasos
Cómo hacer una unidad flash que copie los archivos de los usuarios de forma silenciosa y automática: ****** ESTE INSTRUCTABLE ES PARA FINES DE INFORMACIÓN ÚNICAMENTE ES ILEGAL COPIAR ALGUNOS ARCHIVOS SIN SU PERMISO NO SOY RESPONSABLE DE NADA QUE PUEDA O NO SUCEDER SI ESTO LA INFORMACIÓN SE UTILIZA INCORRECTAMENTE **************** Cómo construir un