Bauanleitungen mit Farberkennung gibt es nur mit dem RX Controller. In den Baukästen mit TXT40 Controller ist kein I2C Sensor drin.
In den Baukästen Smart Robots Max und STEM Coding Max wird Farberkennung mit dem Gestensensor gemacht. Allerdings nur in je einem Modell: 'Omniwheels mit Spur- und Gestensensor' und 'Ticketkontrolle'. Für STEM Coding MAX gibt es keine Beispielprogramme. Die Anleitung mit Blöcken ist nur in der App STEM Suite drin. Man kann das Programm dann z.B. mit Scratch machen.
So bleibt eine einzige Bauanleitung mit Farberkennung übrig: Omniwheels mit Spur- und Gestensensor
https://fiproductmedia.azureedge.net/me ... df#page=76
und dort auch nur die Aufgabe 4 mit dem Parcours

- parcours.png (16.91 KiB) 2991 mal betrachtet
Vorher muss man den Gestensensor zwischen die Omniwheels nach unten umstecken. Das steht nicht in der Bauanleitung, nur in Aufgabe 4:

- sensor.png (21.74 KiB) 2991 mal betrachtet
Dann das fertige Programm
https://git.fischertechnik-cloud.com/fi ... e_sensor_4 laden und das Modell fährt auf der Linie und .. tanzt.
Funktioniert es?
Das ist der Plan:
Wird eine farbige Fläche erreicht, soll jeweils ein Ereignis ausgeführt werden.
• Trifft der Sensor auf „Gelb“, fährt das Modell schneller.
• Trifft der Sensor auf „Rot“, führt das Modell Tanzbewegungen auf.
• Trifft der Sensor auf „Blau“, wird die Parkfunktion angefahren.
• Trifft der Sensor auf „Grün“, fährt das Modell langsamer.
Diese Farben wurden im Test tatsächlich erkannt:
• weißes Papier: White, (dunkel) Red
• schwarze Linie: Green, Red, White
• grüne Fläche: Red, Green
• blaue Fläche: Blue, Green, Red, White
• gelbe Fläche: Red
• rote Fläche: Red
Jetzt ist erkennbar, warum das Modell an allen möglichen und unmöglichen Stellen Tanzbewegungen aufführt: Als Rot kann jede Farbe, die schwarze Linie und der weiße Untergrund erkannt werden.
---
Der Gestensensor liefert folgende Werte:
Farbe: string (red, yellow, green, blue, black, unknown)
HEX string #000000
RGB Tupel [r, g, b]
RGB red int 16Bit 0 .. 65535
RGB green int 16Bit 0 .. 65535
RGB blue int 16Bit 0 .. 65535
HSV Tupel [h, s, v]
HSV hue (°) int 0° .. 360°
HSC Saturation (%) int 0% .. 100 %
HSV value (%) int 0% .. 100 %
Umgebungslicht int 16Bit 0 .. 65535
Entfernung
Geste
Den ersten Eintrag 'Farbe' gab es bei Erscheinen des Baukastens "Smart Robots Max" noch nicht. Die Farbe (als String) wird im Beispiel mit den Blöcken Calibrate() und Color_recognise() ermittelt.
Wahrscheinlich soll der neue Block 'hole Gestensensor Farbe' diese Funktionen ersetzen. Nur wenn dieser Block benutzt wird, erscheint im Python Code eine zusätzliche Funktion:
Code: Alles auswählen
async def get_gesture_sensor_color():
hsv = controller.RX_I2C_1_gesture_sensor.get_hsv()
white = controller.RX_I2C_1_gesture_sensor.get_ambient()
if hsv == -1 or white == -1:
raise Exception("Sensor is not initialized")
if hsv[2] < 55 and white < 30:
return 'black'
else:
if hsv[0] >= 0 and hsv[0] < 9 and white > 10:
return 'red'
elif hsv[0] >= 9 and hsv[0] < 35 and white > 10:
return 'yellow'
elif hsv[0] >= 35 and hsv[0] < 167 and white > 10:
return 'green'
elif hsv[0] >= 167 and hsv[0] < 340 and white > 10:
return 'blue'
elif hsv[0] >= 340 and hsv[0] < 360 and white > 10:
return 'red'
return 'unknown'
Mit dem Block 'hole Gestensensor Farbe' wurden im oben genannten Versuch diese Farben erkannt:
• blaue Fläche = blue
• grüne Fläche = green
• rote Fläche = red
• gelbe Fläche = yellow oder red
• schwarze Linie = yellow oder red oder blue, im dunklen Raum black
• weißes Papier = red oder blue (white ist im Code nicht definiert)
---
Zu den anderen Werten, die der Gestensensor liefert:
HEX ist der bekannte RGB String (3 Byte). Woraus der berechnet wird ist unklar, weil
RGB ist ein Tupel aus 3 16-Bit RGB Rohdaten. (Die Farbcodes R, G, B sind nur 8-Bit.)
RGB red, green, blue sind dann die 3 16-Bit Integer aus dem Tupel. Also nicht die erwarteten Farbcodes.
HSV ist ein Tupel mit den 3 Werten (h ,s, v).
HSV (hue) ist die Farbe auf dem 360° Farbkreis.
Sättigung und Helligkeit wird in 0% bis 100% angegeben.
Umgebungslcht ist wieder ein 16-Bit Integer.
Um eine Farbe zu erkennen, wertet man am besten den H Wert (0° .. 360°) aus. Allerdings gibt es auf dem Farbkreis kein Schwarz und Weiß. Die Werte dafür unterscheiden sich wenig und liegen bei gelb und grün. Um bei Schwarz und Weiß keine gültige Farbe zu bekommen, muss ein anderer Wert ausgewertet werden. Welcher genau ist nicht so sicher...
Das Wichtigste bei Farberkennung ist definiertes Licht. Und das fehlt beim Gestensensor.
---
Deshalb gibt es jetzt den RGBW Farbsensor mit 3 weißen Leuchtdioden, die das Objekt beleuchten.
Es werden genau die gleichen Werte von den Blöcken geliefert. Von den I2C Registern kommen 4 mal 16 Bit für rot, grün, blau, weiß.
Für den RX Controller gibt es in ROBO Pro Coding 6.5.2-beta.3 den RGBW Farbsensor noch nicht.
Der RGBW Farbsensor am TXT 4.0 Controller ist aber ein eigenes Thema.
FG Lutz