Visie#
Invoering#
De Vision Sensor voor VEX EXP detecteert en volgt kleursignaturen en kleurcodes. Hierdoor kan de Vision Sensor zijn omgeving analyseren en reageren op basis van de gedetecteerde visuele gegevens.
Op deze pagina worden vision_1, RED_BOXen BOX_CODE gebruikt als voorbeeldnamen voor respectievelijk de Vision Sensor, de Color Signature en de Color Code. Vervang deze door uw eigen geconfigureerde namen.
Hieronder vindt u een lijst met alle methoden:
Getters – Gegevens ophalen van de Vision Sensor.
take_snapshot– Legt gegevens vast voor een specifieke kleursignatuur of kleurcode.largest_object– Selecteer het grootste object uit de momentopname.installed– Of de Vision Sensor is verbonden met de EXP Brain.
Eigenschappen – Objectgegevens geretourneerd door take_snapshot.
.exists– Of het object bestaat in de huidige detectie..width– Breedte van het gedetecteerde object..height– Hoogte van het gedetecteerde object..centerX– X-positie van het middelpunt van het object..centerY– Y-positie van het middelpunt van het object..angle– Oriëntatie van de kleurcode..originX– X-positie van de linkerbovenhoek van het object..originY– Y-positie van de linkerbovenhoek van het object.
Constructors – Initialiseer en configureer handmatig de Vision Sensor en de bijbehorende signaturen.
Getters#
take_snapshot#
take_snapshot filtert gegevens uit het frame van de Vision Sensor tot één enkele signatuur — een opgeslagen beschrijving van iets dat de sensor kan herkennen, zoals een geconfigureerde kleursignatuur of kleurcode — en retourneert een tuple.
Kleursignaturen en Kleurcodes moeten eerst in het Vision Utility worden geconfigureerd voordat ze met deze methode kunnen worden gebruikt.
De tuple slaat objecten op, gesorteerd van groot naar klein op basis van breedte, beginnend bij index 0. De eigenschappen van elk object kunnen worden benaderd via de index. Er wordt een lege tuple geretourneerd als er geen overeenkomende objecten worden gevonden.
Usage:
vision_1.take_snapshot(SIGNATURE)
Parameters |
Beschrijving |
|---|---|
|
Filtert de dataset zodat alleen gegevens met de opgegeven signatuur worden weergegeven. Beschikbare signaturen zijn:
|
# Move forward if a red object is detected
while True:
red_box = vision_1.take_snapshot(vision_1__RED_BOX)
if red_box[0].exists:
drivetrain.drive_for(FORWARD, 10, MM)
wait(5, MSEC)
Kleursignaturen#
Een kleursignatuur is een unieke kleur die de Vision Sensor kan herkennen. Deze signaturen stellen de sensor in staat objecten te detecteren en te volgen op basis van hun kleur. Zodra een kleursignatuur is geconfigureerd, kan de sensor objecten met die specifieke kleur in zijn gezichtsveld identificeren. Kleursignaturen worden gebruikt met take_snapshot om gekleurde objecten in realtime te verwerken en te detecteren.
Om een geconfigureerde kleursignatuur in een project te gebruiken, moet de naam ervan de naam van de Vision Sensor zijn, gevolgd door twee underscores en vervolgens de naam van de kleursignatuur. Bijvoorbeeld: vision_1__RED_BOX.
# Display if any objects match the RED_BOX signature
while True:
brain.screen.set_cursor(1, 1)
brain.screen.clear_row(1)
# Change to any configured Color Signature
red_box = vision_1.take_snapshot(vision_1__RED_BOX)
if red_box[0].exists:
brain.screen.print("Color signature detected!")
wait(100, MSEC)
Kleurcodes#
Een kleurcode is een gestructureerd patroon dat bestaat uit kleursignaturen die in een specifieke volgorde zijn gerangschikt. Deze codes stellen de beeldsensor in staat om vooraf gedefinieerde kleurpatronen te herkennen. Kleurcodes zijn nuttig voor het identificeren van complexe objecten of het creëren van unieke markeringen voor autonome navigatie.
Om een geconfigureerde kleurcode in een project te gebruiken, moet de naam ervan de naam van de Vision Sensor zijn, gevolgd door twee underscores en vervolgens de naam van de kleurcode. Bijvoorbeeld: vision_1__BOX_CODE.
# Display if any objects match the BOX_CODE code
while True:
brain.screen.set_cursor(1, 1)
brain.screen.clear_row(1)
# Change to any configured Color Code
box_code = vision_1.take_snapshot(vision_1__BOX_CODE)
if box_code[0].exists:
brain.screen.print("Color code detected!")
wait(100, MSEC)
largest_object#
largest_object haalt het grootste gedetecteerde object op om gegevens uit te halen in de tuple die is geretourneerd door het laatste gebruik van take_snapshot.
Deze methode kan worden gebruikt om altijd het grootste object uit een tuple te halen zonder een index op te geven.
Usage:
vision_1.largest_object()
# Turn slowly until the largest object is centered in
# front of the Vision Sensor
drivetrain.set_turn_velocity(10, PERCENT)
drivetrain.turn(RIGHT)
while True:
red_box = vision_1.take_snapshot(vision_1__RED_BOX)
if red_box[0].exists:
if 140 < vision_1.largest_object().centerX < 180:
drivetrain.stop()
wait(10,MSEC)
installed#
installed retourneert een Booleaanse waarde die aangeeft of de Vision Sensor momenteel is verbonden met de EXP Brain.
True– De visiesensor is verbonden met de EXP Brain.False– De visiesensor is niet verbonden met de EXP Brain.
Usage:
vision_1.installed()
Parameters |
Beschrijving |
|---|---|
Deze methode heeft geen parameters. |
# Display a message if the Vision Sensor is connected
if vision_1.installed():
brain.screen.print("Vision Sensor Installed!")
Eigenschappen#
Er zijn acht eigenschappen die worden opgenomen bij elk object dat in een tuple is opgeslagen nadat take_snapshot is gebruikt.
Alle eigenschapswaarden beschrijven de positie en grootte van het gedetecteerde object in het gezichtsveld van de Vision Sensor op het moment dat take_snapshot werd gebruikt. Deze waarden worden gemeten in pixels, gebaseerd op de resolutie van de sensor van 316 bij 212 pixels.
.exists#
.exists retourneert een Booleaanse waarde die aangeeft of de index in de tuple voorkomt of niet.
True- De index bestaat.False- De index bestaat niet.
# Check if at least one red object is detected
# You will receive an error if no objects are detected
while True:
brain.screen.clear_screen()
brain.screen.set_cursor(1, 1)
red_objects = vision_1.take_snapshot(vision_1__RED_BOX)
if red_objects[0].exists:
brain.screen.print("At least 1")
else:
brain.screen.print("No red objects")
wait(0.5, SECONDS)
.width#
.width retourneert de breedte van het gedetecteerde object in pixels, wat een geheel getal is tussen 1 en 316.
# Move towards a blue object until its width is
# larger than 100 pixels
while True:
blue_box = vision_1.take_snapshot(vision_1__BLUE_BOX)
if blue_box[0].exists:
if blue_box[0].width < 100:
drivetrain.drive_for(FORWARD, 10, MM)
else:
drivetrain.stop()
wait(50, MSEC)
.height#
.height retourneert de hoogte van het gedetecteerde object in pixels, wat een geheel getal is tussen 1 en 212.
# Move towards a blue object until its height is
# larger than 100 pixels
while True:
blue_box = vision_1.take_snapshot(vision_1__BLUE_BOX)
if blue_box[0].exists:
if blue_box[0].height < 100:
drivetrain.drive_for(FORWARD, 10, MM)
else:
drivetrain.stop()
wait(50, MSEC)
.centerX#
.centerX retourneert de x-coördinaat van het middelpunt van het gedetecteerde object in pixels, een geheel getal tussen 0 en 316.
# Turn slowly until the largest blue object is centered
# in front of the Vision Sensor.
drivetrain.set_turn_velocity(10, PERCENT)
drivetrain.turn(RIGHT)
while True:
blue_box = vision_1.take_snapshot(vision_1__BLUE_BOX)
if blue_box[0].exists:
if 140 < vision_1.largest_object().centerX < 180:
drivetrain.stop()
wait(10,MSEC)
.centerY#
.centerY retourneert de y-coördinaat van het middelpunt van het gedetecteerde object in pixels, een geheel getal tussen 0 en 212.
# Move towards a blue object until its
# center y-coordinate is more than 140 pixels
while True:
blue_box = vision_1.take_snapshot(vision_1__BLUE_BOX)
if blue_box[0].exists:
if blue_box[0].centerY < 140:
drivetrain.drive(FORWARD)
else:
drivetrain.stop()
wait(50, MSEC)
.angle#
.angle geeft de oriëntatie van het gedetecteerde object in graden terug, wat een geheel getal is tussen 0 en 359.
# Turn left or right depending on how a
# configured box code is rotated
while True:
box_code = vision_1.take_snapshot(vision_1__BOX_CODE)
if box_code[0].exists:
if 70 < box_code[0].angle < 110:
drivetrain.turn_for(RIGHT, 45, DEGREES)
elif 250 < box_code[0].angle < 290:
drivetrain.turn_for(LEFT, 45, DEGREES)
else:
drivetrain.stop()
wait(50, MSEC)
.originX#
.originX retourneert de x-coördinaat van de linkerbovenhoek van de begrenzingsbox van het gedetecteerde object in pixels, wat een geheel getal is tussen 0 en 316.
# Display if a red object is to the
# left or the right
while True:
brain.screen.clear_screen()
brain.screen.set_cursor(1,1)
red_box = vision_1.take_snapshot(vision_1__RED_BOX)
if red_box[0].exists:
if red_box[0].originX < 160:
brain.screen.print("To the left!")
else:
brain.screen.print("To the right!")
wait(50, MSEC)
.originY#
.originY retourneert de y-coördinaat van de linkerbovenhoek van het begrenzingskader van het gedetecteerde object in pixels, wat een geheel getal tussen 0 en 212 is.
# Display if a red object is close or far
# from the robot
while True:
brain.screen.clear_screen()
brain.screen.set_cursor(1,1)
red_box = vision_1.take_snapshot(vision_1__RED_BOX)
if red_box[0].exists:
if red_box[0].originY < 80:
brain.screen.print("Far")
else:
brain.screen.print("Close")
wait(50, MSEC)
Constructeurs#
Constructors worden gebruikt om handmatig Vision, Signatureen Code objecten te creëren, die nodig zijn voor het configureren van de Vision Sensor buiten VEXcode.
Vision#
Vision creëert een Vision Sensor.
Gebruik
Vision(smartport, brightness, sigs)
Parameters |
Beschrijving |
|---|---|
|
De slimme poort waarop de visionsensor is aangesloten, wordt weergegeven als |
|
Optioneel. De helderheidswaarde voor de Vision Sensor, van 1 tot 100. |
|
Optioneel. De naam van een of meer Kleursignatuur of Kleurcode objecten, gescheiden door komma’s ( |
# Create the Color Signatures
RED_BOX = Signature(1, 10121, 10757, 10439,-1657, -1223, -1440, 2.5, 1)
BLUE_BOX = Signature(2, -4443, -3373, -3908,6253, 7741, 6997, 2.5, 1)
# Create the Color Code
BOX_CODE = Code(RED_BOX, BLUE_BOX)
"""
Create a Vision Sensor with the following values:
- Port 1
- brightness: 80
- RED_BOX and BOX_CODE signatures
"""
vision_1 = Vision(Ports.PORT1, 80, RED_BOX, BOX_CODE)
Signature#
Signature creëert een kleursignatuur. Er kunnen maximaal zeven verschillende kleursignaturen tegelijk op een beeldsensor worden opgeslagen.
Gebruik:
Signature(index, uMin, uMax, uMean, vMin, vMax, vMean, rgb, type)
Parameter |
Beschrijving |
|---|---|
|
De index van het object |
|
De waarde van |
|
De waarde van |
|
De waarde van |
|
De waarde van |
|
De waarde van |
|
De waarde van |
|
De waarde van |
|
De waarde van |
Om de waarden te verkrijgen waarmee een kleursignatuur kan worden gemaakt, gaat u naar het Vision Utility. Zodra een kleursignatuur is geconfigureerd, kopieert u de parameterwaarden uit het configuratievenster.
"""
Create a Color Signature with the following values:
- index: 1
- uMin: 10121
- uMax: 10757
- uMean: 10439
- vMin: -1657
- vMax: -1223
- vMean: -1440
- rgb: 2.5
- type: 1
"""
RED_BOX = Signature(1, 10121, 10757, 10439,-1657, -1223, -1440,2.5, 1)
Code#
Code Code kunnen maximaal acht verschillende kleurcodes tegelijk op een beeldsensor worden opgeslagen.
Gebruik:
Code(sig1, sig2, sig3, sig4, sig5)
Parameter |
Beschrijving |
|---|---|
|
Een eerder aangemaakte Kleursignatuur. |
|
Een eerder aangemaakte Kleursignatuur. |
|
Optioneel. Een eerder aangemaakte Kleursignatuur. |
|
Optioneel. Een eerder aangemaakte Kleursignatuur. |
|
Optioneel. Een eerder aangemaakte Kleursignatuur. |
# Create the Color Signatures
RED_BOX = Signature(1, 10121, 10757, 10439,-1657, -1223, -1440, 2.5, 1)
BLUE_BOX = Signature(2, -4443, -3373, -3908,6253, 7741, 6997, 2.5, 1)
# Create a Color Code with the Color Signatures
BOX_CODE = Code(RED_BOX, BLUE_BOX)