2011-11-13 8 views
48

Tengo un proyecto tipo robótica con Arduino Uno, y para resumir, estoy experimentando con algunos algoritmos de inteligencia artificial. Sin embargo, necesito implementar algunos algoritmos de matriz de alto nivel que serían bastante simples usando NumPy/SciPy, pero son una pesadilla total en C o C++. Incluso con las bibliotecas por ahí, esto es simplemente ridículo.¿Hay alguna manera de "compilar" el código de Python en un Arduino (Uno)?

¿Hay alguna forma en que pueda hacer este proyecto en Python? Creo que escuché algo sobre el Mega que tiene esta capacidad, pero tengo un Uno, y reemplazarlo no es una opción en este momento (eso retrasaría un poco el proyecto). También escuché algunas sobre el uso de Python para comunicarme al Arduino a través de USB, pero no puedo tener el cable USB mientras está funcionando. Necesito poder subir el programa y terminarlo.

¿Hay alguna opción, o acabo de llegar a un callejón sin salida?

+2

¿Este es un problema XY? ¿Desea saber cómo usar matrices de manera efectiva en Arduino (usando C++) o quiere saber cómo compilar Python? – Pubby

+2

Puedo estar equivocado, pero ¿no se trata solo de compilar python a avr-c? – danem

+0

Esto es más un problema de ajuste de álgebra lineal. Estoy planeando implementar algunos ajustes por mínimos cuadrados para determinar la relación entre la potencia enviada a los dispositivos y la entrada que recibió de los sensores. Tengo que implementar este algoritmo para etapas múltiples, como en la etapa 1 = moverme allí; etapa 2 = agarrar algo; etc. Cada una de estas etapas tiene una combinación diferente de entradas y salidas, por lo que el tamaño de las matrices con las que estoy trabajando no se definirá de la forma habitual en "C". –

Respuesta

19

Hubo una charla sobre el uso de Python con la robótica en este año PyConAU llamado Ah! I see you have the machine that goes 'BING'! por Dr. Graeme Cross.

La única opción recomendada para utilizar Python en una placa de microcontrolador era PyMite que creo que también se conoce con el nombre Python-On-A-Chip.

Ha sido portado a una gama de placas, específicamente menciona el Arduino Mega que dijiste que no era una opción para ti, pero es posible que sea compatible con otras placas Arduino.

Sin embargo, debido a que es una versión de "baterías no incluidas" de Python, es más que probable que tenga un problema real al ponerse numpy/scipy, etc. en funcionamiento.

Como han sugerido otros carteles, implementar en C podría ser el camino de menor resistencia.

Actualización: nuevamente, no específicamente para Arduino, pero pyMCU busca proporcionar python en un chip. El autor afirma que puede considerar desarrollar una versión Arduino de pyMCU si hay suficiente interés.

+8

Un nuevo proyecto de kickstarter para "Micro Python" también podría ser de interés para algunas personas. (http://www.kickstarter.com/projects/214379695/micro-python-python-for-microcontrollers) –

+0

Creo que el proyecto de Micro Python usa una placa especial y no fue portado a Arduino. Sin embargo, tienen Python 3 .. – Gadi

3

He comenzado a trabajar en un compilador "Little Python" a C++ (llamado Pyxie - un juego de Py CC-Pyc-C), con el objetivo específico de compilar un subconjunto de pitón sano a C++ de modo que pueda correr en un Arduino.

Esto está lejos de estar completo al momento de escribir (0.0.16), pero actualmente puede compilar un subconjunto muy pequeño de python, suficiente para que se ejecute el ejemplo de arduino "blink". Para sustentar esto, tiene un perfil de compilación, que esencialmente significa "compilar usando la cadena de herramientas arduino".

Un programa se puede compilar el siguiente aspecto:

led = 13 

pinMode(led, OUTPUT) 

while True: 
    digitalWrite(led, HIGH) 
    delay(1000) 
    digitalWrite(led, LOW) 
    delay(1000) 

Este analiza, realiza análisis (como la inferencia de tipos, etc.), compila en C++, que luego se compila en un archivo hexadecimal, que se puede cargar en tu dispositivo.

Hay un largo camino por recorrer antes de que sea útil, pero está progresando y tiene una hoja de ruta/etc.

En particular, una diferencia clave entre Micropython (y PyMite) es que está diseñado para recopilar a dispositivos muy pequeños para funcionar tanto con la aplicación. (Esto también significa que es muy diferente de cosas como ShedSkin que, mientras que un compilador de Python a C++ se dirige a entornos de ejecución más grandes)

+1

¡Muy bueno! Estoy ansioso por ver cómo evoluciona esto con el tiempo. – kevinsa5

Cuestiones relacionadas