Qual é o poder computacional de uma placa Arduino Uno?

8

O que uma placa Arduino como a Uno realmente pode fazer? É claro que coisas simples como controlar dois servos são muito fáceis para isso. No entanto, não acho que uma placa Uno seja capaz de pré-formar SLAM 3D em tempo real a partir de dados da nuvem de pontos coletados de um sensor Kinect em um robô móvel, certo? Se o robô tivesse alguma velocidade, o Arduino não seria capaz de acompanhar, correto? Poderia fazer SLAM 2D enquanto se move e ser capaz de acompanhar? Que tal pegar 1/10 dos pontos do sensor Kinect e processar apenas esses?

Basicamente, quais são alguns exemplos das limitações de recursos de uma placa Arduino?

golmschenk
fonte

Respostas:

6

Depende - do número de pontos de referência no mapa de recursos e de quanto tempo você está disposto a investir ajustando o algoritmo para velocidade, além de vários outros parâmetros que você pode ou não conseguir controlar para um determinado aplicativo.

Edit: Como um experimento de pensamento , eu acho que teoricamente seria poderoso o suficiente para fazer SLAM quase em tempo real extremamente simples em um ambiente muito artificial, como o centro de uma academia com alguns cones definidos. Pode ser necessária uma única linha de digitalização do Kinect e atualizar um mapa interno 2D de baixa resolução, atualizando periodicamente (digamos a cada 10 segundos).

A RAM de 2K do Uno provavelmente seria um disjuntor, mas o Mega pode ter o suficiente (8K) e há um truque para atualizá-lo para 520K.

Na prática, fazer cálculos de matriz de ponto flutuante em um processador de 8 bits não é uma boa ideia.

Paul Williams
fonte
Ok, então você está dizendo que até tentar SLAM 2D com o Arduino será um pouco difícil. Obrigado.
golmschenk
6

O Arduino sempre teve um poder hormonal baixo.

Você pode obter uma pilha de stm discovery ou outra placa de desenvolvimento baseada em ARM pelo preço de um único arduino, e cada uma dessas placas terá ordens de magnitude mais poderosas que o arduino.

A onipresença do arduino também prejudicou muitos projetos que deveriam ter conhecido melhor. A estabilização quadrotor e a execução do código g no estilo Reprap são duas áreas principais em que o arduino foi forçado muito além de suas capacidades, e isso mostra. (O projeto ardrupilot precisa de três arduinos.)

Esperemos que o material para adolescentes / devidos / folhetos ajude a tornar o desenvolvimento do ARM mais amigável. Muitos dos projetos novos / melhores, como smoothie, openpilot etc. também deram o salto.

user65
fonte
11
Concordo, sem dúvida! Comprei um braço robótico simples em uma antiga loja de eletrônicos, vintage de 1980. O controlador tem 19 MHz, compare com os 16 do Arduino e 3X a RAM! Desde 1980! O triste é que as pessoas respondem ao fascínio do minúsculo quadro azul. O Arduino é muito parecido com o Java - bacana para o que é, mas com pouca potência e uso excessivo por qualquer motivo.
28712 Chris
@ Chris, com toda a justiça, duvido que o braço robótico tenha custado apenas US $ 24 em 1980 (ainda hoje é difícil encontrar um que não seja um lixo completo). Também duvido que houvesse uma enorme comunidade de usuários e uma enorme biblioteca de software livre disponível. O valor do hardware é mais do que apenas a velocidade do relógio e a memória. Muitos produtos falharam porque eram muito caros e subutilizados, mesmo que fossem tecnicamente superiores.
Cerin
4

As especificações brutas dos microcontroladores do Arduino listam velocidades de clock de até 16 ou 20 MHz - em torno da velocidade de um computador Intel 386 de meados dos anos 90.

Isso parece promissor, até você considerar o fato de que ele não suporta nativamente a matemática de ponto flutuante - a medição " FLOPS " pela qual a maioria das CPUs é comparada. Eu já vi algumas demos do arduino que calculam a velocidade do Arduino em cerca de 60 kFLOPS, enquanto o Intel 386 a 20 MHz faz algo como 170 kFLOPS (de acordo com esta página ).

Além disso, deve-se notar que o Arduino faz matemática de 8 bits e o 386 faz matemática de 16 e 32 bits. Uma placa DSP pode ser mais adequada para esse tipo de aquisição de dados, mas não estou em posição de aconselhá-lo.

Conseguir que esse código funcione em um ambiente tão restrito como o Arduino pode ser possível, mas será preciso muita otimização. Você seria melhor atendido usando uma CPU mais poderosa para implementar esses algoritmos; verifique se eles funcionam na poderosa CPU e tente otimizar para a CPU fraca.

Ian
fonte
Mas você deve se lembrar, o Apple II tinha 6502 (8 bits, 1MHz) e 16K de RAM. O AppleSoft BASIC era ponto flutuante e seu "aplicativo matador" era o link VisiCalc . Você pode fazer muito com hardware limitado, quando é tudo o que tem. (e toda a indústria está por trás dele)
Paul Williams
11
Você está comparando um microcontrolador com um microprocessador. O 386 não possui um gerador de hardware PWM de seis canais, um ADC, um comparador analógico, seus dois dispositivos destinados a dois trabalhos diferentes. Além disso, se alguém precisar de alta taxa de transferência de ponto flutuante, provavelmente usará uma unidade com FPU, mas fiz muitos projetos que não precisavam de ponto flutuante e, em alguns casos, isso é uma questão de otimização. O ATMega vai quase 20MIPS a 20Mhz enquanto o 386 vai 9,9 MIPS a 33 MHz.
Diego C Nascimento
11
Esta pergunta é sobre o SLAM, portanto, o FLOPS é a única métrica relevante a ser usada na comparação dessas duas unidades de processamento.
Ian Ian
2

Pelo preço de um Arduino Uno, ou menos, uma alternativa recente é o TI Stellaris Launchpad por US $ 12,99 (incluindo a FedEx em todo o mundo): Arm Cortex M4 com um excelente conjunto de bibliotecas integrado chamado StellarisWare que reside na ROM - então seu Flash e RAM permanecem livres para uso do aplicativo.

Poder computacional massivamente superior ao do Arduino Uno, mas até agora sem a participação onipresente da comunidade que o Arduino conquistou.

Anindo Ghosh
fonte
1

É verdade que o Arduino começou a parecer pouco potente agora que as pessoas são do Raspberry Pis, mas acho que depende mais do aplicativo. Gosto do arduino porque o código é realmente fácil de escrever, é muito fácil lançar um novo código e muito fácil conectar novos sensores. Eu não o usaria para um aplicativo de visão como o kinect ou o material da webcam, mas ele pode fazer muito mais do que conversar com servos. Um bom exemplo seria um aplicativo do tipo segway; o arduino é ideal para conversar com sensores do acelerômetro, fazer algumas matemáticas espaciais em 3D e conversar com servos para manter as coisas equilibradas.

LoveMeSomeCode
fonte
Eu acho que é importante aqui comparar maçãs com maçãs aqui e comparar o chip ATMega da Uno com outros microcontroladores. O braço de 700 MHz no Raspberry Pi é laranja. Dito isto, os chips ARM Cortex-M3 no Arduino Due / LeafLabs Maple e os chips PIC32 nas placas Digilent chipKIT etc, expulsam completamente o Uno da água computacionalmente com o mesmo ambiente de programação.
Joe Baker