Inhaltsverzeichnis:

Selbstbalancierender Roboter mit zwei Rädern - Gunook
Selbstbalancierender Roboter mit zwei Rädern - Gunook

Video: Selbstbalancierender Roboter mit zwei Rädern - Gunook

Video: Selbstbalancierender Roboter mit zwei Rädern - Gunook
Video: Roboter fahrt auf 2 Rädern 2024, November
Anonim
Selbstbalancierender Roboter mit zwei Rädern
Selbstbalancierender Roboter mit zwei Rädern

Dieses anweisbare wird den Design- und Bauprozess für einen selbstausgleichenden Roboter durchlaufen. Als Anmerkung möchte ich nur sagen, dass selbstbalancierende Roboter kein neues Konzept sind und von anderen gebaut und dokumentiert wurden. Ich möchte diese Gelegenheit nutzen, um meine Interpretation dieses Roboters mit Ihnen zu teilen.

Was ist ein selbstbalancierender Roboter?

Ein selbstbalancierender Roboter ist ein System, das Trägheitsmessdaten verwendet, die von einem integrierten Sensor erfasst werden, um seine Position kontinuierlich anzupassen, um aufrecht zu bleiben.

Wie funktioniert es?

Eine einfache Analogie ist ein umgekehrtes Pendel. Wo der Massenmittelpunkt über dem Drehpunkt liegt. In unserem Fall beschränken wir das Pendel jedoch auf 1 Freiheitsgrad, indem wir eine Drehachse haben, in unserem Fall die Drehachse der beiden Räder. Da jede Art von Störung zum Absturz des Roboters führt, benötigen wir eine Methode, um den Roboter aktiv im Gleichgewicht zu halten. Hier kommt unser Closed-Loop-Algorithmus (PID-Regler) ins Spiel. Wenn wir wissen, in welche Richtung unser Roboter fällt, können wir die Drehrichtung unserer Motoren anpassen, um das System im Gleichgewicht zu halten.

Wie funktioniert der Closed-Loop-Algorithmus?

Das Grundprinzip, um den Roboter im Gleichgewicht zu halten, besteht darin, dass der Roboter, wenn er nach vorne fällt, dies ausgleicht, indem er die Unterseite des Roboters nach vorne bewegt, um sich selbst aufzufangen und somit vertikal zu bleiben. Wenn der Roboter nach hinten fällt, wird dies ebenfalls ausgeglichen, indem die Unterseite des Roboters nach hinten bewegt wird, um sich selbst aufzufangen.

Wir müssen hier also zwei Dinge tun: Zuerst müssen wir den Neigungswinkel (Roll) berechnen, den der Roboter erfährt, und als Ergebnis müssen wir die Drehrichtung der Motoren steuern.

Wie messen wir den Neigungswinkel?

Um den Neigungswinkel zu messen, verwenden wir eine Trägheitsmesseinheit. Diese Module enthalten einen Beschleunigungsmesser und ein Gyroskop.

  • Der Beschleunigungsmesser ist ein elektromagnetisches Gerät, das die richtige Beschleunigung misst, dies ist die Beschleunigung eines Körpers in einem momentanen Ruherahmen.
  • Ein Gyroskop ist ein elektromechanisches Gerät, das die Winkelgeschwindigkeit misst und verwendet wird, um die Ausrichtung des Geräts zu bestimmen.

Das Problem bei der Verwendung solcher Sensoren besteht jedoch darin, dass:

  • Der Beschleunigungsmesser ist sehr laut, aber im Laufe der Zeit konstant, der Winkel variiert bei plötzlichen horizontalen Bewegungen
  • Der Gyroskopwert hingegen driftet mit der Zeit, ist aber anfangs ziemlich genau

Für dieses anweisbare werde ich keinen Filter implementieren, sondern die Onboard Digital Motion Processing (DMP) verwenden. Andere haben einen komplementären Filter verwendet, um ein glattes Signal zu erhalten. Sie können die Methode wählen, die Sie möchten. da der Roboter mit beiden Implementierungen balanciert.

Lieferungen

Teile:

  1. Arduino Pro Mini 3.3V 8 mit 8 Mhz ATMEGA328
  2. FT232RL 3.3V 5.5V FTDI USB-auf-TTL-Seriell-Adaptermodul
  3. GY-521-Modul mit MPU-6050
  4. Ein Paar N20 Mikrogetriebemotor 6V - 300rpm
  5. L298N-Motortreiber
  6. LM2596S DC-DC-Abwärtswandler
  7. Batterie (wiederaufladbarer 9,7-V-Lithium-Ionen-Akku)
  8. Batteriegurt
  9. Zwei Prototyping-PCB-Leiterplatten
  10. Überbrückungsdrähte der Stift- und Buchsenleisten

Werkzeuge:

  1. Lötkolben und Lot
  2. Abstandshalter aus Nylon mit Sechskant
  3. Präzisions-Schraubendreher-Set
  4. 3D Drucker

Schritt 1: Konstruktion

Da ich Zugang zu einem 3D-Drucker hatte, beschloss ich, das Chassis in 3D zu drucken und Abstandshalter zu verwenden, um alles miteinander zu verbinden.

Der Roboter besteht aus 4 Schichten

  1. Die untere Schicht verbindet die Motoren und hat Befestigungspunkte für das L298N-Motortreibermodul
  2. Die nächste Schicht beherbergt die Prototypenplatine mit dem Arduino pro mini und daran angelöteten Headern
  3. Die dritte Schicht montiert die IMU
  4. Die oberste Schicht, die ich "Stoßfängerschicht" nenne, enthält die Batterie, den Abwärtswandler und einen Geldschalter

Mein Hauptentwurfsprinzip war, alles modular zu halten. Der Grund dafür war, dass wenn bei einer der Komponenten etwas schief ging, ich sie problemlos austauschen konnte oder wenn ich eine Komponente für ein anderes Projekt benötige, kann ich sie problemlos übernehmen, ohne sich Sorgen machen zu müssen, dass das System nicht wieder verwendet werden kann.

Schritt 2: Verkabelung

Verdrahtung
Verdrahtung

Ich lötete einige weibliche Header-Pints an ein Perf-Board, um mit den Arduino Pro-Mini-Header-Pins zusammenzupassen. Anschließend lötete ich die Stiftleisten der Platine an, um den Zugriff auf die E / A zu ermöglichen. Die restlichen Komponenten wurden auf den 3D-gedruckten Rahmen montiert und mit Überbrückungsdrähten verbunden.

Schritt 3: Kontrolltheorie

Jetzt kommen wir zum Kern des Projekts. Um den Roboter im Gleichgewicht zu halten, müssen wir ein geeignetes Steuersignal erzeugen, um die Motoren in die richtige Richtung und mit der richtigen Geschwindigkeit anzutreiben, um den Roboter im Gleichgewicht und stabil zu halten. Dazu verwenden wir einen beliebten Regelkreisalgorithmus, der als PID-Regler bekannt ist. Wie das Akronym vermuten lässt, gibt es für diesen Controller drei Begriffe, nämlich die Proportional-, Integral- und Ableitungsterme. Jeder von ihnen wird von Koeffizienten begleitet, die ihren Einfluss auf das System bestimmen. Der zeitaufwendigste Teil der Implementierung des Controllers ist oft die Abstimmung der Verstärkungen für jedes einzelne System, um die optimale Reaktion zu erzielen.

  • Der proportionale Term multipliziert den Fehler direkt, um eine Ausgabe zu erhalten. Je größer der Fehler, desto größer die Antwort
  • Der Integralterm erzeugt eine Antwort basierend auf einer Akkumulation des Fehlers, um den stationären Fehler zu reduzieren. Je länger das System unausgeglichen ist, desto schneller reagieren die Motoren
  • Der Ableitungsterm ist die Ableitung des Fehlers, die verwendet wird, um die zukünftige Reaktion vorherzusagen und dabei die Schwingung aufgrund des Überschwingens des stationären Zustands zu reduzieren.

Das Grundprinzip dieses Algorithmus besteht darin, kontinuierlich den Neigungswinkel zu berechnen, der die Differenz zwischen der gewünschten Position und der aktuellen Position ist, die als Fehler bezeichnet wird. Es verwendet dann diese Fehlerwerte und berechnet die Summe der proportionalen, integralen und abgeleiteten Antworten, um eine Ausgabe zu erhalten, die die Steuersignale sind, die an die Motoren gesendet werden. Wenn der Fehler groß ist, dreht das an die Motoren gesendete Steuersignal die Motoren daher mit hoher Geschwindigkeit, um einen ausgeglichenen Zustand zu erreichen. Wenn der Fehler klein ist, dreht das Steuersignal die Motoren mit niedriger Geschwindigkeit, um den Roboter im Gleichgewicht zu halten.

Schritt 4: Verwenden von MPU 6050

MPU6050-Bibliothek

github.com/jrowberg/i2cdevlib/tree/master/…

Offsets kalibrierenNicht alle Sensoren sind exakte Nachbildungen des anderen. Wenn Sie also zwei MPU 6050 testen, können Sie unterschiedliche Werte für den Beschleunigungsmesser und das Gyroskop erhalten, wenn sie noch auf derselben Oberfläche platziert werden. Um diesen konstanten Winkelversatz zu überwinden, müssen wir jeden Sensor, den wir verwenden, feiern. Ausführen dieses Skripts:

www.i2cdevlib.com/forums/topic/96-arduino-…

geschrieben von Luis Rodenas, werden wir Offsets bekommen. Die Offset-Fehler können eliminiert werden, indem die Offset-Werte in der setup()-Routine definiert werden.

Verwenden des digitalen Bewegungsprozessors

Die MPU6050 enthält einen DMP (Digital Motion Processor).

Was ist ein DMP? Sie können sich den DMP als einen integrierten Mikrocontroller vorstellen, der die komplexen Bewegungen des 3-Achsen-Gyroskops und des 3-Achsen-Beschleunigungsmessers an Bord des mpu6050 mithilfe seiner eigenen Bewegungsfusionsalgorithmen verarbeitet. Auslagern der Verarbeitung, die sonst vom Arduino durchgeführt würde

Wie benutzt man es? Um herauszufinden, wie das DMP verwendet wird, gehen Sie die Beispielskizze MPU6050_DMP6 durch, die mit der MPU6050-Bibliothek geliefert wird (in der Arduino IDE: File->Example->MPU6050->MPU6050_DMP6). Dies ist auch eine gute Gelegenheit, um zu überprüfen, ob Ihr Sensor tatsächlich funktioniert und die Verkabelung korrekt ist

Schritt 5: Codierung

Ich habe die Arduino IDE und eine FTDI-Schnittstelle verwendet, um den Arduino pro mini zu programmieren.

Mit der Beispielskizze (MPU6050_DMP6), die mit der MPU6050-Bibliothek geliefert wird, habe ich als Basiscode eine PID()- und eine MotorDriver()-Funktion hinzugefügt.

Bibliothek hinzufügen

  • MPU6050: Um den MPU6050-Sensor zu verwenden, müssen wir die I2C-Entwicklerbibliothek von Jeff Rowberg herunterladen und zum Arduino-Ordner „Bibliotheken“in den Programmdateien auf Ihrem Computer hinzufügen.
  • Wire: Wir benötigen auch die Wire-Bibliothek, um mit I2C-Geräten kommunizieren zu können.

Pseudocode

Bibliotheken einschließen:

  • Wire.h
  • MPU6050
  • I2Cdev.h

Variablen, Konstanten und Objekte initialisieren

Aufstellen ()

  • Stellen Sie den Pin-Modus zur Steuerung von Motoren ein
  • Pin-Modus für die Status-LED einstellen
  • MPU6050 initialisieren und Offset-Werte einstellen

PID ()

PID-Wert berechnen

MotorDriver (PID-Antwort)

Verwenden Sie den PID-Wert, um die Geschwindigkeit und Richtung der Motoren zu steuern

Schleife ()

  • Daten von DMP abrufen
  • Rufen Sie PID() und MotorDriver()-Funktionen auf

Schritt 6: PID-Tuning-Verfahren

Dies ist der mühsamste Teil des Projekts und erfordert ein wenig Geduld, es sei denn, Sie haben sehr viel Glück. Hier sind die Schritte:

  1. Setzen Sie I- und D-Term auf 0
  2. Halten Sie den Roboter und stellen Sie P so ein, dass der Roboter gerade beginnt, um die Gleichgewichtsposition zu schwingen
  3. Wenn P eingestellt ist, erhöhen Sie I, damit der Roboter schneller beschleunigt, wenn er nicht im Gleichgewicht ist. Wenn P und I richtig eingestellt sind, sollte der Roboter in der Lage sein, sich mit etwas Oszillation für mindestens einige Sekunden selbst auszubalancieren
  4. Erhöhen Sie schließlich D, reduzieren Sie die Schwingung

Wenn der erste Versuch keine zufriedenstellenden Ergebnisse liefert, wiederholen Sie die Schritte mit einem anderen Wert von P. Beachten Sie auch, dass Sie die PID-Werte später feinjustieren können, um die Leistung weiter zu steigern. Die Werte hier sind hardwareabhängig, wundern Sie sich nicht, wenn Sie sehr große oder sehr kleine PID-Werte erhalten.

Schritt 7: Fazit

Die verwendeten Mikrogetriebemotoren waren zu langsam, um auf große Störungen zu reagieren, und da das System zu leicht war, reichte die Trägheit nicht aus, um den gewünschten Pendeleffekt zu erzielen. Schließlich waren 3D-gedruckte Räder eine schlechte Wahl, da sie ständig rutschen.

Vorschläge zur Verbesserung:

  • Schnellere Motoren mit höherem Drehmoment, d.h. bei Gleichstrommotoren ist die Nennspannung umso höher das Drehmoment
  • einen schwereren Akku besorgen oder die Masse einfach etwas höher bewegen
  • Ersetzen Sie 3D-gedruckte Räder durch Gummiräder, um mehr Traktion zu erhalten

Empfohlen: