Vorherige LektionTutorial-StartseiteNächste Lektion

Kauflink

Bei OSOYOO kaufen In den USA kaufen

Inhalt


1Lernziel

Dieses Tutorial zeigt, wie die autonomen Fähigkeiten des OSOYOO V3 Robot Car verbessert werden können, indem der MPU6050 Inertial Measurement Unit (IMU) eingesetzt wird, um eine gewünschte Fahrtrichtung beizubehalten. Der MPU6050 ist ein 3-Achsen-Bewegungssensor, der Winkelgeschwindigkeit (Gyroskop) und lineare Beschleunigung (Beschleunigungssensor) misst und so dem Roboter ermöglicht, seinen Kurs aktiv zu korrigieren. Diese Lektion behandelt Sensorfusions-Techniken und PID-Steueralgorithmen für eine stabile Geradeausfahrt.OSOYOO V3 Roboter-Auto für Arduino mit MPU6050-Gyroskop

2Teile und Geräte

Für diese Lektion benötigen Sie das folgende Bauteil. Stellen Sie sicher, dass Sie es bereitliegen haben, bevor Sie beginnen.

Nr. Bild Gerät Menge Zubehör Link
1 MPU6050 3-Achsen-Gyroskopmodul MPU6050 3-Achsen-Gyroskop 1 Hier kaufen

3MPU6050: Funktionsprinzip

Der MPU6050 vereint ein 3-Achsen-Gyroskop und einen 3-Achsen-Beschleunigungssensor. Das Gyroskop misst die Winkelgeschwindigkeit und liefert so Informationen über die Rotationsgeschwindigkeit des Roboters um seine X-, Y- und Z-Achse. Die Integration dieser Daten über die Zeit ergibt die Winkelverschiebung (z. B. den Gierwinkel). Rohgyroskopdaten unterliegen jedoch einem Drift, d. h. sie häufen mit der Zeit kleine Fehler an. Der Beschleunigungssensor misst die lineare Beschleunigung und kann zur Bestimmung der Geräteorientierung relativ zur Schwerkraft verwendet werden. Obwohl Beschleunigungssensoren über lange Zeiträume stabil sind, reagieren sie empfindlich auf Vibrationen und kurze Bewegungsimpulse, was die Rohdaten rauschig macht.
MPU6050-Gyroskopmodul am OSOYOO V3 Roboter-Auto montiert

4Hardware-Installation

Schritt 1: Führen Sie den grundlegenden Hardware-Aufbau wie in Lektion 1 des Roboter-Autos beschrieben durch. Falls Sie Lektion 1 bereits abgeschlossen haben, belassen Sie alles wie es ist.

Grundaufbau des OSOYOO V3 Roboter-Auto-Chassis

Schritt 2: Befestigen Sie das MPU6050-Modul sicher am Roboter-Chassis wie unten gezeigt. (Der MPU6050 kommuniziert mit dem Arduino über das I2C-Protokoll und benötigt nur zwei Datenleitungen: SDA (Serial Data) und SCL (Serial Clock), sowie Stromversorgung (VCC) und Masse (GND).)

MPU6050-Verkabelungsdiagramm für das OSOYOO V3 Roboter-Auto Arduino

 

5Software-Installation

Open-Source Arduino
Software (IDE)
Arduino IDE Logo Software hier herunterladen:
https://www.arduino.cc/en/Main/Software?setlang=en
7-Zip ist ein kostenloses Programm
zum Entpacken von ZIP-Dateien
7-Zip Logo 7-Zip kostenlos herunterladen:
https://www.7-zip.org/

1. Arduino IDE einrichten: Laden Sie die neueste Arduino IDE herunter und installieren Sie sie: https://www.arduino.cc/en/Main/Software?setlang=en.

Arduino IDE installieren
2. Beispielcode herunterladen: Laden Sie den Beispielcode für Lektion 2 hier herunter. Entpacken Sie den Inhalt – Sie finden eine Datei namens v3car-lesson2.ino im Ordner v3car-lesson2. Öffnen Sie v3car-lesson2.ino in der Arduino IDE.

Beispielcode in der Arduino IDE öffnen

3. Bibliotheken installieren
Laden Sie zunächst die Bibliotheks-ZIP-Dateien über die folgenden Links herunter:
https://osoyoo.com/driver/2wd/MPU6050_light.zip
https://osoyoo.com/driver/2wd/PID.zip
Entpacken Sie die Dateien nicht. Öffnen Sie die Arduino IDE -> Sketch -> Bibliothek einbinden -> .ZIP-Bibliothek hinzufügen. Fügen Sie die ZIP-Dateien nacheinander zur Arduino IDE hinzu.

ZIP-Bibliothek in der Arduino IDE hinzufügen

4. Board und Port auswählen: Verbinden Sie das OSOYOO Basic Board (kompatibel mit Arduino UNO) über ein USB-Kabel mit Ihrem Computer (Wichtig: Stellen Sie sicher, dass der Netzschalter des Roboter-Autos ausgeschaltet und der Akku abgetrennt ist, bevor Sie das Board mit dem PC verbinden). Starten Sie die Arduino IDE. Gehen Sie zu Werkzeuge > Board und wählen Sie Arduino Uno. Gehen Sie dann zu Werkzeuge > Port und wählen Sie den richtigen seriellen Port. Falls Sie unsicher sind, prüfen Sie den Geräte-Manager Ihres Betriebssystems.

Board und Port in der Arduino IDE auswählen

5. Code hochladen: Klicken Sie auf die Schaltfläche „Hochladen” (Pfeil-nach-rechts-Symbol), um den Sketch zu kompilieren und auf das OSOYOO Basic Board zu übertragen.

Code auf das Arduino-Board hochladen

6. Prüfen, ob Arduino den MPU6050 erkennt

Öffnen Sie den Seriellen Monitor (oben rechts in der Arduino IDE), stellen Sie die Baudrate auf 9600 ein, und Sie sollten MPU6050 Found! wie unten abgebildet sehen. Herzlichen Glückwunsch! Der Arduino erkennt den MPU6050 – Sie können das Auto jetzt testen.

Serielle Monitorausgabe: MPU6050 Found

Hinweis: Falls „Failed to find MPU6050 chip” angezeigt wird, liegt ein Verkabelungsproblem vor. Stellen Sie sicher, dass:
1) VCC/GND/SDA/SCL des MPU6050 korrekt mit dem OSOLINK Wi-Fi/BLE I/O-Shield gemäß unserer Anleitung verbunden sind
2) Die Arduino-Pins A4/A5 und die SDA/SCL-Pins keine weiteren Kabel haben (bei Linienverfolgungsprojekten können A4/A5 bereits durch den Spurfolgesensor belegt sein)

6Das Auto testen


Stellen Sie das Auto auf den Boden und schalten Sie die Stromversorgung ein. Das Auto pausiert kurz, während der Arduino das Gyroskop initialisiert. Anschließend fährt es geradeaus vorwärts. Wenn Sie das Auto mit dem Fuß aus der Spur bringen, korrigiert es automatisch zurück zu seiner ursprünglichen Richtung.

7Kurze Erklärung der Prinzipien und des Codes

1) Wie steuert die Move()-Funktion Bewegung und Lenkung des Autos?
Das OSOYOO-Roboter-Auto verwendet Differenzialantrieb. Die Funktion move(speedL, speedR) hat zwei Parameter, speedL und speedR, die die Rotationsgeschwindigkeit des linken bzw. rechten Rades angeben. Der Geschwindigkeitswert liegt zwischen -255 und +255, wobei ein positiver Wert Vorwärtsdrehung und ein negativer Wert Rückwärtsdrehung bedeutet. Zum Beispiel bedeutet move(-50, 100), dass das linke Rad mit Geschwindigkeit 50 rückwärts und das rechte Rad mit Geschwindigkeit 100 vorwärts dreht, was eine scharfe Linkskurve ergibt.
2) Einführung in die MPU6050-Programmierung
Nach der Initialisierung verfolgt das Gyroskop MPU6050 zuverlässig die Ausrichtung des Roboters relativ zu seiner Startrichtung. Wenn das Roboter-Auto von dieser anfänglichen Richtung abweicht, meldet der MPU6050 die Abweichung an den Arduino zurück.
In unserem Code repräsentiert die Variable Direction die Ausrichtung des Autos in dem Moment, in dem es auf den Boden gestellt wird (wir gehen davon aus, dass es vorwärts zeigt, daher setzen wir Direction auf 0).
Nach den Berechnungen in den ersten Zeilen der loop()-Funktion erhalten wir die aktuelle Ausrichtung des Autos in der Variable currentAngle auf Zeile 129.

3) Einführung in PID und Code:

a) Die Grundidee: Was ist PID?
Stellen Sie sich vor, Sie fahren ein Auto und Ihr Ziel ist es, genau in der Mitte Ihrer Fahrspur zu bleiben. Genau das fragen wir unseren Roboter: auf der „Geradeaus”-Linie zu bleiben.
PID ist ein Steueralgorithmus, der wie ein aufmerksamer Fahrer agiert. Er stellt kontinuierlich drei Fragen, um zu entscheiden, wie er lenken soll:
  1. P (Proportional): Wie weit bin ich gerade jetzt von der Fahrspurmitte entfernt?
  2. I (Integral): War ich in den letzten Momenten konstant von der Mitte abgewichen?
  3. D (Derivative): Schere ich zu schnell zur Mitte hin oder von ihr weg aus?

Durch die Kombination der Antworten auf diese drei Fragen nimmt der PID-Regler eine sanfte und effiziente Lenkkorrektur vor.

b) Wie die PID-Funktion in unserem Code funktioniert
Verbinden wir diese Theorie direkt mit der PID_v1.h-Bibliothek und Ihrem Code.
1. Initialisierung (in setup()):
// We tell the PID controller what to watch and what to control.
PID myPID(&Input, &Output, &Setpoint, Kp, Ki, Kd, DIRECT);

Direction = 0; // Our TARGET is to have an angle of 0 degrees.
myPID.SetMode(AUTOMATIC); // Turn on the controller.
  • &Input: Ein Zeiger auf unseren Sensorwert. In unserem Code ist Input gleich currentAngle. Der PID-Regler liest diesen Wert kontinuierlich.
  • &Output: Ein Zeiger auf unser Ergebnis. Der PID-Regler schreibt den berechneten Korrekturwert in die Variable Output.
  • &Direction: Ein Zeiger auf unser Ziel. Wir wollen geradeaus fahren, daher setzen wir diesen Wert auf 0.
2. Die Hauptschleife (in loop()):
// 1. We get the sensor reading and put it into the Input variable.
Input = currentAngle; 

// 2. We call the compute function. This is where the PID magic happens!
myPID.Compute(); 

// 3. We use the result to control the motors.
int speedL = baseSpeed - Output;
int speedR = baseSpeed + Output;
move(speedL, speedR);
Die Funktion myPID.Compute() erledigt die ganze Arbeit intern. Jedes Mal, wenn sie aufgerufen wird (die Bibliothek verwaltet das Timing basierend auf SetSampleTime), führt sie folgende Schritte durch:
  1. Liest den Wert aus der Variable Input (currentAngle).
  2. Berechnet den Fehler: error = Direction - Input.
  3. Berechnet den Proportionalanteil (Kp * error).
  4. Berechnet und addiert den Integralanteil (Ki * accumulated_error).
  5. Berechnet und addiert den Differenzialanteil (Kd * rate_of_error_change).
  6. Summiert alle Anteile zum endgültigen Korrekturwert.
  7. Schreibt diesen Wert in die Variable Output.
Wenn Output also +15 ist, benötigt der Roboter eine Korrektur von 15 Einheiten. Wir wenden dies an, indem wir einen Motor verlangsamen (baseSpeed - 15) und den anderen beschleunigen (baseSpeed + 15), wodurch der Roboter dreht und seinen Fehler reduziert. Wenn der Roboter perfekt geradeaus fährt, ist Input gleich 0, der Fehler ist 0 und Output ist 0, sodass beide Motoren mit baseSpeed laufen.

4) Kp, Ki und Kd für eine stabile Bewegung einstellen

  1. Zuerst: Setzen Sie Ki = 0.0 und Kd = 0.0 in Ihrem Code.
  2. Finden Sie einen Kp-Wert, der stabil ist und nicht (oder kaum) schwingt. Dieser Wert liegt wahrscheinlich unter 1,5.
  3. (Optional, aber empfohlen) Fügen Sie Ihrer Schleife eine Totzone von etwa 0,5 Grad hinzu, um Sensorrauschen zu ignorieren.
  4. Sobald Kp stabil ist, erhöhen Sie Kd langsam, um verbliebenes Überschwingen zu reduzieren.
  5. Erhöhen Sie abschließend Ki langsam, um langfristigen Drift zu eliminieren.

 

8Erweiterte Hinweise und Fehlerbehebung

Indem Sie diese Richtlinien befolgen und die zugrunde liegenden Prinzipien verstehen, können Sie das OSOYOO V3 Robot Car in eine leistungsfähige Plattform für autonome Navigation verwandeln und damit den Grundstein für fortgeschrittenere Robotikprojekte legen.

Vorherige LektionTutorial-StartseiteNächste Lektion