Dies betrifft Hardware, die wenig wiegt, da ein Laufroboter (fette Katze, 6 Beine mit 3 Freiheitsgraden) sie herumtragen sollte. Aus diesem Grund muss man viel Trigonometrie machen (mit Matrixmathematik oder nicht, ich bin mir noch nicht sicher), und hier kommt die Frage her.
PIC, Arduino oder billiger AVR sind nicht schnell genug, um alles auf 100 / s zu berechnen und Dinge wie Trägheit und Hindernisvermeidung oder sogar Bruteforce-Pfade / -Gänge im Auge zu behalten.
Plan A besteht darin, das Gehirn auf dem Roboter zu tragen. Sei es Mikroprozessor, Micro-ITX, Nettop oder andere; Was ist effiziente Hardware, um Trigonometrie / Matrix-Mathematik schnell zu machen?
Ich habe online gesucht und erwartet, dass ich etwas über AVR-, x86- oder ARM-Mikrocontroller herausfinde, die darauf spezialisiert sind, aber dort kein Glück.
Plan B sieht eine x86-Maschine vor, die über WLAN verbunden ist, um das schwere Heben zu erledigen. Ideal auch für das Prototyping, aber ich möchte, dass dies irgendwann nach Plan A migriert, wenn die Hardware miniaturisiert wird. Aber selbst dann, welche Desktop-CPU kann Trigonometrie am schnellsten?
Plan C ist es, die Last zu verteilen und einen stromsparenden Mikrocontroller / Core für jedes Bein zu haben, obwohl dies aus vielen Gründen, die ich an der Erweiterbarkeit mag, nicht die beste Lösung ist.
Ich habe mich noch nicht für die Sprache und / oder Bibliothek entschieden, bevorzuge aber Pascal und C ++.
(Vorschläge für passendere Tags willkommen, ich bin neu hier)
quelle
Antworten:
Es hört sich nicht so an, als ob Ihre Anwendung wirklich rechenintensiv wäre. Ein dsPIC kann zum Beispiel 400-k-Befehle für jede Ihrer Iterationen ausführen. Das ist eine Menge. Es wird jedoch nützlich sein, eine gute I / O-Fähigkeit auf niedrigem Niveau, PWM-Generatoren, Zeitgeber und dergleichen zu haben.
Sinus und Cosinus sind in einem Integer-Rechner wie einem dsPIC nicht so schwer zu realisieren. Ich habe es selbst ein paar Mal gemacht. Der Trick besteht darin, die richtige Darstellung für die Winkel auszuwählen. Vom theoretischen Standpunkt aus gesehen mögen Radianten nett sein, sind aber rechnerisch unpraktisch. Degress sind künstlich und einfach nur albern. Verwenden Sie den gesamten Bereich Ihrer maschinengroßen Ganzzahl, um eine volle Umdrehung darzustellen. Beispiel: Auf einem dsPIC, bei dem es sich um einen 16-Bit-Prozessor handelt, beträgt eine volle Umdrehung 65536 Counts. Dies ist weitaus mehr Genauigkeit und Auflösung, als Sie zur Steuerung eines Roboters benötigen oder die Sie trotzdem messen können.
Ein Vorteil dieser Darstellung ist, dass der gesamte Zeilenumbruch automatisch erfolgt, nur weil vorzeichenlose Ganzzahlen addiert und subtrahiert werden. Ein weiterer wesentlicher Vorteil ist, dass sich diese Darstellung besonders gut für die Verwendung von Nachschlagetabellen für Sinus und Cosinus eignet. Sie müssen nur 1/4 Zyklus speichern. Die beiden oberen Bits des Winkels geben an, in welchem Quadranten Sie sich befinden, ob Sie vorwärts oder rückwärts in der Tabelle indizieren und ob Sie das Ergebnis negieren möchten oder nicht. Die nächsten N niedrigeren Bits werden zum Indizieren in die Tabelle verwendet, wobei die Tabelle 2 N Segmente (2 N + 1 Punkte) aufweist. Beachten Sie, dass das Rückwärtsindizieren in die Tabelle dann nur die Tabellenindexbits ergänzt.
Sie können der Tabelle genügend Punkte geben, damit die Auswahl der nächsten Antwort gut genug ist. Wenn die Tabelle beispielsweise 1024 Segmente enthält, werden Sinus und Cosinus auf das nächste 1/4096 eines Kreises berechnet. Das wird viel für die Steuerung eines Roboters sein. Wenn Sie mehr Genauigkeit wünschen, können Sie entweder die Tabelle vergrößern oder die verbleibenden unteren Bits des Winkels verwenden, um zwischen benachbarten Tabelleneinträgen linear zu interpolieren.
Der Punkt ist jedenfalls, dass Ihre Anforderungen an diesen Prozessor nicht mit dem angegebenen Problem übereinstimmen. Ich würde wahrscheinlich einen dsPIC33F verwenden. Es ist mit Sicherheit klein, leicht und viel energieeffizienter als ein vollständiger Allzweck-Computerprozess wie ein x86 auf einem Einplatinencomputer.
quelle
Sie werden mit vielen Eingangssignalen umgehen. Sie benötigen nicht unbedingt eine CPU mit hohem Durchsatz. Viele Signale können parallel verarbeitet werden. Dies ist ein typisches DSP-Gebiet. Natürlich möchten Sie auch allgemeine CPU-Funktionen. Dies ist kein Problem. Es gibt viele CPUs mit integrierten DSPs.
Ein typisches Chipdesign für solche Anwendungen ist ein Cortex-M4. Dies kommt mit einem integrierten DSP und -M4F-Versionen haben auch eine FPU. Dies ist möglicherweise nicht erforderlich. Die Trigonometrie kann problemlos in Festkomma-Mathematik durchgeführt werden.
quelle
Ein paar Bemerkungen:
Sie müssen die Trigonometrieoperationen nicht auf derselben CPU ausführen, die die Hindernisvermeidung ausführt. Sie können die Aufgaben zwischen zwei Mikrocontrollern aufteilen und sie mithilfe eines Kommunikationsprotokolls zum Sprechen bringen.
Für ein Experiment habe ich einen AHRS- Algorithmus mit einem Kalman-Filter in einen ARM Cortex M0-Mikrocontroller implementiert (es war ein STM32, erinnere mich nicht genau an den Rest, aber ich glaube, es war 32 MHz) und mit Festkomma-Mathematik konnte ich laufen es bei etwa 40 Proben / Sekunde. Mit einem schnelleren Controller sollten Sie es problemlos tragen können, und natürlich können Sie auch die FPGA- oder DSP-Methode ausprobieren.
Ich würde sagen, dass die Steuerung der Beine nicht CPU-intensiv ist und Sie alle Beine zusammen steuern können, möglicherweise getrennt von den Trigonometrie- und Hindernisvermeidungsoperationen (siehe 1).
quelle
Trigonometrie ist schwierig, aber es gibt Abkürzungen. Wenn Sie wenig Rechenleistung benötigen, sollten Sie den CORDIC-Algorithmus berücksichtigen.
Es ist im Grunde eine Wertetabelle für [zum Beispiel] Sinus. Die Winkel können in Grad und Bogenmaß angegeben werden. Der Punkt ist, der Sinus dieser Werte ist 1/2 (0,5), 1/4 (0,25), 1/8, 1/16 ... bis zu einem Bruchteil eines Grades, den Ihr Roboter verwenden kann.
Geben Sie Ihren Winkel ein, subtrahieren Sie den ersten Tabellenwert und setzen Sie Ihr Ergebnis auf erstes Ergebnis (0,5). Wenn Ihr Winkel durch Subtrahieren negativ wurde, ADDIEREN Sie den nächsten Wert (und subtrahieren Sie 0,25). Andernfalls ziehen Sie die Winkel weiter ab und addieren die Ergebnisse.
Wenn Sie am Ende der Tabelle angelangt sind, müssen Sie nur noch addieren und subtrahieren, aber Sie sind mächtig nah dran. Es gibt einen letzten "Geigenfaktor", mit dem multipliziert werden kann.
Die Genauigkeit [und Geschwindigkeit] des Ergebnisses hängt von der Größe [und Auflösung] der Nachschlagetabelle ab.
quelle
Sie können ein Raspberry Pi-Board verwenden, auf dem ein GNU / Linux-System für allgemeine Zwecke ausgeführt wird. Der Raspberry Pi verfügt über mehrere GPIO-Pins, über die Roboterservos oder Erweiterungskarten angeschlossen werden können.
http://www.youtube.com/watch?v=RuYLTudcOaM
Das Modell A Raspberry Pi kann mit seiner GPU bis zu 24 GFLOPs für allgemeine Gleitkomma-Berechnungen mit OpenGL ES 2 ausführen, wobei das Leistungsbudget unter 2,5 W bleibt.
http://elinux.org/RPi_Hardware
Beispiel: Ein batteriebetriebenes Roboter-Setup, das mit dem Raspberry Pi implementiert wurde.
http://www.homofaciens.de/technics-robots-R3-construction_en_navion.htm
Beispiel 2: Ein 6-beiniger Roboter, der von einem Himbeer-Pi gesteuert wird:
http://www.youtube.com/watch?v=Yhv43H5Omfc
Beispiel 3: Ein selbstausgleichender 2-Rad-Umkehrpendelroboter, der von einem Himbeer-Pi gesteuert wird:
http://www.youtube.com/watch?v=n-noFwc23y0
quelle
Für Roboter mit Beinen können Sie einige vordefinierte Beinbewegungssequenzen erstellen und "spielen". Die Umgehung von Hindernissen in Echtzeit kann mit einer einfachen
fuzzy logic
Implementierung erfolgen, bei der alles wieder im Tabellenformat vorliegt. Sie müssen lediglich den richtigen Wert daraus auswählen und für diedefuzzyfication
Verarbeitung verwenden.Alles kann in C auf irgendwie schnelleren Prozessoren erledigt werden
ARM7
. Ich habe es anprobiertAVR
und bin gescheitert, nachdem ich viel Zeit damit verbracht hatte, alles zu verwandelnfixed point arithmetics
.quelle
Die Stellaris-Plattform von Texas Instruments verfügt standardmäßig über eine Gleitkommaeinheit an Bord. Nicht sicher, ob der mit 80 MHz getaktete ARM-Controller für Ihre Anwendung schnell genug ist, aber ein LaunchPad-Entwicklungsboard ist ziemlich günstig: http://www.ti.com/ww/en/launchpad/stellaris_head.html
Es ist über USB programmierbar, kostenlose Toolchains sind für mindestens Windows und Linux verfügbar, misst ca. 4 × 6 cm und hat 30+ GPIO-Pins (wenn ich richtig gezählt habe).
quelle
Mithilfe von AVR können Sie eine x86-PowerPC-CPU- Karte in Ihre Roboteranwendung einbetten , um die Laufwerke des Roboters als Schnittstellenkarte zu steuern. Die schnellste und günstigste Lösung für Ihr Problem. Aber ja, Sie müssen viel Code in die x86-Architektur stecken, aber glücklicherweise können Sie viel Code aus Open-Source-Betriebssystemcodes heraus erfassen. (Wenn Ihre mechanische Konstruktion dieses Gewicht tragen kann)
quelle