TigerJython4Kids
HomeTurtlegrafikRobotikDatenbanken
lidar
Deutsch   English   

15. LIDAR, PID und LICHTSENSOR (nur mbrobot plusV3)

 

 

DU LERNST HIER...

 

wie du die weiterführenden Funktionen des mbRobots Plus V3 verwenden kannst. Das neueste Maqueen-Modell Plus V3 verfügt neben den Funktionen, die in den vorhergehenden Kapiteln beschrieben sind, über folgende Funktionen:

  • LIDAR : Matrix Laser Entfernungssensor
  • PID Control: Motorenencoder Regelung
  • Lichtsensor: Light Intensity Sensor
  • Kreuzung Erkennung


 

WIE FUNKTIONIERT LIDAR?

 
Lidar ist eine Technologie, die Laserlicht nutzt, um die Entfernung zu messen. Lidar funktioniert ähnlich wie der Ultraschallsensor. Anstelle der Ultraschallwellen sendet er Laserimpulse aus, die von Objekten reflektiert werden. Gemessen wird die Zeit, die das Licht für den Hin- und Rückweg benötigt und damit die Distanz berechnet.  

Maqueen Plus V3 ist mit einem Matrix-Lidar-Sensor ausgestattet. Innerhalb des 60-Grad-Erfassungsbereichs liefert er eine Matrix mit 64 Messwerten.

 

Für die Distanz-Messung kann man folgende Funktionen verwenden:

getDistance() liefert den "direkten" Abstand zum Objekt
getDistanceList() liefert eine Liste mit 64 Distanz-Werten
getDistanceGrid() liefert 8 Listen mit je 8 Distanz-Werten
getDistanceRow(index) liefert Distanz-Werte in der Reihe index
getDistanceAt(x, y) liefert den Abstand zum Punkt (x, y) der Matrix


 

MUSTERBEISPIELE

 

Beispiel 1: Objekte erkennen
Schliesse den Lidarsensor an die erste oder zweite I2C-Schnittstelle an. Der Roboter fährt vorwärts und misst mit dem LIDAR die Distanz zu den Objekten, die vor ihm liegen. Du verwendest den Befehl getDistance(). Wenn ein Objekt näher als 20 cm ist, hält der Roboter an. Wenn die Distanz wieder grösser wird, fährt er wieder los. Die Messwerte werden mit print() angezeigt. delay(100) gibt die Messperiode an.

 
from mbrobot_plusV3 import *

setSpeed(30)
repeat:
    d = getDistance()
    print(d)
    if d < 20:
        stop()
    else:
        forward()    
    delay(100)
► In Zwischenablage kopieren

 

Beispiel 2: Lidar-Messwerte links und rechts vergleichen

Der Befehl getDistanceRow(4) liefert eine Liste mit 8 Messwerten (die vierte Reihe der Matrix). Du vergleichst die Messewerte links und rechts. Wenn die Distanz rechts kleiner ist, leuchtet die rechte LED rot, wenn die Distanz links kleiner ist, leuchtet die linke LED grün.
Mit print() werden jeweils alle 8 Messwerte angezeigt. Stelle das Objekt an verschiedene Positionen und beobachte die Messwerte.

 
from mbrobot_plusV3 import *

repeat:
    row = getDistanceRow(4) #8 Values left to right
    print(row)
    print(row[1], row[7])
    if row[1] < row[7]:
        setLEDLeft(0)
        setLEDRight(1)    
    else:
        setLEDLeft(2)
        setLEDRight(0)      
    delay(100)
► In Zwischenablage kopieren

 

Beispiel 3: Was "sieht" der LIDAR-Sensor?

Der LIDAR Sensor liefert typischerweise 8×8 = 64 Messpunkte. Diese kannst du mit dem Befehl
getDistanceList() auslesen und in 8 Zeilen à 8 Zeichen visualisieren. Je näher ein Punkt liegt, umso grösser wählst du das Zeichen.

Damit du die Matrix besser anschauen kannst, wählt du eine längere Messperiode (delay(3000)).

 

 
from mbrobot_plusV3 import *

def readData():
    data = getDistanceList()
    matrix = []
    for row in range(8):
        rowData = [data[row * 8 + col] for col in range(8)]
        matrix.append(rowData)
    return matrix

def showMap(matrix):
    for row in matrix:
        line = ""
        for val in row:
            if val < 30:
                line += " X "
            elif val < 60:
                line += " x "
            elif val < 100:
                line += " - "
            elif val < 150:
                line += " . "
            else:
                line += " "
        print(line)
    print("")    
    print("------------------------------")
    print("")
	
while True:
    matrix = readData()
    showMap(matrix)
    delay(3000)	
► In Zwischenablage kopieren


 

PID CONTROL

 

Maqueen Plus V3 verfügt über einen Motorencoder, mit dem du die Vorwärtsbewegung und der Lenkwinkel des Roboters präzise steuern kannst.
Mit dem Befehl pidControlDistance(dir, dist) kannst du eine in cm angegebene Strecke dist vorwärts (dir = 1) oder rückwärts (dir = 2) abfahren.
Mit dem Befehl pidControlAngle(angle) dreht der Roboter mit dem gegebenen Winkel nach links (angle > 0) oder rechts (angle < 0).



 

MUSTERBEISPIEL

 

Beispiel 1: Fahren und Drehen mit PID-Control
Der Roboter fährt zuerst 20 cm vorwärts, dann 20 cm Rückwärts, dreht 90° nach links und anschliessend 90° nach rechts.

from mbrobot_plusV3 import *

pidControlDistance(1, 20)
pidControlDistance(2, 20)
pidControlAngle(90)
pidControlAngle(-90)
► In Zwischenablage kopieren

pidControlDistance(1, 20) : der Roboter bewegt sich 20 cm vorwärts.
pidControlDistance(2, 20) : der Roboter bewegt sich 20 cm rückwärts.
pidControlDistance(90) : der Roboter dreht 90° nach links.
pidControlDistance(-90) : der Roboter dreht 90° nach rechts.



 

LICHTSENSOREN

 
Der V3-Roboter verfügt über zwei Licht Sensoren, mit welchen du die Intensität der Umgebungsbeleuchtung messen kannst. Die Lichtwerte liegen im Bereich 0 - 1023, je grösser der Wert, umso heller. Die Sensoren siehst du als sehr kleine Chips, vorne links und rechts neben den LEDs.  

readLightIntensity(0) gibt den Lichtwert des rechten Sensors (0 - 1023)
readLightInternsity(1) gibt den Lichtwert des linken Sensors (0 - 1023)



 

MUSTERBEISPIEL

  Beispiel 1: Den Roboter mit einer Taschenlampe steuern
Mit einer Taschenlampe beleuchtest du die rechte oder die linke Seite des Roboters. Wenn der rechte Lichtsensor einen Wert grösser als 250 misst, fährt der Roboter auf einem Rechtsbogen, bei Beleuchtung des linken Sensors fährt er auf einem Linksbogen, sonst gerade aus.  

Den Grenzwert von 250 muss du eventuell der Umgebungshelligkeit anpassen.

from mbrobot_plusV3 import *

setSpeed(30)
repeat:
    vR = readLightIntensity(0) #right
    vL = readLightIntensity(1) #left
    print(vR, vL)
    if vR > 250:
        rightArc(0.2)
    elif vL > 250:
        leftArc(0.2)
    else:
        forward()        
    delay(100)
► In Zwischenablage kopieren


 

KREUZUNG ERKENNUNG

 

MbRobot Plus V3 erkennt die Kreuzungen, T-Kreuzungen, Links-, Rechts-abbiege und Geradekreuzungen.
Die Funktion intersectionDetecting() gibt 1 zurück, falls der Roboter eine Kreuzung detektiert, sonst 0.



 

MUSTERBEISPIEL

 

In deinem einfachen Beispiel kannst du testen, wie der Roboter die verschiedenen Kreuzungen erkennt. Du lässt ihn jeweils vorwärts fahren, bis er eine Kreuzung erkennt. Dann soll er anhalten.

Der Roboter detektiert eine Kreuzung, wenn die Bedingung
if intersectionDetecting() == 1: oder kurz
if intersectionDetecting():
erfüllt ist.

 
from mbrobot_plusV3 import *

repeat:
    forward()
    if intersectionDetecting():
        stop()
    sleep(100)
► In Zwischenablage kopieren

 

 

MERKE DIR...

 

Lidar-Sensor misst die Distanz zu Objekten, die sich vor ihn befinden und liefert eine Matrix mit 64 Messwerten. Je nach Problemstellung, kannst du nur einen Wert, eine Liste der Werte in einer Reihe oder eine Liste aller 64 Messwerte verwenden

Mit PID Control kannst du den Roboter um eine genaue Distanz (in cm) vorwärts oder rückwärts bewegen, oder um einen Winkel drehen.

Mit den Lichtsensoren kannst du die Umgebungsbeleuchtung messen. Die Messwerte liegen im Bereich 0 bis 1023. Höhere Werte bekommst du insbesondere dann, wenn du die Sensoren mit einer Taschenlampe beleuchtest.

Die Funktion intersectionDetecting() gibt 1 zurück, wenn sich der Roboter auf einer Kreuzung befindet. Um die Art der Kreuzung fest zu legen, verwendest du mit Vorteil die Infrarotsensoren irL2 bzw. irR2, welche die Helligkeit der Unterlage neben dem Fahrstreifen detektieren können.

 

 

ZUM SELBST LÖSEN

 

 

1.

Baue eine Bahn und lasse den Roboter mit Hilfe vom LIDAR-Sensor durchfahren, so wie im folgenden YouTube Video: VideoLIDAR

   
 
2.

Zeichne eine Bahn, die aus mehreren 20 cm langen Strecken besteht. Verwende PID Control um die Bahn genau abzufahren.

 
 
3.
Erstelle einen Tunnel aus einer Kartonschachtel und lasse den Roboter durchfahren. Der Roboter soll selbst merken, wann er sich im Tunnel befindet und seine LEDs einschalten. Nach dem Tunnel schaltet er die LEDs wieder aus.  

4.
Erstelle eine Bahn mit Streifen und Kreuzungen und lasse den Roboter bestimmte Wege abfahren.