AlphaBot: Motoren und Inkrementalgeber: Unterschied zwischen den Versionen

Aus HSHL Mechatronik
Zur Navigation springen Zur Suche springen
 
(10 dazwischenliegende Versionen von 2 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]]<br>
{|class="wikitable"
'''Modul:''' Praxismodul I<br>
|-
'''Lehrveranstaltung:''' Mechatronik, Informatik Praktikum 2, 2. Semester<br>
| '''Autor:''' || [[Benutzer:Ulrich_Schneider| Prof. Dr.-Ing. Schneider]]
|-
| '''Modul:''' || Praxismodul II
|-
| '''Lehrveranstaltung:''' || Mechatronik, Informatik Praktikum 2, 2. Semester
|}


== Inhalt ==
= Inhalt =
* Ansteurung der Motoren
* 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.


== Versuchsdurchführung ==
= Versuchsdurchführung =
=== Aufgabe 5.1: Lichtschranke ===
== 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 31:
# 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).


'''Lernzielkontrollfragen:'''
'''Lernzielkontrollfragen:'''
Zeile 65: Zeile 71:
| 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 ==
 
=== Aufgabe 5.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).


'''Lernzielkontrollfragen:'''
'''Lernzielkontrollfragen:'''
Zeile 103: Zeile 107:
|}
|}


----
== Aufgabe 4.3: 1&thinsp;m Fahrt ==
 
=== Aufgabe 5.3: 1&thinsp;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&thinsp;m geradeaus vorwärts.
# Fahren Sie mit Ihrem Fahrzeug genau 1&thinsp;m geradeaus vorwärts.
Zeile 111: Zeile 113:
# 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 129: Zeile 130:
| 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).
| 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 ==
 
=== Aufgabe 5.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.&thinsp;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.&thinsp;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 170: Zeile 169:
|}
|}


----
== Aufgabe 4.5: Nachhaltige Doku ==
 
=== Aufgabe 5.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 181: Zeile 178:
'''Arbeitsergebnis''' in SVN: <code>SVN Log</code>
'''Arbeitsergebnis''' in SVN: <code>SVN Log</code>


== Tutorials ==
= Demos =
 
 
== 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 ==
= Literatur =
* [https://spacehal.github.io/docs/robotik/odometrie Lokalisierung und Odometrie eines Roboters mit differentiellem Antrieb]
* [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]
----
----
→ Termine [[Einführungsveranstaltung_Informatikpraktikum_2_im_SoSe_2023|1]] [[AlphaBot:_Messdatenverarbeitung_mit_MATLAB|2]] [[AlphaBot:_MATLAB_als_serieller_Monitor|3]] [[AlphaBot: Servo ansteuern|4]] [[AlphaBot:_Motoren_und_Inkrementalgeber|5]] [[AlphaBot: Programmier-Challenge I SoSe23|6]] [[AlphaBot:_Gesteuerte_Fahrt|7]] [[AlphaBot: Geregelte Fahrt mit Linienverfolger|8]] [[AlphaBot: Parklücke suchen|9]] [[AlphaBot: Autonomes Einparken|10]] [[AlphaBot: Programmier-Challenge II SoSe23|11]]<br>
→ Termine [[Einführungsveranstaltung_Informatikpraktikum_2_im_SoSe_2025|1]] [[AlphaBot:_Hardware_Support_Package_für_MATLAB|2]] [[AlphaBot: Servo_mit_MATLAB_ansteuern|3]] [[AlphaBot:_Motoren_und_Inkrementalgeber|4]] [[AlphaBot: Programmier-Challenge I SoSe25|5]] [[AlphaBot:_Gesteuerte_Geradeausfahrt|6]] [[AlphaBot: Geregelte Fahrt mit Linienverfolger|7]] [[AlphaBot: Parklücke suchen|8]] [[AlphaBot: Autonomes Einparken|9]] [[AlphaBot: Programmier-Challenge II SoSe25|10]]<br>
→ zurück zum Hauptartikel: [[AlphaBot_SoSe23|Informatik Praktikum 2]]
→ zurück zum Hauptartikel: [[AlphaBot_SoSe25|Informatik Praktikum 2]]

Aktuelle Version vom 14. Mai 2025, 20:46 Uhr

Abb. 1: Lichtschrankenzustände 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.

Versuchsdurchführung

Aufgabe 4.1: Lichtschranke

  1. Bitte aktualisieren Sie ihre Arduino / librarie.
  2. Machen Sie sich mit dem Demo E13_Lichtschranke vertraut, so dass Sie jede Zeile erläutern können.
  3. Kopieren Sie das Beispiel in Ihren Ordner und erweitern Sie es.
  4. Lassen Sie als Test beide Motoren langsam vorwärts drehen.
  5. Flankenwechsel von CNTL/CNTR sollen einen Interrupt auslösen.
  6. Optional: Stellen Sie beide Lichtschrankenzustände CNTL/CNTR über der Zeit in MATLAB® dar (vgl. Abb. 2).

Lernzielkontrollfragen:

  • Wie funktioniert eine Lichtschranke?
  • Wo befinden sich die Lichtschranken?
  • Wo ist rechts und wo links?
  • An welchen Ports sind die linke und rechte Lichtschranke angeschlossen?
  • Welche IO-Pins sind beim Arduino Uno interruptfähig?
  • Wie entscheidet die Lichtschranke zwischen Vorwärts- oder Rückwärtsdrehung?
  • Wieviele Flanken erhalten Sie für eine Radumdrehung?

Arbeitsergebnisse: testeLichtschranke.ino, testeLichtschranke.m, leseArduinoDaten.m

Aufgabe 4.2: RadInkrementalgeber

  1. Machen Sie sich mit E15_RadInkrementalgeberFahrt vertraut, so dass Sie jede Zeile erläutern können.
  2. Kopieren Sie das Beispiel in Ihren Ordner und erweitern Sie es.
  3. Rechnen Sie die Radumdrehungen in gefahrene Strecke um.
  4. Optional: Stellen Sie die gefahrene Strecke über der Zeit in MATLAB® dar (vgl. Abb. 3).

Lernzielkontrollfragen:

  • Was ist ein Interrupt und wozu dient er?
  • Wozu dient die Funktion attachInterrupt()?
  • Wie lässt sich die die gefahrene Strecke berechnen?

Arbeitsergebnis: testeRadInkrementalgeber.ino, zeigeRadInkrementalgeber.m, leseArduinoDaten.m

Aufgabe 4.3: 1 m Fahrt

  1. Machen Sie sich mit dem Demo E15_RadInkrementalgeberFahrt vertraut, so dass Sie jede Zeile erläutern können.
  2. Fahren Sie mit Ihrem Fahrzeug genau 1 m geradeaus vorwärts.
  3. Fahren Sie wieder zum Startpunkt zurück. Wenden Sie das Fahrzeug nicht!
  4. Der AlphaBot inkrementiert die Strecke bei Vorwärtsfahrt und dekrementiert bei Rückwärtsfahrt.
  5. 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

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.

  1. Erweitern Sie Ihr bisheriges Programm, um die Seiten eines Quadrates im Uhrzeigersinn abzufahren (vgl. Abb. 4).
  2. Die Seitenlänge a ist eine Variable und soll 30 cm betragen.
  3. Führen Sie eine Schleife 4x aus, die aus Geradeausfahrt und Drehung besteht.
Abb. 4: Fahren Sie im Uhrzeigersinn die Seiten eines Quadrates ab

Lernzielkontrollfragen:

  • Kommen Sie wieder am Startpunkt an?
  • Begründen Sie ggf. eine Abweichung.

Arbeitsergebnis: fahreQuadrat.ino

Aufgabe 4.5: Nachhaltige Doku

Sichern Sie alle Ergebnisse mit beschreibendem Text (message) in SVN.

Arbeitsergebnis in SVN: SVN Log

Demos

Literatur



→ Termine 1 2 3 4 5 6 7 8 9 10
→ zurück zum Hauptartikel: Informatik Praktikum 2