Wie rechenintensiv ist ein Arduino Uno-Board?

8

Was kann ein Arduino-Board wie das Uno wirklich? Natürlich sind einfache Dinge wie die Steuerung einiger Servos sehr einfach. Ich glaube jedoch nicht, dass ein Uno-Board 3D-SLAM in Echtzeit aus Punktwolkendaten erstellen kann, die von einem Kinect-Sensor auf einem mobilen Roboter erfasst wurden, oder? Wenn der Roboter überhaupt eine Geschwindigkeit hätte, könnte der Arduino nicht mithalten, richtig? Könnte es 2D-SLAM während der Bewegung ausführen und mithalten können? Wie wäre es, wenn Sie 1/10 der Punkte vom Kinect-Sensor nehmen und nur diese verarbeiten?

Was sind im Grunde einige Beispiele für die Ressourcenbeschränkungen eines solchen Arduino-Boards?

Golmschenk
quelle

Antworten:

6

Dies hängt von der Anzahl der Orientierungspunkte in der Feature-Map und der Zeit ab, die Sie investieren möchten, um den Algorithmus auf Geschwindigkeit abzustimmen, sowie von einer Reihe anderer Parameter, die Sie möglicherweise für eine bestimmte Anwendung steuern können oder nicht.

Bearbeiten: Als Gedankenexperiment denke ich, dass es theoretisch leistungsfähig genug wäre, um extrem einfaches SLAM nahezu in Echtzeit in einer sehr konstruierten Umgebung wie der Mitte eines Fitnessraumbodens mit einigen Kegeln durchzuführen. Es könnte eine einzelne Scanlinie vom Kinect nehmen und eine interne 2D-Karte mit niedriger Auflösung aktualisieren, die regelmäßig aktualisiert wird (z. B. alle 10 Sekunden).

Der 2K-RAM des Uno wäre wahrscheinlich ein Deal Breaker, aber der Mega hat vielleicht genug (8K) und es gibt einen Hack, um ihn auf 520K zu aktualisieren.

In der Praxis ist es keine gute Idee, Gleitkomma-Matrixberechnungen auf einem 8-Bit-Prozessor durchzuführen.

Paul Williams
quelle
Ok, Sie sagen also, dass es ein bisschen schwierig sein wird, 2D-SLAM mit dem Arduino zu versuchen. Vielen Dank.
Golmschenk
6

Der Arduino war schon immer stark unterfordert.

Sie können einen Stapel stm Discovery oder ein anderes ARM-basiertes Entwicklungsboard zum Preis eines einzelnen Arduinos erwerben, und jedes dieser Boards ist um Größenordnungen leistungsfähiger als das Arduino.

Die Allgegenwart des Arduino hat auch viele Projekte behindert, die es besser wissen sollten. Die Quadrotor-Stabilisierung und die Ausführung von G-Code im Reprap-Stil sind zwei Hauptbereiche, in denen das Arduino weit über seine Fähigkeiten hinaus gezwungen wurde und dies zeigt. (Das Ardrupilot-Projekt benötigt drei Arduinos.)

Hoffentlich hilft das teensy / due / leaflabs-Zeug dabei, die ARM-Entwicklung freundlicher zu gestalten. Viele der neueren / besseren Projekte wie Smoothie, OpenPilot usw. haben ebenfalls den Sprung geschafft.

user65
quelle
1
Ohne Zweifel einverstanden! Ich habe einen einfachen Roboterarm in einem alten Elektronikgeschäft gekauft, Jahrgang 1980. Der Controller hat 19 MHz, verglichen mit Arduinos 16, und 3X RAM! Ab 1980! Das Traurige ist, dass die Leute auf den Reiz der winzigen blauen Tafel reagieren. Arduino ist viel wie Java - cool für das, was es ist, aber unterfordert und über jeden Grund hinaus überbeansprucht.
Chris
@ Chris, um ehrlich zu sein, ich bezweifle, dass der Roboterarm 1980 nur 24 US-Dollar kostete (es ist selbst heute noch schwierig, einen so billigen zu finden, der kein kompletter Müll ist). Ich bezweifle auch, dass es eine riesige Community-Benutzer und eine riesige Bibliothek an freier Software gab. Hardware hat mehr zu bieten als nur Taktrate und Speicher. Viele Produkte sind gescheitert, weil sie bei unzureichender Nutzung überteuert waren, auch wenn sie technisch überlegen waren.
Cerin
4

Die Rohdaten der Mikrocontroller des Arduino enthalten Taktraten von bis zu 16 oder 20 MHz - ungefähr so ​​schnell wie ein Intel 386-Computer Mitte der neunziger Jahre.

Das klingt vielversprechend, bis man bedenkt, dass es Gleitkomma-Mathematik nicht nativ unterstützt - die " FLOPS " -Messung, mit der die meisten CPUs verglichen werden. Ich habe einige Arduino-Demos gesehen, die die Geschwindigkeit des Arduino bei etwa 60 kFLOPS berechnen, während der Intel 386 bei 20 MHz ungefähr 170 kFLOPS leistet (laut dieser Seite ).

Es sollte auch beachtet werden, dass der Arduino 8-Bit-Mathematik und der 386 16-Bit- und 32-Bit-Mathematik ausführt. Eine DSP-Karte ist möglicherweise besser für diese Art der Datenerfassung geeignet, aber ich bin nicht in der Lage, sie dort zu beraten.

Es ist zwar möglich, diesen Code in einer so eingeschränkten Umgebung wie dem Arduino zum Laufen zu bringen, aber es erfordert viel Optimierung. Sie sollten eine leistungsstärkere CPU verwenden, um diese Algorithmen zu implementieren. Stellen Sie sicher, dass sie auf der leistungsstarken CPU funktionieren, und versuchen Sie dann , die schwache CPU zu optimieren.

Ian
quelle
Aber Sie müssen bedenken, dass der Apple II einen 6502 (8-Bit, 1 MHz) und 16 KB RAM hatte. AppleSoft BASIC war Gleitkomma und seine "Killer-App" war VisiCalc Link . Mit begrenzter Hardware können Sie ziemlich viel tun, wenn das alles ist, was Sie haben. (und die ganze Branche steckt dahinter)
Paul Williams
1
Sie vergleichen einen Mikrocontroller mit einem Mikroprozessor. 386 hat keinen 6-Kanal-PWM-Hardwaregenerator, keinen ADC, keinen analogen Komparator, seine zwei Geräte sind für zwei verschiedene Werke gedacht. Auch wenn jemand einen hohen Gleitkommadurchsatz benötigt, wird er wahrscheinlich eine Einheit mit FPU verwenden, aber ich habe viele Projekte erstellt, für die kein Gleitkomma benötigt wird, und in einigen Fällen ist dies eine Frage der Optimierung. Der ATMega erreicht bei 20 MHz fast 20 MIPS, während der 386 bei 33 MHz 9,9 MIPS erreicht.
Diego C Nascimento
1
Diese Frage bezieht sich auf SLAM, daher ist FLOPS die einzige relevante Metrik, die beim Vergleich dieser beiden Verarbeitungseinheiten verwendet wird.
Ian
2

Für den Preis eines Arduino Uno oder weniger ist das TI Stellaris Launchpad für 12,99 US-Dollar (einschließlich FedEx weltweit) eine neue Alternative : Arm Cortex M4 mit einem hervorragenden integrierten Bibliotheksset namens StellarisWare, das sich auf ROM befindet - also Ihr Flash und RAM bleiben für die Verwendung durch Anwendungen frei.

Massiv höhere Rechenleistung als das Arduino Uno, aber bisher ohne die allgegenwärtige Beteiligung der Community, die Arduino erhalten hat.

Anindo Ghosh
quelle
1

Es ist wahr, dass der Arduino jetzt, wo die Leute von Raspberry Pis sind, unterfordert aussieht, aber ich denke, es hängt mehr von der Anwendung ab. Ich mag das Arduino, weil der Code sehr einfach zu schreiben ist, es sehr einfach ist, neuen Code zu flashen und wirklich einfach neue Sensoren anzuschließen. Ich würde es nicht für eine Vision-Anwendung wie Kinect oder Webcam verwenden, aber es kann viel mehr als nur mit Servos sprechen. Ein gutes Beispiel wäre eine Segway-Anwendung. Das Arduino ist ideal, um mit Beschleunigungssensoren zu sprechen, räumliche 3D-Berechnungen durchzuführen und dann mit Servos zu sprechen, um das Gleichgewicht zu halten.

LoveMeSomeCode
quelle
Ich denke, hier ist es wichtig, Äpfel mit Äpfeln zu vergleichen und den ATMega-Chip des Uno mit anderen Mikrocontrollern zu vergleichen. Der 700-MHz-ARM im Raspberry Pi ist orange. Davon abgesehen sprengen die ARM Cortex-M3-Chips im Arduino Due / LeafLabs Maple und die PIC32-Chips in Digilent ChipKIT-Boards usw. den Uno mit derselben Programmierumgebung rechnerisch vollständig aus dem Wasser.
Joe Baker