AlphaBot: Motoren und Inkrementalgeber: Unterschied zwischen den Versionen

Aus HSHL Mechatronik
Zur Navigation springen Zur Suche springen
 
(51 dazwischenliegende Versionen von 2 Benutzern werden nicht angezeigt)
Zeile 1: Zeile 1:
[[Kategorie:Arduino]]
[[Kategorie:Arduino]]
[[Kategorie:AlphaBot]]
[[Kategorie:AlphaBot]]
[[Datei:Work-98936 960 720.png|thumb|rigth|450px|Abb. 1:  Der Artikel ist in Arbeit]]
[[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>
'''Autor:''' [[Benutzer:Ulrich_Schneider| Prof. Dr.-Ing. Schneider]]<br>
'''Modul:''' Praxismodul I<br>
'''Modul:''' Praxismodul I<br>
Zeile 7: Zeile 7:


== Inhalt ==
== Inhalt ==
 
* Ansteurung der Motoren
* Auslesen der Lichtschranken via Interrupt
* Berechnung der gefahrenen Strecke
* Fahrt einer definierten Strecke und Figur.
* Berechnung des Kurswinkels aus diffenentieller Odometrie
== Lernziele==
== Lernziele==
Nach Durchführung dieser Lektion können Sie
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 ==
== Versuchsdurchführung ==
=== Aufgabe 5.1: Lichtschranke ===
=== Aufgabe 5.1: Lichtschranke ===
# Machen Sie sich mit E13_Photo_Interrupter_Sensor.ino vertraut, so dass Sie jede Zeile erläutern können.
# 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.
# Kopieren Sie das Beispiel in Ihren Ordner und erweitern Sie es.
# Kopieren Sie das Beispiel in Ihren Ordner und erweitern Sie es.
# 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 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.
# Stellen Sie beide Lichtschrankenzustände <code>CNTL/CNTR</code> über der Zeit in MATLAB<sup>®</sup> dar (vgl. Abb. 2).


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


'''Arbeitsergebnis:''' <code>testeLichtschranke.ino</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 36: Zeile 45:
| Nur die IO-Pins D2 und D3 sind beim Arduino Uno interruptfähig.
| Nur die IO-Pins D2 und D3 sind beim Arduino Uno interruptfähig.
|-
|-
| Legen Sie für eine langsame Raddrehung keine Akkus ein.
| 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.
|}
|}
{| role="presentation" class="wikitable mw-collapsible mw-collapsed"
{| role="presentation" class="wikitable mw-collapsible mw-collapsed"
| <strong>Tipp 2&thinsp;</strong>
| <strong>Tipp 2&thinsp;</strong>
|-
|-
| Ergebnisplot:<br>[[Datei:Inf2P_5_1.jpg|left|450px|Abb. 4: Ergebnisdarstellung CNTL vs. CNTR]]<br> Abb. 2: CNTL/CNTR über der Zeit
| 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&thinsp;</strong>
|-
| Ergebnisplot:<br>[[Datei:Inf2P_5_1.jpg|left|450px|Abb. 2: Ergebnisdarstellung CNTL vs. CNTR]]<br> Abb. 2: CNTL/CNTR über der Zeit
|}
----


=== Aufgabe 5.2: Odometrie ===
=== Aufgabe 5.2: RadInkrementalgeber ===
1. Machen Sie sich mit E14_Wheel_Encoders vertraut, so dass Sie jede Zeile erlautern konnen.
# Machen Sie sich mit <code>E15_RadInkrementalgeberFahrt</code> vertraut, so dass Sie jede Zeile erläutern können.
2. Kopieren Sie das Beispiel in Ihren Ordner und erweitern Sie es.
# Kopieren Sie das Beispiel in Ihren Ordner und erweitern Sie es.
3. Was ist ein Interrupt und wozu dient er?
# Rechnen Sie die Radumdrehungen in gefahrene Strecke um.
4. Wozu dient die Funktion attachInterrupt()?
# Stellen Sie die gefahrene Strecke über der Zeit in MATLAB<sup>®</sup> dar (vgl. Abb. 3).
5. Stellen Sie beide Lichtschrankenzustande sowie die Radumdrehungen im seriellen Monitor
 
dar.
'''Lernzielkontrollfragen:'''
6. Rechnen Sie die Radumdrehungen in gefahrene Strecke um.
* Was ist ein Interrupt und wozu dient er?
7. Stellen Sie die gefahrene Strecke zusatzlich im seriellen Monitor dar.
* Wozu dient die Funktion <code>attachInterrupt()</code>?
8. Wie lasst sich die Fahrtrichtung ermitteln?
* Wie lässt sich die die gefahrene Strecke berechnen?
9. Kommentieren Sie Ihren Quelltext und sichern Sie diesen in SVN.
 
Arbeitsergebnis: testeOdometrie.ino
'''Arbeitsergebnis:''' <code>testeRadInkrementalgeber.ino</code>, <code>zeigeRadInkrementalgeber.m, leseArduinoDaten.m</code>
Hinweis: Nutzen Sie das Demos E13, E14 im SVN-Verzeichnis.
{| role="presentation" class="wikitable mw-collapsible mw-collapsed"
| <strong>Tipp 1&thinsp;</strong>
|-
| Nutzen Sie die Demos <code>E14_RadInkrementalgeber</code> und <code>E15_RadInkrementalgeberFahrt<code> im SVN-Verzeichnis.
|-
| Legen Sie den Akku korrekt an, um die Motoren anzusteuern.
|-
| Aus den gemessenen Motorumdrehungen lässt sich die gefahrene Strecke berechnen: <math>U=\pi \cdot d = 3,14\cdot 6,4\,cm=20,1\,cm</math>. Drehen beider Räder um 360&thinsp;°, dann fährt der Roboter 20,1&thinsp;cm vorwärts.
|-
| Erreichen Sie die Strecke nicht, entfernen Sie als Test die Multisensorerweiterung.
|}
{| role="presentation" class="wikitable mw-collapsible mw-collapsed"
| <strong>Tipp 2&thinsp;</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&thinsp;</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
|}
 
----


=== Aufgabe 5.3: 1&thinsp;m Fahrt ===
=== Aufgabe 5.3: 1&thinsp;m Fahrt ===
1. Machen Sie sich mit dem Demo E15_Wheel_Encoders_Drive.ino vertraut, so dass Sie jede
# Machen Sie sich mit dem Demo <code>E15_RadInkrementalgeberFahrt</code> vertraut, so dass Sie jede Zeile erläutern können.
Zeile erlautern konnen.
# Fahren Sie mit Ihrem Fahrzeug genau 1&thinsp;m geradeaus vorwärts.
2. Fahren Sie mit Ihrem Fahrzeug genau 1m geradeaus vorwarts.
# Fahren Sie wieder zum Startpunkt zurück. Wenden Sie das Fahrzeug nicht!
3. Stellen Sie die gefahrene Strecke auf dem OLED Display dar.
# Der AlphaBot inkrementiert die Strecke bei Vorwärtsfahrt und dekrementiert bei Rückwärtsfahrt.
4. Fahren Sie wieder zum Startpunkt zuruck. Wenden Sie das Fahrzeug nicht!
# Stellen Sie die gefahrene Strecke im seriellen Monitor dar.
5. Stellen Sie die gefahrene Strecke auf dem OLED Display dar.
 
6. Wie kann die Fahrtrichtung bei der Streckenbestimmung berucksichtigt werden?
 
Hinweis: Nutzen Sie die Demos E01, E15, E22 im SVN-Verzeichnis.
'''Lernzielkontrollfragen:'''
Arbeitsergebnis: fahreVorZurueck.ino - Der AlphaBot inkrementiert die Strecke bei Vorwartsfahrt
* Wie kann die Fahrtrichtung bei der Streckenbestimmung berücksichtigt werden?
und dekrementiert bei Ruckwartsfahrt.
* Wurde 1&thinsp;m gefahren? Steht der AlphaBot wieder am Startpunkt? Begründen Sie ggf. die Abweichung.


=== Aufgabe 5.2: Fahre Quadrat ===
'''Arbeitsergebnis:''' <code>fahreVorZurueck.ino</code>
# Erweitern Sie Ihr bisheriges Programm, um die Seiten eines Quadrates im Uhrzeigersinn abzufahren (vgl. Abb.
{| role="presentation" class="wikitable mw-collapsible mw-collapsed"
3).
| <strong>Tipp 1&thinsp;</strong>
2. Die Seitenlange a ist eine Variable und soll 30 cm betragen.
|-
3. Fuhren Sie eine Schleife 4x aus, die aus Geradeausfahrt und Drehung besteht.
| Nutzen Sie die Demos E01, E15, E22 im SVN-Verzeichnis.
4. Stellen Sie die gefahrene Strecke auf dem OLED Display dar.
|-
[[Datei:FahreQuadrat.jpg|ohne|250px|Abb. 4: Fahren Sie im Uhrzeigersinn die]]
| Legen Sie den Akku korrekt an, um die Motoren anzusteuern.
Arbeitsergebnis: fahreQuadrat.ino
|-
Hinweis: Nutzen Sie die Demos E01, E15, E22 im SVN-Verzeichnis.
| 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 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.
# 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&thinsp;cm betragen.
# Führen Sie eine Schleife 4x aus, die aus Geradeausfahrt und Drehung besteht.
[[Datei:FahreQuadrat.jpg|ohne|mini|250px|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:''' <code>fahreQuadrat.ino</code>
 
{| role="presentation" class="wikitable mw-collapsible mw-collapsed"
| <strong>Tipp 1&thinsp;</strong>
|-
| Nutzen Sie die Demos E01, E15, E22 im SVN-Verzeichnis.
|-
| Legen Sie den Akku korrekt an, um die Motoren anzusteuern.
|-
| Nützlicher Artikel: [https://www.mintgruen.tu-berlin.de/robotikWiki/doku.php?id=techniken:odometrie Navigation mit Differenzialantrieb]
|}
{| role="presentation" class="wikitable mw-collapsible mw-collapsed"
| <strong>Tipp 2&thinsp;</strong>
|-
| [[Datei:Diff Odometrie.jpg|left|450px|Abb. 5: Kursbestimmung aus differentieller Odometrie]]<br> Abb. 5: Kursbestimmung aus differentieller Odometrie
|-
|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&thinsp;</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 5.5: Nachhaltige Doku ===
=== Aufgabe 5.5: Nachhaltige Doku ===
Zeile 90: Zeile 182:


== Tutorials ==
== Tutorials ==


== Demos ==
== Demos ==
Zeile 95: Zeile 188:
* [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.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]
----
----
→ 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: AlphaBot:_Motoren_und_Inkrementalgeber|5]]<br>
→ 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>
→ zurück zum Hauptartikel: [[AlphaBot_SoSe23|Informatik Praktikum 2]]
→ zurück zum Hauptartikel: [[AlphaBot_SoSe23|Informatik Praktikum 2]]

Aktuelle Version vom 28. April 2023, 11:13 Uhr

Abb. 1: Lichtschrankenzustände CNTL/CNTR

Autor: Prof. Dr.-Ing. Schneider
Modul: Praxismodul I
Lehrveranstaltung: Mechatronik, Informatik Praktikum 2, 2. Semester

Inhalt

  • Ansteurung 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 5.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. 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 5.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. 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 5.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 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. 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 5.5: Nachhaltige Doku

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

Arbeitsergebnis in SVN: SVN Log

Tutorials

Demos

Literatur


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