lehrkraefte:blc:informatik:glf22:linefollower

Differences

This shows you the differences between two versions of the page.

Link to this comparison view

Next revision
Previous revision
lehrkraefte:blc:informatik:glf22:linefollower [2023/02/24 09:16]
Ivo Blöchliger created
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, dass er einer Linie (möglichst auch mit Kurven) folgen kann.+Ziel ist es, den Roboter so zu programmieren, dass er der äusseren, dicken Linie auf der Plane einmal links herum auf der Aussenkurve folgen kann (ohne Abkürzungen)Fastest wins ;-)
  
 ===== Grundideen ===== ===== Grundideen =====
Line 6: Line 6:
   * Es ist also nicht möglich, einem schwarzen Strich zu folgen. Wenn dieser verlassen wird, weiss man nicht, auf welcher Seite man diesen verlassen hat.   * Es ist also nicht möglich, einem schwarzen Strich zu folgen. Wenn dieser verlassen wird, weiss man nicht, auf welcher Seite man diesen verlassen hat.
     * Man könnte dann zwar den Roboter nach links und rechts bewegen und das so herausfinden. Es geht aber einfacher.     * Man könnte dann zwar den Roboter nach links und rechts bewegen und das so herausfinden. Es geht aber einfacher.
-  * Man folgt stattdessen dem Rand einer Linie (**Abmachung**: dunkel ist rechts, hell ist links). Sobald man dunkler oder heller misst, weiss man auch schon, wie zu korrigieren ist.+  * Man folgt stattdessen dem Rand einer Linie (**Abmachung**: dunkel ist links, hell ist rechts). Sobald man dunkler oder heller misst, weiss man auch schon, wie zu korrigieren ist.
  
 ===== 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>
  
 <WRAP todo> <WRAP todo>
Line 22: Line 25:
 <code python> <code python>
 while True: while True:
-   # Tu was+   hell = licht.reflection() 
 +   fahrwerk.drive(Geschwindigkeit vorwärts in mm/s, Drehgeschwindigkeit in Grad/s) 
 +   if hell<40:  # Wert anpassen 
 +      fahrwerk.drive(100,20) 
 +   elif hell>60:  # Wert anpassen! 
 +      fahrwerk.drive(100,-20) 
 +   else: 
 +      fahrwerk.drive(100,0) 
 +    
 </code> </code>
 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 (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:
   * 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 von $c_i \\cdot I$ zur Helligkeitsdifferenz hinzuzählt, und dann damit die Drehgeschwindigkeit bestimmt.+  * Die Idee ist nun, dass man ein geeignetes (kleines) Vielfaches $c_i \cdot I$ zur Helligkeitsdifferenz hinzuzählt, und dann damit die Drehgeschwindigkeit bestimmt.
  
 <WRAP todo> <WRAP todo>
 Programmieren Sie die Variante 3.  Programmieren Sie die Variante 3. 
-  * Dazu initialisieren Sie **vor** der while-Schleife eine Variable ''i=0'' und eine Variable ''ci=0.1'' (Wert durch experimentieren bestimmen).+  * Dazu initialisieren Sie **vor** der while-Schleife eine Variable ''i=0'' und eine Variable ''ci=0.1'' (Wert durch Experimentieren bestimmen).
   * In der while-Schleife   * In der while-Schleife
     * zählen Sie die aktuelle Hellikeitsdifferenz zu ''i'' hinzu und     * zählen Sie die aktuelle Hellikeitsdifferenz zu ''i'' hinzu und
  • lehrkraefte/blc/informatik/glf22/linefollower.1677226562.txt.gz
  • Last modified: 2023/02/24 09:16
  • by Ivo Blöchliger