¿Es un Arduino/PI lo suficientemente fuerte/bueno para mi aplicación o necesito hardware personalizado? [cerrado]

Soy completamente nuevo en el uso de Arduinos/PI y actualmente estoy aprendiendo un poco para construir una unidad de control para mi proyecto de maestría.

Mi configuración:

  1. 5 IMUs que miden aceleración y rotación sobre 3 ejes. Cada uno requiere un I2C.

  2. 4 fuentes de voltaje de CC variables

  3. 4 amortiguadores magnetorreológicos

Las IMU envían sus datos al Arduino/PI donde se deben resolver 26 ODE no lineales simultáneamente. Un controlador de lógica difusa utilizará los valores calculados para determinar el voltaje de salida de cada fuente y luego se envía a cada amortiguador. Y el proceso continúa. El modelo se construirá en Simulink y se exportará a través de sus cajas de herramientas a arduion/pi.

Mis preguntas:

  1. ¿Hay alguna forma de conectar los I2C de las 5 IMU a los 3 o más pines de las placas?

  2. En su opinión experimentada/profesional, ¿alguno de los productos disponibles de Arduino/PI es lo suficientemente potente como para hacer mis cálculos en tiempo real?

Podré conseguir algún hardware personalizado de una empresa, pero estoy seguro de que me cobrarán un brazo y dos riñones por ello.

EDITAR:
Según algunas búsquedas rápidas, la mayoría de las IMU tienen una frecuencia de muestreo de hasta aproximadamente 1000 Hz. Los amortiguadores responden a un voltaje de entrada en unos 15 ms.

Las ecuaciones que usaré están en un pdf de este enlace: https://www.pdf-archive.com/2016/11/02/formulas-total/formulas-total.pdf

Hay demasiados para que los escriba aquí.

El controlador de lógica difusa tendrá 6 conjuntos difusos para cada una de las cuatro ruedas y 4 conjuntos difusos de salida, uno para cada rueda. Entonces, en total, 28 conjuntos borrosos, cada uno de los cuales consta de 5 funciones de membresía gaussianas y dos funciones de membresía sigmoideas. La matriz asociativa difusa tendrá un tamaño de 7x7. Habrá 3 de estas matrices por rueda, lo que da como resultado el valor de 6 conjuntos borrosos como se indicó en la primera oración de este párrafo.

Espero que esto responda al menos algunas de las preocupaciones de los comentarios.

Es posible que desee considerar un FPGA de tamaño mediano para esto. Hay varias placas de precio razonable (para FPGA) que puede usar para esto.
¿Quizás tienes un producto específico en mente? ¿Uno que pueda usar como línea de base para futuras investigaciones?
Mi experiencia en FPGA es un poco deficiente, por lo que querrá que alguien más lo ayude a tomar su decisión final. SparkFun vende el Mojo v3 con un ATmega32U4 y un Spartan 6 LX9, pero es posible que necesite un LX16 o incluso un LX25 para su proyecto.
El Nexys4 es bastante bueno
Diría que es difícil decir si un Pi/Adurino es lo suficientemente potente. Primero, no dice mucho sobre sus limitaciones de tiempo, es decir, qué tan rápido necesita el resultado. En segundo lugar, se desconoce la complejidad del algoritmo y la eficiencia de su implementación. Un FPGA ofrece el más alto rendimiento, pero puede ser que esto no sea necesario. En este caso, una Pi podría ser más conveniente.
Demasiado pesado para arduino, suena demasiado pesado para Pi. Considere ARM o Atom, si duda de su FPGA foo.
(Pi es ARM, para aquellos que preguntan. Una forma erudita de ARM, pero ARM, no obstante).
Actualicé mi publicación. Creo que proporcioné suficiente información para sus preocupaciones. Si me olvidé algo, házmelo saber y lo actualizaré lo antes posible.
Esta pregunta es demasiado amplia, y si realmente está haciendo esto para su proyecto de maestría, entonces es mejor que pueda ejecutar los cálculos usted mismo. Es casi insultante para ti mismo preguntar a otras personas cómo hacer esto. Es difícil, pero es un proceso por el que debes pasar. En resumen, debe averiguar el ancho de banda de su sistema y qué tan rápido desea calcular, cuántos se multiplica y con qué precisión. Luego encuentre un sistema digital que pueda hacer eso por usted. Micros ->DSP's-> FPGA's en orden de tiempo real. Es posible que desee tomar una clase de procesamiento en tiempo real o aprender con recursos en línea.

Respuestas (1)

(demasiado largo para un comentario)

Primero, como dice @sweber, deberá calcular sus requisitos reales: cuántos cálculos y con qué frecuencia. Con esas cifras en la mano puedes hacer una elección.

Dentro de Arduino hay mucha variación, desde el humilde Uno de 8 bits hasta el Due de 32 bits con monstruos que ejecutan Linux en el lateral.

En cuanto a una Pi: una Pi con Linux puede no ser una buena idea para un sistema en tiempo real: el kernel de Linux y otros procesos pueden interferir en momentos impredecibles. Pero puedes usar un Pi bare-metal, y es una bestia rápida. Pero esto no se hace muy a menudo, por lo que no encontrará mucha ayuda en la web.

Así que vuelve a funcionar para usted: cree la simulación, utilícela para obtener los números y luego podrá tomar una decisión.

He actualizado mi publicación. Además, con respecto a Pi bare-metal, ¿es posible usar el paquete de generación de código de Simulink para ayudar? Puede generar código en bastantes idiomas, en particular C, que parece ser lo que se debe usar en Pi bare-metal. EDITAR: ¿Será la comunicación entre los periféricos y el PI el principal problema? Si entiendo todo el proceso correctamente, ¿esencialmente no habrá controladores?
Si vas completamente desnudo, no hay nada a menos que lo agregues tú mismo. Eso es puro metal... No sé sobre el código Simulink exportado, ¿usa alguna biblioteca externa? ¿Cómo accede a las entradas y salidas?
Después de una lectura ligera, parece que hay que hacerlo todo. Incluyendo controladores de escritura para la IMU, por ejemplo. No estaré haciendo eso. Obtendré una placa más fuerte si no es posible en un PI que ejecuta mi código Simulink exportado. No tengo suficiente experiencia o conocimiento en codificación para hacer la mayor parte por mí mismo. Mi marco de tiempo definitivamente no es lo suficientemente largo para aprenderlo. Tal vez cuando haga mi doctorado. Tal vez.
Como dijo sweber: primero determine sus requisitos, tanto la cantidad de cálculos como la frecuencia con la que deben realizarse. ¿Y qué tan en tiempo real es su requerimiento, se permite un contratiempo ocasional? De lo contrario, es probable que el uso de un sistema operativo que no sea en tiempo real como Linux lo meta en problemas.
Gracias por el consejo. Consultaré al personal de la facultad de EE sobre mis nuevos conocimientos (?).