Edison Robotik: Lektion 7

Übungsblatt 7.1 - Kalibrierung der Hinderniserkennung

Du kannst die Empfindlichkeit des Hinderniserkennungssystems von Edison regulieren. Indem das Hinderniserkennungssystem empfindlicher gemacht wird, kann Edison weiter entfernte Hindernisse erkennen. Indem Edison das System unempfindlicher macht, erkennt er nur sehr nahe Hindernisse. Verwende dieses Übungsblatt, um das Hinderniserkennungssystem deines Edison anzupassen.
Schritt 1: Lies den Barcode
1. Platziere Edison auf der rechten Seite mit Blick auf den Barcode
2. Drücke dreimal die Aufnahmetaste
3. Edison fährt vorwärts und scannt den Barcode

hfgdhg
 

Schritt 2: Maximale Empfindlichkeit einstellen
Stelle Edison nach dem Scannen des Barcodes auf einen Tisch oder Schreibtisch und entferne alle Hindernisse vor Edison. Drücke dann die Wiedergabetaste (Dreieck). Edison befindet sich jetzt im Kalibrierungsmodus.
Die linke Empfindlichkeit wird zuerst kalibriert.
1. Drücke wiederholt die Wiedergabetaste (Dreieck), um die Empfindlichkeit zu erhöhen, bis die rote LED auf der linken Seite flackert.
2. Drücke wiederholt die Aufnahmetaste (runde Taste), wodurch die Empfindlichkeit verringert wird, bis die LED nicht mehr flackert.
3. Drücke die Stopp-Taste (Quadrat), um zur Kalibrierung der rechten Seite umzuschalten.
4. Drücke  wiederholt die Wiedergabetaste (Dreieck), bis die rechte rote LED flackert. Drücken Sie nun wiederholt die Aufnahmetaste (rund), bis die LED nicht mehr flackert.
5. Drücke die Stopp-Taste, um die Kalibrierung abzuschließen.

Besonderer Hinweis: Benutzerdefinierte Empfindlichkeit
Es ist möglich, den Abstand einzustellen, in der Hindernisse erkannt werden. Scanne dazu den Barcode "Hinderniserkennung kalibrieren", platziere ein Hindernis für Edison in der Distance, in der Edison Hindernisse erkennen soll, drücke die Wiedergabetaste und wiederhole die Schritte 1 bis 5.

Arbeitsblatt 7.1 - Infrarot-Hinderniserkennung

In dieser Lektion erfährst du mehr über Infrarotlicht (IR) und wie Edison mit IR Hindernisse erkennen kann.
Was ist Infrarotlicht?
Es gibt eine Vielzahl von Lichtquellen, von denen einige für das menschliche Auge sichtbar sind und einige nicht. Infrarot, auch IR genannt, ist für den Menschen nicht sichtbar.
Hast Du es gewusst? Auch wenn die Leute es nicht sehen können, ist Infrarot eine Art Licht. Daher funktioniert es im Dunkeln. Aus diesem Grund kannst  du ein Fernsehgerät mit einer Fernbedienung einschalten, auch wenn im Raum kein Licht leuchtet!
Edison und Infrarot
Der Edison-Roboter ist mit einem Infrarotsystem ausgestattet, das dem Roboter eine Art „Vision“ verleiht. Mit diesem Infrarotsystem kann Edison Hindernisse um den Roboter herum erkennen.
Edisons Infrarotsystem besteht aus zwei IR-Leuchtdioden (oder LEDs) auf der Vorderseite. Einer ist links und einer ist rechts. Edison hat auch einen IR-Sensor an der Vorderseite, direkt in der Mitte.
Damit Edison Hindernisse erkennen kann, wird Infrarotlicht von der linken und rechten IR-LED nach vorne ausgestrahlt. Wenn das IR-Licht auf ein Hindernis wie eine Wand trifft, wird es zurück in Richtung Edison reflektiert. Der IR-Sensor von Edison erkennt dann das reflektierte Licht.
Schaue dir die folgende Abbildung an:

jtzrurzt
Edison sendet IR-Licht (in Rot dargestellt) sowohl von der linken als auch von der rechten IR-LED des Roboters aus. Reflektiertes IR-Licht (blau dargestellt) prallt von Hindernissen ab und wird vom IR-Sensor von Edison erfasst.
In diesem Bild befindet sich ein Hindernis vor Edisons linker Seite, aber nicht auf der rechten Seite. Deshalb wird nur IR-Licht vom linken Emitter reflektiert.
Anhand des empfangenen Signals kann Edison feststellen, dass sich links ein Hindernis befindet, rechts jedoch kein Hindernis.
Du bist dran:
1. Zeichne das ausgesendete und das reflektierte IR-Licht für dieses Hindernis.

jetzhmk

Arbeitsblatt 7.2 - Erkenne ein Hindernis und halte an
In dieser Lektion musst du ein Programm schreiben, mit dem dein Edison-Roboter auf ein Hindernis stößt, und dann anhält.
Schau dir folgendes Programm an:

hewrtzh
Dieses Programm weist Edison an, so lange zu fahren, bis er auf ein Hindernis stößt.
Es gibt ein paar wichtige Dinge, die du bei diesem Programm beachten sollten.
Schaue dir Zeile 13 des Programms an. Diese Linie schaltet Edisons Hinderniserkennungsstrahl auf "Ein". Wenn du Edisons Hinderniserkennungsstrahl in einem EdPy-Programm verwenden möchtest, musst du den Strahl immer auf "Ein" schalten, bevor der Strahl im Programm verwendet wird.
Schaue dir nun Zeile 15 des Programms an. Diese Zeile setzt die Geschwindigkeit in diesem Programm auf 5. Wenn du die Hinderniserkennung verwendest, musst du die Geschwindigkeit etwas verringern, damit der Roboter ein Hindernis erkennen kann, bevor er mit ihm kollidiert. Wenn die Geschwindigkeit zu hoch ist, stößt der Roboter gegen Hindernisse, bevor er diese erkennen kann.

Du bist dran:
Aufgabe 1: Wähle deie Hindernisse aus
DU musst gute Hindernisse für Edison auswählen. Wenn ein Hindernis zu klein ist oder nicht genügend Infrarotlicht reflektiert, kann Edison es nicht erkennen. Wähle ein Objekt aus, das undurchsichtig, aber nicht zu dunkel (z. B. nicht schwarz) und mindestens so groß wie Edison ist.
Für dieses Programm wäre die Raumwand ein gutes Hindernis.
Aufgabe 2: Bereite deinen  Edison vor
Wenn du ein Programm mit Hinderniserkennung ausführen möchtest, solltest du überprüfen, ob die Hinderniserkennung deines Edison-Roboters auf die gewünschte Entfernung kalibriert ist. Verwende Übungsblatt 7.1, um deine Edison zu kalibrieren. Möglicherweise musst du deinen Roboter mit einer benutzerdefinierten Empfindlichkeit kalibrieren, um sicherzustellen, dass dein Roboter Ihr Hindernis erkennen und anhalten kann.

Aufgabe 3: Schreibe das Programm und führe es aus
Schreibe das Programm mit der EdPy-App und lade es auf deinen Edison-Roboter herunter. Führe dann das Programm aus, um zu sehen, wie es funktioniert.
Experimentiere mit verschiedenen Hindernissen, um zu sehen, was Edison erkennen kann und was nicht. Du kannst auch versuchen, Edisons Hinderniserkennungskalibrierung auf unterschiedliche Entfernungen einzustellen, um zu sehen, was passiert.

1. Lösche die Zeile "Ed.ObstacleDetectionBeam (Ed.ON)" aus deinem Programm. Versuche, das angepasste Programm herunterzuladen und auszuführen. Was ist passiert? Warum passiert das?
2. Überlege, wo du diese Art der unsichtbaren Erkennung schon einmal in der realen Welt gesehen haben. Beschreibe ein Beispiel.
3. Wo sonst könnte diese Art der Erkennungstechnologie eingesetzt werden? Schreibe  mindestens eine Idee auf, wie du diese Technologie einsetzen könntest.

Arbeitsblatt 7.3 - Hindernisvermeidung
In dieser Lektion schreibst duein Programm, mit dem du deinen Edison-Roboter so lange fahren lässt, bis er auf ein Hindernis stößt, sich umdreht und davonfährt.
Schau dir folgendes Programm an:

gtewr
Dieses Programm weist Edison an, vorwärts zu fahren, bis ein Hindernis erkannt wird. Sobald Edison ein Hindernis entdeckt, weist das Programm Edison an, sich um 180 ° zu drehen und 10 cm weiterzufahren.
Du bist dran:
Aufgabe 1: Schreibe das Programm und führe es aus
Schreibe das Programm mit der EdPy-App und lade es auf deinen Edison-Roboter herunter. Führe dann das Programm aus, um zu sehen, wie es funktioniert.
Nachdem du das Programm ausgeführt hast, schaue es sich noch einmal an und überlege, wie du das Programm ändern könnst. Versuche, den Code so zu ändern, dass sich der Roboter anders verhält, wenn er ein Hindernis erkennt. (Hinweis: Versuche  es mit Ton und Licht.)
1. Überlege, wie du das ursprüngliche Programm verbessern könnst. Was kannst du ändern, damit das Programm mehr kann als nur zu wenden und loszufahren, nachdem du auf ein Hindernis gestoßen bist?

Aufgabe 2: Syntaxfehler und logische Fehler
Programmierer machen häufig Tippfehler, sogenannte Syntaxfehler. Es ist wichtig, dass du deine eigenen Syntaxfehler gut erkennst, damit du deinen Code korrigieren kannst.
Du kannst beim Programmieren auch eine andere Art von Fehler erhalten, die als logischer Fehler bezeichnet wird. Bei der Codierung ist jeder Fehler, der kein Syntaxfehler ist, ein logischer Fehler.
Wenn in einem Programm ein logischer Fehler auftritt, verhält sich der Code nicht so, wie es der Programmierer erwartet. Wenn du in EdPy einen logischen Fehler in Ihrem Programm hast, wird das Programm normalerweise weiterhin in Edison heruntergeladen. Wenn du das Programm ausfühst, verhält es sich jedoch nicht so, wie du es sich vorgestellt hast.
Ein logischer Fehler kann so einfach sein wie die Verwendung der falschen Funktion oder das Weglassen einer Funktion. Ein Beispiel für einen logischen Fehler wäre das Schreiben eines Programms, das die Hinderniserkennung verwendet, aber den Hinderniserkennungsstrahl nicht einschaltet.

Schau dir folgendes Programm an:

ghreh
Das Programm soll den Edison-Roboter so lange fahren lassen, bis er auf ein Hindernis trifft, dann um 135 ° drehen und 20 cm vom Hindernis wegfahren.

Das Programm enthält fünf Fehler. Kannst du alle fünf Fehler im Programm identifizieren und feststellen, ob es sich um Syntaxfehler oder logische Fehler handelt? Trage deine Antworten in die Tabelle auf der nächsten Seite ein.
Tipp: Du kannst dieses Programm in EdPy schreiben und die Schaltfläche "Code überprüfen" verwenden, um die Syntaxfehler zu ermitteln.

Fehler Linie Fehlertyp Fehlerbeschreibung
1      
2      
3      
4      
5      


Arbeitsblatt 7.4 - Ein Hindernis als Ereignis erkennen
In dieser Lektion schreibst du ein ereignisgesteuertes Programm, mit dem dein Edison-Roboter kontinuierlich vorwärts fährt und dabei Hindernissen aus dem Weg geht.
Ereignisgesteuerte Programmierung
Bei der Programmierung tritt ein Ereignis außerhalb des Programmcodes auf und beeinflusst die Programmausführung. Ein Ereignis kann ein Knopf sein, der gedrückt wird, oder Informationen, die von einem Sensor weitergeleitet werden.
In vielen Programmiersprachen, einschließlich Python, können Programmierer Code erstellen, der auf bestimmte Ereignisse reagieren kann. Diese Art der Programmierung wird als ereignisgesteuerte Programmierung bezeichnet.
Wenn du ein ereignisgesteuertes Programm schreibst, musst du auch Code schreiben, der diese Ereignisse verarbeitet. Es gibt zwei Möglichkeiten, dies zu tun, entweder indem das Programm in einer Schleife wartet oder Interrupts verwendet werden.

Wir unterbrechen diese Lektion, um über ... Interrupts zu sprechen
Wie du bereits weißt, bewegen sich Programme in der Regel zeilenweise nacheinander durch den Code. Es gibt Möglichkeiten, den Code anders zu bewegen, z. B. mithilfe von Schleifen.
Du kannst auch die Art und Weise beeinflussen, in der ein Programm ausgeführt wird, indem du einen Interrupt verwendest.
Ein Interrupt ist ein Codeabschnitt, der das Hauptprogramm anhält und sich selbst ausführt. Sobald der Interrupt-Code vollständig ist, kehrt das Programm an die Stelle zurück, an der es im Hauptprogramm aufgehört hat.
Interrupts sind immer Funktionen, die irgendwo im Programm definiert sind. Es handelt sich in der Regel um kurze Codeabschnitte, die zum Ausführen einer bestimmten Aufgabe entwickelt wurden, ohne den Fluss des Hauptprogramms wesentlich zu stören.
Programmierer verwenden Interrupts, da ein Programm mit Interrupts jederzeit auf ein Ereignis reagieren kann, während das Programm ausgeführt wird. Mit anderen Worten, durch die Verwendung von Interrupts muss ein Programmierer nicht genau vorhersagen, wann das Ereignis während eines Programms auftreten wird.

Eventhandler und Interrupts
Wenn du Interrupts in der ereignisgesteuerten Programmierung verwendest, musst du Ereignisbehandlungsroutinen verwenden.
Ein Event-Handler ist eine Möglichkeit, einen Interrupt an ein bestimmtes Ereignis zu binden.
Um einen Ereignishandler zu verwenden, musst du zuerst den Ereignishandler in deinem Code einrichten oder registrieren. Einmal registriert, überwacht der Ereignishandler ständig das jeweilige Ereignis. Immer wenn dieses Ereignis eintritt, löst die Ereignisbehandlungsroutine den Interrupt aus, der die Funktion aufruft und ausführt, und kehrt dann zum Hauptprogramm zurück.

Schau dir folgendes Programm an:

gdfgh
In EdPy verwenden wir die Funktion "Ed.RegisterEventHandler", um einen Ereignishandler zu registrieren.
Die Funktion "Ed.RegisterEventHandler" verfügt über zwei Parameter. Der erste Parameter ist das Ereignis, das auftreten wird, und der zweite Parameter ist die Funktion, die bei jedem Auftreten dieses Ereignisses aufgerufen wird.
Schaue dirZeile 13 des Programms an. Diese Zeile registriert eine Ereignisbehandlungsroutine, sodass bei jedem Auftreten von "EVENT_OBSTACLE_AHEAD" die Funktion "avoidObstacle" aufgerufen wird.

Du bist dran:
Schreibe das Programm mit der EdPy-App und lade es auf deinen Edison-Roboter herunter. Führe dann das Programm aus, um zu sehen, wie es funktioniert.
1. Beschreibe, was der Roboter tut.
2. Wenn der Roboter in diesem Programm ein Hindernis erkennt, welche Codezeilen werden ausgeführt? Warum führt das Programm diese Zeilen aus?

3. Warum ist Ed.ReadObstacleDetection in diesem Programm enthalten? Mit anderen Worten, was macht Zeile 20? Tipp: Sieh dir das Arbeitsblatt 2.5 noch einmal an, um einen Hinweis zu erhalten, oder versuche, Zeile 20 zu entfernen und das Programm auszuführen.

Versuch es!
Was könnte Edison noch tun, wenn er ein Hindernis erkennt? Versuche, den Code so zu ändern, dass Edison ein anderes Verhalten ausführt, wenn er ein Hindernis erkennt. Experimentiere mit dem Programm, um zu sehen, was funktioniert und was nicht.

Arbeitsblatt 7.5 - Hinderniserkennung rechts und links
In dieser Lektion schreibst du ein Programm, mit dem Edison auf Hindernisse links oder rechts vom Roboter reagieren kann. Dazu verwenden wir if-Anweisungen.
If-Anweisungen
Ein wichtiger Teil der Codierung ist das Treffen von Entscheidungen. Die gebräuchlichste Methode hierfür ist die Verwendung einer if-Anweisung.
Eine if-Anweisung fragt, ob eine Bedingung wahr oder falsch ist. Wenn das Ergebnis wahr ist, führt das Programm den Anweisungsblock aus, der auf die if-Anweisung folgt. Wenn das Ergebnis falsch ist, ignoriert das Programm die Anweisungen in der if-Anweisung und wechselt zur nächsten Codezeile außerhalb der if-Anweisung.
Schau dir folgendes Programm an:

dsdft
Dieses Programm verwendet eine if-Anweisung, um dem Roboter die Möglichkeit zu geben, Entscheidungen ohne menschliche Führung zu treffen. Wenn ein Roboter auf diese Weise eigenständig Entscheidungen treffen kann, spricht man von einem autonomen Roboter.

Du bist dran:
Aufgabe 1: Piepton, wenn ein Hindernis vorhanden ist
Schreibe das obige Programm mit der EdPy-App, lade es auf deinen Edison-Roboter herunter und führe das Programm aus. Versuche dann, ein Hindernis wie deine Hand in Edisons Hinderniserkennungsstrahl hinein und heraus zu bewegen, um zu sehen, was passiert.


1. Edison kann jetzt auf verschiedene Reize unterschiedlich reagieren und eine Entscheidung treffen, was zu tun ist. Bedeutet das, dass Edison Intelligenz hat? Tipp: Möglicherweise möchtest du etwas über künstliche Intelligenz recherchieren, um sich zu entscheiden.

Aufgabe 2: Lass es piepen, wenn sich ein Hindernis befindet, oder schalte das Licht ein
Du kannst einem Programm nicht nur mitteilen, was zu tun ist, wenn eine if-Anweisung erfüllt ist, sondern auch mitteilen, was zu tun ist, wenn diese Bedingung nicht erfüllt ist.
if, else
Wenn du if-Anweisungen mit „else“ verwenden, kannst du Programme schreiben, die kompliziertere Entscheidungen treffen. If / else-Anweisungen sind im Grunde eine Möglichkeit, eine Entscheidung zwischen zwei Dingen zu treffen.

In Python lautet die Syntax für if / else:
if Ausdruck:
    aussage (n)
else:
    aussage (n)


Das Programm bewegt sich sequentiell von oben nach unten, beginnend mit der if-Bedingung. Wenn die if-Anweisung true ist, führt das Programm den eingerückten Code für den if-Ausdruck aus und überspringt das else. Wenn die if-Anweisung jedoch falsch ist, überspringt das Programm diesen Abschnitt des eingerückten Codes und führt stattdessen den eingerückten Code "else" aus.
Schreibe  folgendes Programm:

qwertzuii
Lade das Programm herunter und führe es aus. Versuche, ein Hindernis in Edisons Hinderniserkennungsstrahl hinein und heraus zu bewegen, um zu sehen, was passiert.
Dieses Programm verfügt über zwei Pfade: einen für das Erkennen eines Hindernisses und einen für das Erkennen eines Hindernisses.
if, elif, else
Du kannst auch ein Programm erstellen, das eine Entscheidung unter Verwendung von mehr als zwei Bedingungen trifft. Dazu verwendest du eine andere Python-Syntaxstruktur:
if Ausdruck:
    aussage (n)
elif Ausdruck:
    aussage (n)
else:
    aussage (n)

 Mit "Elif" kannst du in Python "else if" sagen. Du kannst elif verwenden, um ein Programm mit mehreren if-Bedingungen zu schreiben.
Ein Programm, das if / elif / else verwendet, bewegt sich weiterhin sequentiell von oben nach unten. Sobald das Programm eingerückten Code in einem Teil der if-Anweisungsstruktur ausführt, überspringt es den Rest der Struktur und wechselt zur nächsten Codezeile außerhalb der Struktur.
Das heißt, wenn die if-Anweisung oben true ist, führt das Programm den eingerückten Code für den if-Ausdruck aus und überspringt alle elif-Abschnitte sowie den else-Abschnitt, falls vorhanden. Wenn die if-Anweisung jedoch falsch ist, überspringt das Programm diesen Abschnitt des eingerückten Codes und wechselt zum ersten elif-Abschnitt.
Wenn die erste elif-Bedingung wahr ist, führt das Programm den eingerückten Code aus und überspringt alles darunter in der if-Anweisungsstruktur (alle anderen elifs und die else-Bedingung, falls es eine gibt). Wenn diese elif-Bedingung falsch ist, springt das Programm zum nächsten Teil der if-Anweisungsstruktur und so weiter.

Aufgabe 3: Erkenne ein Hindernis links oder rechts
Schau dir folgendes Programm an:

vgtrg
Dieses Programm verfügt über drei verschiedene Pfade, die beim Erkennen eines Hindernisses verwendet werden können, je nachdem, wo sich das erkannte Hindernis in Bezug auf Edison befindet.
Schreibe das Programm mit der EdPy-App und lade es auf deinen Edison-Roboter herunter. Führe dann das Programm aus, um zu sehen, wie es funktioniert.

2. Erkläre beim Ausführen dieses Programms mit eigenen Worten, was der Roboter tut, wenn:
Voran erkanntes Hindernis: ___________________________________________________
Hindernis rechts erkannt: __________________________________________________
Hindernis links erkannt: ___________________________________________________