Differences
This shows you the differences between two versions of the page.
Both sides previous revision Previous revision Next revision | Previous revision | ||
lehrkraefte:blc:informatik:glf22:linefollower [2023/02/24 09:16] Ivo Blöchliger [Grundideen] |
lehrkraefte:blc:informatik:glf22:linefollower [2023/02/28 09:55] (current) Ivo Blöchliger [Variante 1] |
||
---|---|---|---|
Line 1: | Line 1: | ||
====== Line Follower ====== | ====== Line Follower ====== | ||
- | Ziel ist es, den Roboter so zu programmieren, | + | Ziel ist es, den Roboter so zu programmieren, |
===== Grundideen ===== | ===== Grundideen ===== | ||
Line 9: | Line 9: | ||
===== Variante 1 ===== | ===== Variante 1 ===== | ||
- | Pseudo-Code: | + | <WRAP center round info 100%> |
+ | **Pseudo-Code** | ||
* Wiederhole: | * Wiederhole: | ||
- | * Meldet der Sensor zu hell, fahre eine Rechtskurve | + | * Meldet der Sensor zu hell, fahre eine Linkskurve |
- | * Meldet der Sensor zu dunkel, fahre eine Linkskurve | + | * Meldet der Sensor zu dunkel, fahre eine Rechtskurve |
+ | |||
+ | </ | ||
<WRAP todo> | <WRAP todo> | ||
Line 22: | Line 25: | ||
<code python> | <code python> | ||
while True: | while True: | ||
- | # | + | hell = licht.reflection() |
+ | # fahrwerk.drive(Geschwindigkeit vorwärts in mm/s, Drehgeschwindigkeit in Grad/s) | ||
+ | if hell< | ||
+ | fahrwerk.drive(100, | ||
+ | elif hell> | ||
+ | fahrwerk.drive(100, | ||
+ | | ||
+ | fahrwerk.drive(100, | ||
+ | |||
</ | </ | ||
Das Programm kann dann entweder über den Computer oder durch Drücken der Escape-Taste auf dem Roboter (Taste oben links) gestoppt werden. | Das Programm kann dann entweder über den Computer oder durch Drücken der Escape-Taste auf dem Roboter (Taste oben links) gestoppt werden. | ||
Line 41: | Line 53: | ||
===== Variante 3: Kurve ermitteln ===== | ===== Variante 3: Kurve ermitteln ===== | ||
- | Mit der Variante 2 fährt der Roboter in einer Kurve immer neben der Mitte (sonst würde er ja keine Kurve fahren). Idealerweise sollte der Roboter auch in Kurven genau auf der Kante fahren. Das kann mit folgender Idee realisiert werden: | + | Mit der Variante 2 fährt der Roboter in einer Kurve immer neben der Kante zwischen weiss und schwarz |
* Man summiert bei jeder Messung die Helligkeitsdifferenzen auf. Nennen wir diese Summe $I$ (Integral). | * Man summiert bei jeder Messung die Helligkeitsdifferenzen auf. Nennen wir diese Summe $I$ (Integral). | ||
* Beim Geradeausfahren ist die Summe $I$ ungefähr gleich Null. | * Beim Geradeausfahren ist die Summe $I$ ungefähr gleich Null. | ||
* Beim Kurvenfahren wird die Summe $I$ immer grösser (bzw. kleiner, je nachdem ob man eine Links- oder Rechtskurve fährt). | * Beim Kurvenfahren wird die Summe $I$ immer grösser (bzw. kleiner, je nachdem ob man eine Links- oder Rechtskurve fährt). | ||
- | * Die Idee ist nun, dass man ein geeignetes (kleines) Vielfaches | + | * Die Idee ist nun, dass man ein geeignetes (kleines) Vielfaches $c_i \cdot I$ zur Helligkeitsdifferenz hinzuzählt, |
<WRAP todo> | <WRAP todo> | ||
Programmieren Sie die Variante 3. | Programmieren Sie die Variante 3. | ||
- | * Dazu initialisieren Sie **vor** der while-Schleife eine Variable '' | + | * Dazu initialisieren Sie **vor** der while-Schleife eine Variable '' |
* In der while-Schleife | * In der while-Schleife | ||
* zählen Sie die aktuelle Hellikeitsdifferenz zu '' | * zählen Sie die aktuelle Hellikeitsdifferenz zu '' |