Captura de movimiento asombroso de cosas de cinta

¿Alguna vez, querido lector, ha necesitado crear la posición de un fideo de piscina en 3D y en tiempo real? Por supuesto que sí, y hoy, ¡estás de suerte! He compilado una solución que seguramente le dará el comienzo de una solución a este "problema que nunca supo que tenía".

Bueno, hay algo de historia detrás de esto. En mis buenos días de estudiante, tuve la oportunidad de jugar con robots submarinos atados. Recuerdo haber estado tonteando pensando, "Hmm, con este enlace de robot, ¿no sería bueno configurar un conjunto de IMU a lo largo del enlace para estimar la ubicación del robot en 3 espacios?" Unos años más tarde, cociné juntos este proyecto IMU Noodle para jugar con hardware real con el ánimo de resolver ese problema. Con un poco de matemática cuádruple, una IMU inteligente y algunas PCBA personalizadas, esta idea ha pasado de ser un vagabundeo inútil del cerebro a un dispositivo real. Es un ejemplo increíblemente interesante del uso del hardware disponible y un poco de ingenio para construir un sistema único y confiable.

¿Sobre por qué? Vi por primera vez un fideo IMU aparecer en estas páginas en 2012 y me sorprendió. solo yo tenía construye uno! Ahora completo, asumí que había suficientes matemáticas y divertidas pelotas electrónicas para merecer un artículo completo sobre las aventuras fuera de horario de este mes. Querido lector, déjame contarte una historia maravillosa donde las matemáticas se encuentran con la electrónica y se atreve a pedirla para el almuerzo.

¿Qué es exactamente IMU Noodle?

Nacido en un mundo de sensores MEM variados, IMU Noodle es el nieto de la tecnología moderna de captura de movimiento. En pocas palabras, es una colección de IMU ensambladas en un objeto flexible para modelar la curvatura de ese objeto en 3D. Cada IMU en la cadena es direccionable individualmente e informa su orientación en 3 espacios como cuadruplicar. Los datos de IMU se transmiten repetidamente a través de Teensy y en mi computadora a través de un clip saludable de 60Hz, donde un pequeño fragmento de código compatible con OpenFrameworks visualiza los datos.

Hardware de fideos

Gran parte de lo que hemos leído en estas páginas se respalda para que sea "inteligente". Sin embargo, hoy quiero organizar un proyecto que está en el otro lado del espectro: en la tierra de todo lo simple. Si bien muchos proyectos de hardware están repletos de características principales, este proyecto solo tiene uno, copiado repetidamente. Hablemos de hardware.

El nodo desnudo de IMU:

Aquí en hardware, el nodo IMU no es demasiado complicado. Es más o menos una tabla de crack para el sensor este de Bosch BNO055, con dos trucos adicionales. Primero, estos foros se comunican a través de diferenciarlo (D) Bus I²C. Probablemente estemos bastante cómodos con I²C. La parte diferencial simplemente recodifica las señales SDA y SCL a dos pares diferentes, lo que nos permite extender el bus I²C con cables largos.

Si se pregunta por qué no puede simplemente extender los cables SDA y SCL, eche un vistazo a mi divagación cerebral de unos meses.

Pepita de moneda estadounidense para escala

A continuación, estos nodos dividirán un bus I²C a lo largo de un cable, por lo que cada uno necesita una dirección única. Para que esto suceda, utilizo el Babelfish LTC4316 I²C para recodificar la dirección del BNO. Para configurar la nueva dirección, utilizo un divisor de voltaje (3 resistencias) con voltajes que corresponden a un código de bits de acuerdo con la hoja de datos LTC4316. (Los cálculos son un poco desordenados, así que escribí un cuaderno de IPython para hacer el trabajo pesado).

Con estas dos configuraciones, ahora puedo sacar un cable plano largo por unos pocos metros y colocar hasta 63 IMU en el mismo cable en cualquier lugar del camino. Es limpio, sencillo y el único trabajo al final es soldar 3 resistencias únicas para establecer la dirección. (Nota: esto es para usar el etiquetado de la parte inferior de esos PCBA con su dirección).

El Todopoderoso BNO055

El BNO055 en sí mismo es un silicio realmente notable. No solo tiene un giroscopio, acelerómetro y magnetómetro de tres ejes, sino que también tiene un microcontrolador interno que prueba estos sensores y opera un algoritmo de “fusión” IMU para evaluar la orientación.

Fusión de sensores usado siendo un problema computacionalmente costoso y teóricamente difícil con filtros Kalman y sensores bien caracterizados. Sin embargo, en 2010, se nombró un doctorado [Sebastian Madgwick] publicó un artículo para un algoritmo económico de computadora que se ejecutaba a frecuencias de muestra de hasta 10 Hz y funcionaba mejor que algunas alternativas propietarias [PDF with source code!]. Según una revisión de la literatura, este algoritmo es tan popular (y funciona tan bien en dispositivos con recursos limitados) que supongo que el BNO055 es un poco inspirador [Madgwick’s] trabaja.

En cuanto al hardware del nodo IMU, ¡aquí está! Hace unos años, este proyecto habría requerido incontables horas de diseño de algoritmos de fusión y configuración de sensores, pero el BNO055 tuvo la amabilidad de descargar el trabajo en una pieza de silicio de $ 10.

Matemáticas de fideos

Y ahora algo de matemáticas. No te preocupes por este. Si puedes conceptualizar vectores, te irá bien.

Supuestos del mundo real:

Para reproducir de manera convincente nuestros fideos de la vida real como un doble virtual, debemos establecer las leyes de la tierra. Estas reglas son "gratuitas" y nos ayudarán a encontrar la solución que mejor se acerque a los límites de nuestra vida real.

Primero asumiremos que la distancia entre nodos es fija. Registramos nuestros nodos, por lo que esta suposición también debería aproximarse bastante bien en la vida real **. Entonces declararemos el posición del nodo de partida también para ser reparado. Es por eso que nuestros fideos se pueden enrollar y torcer, pero no se pueden traducir. Finalmente declaramos que la forma entre los dos nodos es un arco suave. Con esa última suposición, observe que más nudos significa una mejor aproximación de la forma, pero descubrí que 3 nudos ya son suficientes para engañar a la mayoría de nosotros.

Con estas reglas, estamos listos para comenzar a dibujar.

** De hecho, la distancia entre nodos hace cambian cuando se fijan en la superficie exterior de nuestro objeto flexible. Una mejor aproximación sería montar las IMU en el centrar de nuestro objeto flexible, que, a pesar de un movimiento flexible, realmente hace mantener una longitud constante.

La guía de Noob para cuadriplicar como rotaciones:

Bien, ahora la gran pregunta. El BNO055 escupe una orientación codificada como cuarteto unitario. ¿Qué es el espacio en cuatro dimensiones? cuarteto unitario? Un cuarteto es una colección de 4 números, uno real y 3 imaginarios. Podemos representarlos como una tupla de cuatro partículas: (W x Y Z). Un cuádruple unitario tiene Estándar (Piense en el tamaño) de 1. Hoy en día, los cuádruples unitarios tienen propiedades matemáticas muy convenientes que los hacen extremadamente agradables para representar rotaciones en 3D. (Lado: un Orientación es solo una rotación con un punto de partida.) Los cuaterniones también tienen reglas muy bien definidas sobre cómo sumarlos y multiplicarlos.

Bien, entonces, ¿cómo nos ayudan cuatro números a representar la rotación? Resulta que podemos codificar dos piezas de información dentro de un cuádruple unitario: un eje (representado como un vector 3D) y un ángulo (solo escalar).

Antes de que la gente acordara unánimemente que los Cuaternarios son mucho mejores, solíamos representar las orientaciones en 3D mediante 3 rotaciones sobre los ejes del plano 3D, generalmente llamado rollo, tono, y desviación. Esta representación tiene varias complicaciones. Primero el el orden de rotación importa. Lo que eso significa es que la elección de rodar, en lugar de, digamos, lanzar, ¡nos colocará en dos orientaciones finales diferentes! El siguiente número es un fenómeno llamado bloqueo de cardán. En una palabra, si en nuestra secuencia de rotaciones rotamos en otra rotación eje de modo que ambos se alineen, perdemos algo de libertad. (Para una explicación mucho mejor, eche un vistazo a este clip.) Una tecla cardán también nos impide poder dirigir un camino recto de una orientación a otra.

¡Cuaterniones a la salvación! en lugar de codificar una orientación como tres rotaciones separadas de una orientación inicial, los cuádruples utilizan solo una rotación. Hacerlo depende del Teorema de rotación de Euler, que, en nuestro caso, establece que tres rotaciones cualesquiera alrededor de los tres ejes del plano 3D se pueden resumir en una sola rotación alrededor de cualquier eje que atraviese el mismo origen. Por lo tanto, en lugar de tener que retener información en tres rotaciones separadas, solo necesitamos retener una, y eso es exactamente lo que hace un cuádruple.

Recuerda que por cuatro codigos rotación preservando tanto el eje como el ángulo, en realidad no estamos trazando este eje o ángulo. Más bien usamos el cuádruple como operador. Debido a que hay reglas muy claramente definidas para multiplicaciones cuádruples con vectores 3D, normalmente comenzamos con un vector, calculamos un par de productos cuádruples con este vector y el cuádruple, y obtenemos un vector de regreso, que es el resultado de rotar el vector por el eje y cantidad angular conservados en el cuádruple.

El algoritmo SLERP:

Quizas el más una característica útil de los quads para este proyecto es su capacidad para proporcionar interpolaciones limpias. Las interpolaciones suenan complicadas, pero la idea es bastante simple. Imagina que tenemos dos orientaciones: orientación inicial (A) y orientación final (B). Queremos rotar suavemente desde la orientación inicial a la orientación final a lo largo del camino más corto, que sería un arco suave. Además, queremos hacer pasos uniformemente espaciados a lo largo del camino para ir de principio a fin.

El algoritmo de interpolación de línea esférica (SLERP) hace precisamente eso, tomando dos cuádruples para representar nuestra orientación inicial y final, así como un escalar (de 0 a 1) para determinar qué tan lejos del camino queremos terminar. Aunque la idea parece bastante simple, resulta que escribir un algoritmo equivalente que haga lo mismo con matrices rotativas es realmente difícil. Simplemente no hay una manera clara de interpolar sin problemas de una orientación a otra cuando nuestras orientaciones están codificadas como matrices rotacionales. Si nuestro proyecto requiere interpolaciones suaves, nuestra mejor opción es utilizar cuádruples.

Si comenzamos con cuádruples, el diagrama que se muestra aquí puede ser un poco engañoso, así que aquí hay un recordatorio rápido. No olvides que usamos cuádruples como operadores. Cuando usamos quads unitarios para almacenar información rotacional, los usamos como usaríamos una función. Nuestra entrada es un vector. Luego calculamos una cantidad de productos cuádruples. Finalmente, nuestra salida es un vector. ¡Así que este diagrama en realidad no muestra cuádruples! Más bien, muestra dos vectores frente a la orientación codificada por el cuadruplica A y B.

El algoritmo de Doodle de fideos:

Teniendo en cuenta nuestras suposiciones iniciales y una forma inteligente de interpolar sin problemas entre orientaciones, estamos completamente equipados para diseñar nuestros fideos en 3D. El algoritmo es un poco así:

Sea un segmento definido como la sección de longitud entre nodos adyacentes. Primero divida la longitud del segmento en un número definido de subsegmentos.

Comenzando en la orientación de la mirada, para cada par de orientaciones adyacentes, traslade un vector de la longitud del subsegmento a la cabeza del vector anterior (con la suma del vector), rote ese vector por la fracción actual de la rotación total calculada con SLERP, y luego dibuja el vector.

En resumen, cuantos más subsegmentos extraemos de un cuarteto al siguiente, más convincente será nuestra descripción.

Carrete de demostración

El algoritmo anterior funciona con un clip de 60Hz; es mucho más divertido de ver cuando vemos el resultado en movimiento.

La magia de un mundo de sensores MEM comercializados:

Hoy en día, nuestros teléfonos están llenos de fuertes sensores integrados para dar sentido a nuestro entorno. Condiciones como presión, temperatura, orientación y posición global están a nuestro alcance; a veces es fácil olvidar cuánta información sobre nuestro mundo se saca de nuestro bolsillo. Los desarrolladores de software adoran estos sextos sentidos que viven en nuestro mundo. Diablos, imagínese la tecnología de conducción compartida sin GPS o videollamadas sin una cámara incorporada.

Si bien los creadores de software y los consumidores están cosechando los beneficios de la conectividad telefónica, todavía hay una gran cantidad de territorio inexplorado que simplemente juega con los sensores mismos, fuera del teléfono. ¡Ahí tienes! Mi desafío para usted, querido lector, es trazar un mapa de este territorio inexplorado. ¡Profundiza y explora sus límites! Y, por supuesto, si está buscando algo divertido, avísenos.

Finalmente, si te gusta lo que ves aquí, ¿por qué no intentas construirlo? Los archivos de PCB, el código de imagen y el firmware se pueden procesar en Github.

  • Un dron dice:

    Con solo mirar la animación del póster, parece que la proyección de imitación tiene un punto fijo más a la izquierda, mientras que lo físico que rodea al tipo con el moño humano tiene un punto que se mueve más a la izquierda. Entonces, ¿no se reproducen todos los grados de libertad (al menos la proyección 2D)? Hmmm ... Y NO, no he leído las cosas relacionadas todavía, y probablemente no lo he leído. Lo siento, no estoy tan interesado. Solo quiero señalar lo obvio que falta en el PO aquí en HaD (no es que no me guste la publicación, gracias HaD).

    • Charles S Haase dice:

      El punto más a la izquierda gira, pero no se traslada. Aunque es posible usar giroscopios para medir la traslación a lo largo del tiempo, eventualmente comenzarán a desviarse. Por lo tanto, necesita un sistema de posicionamiento absoluto para volver a cancelarlos periódicamente (como GPS, sistema de visión de cámara, etc.). Mapear el punto más a la izquierda a un punto fijo en la pantalla y mostrar todo lo demás relacionado con él significa que puede ignorar la deriva. Y las aplicaciones típicas para esto (posición del brazo o tentáculo, por ejemplo) tendrán un punto de hombro conocido en relación con el centro del cuerpo (o cerebro), por lo que lo que se muestra arriba es apropiado para esto.

    • sacristian16 dice:

      RTFA.
      “Más adelante declararemos también la posición del nodo inicial a reparar. Por lo tanto, nuestros fideos se pueden enrollar y torcer, pero no se pueden traducir "

    • jpa dice:

      Parece una forma aceptable de hacerlo, ya que las IMU baratas no pueden rastrear muy bien una posición si no hay otro método de posicionamiento (como GPS) para cancelar la operación. Entonces, esto usa solo un trazo de orientación y captura la forma y orientación del fideo, pero no su posición.

      • Delgir dice:

        Parece que Lighthouse Lighthouse está tratando de resolver. Parece que hay un buen trabajo para revertir el sistema, por lo que debería tener una solución viable en el futuro previsible.

    • alemán dice:

      En primer lugar, este problema se analiza en el resumen, no es necesario que siga ningún enlace.

      En segundo lugar, si ni siquiera ha leído el resumen, entonces STFU.

  • Ostraco dice:

    ¿Se pregunta si los militares desarrollaron alguna de estas cosas antes que él? Navegación inercial y todo lo demás.

  • seanrhinehart dice:

    Presumiblemente, para simplificar la computadora, la posición inicial se considera un origen y es fija, lo que excluye la posibilidad de medir la traslación. Si desea modelar una traslación, puede definir un vector de traslación desde un punto de referencia arbitrario al primer nodo. En contraste con el espacio (idealmente) uniforme entre los nodos de fideos, la distancia entre el punto de referencia exterior y el primer nodo de fideos será variable.

  • Kaius dice:

    ¡Proyecto muy bueno! Recuerdo haber usado el algoritmo de Madgwick en una escuela de posgrado para un proyecto de seguimiento corporal similar. Lástima que el BNO055 no estuviera disponible.

  • Adobe / Flash Hate dice:

    Noodle SLERP-ing, en última instancia, ¿tiene un propósito?

    Me voy ahora.

  • Khordas dice:

    Esto podría cerrar el bucle de algunos de los edificios de tentáculos que he visto y dar como resultado un tentáculo realmente manejable, en el sentido de poder llegar a un punto deseado en el espacio o lograr una forma deseada, en lugar de solo sugerir sugestivamente.

  • Me dice:

    Déjame ser el primero en decir: ¡¡¡CONTROLADOR DE VR !!!
    Quiero esto con guantes, o mejor aún, con un traje completo.

  • theokelo dice:

    Se ve hermoso.

Fernando Román
Fernando Román

Deja una respuesta

Tu dirección de correo electrónico no será publicada.