¿Puedo ejecutar matlab en un microcontrolador? y si si cual?

Estoy trabajando en un proyecto de robótica complicado que involucra el algoritmo de procesamiento de imágenes de MATLAB y la interfaz LEGO MINDSTORMS, así como un Arduino. El sistema funciona de forma dependiente en una secuencia de acuerdo con cada lectura, ya sea del Arduino o para dar un comando a los ladrillos LEGO.

La pregunta aquí es ¿puedo reemplazar el procesamiento de la PC a otro microcontrolador externo como Raspberry Pi, por ejemplo, pero sin convertir el código matlab como instalar MATLAB en el microcontrolador para compilar el código? De ser así, qué microcontrolador sería conveniente para esto y si no cuál es la mejor solución para controlar el sistema sin necesidad de una PC.

Hablando desde cierta experiencia en este sentido, creo que le resultará mucho más problemático de lo que vale la pena.
Tal vez una PC no sea tan mala idea: intel.com.au/content/www/au/en/compute-stick/…

Respuestas (3)

Sí, hay algunos procesadores lo suficientemente potentes como para ejecutar (algunos) programas escritos en el lenguaje MATLAB directamente, reemplazando una PC.

Hasta ahora, solo conozco 4 formas de hacerlo:

Si tiene una placa base lo suficientemente potente como para ejecutar Linux , como BeagleBone o Raspberry Pi o Cubieboard, podría:

  • Instale la herramienta Octave de código abierto , que puede comprender y ejecutar muchos programas en lenguaje MATLAB directamente. "Ejecutar Matlab Computer Vision en Raspberry Pi con Linux Octave. Parte 1". (a)
  • Instale la herramienta Scilab de código abierto , que puede comprender y ejecutar algunos programas en lenguaje MATLAB directamente.
  • Instale la herramienta FreeMat de código abierto , que puede comprender y ejecutar algunos programas MATLAB directamente.

A menudo, estos enfoques no se molestan en producir ningún gráfico en el sistema integrado, o utilizan la biblioteca matplotlib de código abierto que está diseñada para ser fácil de usar desde MATLAB, así como para ejecutarse en cualquier máquina que pueda ejecutar Python. -- incluso máquinas que no pueden ejecutar MATLAB.

Si bien Raspberry Pi puede ejecutar (algunos) programas escritos en el lenguaje MATLAB utilizando los enfoques anteriores, por desgracia, Raspberry Pi no es lo suficientemente compatible con PC para ejecutar MATLAB. "¿MATLAB para Linux en Pi? No". (b)

Si tiene alguna mini-PC "compatible con PC" (procesador x86), como muchos sistemas integrados PC104 y (¿todos?) PCI-104 , o el NUC , o la gran cantidad de microATX y placas base más pequeñas, podría usar cualquier de las opciones anteriores, o también podría:

  • Instale MATLAB para Windows o MATLAB para Linux. "Requisitos del sistema MATLAB para Linux" (c) (d) "Instalar Matlab en Linux" (e)

alternativas que no cumplen con ese criterio

Probablemente ya sepa que "ejecutar código MATLAB directamente en un microcontrolador independiente" no es tan popular; otros enfoques incluyen

  • Uso de MATLAB para desarrollar modelos de Simulink que se ejecutan como aplicaciones independientes. "Compatibilidad con Raspberry Pi de Simulink" (f) ; "Ejecutar modelos de Simulink en... Arduino... BeagleBoard... Gumstix... Raspberry Pi... LEGO Mindstorms..." ( g) "Programación de Raspberry Pi usando Simulink" (h) (i) "MATLAB / Simulink en BeagleBone Black" (j) "Prototipos rápidos de BeagleBoard con Matlab y Simulink" (k)
  • ejecutar código MATLAB en una PC que se comunica de un lado a otro con un microcontrolador, para hacer cosas que ninguno podría hacer solo. "el paquete de soporte de MATLAB para hardware Raspberry Pi" (l) ; "Soporte de ThingSpeak de MATLAB... con Arduino" (m)
  • Use MATLAB para probar un montón de algoritmos de alto nivel y use esa implementación para estimar cuánta RAM y potencia de procesamiento necesita, luego vuelva a implementar esos algoritmos desde cero para ejecutarlos de forma independiente en prácticamente cualquier microcontrolador con al menos esa cantidad. RAM y potencia de procesamiento. (Normalmente en Forth o C o C++, ya que prácticamente todos los microcontroladores tienen un compilador para esos lenguajes y casi ningún otro lenguaje).

Puede exportar código C desde MATLAB utilizando MATLAB CODER y compilarlo con un compilador adecuado (o compilador cruzado). Cualquier plataforma adecuada probablemente tenga un compilador de C disponible.

Si los recursos (como la RAM) están disponibles en un microcontrolador para ejecutar el código y, de ser así, lo suficientemente rápido, son otras cuestiones.

También es posible exportar código de lenguaje de descripción de hardware desde MATLAB si necesita alta velocidad, que se puede usar para programar un FPGA.

Los complementos no son económicos si estás en un entorno comercial (creo que los términos académicos son considerablemente más generosos).

El problema aquí es que tengo la duda de que algunas funciones de MATLAB CODER no pueden convertirlo en C y no son compatibles con él, por lo tanto, ¿puede un microcontrolador actuar como una PC para operar MATLAB y compilar el código o instalar un sistema operativo compatible con MATLAB? y si hay alguna posibilidad ¿cómo se podría hacer y a través de qué microcontrolador? (esta era específicamente la pregunta)
No, no puede ejecutar MATLAB en un microcontrolador a menos que el microcontrolador sea esencialmente una PC que ejecute un sistema operativo compatible con MATLAB.
Además del Matlab Coder 'sencillo', también existe la extensión del codificador integrado, que está diseñada específicamente para MCU/MPU integrados, incluidos los AVR.
@venny Quiere ejecutar código nativo, no usar MATLAB como un sistema de desarrollo cruzado.
@Spehro Pefhany Por supuesto que eso no es posible, como dijiste anteriormente.

Una vez convertí un proyecto Matlab bastante grande a C mediante una herramienta automática (compilador Tmc) y lo ejecuté en Android con el procesador Arm. El problema del lenguaje Matlab es que todas las variables deben asignarse dinámicamente y el tamaño de letra no está definido. Por lo tanto, la eficacia de la traducción depende de la implementación de malloc/free. De hecho, la asignación de memoria dinámica es peligrosa e inaceptable para aplicaciones de seguridad.