Ist ein Arduino/PI stark/gut genug für meine Anwendung oder benötige ich kundenspezifische Hardware? [geschlossen]

Ich bin völlig neu in der Verwendung von Arduinos / PIs und lerne gerade ein bisschen daraus, um eine Steuereinheit für mein Masterprojekt zu bauen.

Mein Setup:

  1. 5 IMUs, die Beschleunigung und Drehung um 3 Achsen messen. Jeder benötigt einen I2C.

  2. 4 variable Gleichspannungsquellen

  3. 4 magnetorheologische Dämpfer

Die IMUs senden ihre Daten an den Arduino/PI, wo 26 nichtlineare ODEs gleichzeitig gelöst werden müssen. Ein Fuzzy-Logik-Controller verwendet die berechneten Werte, um die Ausgangsspannung jeder Quelle zu bestimmen, und diese wird dann an jeden Dämpfer gesendet. Und der Prozess geht weiter. Das Modell wird in Simulink erstellt und über deren Toolboxen zum Arduino/Pi exportiert.

Meine Fragen:

  1. Gibt es eine Möglichkeit, die I2Cs der 5 IMUs mit den etwa 3 Pins auf den Platinen zu verbinden?

  2. Ist Ihrer Meinung nach eines der verfügbaren Produkte von Arduino/PI leistungsfähig genug, um meine Berechnungen in Echtzeit durchzuführen?

Ich werde in der Lage sein, kundenspezifische Hardware von einer Firma zu bekommen, aber ich bin sicher, dass sie mir einen Arm und zwei Nieren dafür berechnen werden.

BEARBEITEN:
Nach einigen schnellen Suchen haben die meisten IMUs eine Abtastrate von bis zu etwa 1000 Hz. Die Dämpfer reagieren auf eine Eingangsspannung in etwa 15 ms.

Die Gleichungen, die ich verwenden werde, befinden sich in einem PDF unter diesem Link: https://www.pdf-archive.com/2016/11/02/formulas-total/formulas-total.pdf

Es sind zu viele für mich, um sie hier aufzuschreiben.

Der Fuzzy-Logik-Controller hat 6 Fuzzy-Sätze für jedes der vier Räder und 4 Ausgangs-Fuzzy-Sätze, einen für jedes Rad. Insgesamt also 28 Fuzzy-Sets, die jeweils aus 5 Gaußschen Zugehörigkeitsfunktionen und zwei sigmoidalen Zugehörigkeitsfunktionen bestehen. Die Fuzzy-Assoziativmatrix hat eine Größe von 7x7. Es gibt 3 dieser Matrizen pro Rad, was den Wert von 6 Fuzzy-Sets ergibt, wie im ersten Satz dieses Absatzes angegeben wurde.

Ich hoffe, dies beantwortet zumindest einige der Bedenken der Kommentare.

Vielleicht möchten Sie dafür ein mittelgroßes FPGA in Betracht ziehen. Es gibt mehrere preisgünstige (für FPGAs) Boards, die Sie dafür verwenden können.
Haben Sie vielleicht ein bestimmtes Produkt im Sinn? Eine, die ich als Grundlage für weitere Recherchen verwenden kann?
Meine FPGA-Erfahrung ist ein wenig mangelhaft, daher möchten Sie vielleicht, dass jemand anderes Ihnen hilft, Ihre endgültige Entscheidung zu treffen. SparkFun verkauft den Mojo v3 mit einem ATmega32U4 und Spartan 6 LX9, aber Sie benötigen möglicherweise einen LX16 oder sogar LX25 für Ihr Projekt.
Das Nexys4 ist ziemlich gut
Ich würde sagen, es ist schwer zu sagen, ob ein Pi/Adurino stark genug ist. Erstens sagen Sie nicht viel über Ihre zeitlichen Einschränkungen aus, dh wie schnell Sie das Ergebnis benötigen. Zweitens ist die Komplexität des Algorithmus und die Effizienz seiner Implementierung unbekannt. Ein FPGA bietet höchste Performance, ist aber ggf. nicht notwendig. In diesem Fall könnte ein Pi bequemer sein.
Zu schwer für Arduino, klingt zu schwer für Pi. Betrachten Sie ARM oder Atom, wenn Sie an Ihrem FPGA foo zweifeln.
(Pi ist ARM, für diejenigen, die fragen. Eine gelehrte Form von ARM, aber trotzdem ARM.)
Ich habe meinen Beitrag aktualisiert. Ich denke, ich habe genug Informationen für Ihre Bedenken geliefert. Wenn ich etwas ausgelassen habe, lassen Sie es mich bitte wissen und ich werde es so schnell wie möglich aktualisieren.
Diese Frage ist zu weit gefasst, und wenn Sie dies wirklich für Ihr Masterprojekt tun, sollten Sie die Berechnungen besser selbst durchführen können. Es ist fast beleidigend für sich selbst, andere Leute zu fragen, wie man das macht. Es ist hart, aber es ist ein Prozess, den Sie durchlaufen müssen. Kurz gesagt, Sie müssen die Bandbreite Ihres Systems herausfinden und wie schnell Sie berechnen möchten, wie viele Multiplikationen und mit welcher Genauigkeit. Dann finden Sie ein digitales System, das das für Sie tun kann. Mikros -> DSPs -> FPGAs in Echtzeit geordnet. Vielleicht möchten Sie an einem Echtzeit-Verarbeitungskurs teilnehmen oder mit Online-Ressourcen lernen.

Antworten (1)

(zu lang für einen Kommentar)

Zuerst müssen Sie, wie @sweber sagt, Ihre tatsächlichen Anforderungen berechnen: wie viele Berechnungen und mit welcher Häufigkeit. Mit diesen Zahlen in der Hand können Sie eine Wahl treffen.

Innerhalb der Arduinos gibt es viele Variationen, vom niedrigen 8-Bit-Uno bis zum 32-Bit-Duo-Monster, auf dem Linux nebenbei läuft.

Was einen Pi angeht: Ein Pi mit Linux ist möglicherweise keine gute Idee für ein Echtzeitsystem: Der Linux-Kernel und andere Prozesse könnten in unvorhersehbaren Momenten in die Quere kommen. Aber Sie können einen Pi Bare-Metal verwenden, und es ist ein schnelles Biest. Dies wird jedoch nicht sehr oft gemacht, daher werden Sie im Internet nicht viel Unterstützung dafür finden.

Also wieder an die Arbeit für Sie: Erstellen Sie die Simulation, verwenden Sie sie, um die Zahlen zu erhalten, und dann können Sie eine Entscheidung treffen.

Ich habe meinen Beitrag aktualisiert. Ist es in Bezug auf Pi Bare-Metal auch möglich, das Codegenerierungspaket von Simulink zu verwenden, um dabei zu helfen? Es kann Code in einer ganzen Reihe von Sprachen generieren, insbesondere C, was auf dem Pi-Bare-Metal das Richtige zu sein scheint. EDIT: Wird die Kommunikation zwischen Peripherie und PI das Hauptproblem sein? Wenn ich den ganzen Prozess richtig verstehe, wird es im Wesentlichen keine Treiber geben?
Wenn Sie auf Bare-Metal umsteigen, gibt es nichts , es sei denn, Sie fügen es selbst hinzu. Das ist Bare-Metal .... Ich weiß nicht, wie es mit exportiertem Simulink-Code aussieht. Verwendet er irgendwelche externen Bibliotheken? Wie greift es auf die Ein- und Ausgänge zu?
Nach einigem leichten Lesen scheint es, dass Sie alles tun müssen. Dazu gehört zum Beispiel das Schreiben von Treibern für die IMU. Das werde ich nicht tun. Ich werde einfach ein stärkeres Board bekommen, wenn es auf einem PI, auf dem mein exportierter Simulink-Code ausgeführt wird, nicht möglich ist. Ich habe nicht annähernd genug Erfahrung oder Wissen im Programmieren, um das meiste selbst zu machen. Mein Zeitrahmen ist definitiv nicht lang genug, um es zu lernen. Vielleicht, wenn ich promoviere. Vielleicht.
Wie sweber sagte: Bestimmen Sie zuerst Ihre Anforderungen, sowohl den Umfang der Berechnungen als auch die Häufigkeit, mit der sie durchgeführt werden müssen. Und wie Echtzeit ist Ihre Anforderung, ist ein gelegentlicher Schluckauf erlaubt? Wenn nicht, wird die Verwendung eines Nicht-Echtzeit-Betriebssystems wie Linux Sie wahrscheinlich in Schwierigkeiten bringen.
Danke für den Ratschlag. Ich werde die Mitarbeiter der EE-Fakultät bezüglich meines neu gewonnenen Wissens (?) konsultieren.