¿Qué tan computacionalmente poderoso es una placa Arduino Uno?

8

¿Qué puede hacer realmente una placa Arduino como la Uno? Por supuesto, cosas simples como controlar un par de servos son muy fáciles. Sin embargo, no creo que una placa Uno sea capaz de preformar 3D SLAM en tiempo real a partir de datos de nubes de puntos recopilados de un sensor Kinect en un robot móvil, ¿verdad? Si el robot tuviera alguna velocidad, el Arduino no podría mantener el ritmo, ¿correcto? ¿Podría hacer 2D SLAM mientras se mueve y poder seguir el ritmo? ¿Qué pasa con tomar 1/10 de los puntos del sensor Kinect y procesar solo esos?

Básicamente, ¿cuáles son algunos ejemplos de las limitaciones de recursos de una placa Arduino?

Golmschenk
fuente

Respuestas:

6

Depende: de la cantidad de puntos de referencia en el mapa de características, y de cuánto tiempo está dispuesto a invertir ajustando el algoritmo para la velocidad, y una cantidad de otros parámetros que puede o no puede controlar para una aplicación determinada.

Editar: Como un experimento mental , creo que teóricamente sería lo suficientemente poderoso como para hacer SLAM extremadamente simple casi en tiempo real en un entorno muy artificial, como el centro del piso de un gimnasio con algunos conos establecidos. Podría tomar una sola línea de escaneo desde el Kinect y actualizar un mapa interno 2D de baja resolución, actualizándose periódicamente (por ejemplo, cada 10 segundos).

El 2K RAM del Uno probablemente sería un factor decisivo , pero el Mega podría tener suficiente (8K) y hay un truco para actualizarlo a 520K.

En la práctica, hacer cálculos de matriz de punto flotante en un procesador de 8 bits no es una buena idea.

Paul Williams
fuente
Ok, entonces estás diciendo que incluso intentar un SLAM 2D con el Arduino será un poco difícil. Gracias.
golmschenk
6

El Arduino siempre ha tenido poca potencia.

Puede obtener una pila de stm discovery u otra placa de desarrollo basada en ARM por el precio de un solo arduino, y cada una de esas placas tendrá órdenes de magnitud más poderosas que el arduino.

La ubicuidad del arduino también ha obstaculizado muchos proyectos que deberían haber conocido mejor. La estabilización de Quadrotor y la ejecución del código g de estilo Reprap son dos áreas principales en las que el arduino se ha visto obligado a superar sus capacidades y se nota. (El proyecto ardrupilot necesita tres arduinos).

Afortunadamente, las cosas de adolescentes / debido / leaflabs ayudarán a que el desarrollo de ARM sea más amigable. Muchos de los proyectos más nuevos / mejores, como smoothie, openpilot, etc., también han dado el salto.

usuario65
fuente
1
De acuerdo, sin duda! Compré un brazo robótico simple en una antigua tienda de electrónica, vintage 1980. El controlador tiene 19MHz, en comparación con los 16 de Arduino, ¡y 3 veces la RAM! ¡Desde 1980! Lo triste es que la gente responde al encanto de la pequeña pizarra azul. Arduino es muy parecido a Java: genial por lo que es, pero con poca potencia y uso excesivo más allá de cualquier razón.
Chris
@ Chris, para ser justos, dudo que el brazo robótico costara solo $ 24 en 1980 (incluso hoy es difícil encontrar uno tan barato que no sea basura completa). También dudo que tuviera una gran comunidad de usuarios y una enorme biblioteca de software libre disponible para ello. El valor del hardware es más que solo la velocidad del reloj y la memoria. Muchos de los productos han fallado porque eran demasiado caros mientras estaban infrautilizados, incluso si eran técnicamente superiores.
Cerin
4

Las especificaciones en bruto de los microcontroladores del Arduino enumeran velocidades de reloj de hasta 16 o 20 MHz, alrededor de la velocidad de una computadora Intel 386 de mediados de la década de 1990.

Eso suena prometedor, hasta que considere el hecho de que no admite de forma nativa las matemáticas de coma flotante: la medición " FLOPS " por la cual se compara la mayoría de las CPU. He visto algunas demostraciones de arduino que calculan la velocidad del Arduino a aproximadamente 60 kFLOPS, mientras que el Intel 386 a 20 MHz hace algo así como 170 kFLOPS (según esta página ).

Además, debe tenerse en cuenta que el Arduino hace matemática de 8 bits y el 386 está haciendo matemática de 16 bits y 32 bits. Una placa DSP podría ser más adecuada para ese tipo de adquisición de datos, pero no estoy en condiciones de aconsejar allí.

Es posible que ese código funcione en un entorno tan restringido como el Arduino, pero requerirá mucha optimización. Sería mejor para usted usar una CPU más potente para implementar esos algoritmos; asegúrese de que funcionan en la CPU potente, luego intente optimizar para la CPU débil.

Ian
fuente
Pero debes recordar que el Apple II tenía una memoria RAM 6502 (8 bits, 1MHz) y 16K. AppleSoft BASIC era de coma flotante, y su "aplicación asesina" era el enlace VisiCalc . Puedes hacer mucho con hardware limitado, cuando eso es todo lo que tienes. (y toda la industria está detrás de esto)
Paul Williams
1
Estás comparando un microcontrolador con un microprocesador. 386 no tiene un generador de hardware PWM de seis canales, un ADC, un comparador analógico, sus dos dispositivos están destinados a dos trabajos diferentes. Además, si alguien necesita un alto rendimiento de punto flotante, probablemente usará una unidad con FPU, pero realicé muchos proyectos que no necesitaban punto flotante, y en algunos casos es una cuestión de optimización. El ATMega va casi 20MIPS a 20Mhz mientras que el 386 va a 9.9 MIPS a 33 MHz.
Diego C Nascimento
1
Esta pregunta es sobre SLAM, por lo que FLOPS es la única métrica relevante para usar en la comparación de estas 2 unidades de procesamiento.
Ian
2

Por el precio de un Arduino Uno, o menos, una alternativa reciente es el TI Stellaris Launchpad a $ 12.99 (incluido FedEx en todo el mundo): Arm Cortex M4 con un excelente conjunto de biblioteca incorporado llamado StellarisWare que reside en ROM, por lo que su Flash y RAM permanecen libres para el uso de la aplicación.

Poder computacional enormemente más alto que el Arduino Uno, pero hasta ahora sin la participación ubicua de la comunidad que Arduino ha cosechado.

Anindo Ghosh
fuente
1

Es cierto que el Arduino comenzó a verse con poca potencia ahora que las personas son de Raspberry Pis, pero creo que depende más de la aplicación. Me gusta el arduino porque el código es realmente fácil de escribir, es muy fácil actualizar el código nuevo y es muy fácil conectar nuevos sensores. No lo usaría para una aplicación de visión como kinect o cosas de cámara web, pero puede hacer mucho más que hablar con servos. Un buen ejemplo sería una aplicación de tipo segway; El Arduino es ideal para hablar con sensores de acelerómetro, hacer algunos cálculos espaciales en 3D y luego hablar con servos para mantener el equilibrio.

LoveMeSomeCode
fuente
Creo que es importante comparar manzanas con manzanas aquí y comparar el chip ATMega de Uno con otros microcontroladores. El ARM de 700MHz en la Raspberry Pi es una naranja. Dicho esto, los chips ARM Cortex-M3 en el Arduino Due / LeafLabs Maple y los chips PIC32 en los tableros Digilent chipKIT, etc., expulsan completamente al Uno del agua computacionalmente con el mismo entorno de programación.
Joe Baker, el