AlphaBot: Motoren und Inkrementalgeber: Unterschied zwischen den Versionen
| (30 dazwischenliegende Versionen von 3 Benutzern werden nicht angezeigt) | |||
| Zeile 2: | Zeile 2: | ||
[[Kategorie:AlphaBot]] | [[Kategorie:AlphaBot]] | ||
[[Datei:Inf2P_5_1.jpg|thumb|rigth|450px|Abb. 1: Lichtschrankenzustände <code>CNTL/CNTR</code>]] | [[Datei:Inf2P_5_1.jpg|thumb|rigth|450px|Abb. 1: Lichtschrankenzustände <code>CNTL/CNTR</code>]] | ||
'''Autor:''' [[Benutzer:Ulrich_Schneider| Prof. Dr.-Ing. Schneider]] | {|class="wikitable" | ||
'''Modul:''' Praxismodul | |- | ||
'''Lehrveranstaltung:''' Mechatronik, Informatik Praktikum 2, 2. Semester | | '''Autor:''' || [[Benutzer:Ulrich_Schneider| Prof. Dr.-Ing. Schneider]] | ||
|- | |||
| '''Modul:''' || Praxismodul II | |||
|- | |||
| '''Lehrveranstaltung:''' || Mechatronik, Informatik Praktikum 2, 2. Semester | |||
|} | |||
= Inhalt = | |||
* | * Ansteuerung der Motoren | ||
* Auslesen der Lichtschranken via Interrupt | * Auslesen der Lichtschranken via Interrupt | ||
* Berechnung der gefahrenen Strecke | * Berechnung der gefahrenen Strecke | ||
* Fahrt einer definierten Strecke und Figur. | * Fahrt einer definierten Strecke und Figur. | ||
* Berechnung des Kurswinkels aus diffenentieller Odometrie | * Berechnung des Kurswinkels aus diffenentieller Odometrie | ||
== Lernziele== | == Lernziele== | ||
Nach Durchführung dieser Lektion können Sie | Nach Durchführung dieser Lektion können Sie | ||
| Zeile 18: | Zeile 24: | ||
* die Position und Lage eines mobilen Roboters mittels diffenentieller Odometrie schätzen. | * die Position und Lage eines mobilen Roboters mittels diffenentieller Odometrie schätzen. | ||
== | |||
=== Aufgabe | == Lernzielkontrolle == | ||
* Wie funktioniert eine [[AlphaBot_Lichtschranke|Lichtschranke]]? | |||
* Wo ist beim AlphaBot rechts und wo links? | |||
* Wo befinden sich die Lichtschranken beim AlphaBot? | |||
* An welchen Pins des Arduino sind die Lichtschranken angeschlossen? | |||
* Wie werden die Lichtschranken eingelesen? | |||
* Was ist ein Interrupt und wozu dient er? | |||
* Wozu dient die Funktion <code>attachInterrupt()</code>? | |||
* Welche IO-Pins sind beim Arduino Uno Plus interruptfähig? | |||
* Werden die steigenden oder fallenden Flanken ausgewertet? | |||
* Wie errechnet man aus Lichtschrankenflanken die gefahrene Strecke? | |||
* Wie unterscheiden die Lichtschranke zwischen Vorwärts- oder Rückwärtsdrehung? | |||
= Versuchsvorbereitung = | |||
* Arbeiten Sie sich anhand der Tutorials mit der Hardware [[AlphaBot|Alphabot]], Motoren und Lichtschrankenvertraut. | |||
* Beachten Sie besonders die Ausrichtung der Akkus. '''ACHTUNG BRANDGEFAHR!''' | |||
* Versuchen Sie die Lernzielkontrollfragen anhand der Wiki-Artikel und Tutorials zu beantworten. | |||
* Nutzen Sie MATLAB als seriellen Monitor. | |||
= Warnung = | |||
{| | |||
|- | |||
| [[Datei:Warnung2.png|rahmenlos|50px|links]] || | |||
* Der AlphaBot verwendet sehr viele Sensoren, daher sind Ports mehrfach verwendet. Es kann somit zu '''Komplikationen''' kommen. Entfernen Sie einfach die Steckbrücken der Mehrfachbelegung. | |||
* Schützen Sie den Ultraschallsensor vor Verpolung! Beachten Sie die Beschriftung. | |||
* Falls der Ultraschallsensor keine vernünftigen Werte liefert, versorgen Sie diesen zusätzlich über die Akkus. | |||
|} | |||
= Versuchsdurchführung = | |||
== Aufgabe 4.1: Lichtschranke == | |||
# Bitte aktualisieren Sie ihre Arduino / librarie. | # Bitte aktualisieren Sie ihre Arduino / librarie. | ||
# Machen Sie sich mit dem Demo <code>E13_Lichtschranke</code> vertraut, so dass Sie jede Zeile erläutern können. | # Machen Sie sich mit dem Demo <code>E13_Lichtschranke</code> vertraut, so dass Sie jede Zeile erläutern können. | ||
| Zeile 25: | Zeile 60: | ||
# Lassen Sie als Test beide Motoren langsam vorwärts drehen. | # Lassen Sie als Test beide Motoren langsam vorwärts drehen. | ||
# Flankenwechsel von <code>CNTL/CNTR</code> sollen einen [https://wiki.hshl.de/wiki/index.php/Arduino:_Interrupts Interrupt] auslösen. | # Flankenwechsel von <code>CNTL/CNTR</code> sollen einen [https://wiki.hshl.de/wiki/index.php/Arduino:_Interrupts Interrupt] auslösen. | ||
# Stellen Sie beide Lichtschrankenzustände <code>CNTL/CNTR</code> über der Zeit in MATLAB<sup>®</sup> dar (vgl. Abb. 2). | # Optional: Stellen Sie beide Lichtschrankenzustände <code>CNTL/CNTR</code> über der Zeit in MATLAB<sup>®</sup> dar (vgl. Abb. 2). | ||
'''Arbeitsergebnisse:''' <code>testeLichtschranke.ino</code>, <code>testeLichtschranke.m</code> | '''Arbeitsergebnisse:''' <code>testeLichtschranke.ino</code>, <code>testeLichtschranke.m, leseArduinoDaten.m</code> | ||
{| role="presentation" class="wikitable mw-collapsible mw-collapsed" | {| role="presentation" class="wikitable mw-collapsible mw-collapsed" | ||
| Zeile 47: | Zeile 73: | ||
| Entfernen Sie die Multisensorerweiterung. | | Entfernen Sie die Multisensorerweiterung. | ||
|- | |- | ||
| Legen Sie für eine langsame Raddrehung keine Akkus ein. | | Legen Sie für eine langsame Raddrehung keine Akkus ein. Manche USB-Ports sind zu schwach um die Motoren zu betreiben. Dann müssen Sie die Akkus nutzen. | ||
|} | |} | ||
{| role="presentation" class="wikitable mw-collapsible mw-collapsed" | {| role="presentation" class="wikitable mw-collapsible mw-collapsed" | ||
| <strong>Tipp 2 </strong> | | <strong>Tipp 2 </strong> | ||
|- | |||
| Legen Sie ein Bit an, welches Vorwärts- und Rückwärtsfahrt unterscheidet. | |||
|- | |||
| Setzen Sie das Bit bei Vorwärtsfahrt und löschen Sie es bei Rückwärtsfahrt. | |||
|- | |||
| Inkrementieren Sie einen <code>long</code>-Zähler im Interrupt, wenn der Motor vorwärtsfährt und dekrementieren Sie den Zähler bei Rückwärtsfahrt. | |||
|- | |||
| Rechnen Sie im <code>loop</code> bei der Ausgabe die Inkremente in eine Strecke um. | |||
|} | |||
{| role="presentation" class="wikitable mw-collapsible mw-collapsed" | |||
| <strong>Tipp 3 </strong> | |||
|- | |- | ||
| Ergebnisplot:<br>[[Datei:Inf2P_5_1.jpg|left|450px|Abb. 2: Ergebnisdarstellung CNTL vs. CNTR]]<br> Abb. 2: CNTL/CNTR über der Zeit | | Ergebnisplot:<br>[[Datei:Inf2P_5_1.jpg|left|450px|Abb. 2: Ergebnisdarstellung CNTL vs. CNTR]]<br> Abb. 2: CNTL/CNTR über der Zeit | ||
|} | |} | ||
== Aufgabe 4.2: RadInkrementalgeber == | |||
# Machen Sie sich mit <code>E15_RadInkrementalgeberFahrt</code> vertraut, so dass Sie jede Zeile erläutern können. | # Machen Sie sich mit <code>E15_RadInkrementalgeberFahrt</code> vertraut, so dass Sie jede Zeile erläutern können. | ||
# Kopieren Sie das Beispiel in Ihren Ordner und erweitern Sie es. | # Kopieren Sie das Beispiel in Ihren Ordner und erweitern Sie es. | ||
# Rechnen Sie die Radumdrehungen in gefahrene Strecke um. | # Rechnen Sie die Radumdrehungen in gefahrene Strecke um. | ||
# Stellen Sie die gefahrene Strecke über der Zeit in MATLAB<sup>®</sup> dar (vgl. Abb. 3). | # Optional: Stellen Sie die gefahrene Strecke über der Zeit in MATLAB<sup>®</sup> dar (vgl. Abb. 3). | ||
'''Arbeitsergebnis:''' <code>testeRadInkrementalgeber.ino</code>, <code>zeigeRadInkrementalgeber.m</code> | '''Arbeitsergebnis:''' <code>testeRadInkrementalgeber.ino</code>, <code>zeigeRadInkrementalgeber.m, leseArduinoDaten.m</code> | ||
{| role="presentation" class="wikitable mw-collapsible mw-collapsed" | {| role="presentation" class="wikitable mw-collapsible mw-collapsed" | ||
| <strong>Tipp 1 </strong> | | <strong>Tipp 1 </strong> | ||
| Zeile 81: | Zeile 112: | ||
{| role="presentation" class="wikitable mw-collapsible mw-collapsed" | {| role="presentation" class="wikitable mw-collapsible mw-collapsed" | ||
| <strong>Tipp 2 </strong> | | <strong>Tipp 2 </strong> | ||
|- | |||
| Nutzen Sie <code>switch...case</code> um zwischen den Fahrzuständen (1: vorwärts/2: rückwärts/3: Stopp) zu wechseln. | |||
|- | |||
| Nutzen Sie die Lösung aus Aufgabe 5.2, um die Zähler zu dekrementieren und inkrementieren. | |||
|} | |||
{| role="presentation" class="wikitable mw-collapsible mw-collapsed" | |||
| <strong>Tipp 3 </strong> | |||
|- | |- | ||
| Ergebnisplot:<br>[[Datei:Inf2P_5_2.jpg|left|450px|Abb. 3: Strecke des linken und rechten Rades]]<br> Abb. 3: Strecke des linken und rechten Rades über der Zeit | | Ergebnisplot:<br>[[Datei:Inf2P_5_2.jpg|left|450px|Abb. 3: Strecke des linken und rechten Rades]]<br> Abb. 3: Strecke des linken und rechten Rades über der Zeit | ||
|} | |} | ||
== Aufgabe 4.3: 1 m Fahrt == | |||
# Machen Sie sich mit dem Demo <code>E15_RadInkrementalgeberFahrt</code> vertraut, so dass Sie jede Zeile erläutern können. | # Machen Sie sich mit dem Demo <code>E15_RadInkrementalgeberFahrt</code> vertraut, so dass Sie jede Zeile erläutern können. | ||
# Fahren Sie mit Ihrem Fahrzeug genau 1 m geradeaus vorwärts. | # Fahren Sie mit Ihrem Fahrzeug genau 1 m geradeaus vorwärts. | ||
| Zeile 93: | Zeile 129: | ||
# Der AlphaBot inkrementiert die Strecke bei Vorwärtsfahrt und dekrementiert bei Rückwärtsfahrt. | # Der AlphaBot inkrementiert die Strecke bei Vorwärtsfahrt und dekrementiert bei Rückwärtsfahrt. | ||
# Stellen Sie die gefahrene Strecke im seriellen Monitor dar. | # Stellen Sie die gefahrene Strecke im seriellen Monitor dar. | ||
'''Lernzielkontrollfragen:''' | '''Lernzielkontrollfragen:''' | ||
| Zeile 106: | Zeile 141: | ||
|- | |- | ||
| Legen Sie den Akku korrekt an, um die Motoren anzusteuern. | | Legen Sie den Akku korrekt an, um die Motoren anzusteuern. | ||
|- | |||
| Wenn Ihr AlphaBot bei gleicher Ansteuerung der Motoren nicht geradeaus fährt liegt dies an den unterschiedlichen Motoren. <br> Nutzen Sie das Potentiometer der Multisensor-Erweiterung, um den „Gleichlauf der Motoren“ mit anzupassen. | |||
|- | |||
| Fazit: Eine perfekte Gerade ist nur durch Ansteuerung von Rädern nicht möglich. Die Fehler (Anfahrtmoment, unterschiedliche Motoren, Schlupf der Reifen,...) summieren sich systematisch auf. Hier hilft nur eine geregelte Geradeausfahrt (Lektion 8). | |||
|} | |} | ||
== Aufgabe 4.4: Differentielle Odometrie == | |||
Odometrie bezeichnet eine Methode der Schätzung von Position und Orientierung (Lageschätzung) eines mobilen Roboters anhand der Daten seines Vortriebsystems. Durch Räder angetriebene Systeme benutzen dafür die Anzahl der Radumdrehungen, während laufende Systeme (z. B. Roboter) die Anzahl ihrer Schritte verwenden. Ein Gerät, das die Odometrie zur Lageschätzung verwendet, ist ein Odometer. Die Odometrie ist im Zusammenspiel mit der Koppelnavigation ein grundlegendes Navigationsverfahren für bodengebundene Fahrzeuge aller Art (Kraftfahrzeuge, Roboter), allerdings wird es auf Grund seiner Fehlereigenschaften selten als alleiniges Verfahren eingesetzt. In dieser Aufgabe werden die Raddrehzahlen der beiden Räder zur Lageschätzung verwendet. | Odometrie bezeichnet eine Methode der Schätzung von Position und Orientierung (Lageschätzung) eines mobilen Roboters anhand der Daten seines Vortriebsystems. Durch Räder angetriebene Systeme benutzen dafür die Anzahl der Radumdrehungen, während laufende Systeme (z. B. Roboter) die Anzahl ihrer Schritte verwenden. Ein Gerät, das die Odometrie zur Lageschätzung verwendet, ist ein Odometer. Die Odometrie ist im Zusammenspiel mit der Koppelnavigation ein grundlegendes Navigationsverfahren für bodengebundene Fahrzeuge aller Art (Kraftfahrzeuge, Roboter), allerdings wird es auf Grund seiner Fehlereigenschaften selten als alleiniges Verfahren eingesetzt. In dieser Aufgabe werden die Raddrehzahlen der beiden Räder zur Lageschätzung verwendet. | ||
# Erweitern Sie Ihr bisheriges Programm, um die Seiten eines Quadrates im Uhrzeigersinn abzufahren (vgl. Abb. 4). | # Erweitern Sie Ihr bisheriges Programm, um die Seiten eines Quadrates im Uhrzeigersinn abzufahren (vgl. Abb. 4). | ||
| Zeile 137: | Zeile 174: | ||
|- | |- | ||
|Für den Kurswinkel <math>\Psi</math> gilt: <math>\Psi=\frac{s_R-s_L}{l}</math> mit <math>l</math>: Spurweite | |Für den Kurswinkel <math>\Psi</math> gilt: <math>\Psi=\frac{s_R-s_L}{l}</math> mit <math>l</math>: Spurweite | ||
|} | |||
{| role="presentation" class="wikitable mw-collapsible mw-collapsed" | |||
| <strong>Tipp 3 </strong> | |||
|- | |||
| Mitteln Sie bei Geradeausfahrt die links und rechts gefahrene Strecke. | |||
|- | |||
| Drehen Sie 90° in dem Sie ein Rad vorwärts und das andere rückwärts laufen lassen. Die Kinematik der Platzdrehung ist [https://spacehal.github.io/docs/robotik/odometrie hier] beschrieben. | |||
|- | |||
| Kapseln Sie die Platzdrehung in die Funktion <code>dreheRoboter(Winkel)</code>, wobei eine Drehung gegen den Uhrzeigersinn positiv ist. | |||
|} | |} | ||
== Aufgabe 4.5: Nachhaltige Doku == | |||
Sichern Sie alle Ergebnisse mit beschreibendem Text (<code>message</code>) in SVN. | Sichern Sie alle Ergebnisse mit beschreibendem Text (<code>message</code>) in SVN. | ||
* Halten Sie die Regeln für den [[Software_Versionsverwaltung_mit_SVN|Umgang mit SVN]] ein. | * Halten Sie die Regeln für den [[Software_Versionsverwaltung_mit_SVN|Umgang mit SVN]] ein. | ||
| Zeile 150: | Zeile 194: | ||
'''Arbeitsergebnis''' in SVN: <code>SVN Log</code> | '''Arbeitsergebnis''' in SVN: <code>SVN Log</code> | ||
= Demos = | |||
* [https://svn.hshl.de/svn/Informatikpraktikum_1/trunk/AlphaBot/ArduinoLibOrdner/AlphaBot/examples/E13_Lichtschranke SVN: <code>E13_Lichtschranke</code>] | * [https://svn.hshl.de/svn/Informatikpraktikum_1/trunk/AlphaBot/ArduinoLibOrdner/AlphaBot/examples/E13_Lichtschranke SVN: <code>E13_Lichtschranke</code>] | ||
* [https://svn.hshl.de/svn/Informatikpraktikum_1/trunk/AlphaBot/ArduinoLibOrdner/AlphaBot/examples/E14_RadInkrementalgeber SVN: <code>E14_RadInkrementalgeber</code>] | * [https://svn.hshl.de/svn/Informatikpraktikum_1/trunk/AlphaBot/ArduinoLibOrdner/AlphaBot/examples/E14_RadInkrementalgeber SVN: <code>E14_RadInkrementalgeber</code>] | ||
* [https://svn.hshl.de/svn/Informatikpraktikum_1/trunk/AlphaBot/ArduinoLibOrdner/AlphaBot/examples/E15_RadInkrementalgeberFahrt SVN: <code>E15_RadInkrementalgeberFahrt</code>] | * [https://svn.hshl.de/svn/Informatikpraktikum_1/trunk/AlphaBot/ArduinoLibOrdner/AlphaBot/examples/E15_RadInkrementalgeberFahrt SVN: <code>E15_RadInkrementalgeberFahrt</code>] | ||
= Literatur = | |||
* [https://spacehal.github.io/docs/robotik/odometrie Lokalisierung und Odometrie eines Roboters mit differentiellem Antrieb] | |||
* [http://www.uni-ulm.de/fileadmin/website_uni_ulm/iui.inst.130/Mitarbeiter/oubbati/RobotikWS1113/Folien/Differentialantrieb.pdf Uni Ulm: Differentialantrieb.pdf] | * [http://www.uni-ulm.de/fileadmin/website_uni_ulm/iui.inst.130/Mitarbeiter/oubbati/RobotikWS1113/Folien/Differentialantrieb.pdf Uni Ulm: Differentialantrieb.pdf] | ||
* [http://www.ki.informatik.hu-berlin.de/lehre/ws0506/kogrob/KR0506Bewegung-kurz.pdf HU-Berlin Kognitive Robotik] | * [http://www.ki.informatik.hu-berlin.de/lehre/ws0506/kogrob/KR0506Bewegung-kurz.pdf HU-Berlin Kognitive Robotik] | ||
* [http://rossum.sourceforge.net/papers/DiffSteer/DiffSteer.html The Rossum Project: Differential Steering System] | * [http://rossum.sourceforge.net/papers/DiffSteer/DiffSteer.html The Rossum Project: Differential Steering System] | ||
== [[Datei:Lektionen.jpg|60px]] Ausblick zur nächsten Lektion == | |||
In der nächsten Lektion findet die Zwischenprüfung statt. | |||
---- | ---- | ||
→ Termine [[ | → Termine [[Einführungsveranstaltung_Informatikpraktikum_2_im_SoSe_2026|1]] [[AlphaBot:_Messdatenverarbeitung_mit_MATLAB|2]] [[AlphaBot:_Hardware_Support_Package_für_MATLAB|3]] [[AlphaBot: Servo_mit_MATLAB_ansteuern|4]] [[AlphaBot:_Motoren_und_Inkrementalgeber|5]] [[AlphaBot: Programmier-Challenge I SoSe26|6]] [[AlphaBot:_Gesteuerte_Geradeausfahrt|7]] [[AlphaBot: Geregelte Fahrt mit Linienverfolger|8]] [[AlphaBot: Parklücke suchen|10]] [[AlphaBot: Autonomes Einparken|11]] [[AlphaBot: Programmier-Challenge II SoSe26|12]]<br> | ||
→ zurück zum Hauptartikel: [[ | → zurück zum Hauptartikel: [[AlphaBot_SoSe26|Informatik Praktikum 2]]<br> | ||
→ Haben Sie Fragen? [[Informatik Praktikum FAQ]] | |||
Aktuelle Version vom 30. April 2026, 14:58 Uhr

CNTL/CNTR| Autor: | Prof. Dr.-Ing. Schneider |
| Modul: | Praxismodul II |
| Lehrveranstaltung: | Mechatronik, Informatik Praktikum 2, 2. Semester |
Inhalt
- Ansteuerung der Motoren
- Auslesen der Lichtschranken via Interrupt
- Berechnung der gefahrenen Strecke
- Fahrt einer definierten Strecke und Figur.
- Berechnung des Kurswinkels aus diffenentieller Odometrie
Lernziele
Nach Durchführung dieser Lektion können Sie
- die Fahrstrecke des linken und rechten Rades aus den Lichtschrankensignale berechnen.
- eine definierte Strecke und Figur fahren.
- die Position und Lage eines mobilen Roboters mittels diffenentieller Odometrie schätzen.
Lernzielkontrolle
- Wie funktioniert eine Lichtschranke?
- Wo ist beim AlphaBot rechts und wo links?
- Wo befinden sich die Lichtschranken beim AlphaBot?
- An welchen Pins des Arduino sind die Lichtschranken angeschlossen?
- Wie werden die Lichtschranken eingelesen?
- Was ist ein Interrupt und wozu dient er?
- Wozu dient die Funktion
attachInterrupt()? - Welche IO-Pins sind beim Arduino Uno Plus interruptfähig?
- Werden die steigenden oder fallenden Flanken ausgewertet?
- Wie errechnet man aus Lichtschrankenflanken die gefahrene Strecke?
- Wie unterscheiden die Lichtschranke zwischen Vorwärts- oder Rückwärtsdrehung?
Versuchsvorbereitung
- Arbeiten Sie sich anhand der Tutorials mit der Hardware Alphabot, Motoren und Lichtschrankenvertraut.
- Beachten Sie besonders die Ausrichtung der Akkus. ACHTUNG BRANDGEFAHR!
- Versuchen Sie die Lernzielkontrollfragen anhand der Wiki-Artikel und Tutorials zu beantworten.
- Nutzen Sie MATLAB als seriellen Monitor.
Warnung
Versuchsdurchführung
Aufgabe 4.1: Lichtschranke
- Bitte aktualisieren Sie ihre Arduino / librarie.
- Machen Sie sich mit dem Demo
E13_Lichtschrankevertraut, so dass Sie jede Zeile erläutern können. - Kopieren Sie das Beispiel in Ihren Ordner und erweitern Sie es.
- Lassen Sie als Test beide Motoren langsam vorwärts drehen.
- Flankenwechsel von
CNTL/CNTRsollen einen Interrupt auslösen. - Optional: Stellen Sie beide Lichtschrankenzustände
CNTL/CNTRüber der Zeit in MATLAB® dar (vgl. Abb. 2).
Arbeitsergebnisse: testeLichtschranke.ino, testeLichtschranke.m, leseArduinoDaten.m
| Tipp 1 |
Nutzen Sie die Demos E13_Lichtschranke und E01_MotorenTest |
| Nur die IO-Pins D2 und D3 sind beim Arduino Uno interruptfähig. |
| Entfernen Sie die Multisensorerweiterung. |
| Legen Sie für eine langsame Raddrehung keine Akkus ein. Manche USB-Ports sind zu schwach um die Motoren zu betreiben. Dann müssen Sie die Akkus nutzen. |
| Tipp 2 |
| Legen Sie ein Bit an, welches Vorwärts- und Rückwärtsfahrt unterscheidet. |
| Setzen Sie das Bit bei Vorwärtsfahrt und löschen Sie es bei Rückwärtsfahrt. |
Inkrementieren Sie einen long-Zähler im Interrupt, wenn der Motor vorwärtsfährt und dekrementieren Sie den Zähler bei Rückwärtsfahrt.
|
Rechnen Sie im loop bei der Ausgabe die Inkremente in eine Strecke um.
|
| Tipp 3 |
| Ergebnisplot: Abb. 2: CNTL/CNTR über der Zeit |
Aufgabe 4.2: RadInkrementalgeber
- Machen Sie sich mit
E15_RadInkrementalgeberFahrtvertraut, so dass Sie jede Zeile erläutern können. - Kopieren Sie das Beispiel in Ihren Ordner und erweitern Sie es.
- Rechnen Sie die Radumdrehungen in gefahrene Strecke um.
- Optional: Stellen Sie die gefahrene Strecke über der Zeit in MATLAB® dar (vgl. Abb. 3).
Arbeitsergebnis: testeRadInkrementalgeber.ino, zeigeRadInkrementalgeber.m, leseArduinoDaten.m
| Tipp 1 |
Nutzen Sie die Demos E14_RadInkrementalgeber und E15_RadInkrementalgeberFahrt |
| Legen Sie den Akku korrekt an, um die Motoren anzusteuern. |
| Aus den gemessenen Motorumdrehungen lässt sich die gefahrene Strecke berechnen: . Drehen beider Räder um 360 °, dann fährt der Roboter 20,1 cm vorwärts. |
| Erreichen Sie die Strecke nicht, entfernen Sie als Test die Multisensorerweiterung. |
| Tipp 2 |
Nutzen Sie switch...case um zwischen den Fahrzuständen (1: vorwärts/2: rückwärts/3: Stopp) zu wechseln.
|
| Nutzen Sie die Lösung aus Aufgabe 5.2, um die Zähler zu dekrementieren und inkrementieren. |
| Tipp 3 |
| Ergebnisplot: Abb. 3: Strecke des linken und rechten Rades über der Zeit |
Aufgabe 4.3: 1 m Fahrt
- Machen Sie sich mit dem Demo
E15_RadInkrementalgeberFahrtvertraut, so dass Sie jede Zeile erläutern können. - Fahren Sie mit Ihrem Fahrzeug genau 1 m geradeaus vorwärts.
- Fahren Sie wieder zum Startpunkt zurück. Wenden Sie das Fahrzeug nicht!
- Der AlphaBot inkrementiert die Strecke bei Vorwärtsfahrt und dekrementiert bei Rückwärtsfahrt.
- Stellen Sie die gefahrene Strecke im seriellen Monitor dar.
Lernzielkontrollfragen:
- Wie kann die Fahrtrichtung bei der Streckenbestimmung berücksichtigt werden?
- Wurde 1 m gefahren? Steht der AlphaBot wieder am Startpunkt? Begründen Sie ggf. die Abweichung.
Arbeitsergebnis: fahreVorZurueck.ino
| Tipp 1 |
| Nutzen Sie die Demos E01, E15, E22 im SVN-Verzeichnis. |
| Legen Sie den Akku korrekt an, um die Motoren anzusteuern. |
| Wenn Ihr AlphaBot bei gleicher Ansteuerung der Motoren nicht geradeaus fährt liegt dies an den unterschiedlichen Motoren. Nutzen Sie das Potentiometer der Multisensor-Erweiterung, um den „Gleichlauf der Motoren“ mit anzupassen. |
| Fazit: Eine perfekte Gerade ist nur durch Ansteuerung von Rädern nicht möglich. Die Fehler (Anfahrtmoment, unterschiedliche Motoren, Schlupf der Reifen,...) summieren sich systematisch auf. Hier hilft nur eine geregelte Geradeausfahrt (Lektion 8). |
Aufgabe 4.4: Differentielle Odometrie
Odometrie bezeichnet eine Methode der Schätzung von Position und Orientierung (Lageschätzung) eines mobilen Roboters anhand der Daten seines Vortriebsystems. Durch Räder angetriebene Systeme benutzen dafür die Anzahl der Radumdrehungen, während laufende Systeme (z. B. Roboter) die Anzahl ihrer Schritte verwenden. Ein Gerät, das die Odometrie zur Lageschätzung verwendet, ist ein Odometer. Die Odometrie ist im Zusammenspiel mit der Koppelnavigation ein grundlegendes Navigationsverfahren für bodengebundene Fahrzeuge aller Art (Kraftfahrzeuge, Roboter), allerdings wird es auf Grund seiner Fehlereigenschaften selten als alleiniges Verfahren eingesetzt. In dieser Aufgabe werden die Raddrehzahlen der beiden Räder zur Lageschätzung verwendet.
- Erweitern Sie Ihr bisheriges Programm, um die Seiten eines Quadrates im Uhrzeigersinn abzufahren (vgl. Abb. 4).
- Die Seitenlänge a ist eine Variable und soll 30 cm betragen.
- Führen Sie eine Schleife 4x aus, die aus Geradeausfahrt und Drehung besteht.

Lernzielkontrollfragen:
- Kommen Sie wieder am Startpunkt an?
- Begründen Sie ggf. eine Abweichung.
Arbeitsergebnis: fahreQuadrat.ino
| Tipp 1 |
| Nutzen Sie die Demos E01, E15, E22 im SVN-Verzeichnis. |
| Legen Sie den Akku korrekt an, um die Motoren anzusteuern. |
| Nützlicher Artikel: Navigation mit Differenzialantrieb |
| Tipp 2 |
Abb. 5: Kursbestimmung aus differentieller Odometrie |
| Für den Kurswinkel gilt: mit : Spurweite |
| Tipp 3 |
| Mitteln Sie bei Geradeausfahrt die links und rechts gefahrene Strecke. |
| Drehen Sie 90° in dem Sie ein Rad vorwärts und das andere rückwärts laufen lassen. Die Kinematik der Platzdrehung ist hier beschrieben. |
Kapseln Sie die Platzdrehung in die Funktion dreheRoboter(Winkel), wobei eine Drehung gegen den Uhrzeigersinn positiv ist.
|
Aufgabe 4.5: Nachhaltige Doku
Sichern Sie alle Ergebnisse mit beschreibendem Text (message) in SVN.
- Halten Sie die Regeln für den Umgang mit SVN ein.
- Halten Sie die Programmierrichtlinie für C und die Programmierrichtlinien für MATLAB® ein.
- Versehen Sie jedes Programm mit einem Header (Header Beispiel für MATLAB, Header Beispiel für C).
- Kommentiere Sie den Quelltext umfangreich.
Arbeitsergebnis in SVN: SVN Log
Demos
Literatur
- Lokalisierung und Odometrie eines Roboters mit differentiellem Antrieb
- Uni Ulm: Differentialantrieb.pdf
- HU-Berlin Kognitive Robotik
- The Rossum Project: Differential Steering System
Ausblick zur nächsten Lektion
In der nächsten Lektion findet die Zwischenprüfung statt.
→ Termine 1 2 3 4 5 6 7 8 10 11 12
→ zurück zum Hauptartikel: Informatik Praktikum 2
→ Haben Sie Fragen? Informatik Praktikum FAQ


