Synsensor#

Introduktion#

Visionsensorn är en kamerabaserad sensor som kan upptäcka och spåra färgsignaturer och färgkoder. Den gör det möjligt för en robot att analysera sin omgivning och reagera på visuell inmatning.

För exemplen nedan kommer den konfigurerade Vision Sensorn att namnges vision_1, och de konfigurerade Color Signature-objekten, såsom RED_BOX, kommer att användas i alla efterföljande exempel i denna API-dokumentation när det refereras till Vision -klassmetoder.

Nedan följer en lista över alla metoder:

Getters — Hämta data från visionssensorn.

  • take_snapshot — Samlar in data för en specifik signatur.

  • installed — Om synsensorn är ansluten till IQ-hjärnan (2:a generationen).

Egenskaper — Objektdata returnerad från take_snapshot.

  • largest_object — Välj omedelbart det största objektet från Vision Sensor-ögonblicksbilden.

  • .exists — Om objektet finns i den aktuella detekteringen.

  • .width — Width of the detected object.

  • .height — Height of the detected object.

  • .centerX — X position of the object’s center.

  • .centerY — Y position of the object’s center.

  • .angle — Färgkodens orientering.

  • .originX — X position of the object’s top-left corner.

  • .originY — Y position of the object’s top-left corner.

Konstruktörer — Initiera och konfigurera sensorerna manuellt.

  • Vision — Skapar en visionssensor.

  • Signature — Skapar en färgsignatur.

  • Code — Skapar en färgkod.

Getters#

take_snapshot#

take_snapshot filtrerar data från Vision Sensor-ramen till en enda signatur – en sparad beskrivning av något som sensorn kan känna igen, till exempel en konfigurerad färgsignatur eller färgkod – och returnerar en tupel.

Färgsignaturer och Färgkoder måste först konfigureras i Vision Utility innan de kan användas med den här metoden.

Tupeln lagrar objekt sorterade från störst till minst efter bredd, med början vid index 0. Varje objekts egenskaper kan nås med hjälp av dess index. En tom tupel returneras om inga matchande objekt upptäcks.

Usage:
vision_1.take_snapshot(SIGNATURE)

Parametrar

Beskrivning

SIGNATURE

Filtrerar datamängden så att den endast inkluderar data från den givna signaturen. Tillgängliga signaturer är:

  • Färgsignaturer eller färgkoder - Namnet på synsensorn, två understreck och sedan färgsignaturens eller färgkodens namn. Till exempel: vision_1__RED_BOX.

# 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)

Färgsignaturer#

En färgsignatur är en unik färg som synsensorn kan känna igen. Dessa signaturer gör det möjligt för synsensorn att upptäcka och spåra objekt baserat på deras färg. När en färgsignatur har konfigurerats kan sensorn identifiera objekt med den specifika färgen i sitt synfält. Färgsignaturer används med take_snapshot för att bearbeta och upptäcka färgade objekt i realtid.

För att kunna använda en konfigurerad färgsignatur i ett projekt måste dess namn vara namnet på visionssensorn, två understreck och sedan färgsignaturens namn. Till exempel: 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)

Färgkoder#

En färgkod är ett strukturerat mönster som består av färgsignaturer arrangerade i en specifik ordning. Dessa koder gör det möjligt för synsensorn att känna igen fördefinierade färgmönster. Färgkoder är användbara för att identifiera komplexa objekt eller skapa unika markörer för autonom navigering.

För att kunna använda en konfigurerad färgkod i ett projekt måste dess namn vara sensorns namn, två understreck och sedan färgkodens namn. Till exempel: 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)

installed#

installed returnerar ett booleskt värde som anger om synsensorn för närvarande är ansluten till IQ-hjärnan (2:a generationen).

  • True — Synsensorn är ansluten till IQ-hjärnan (2:a generationen).

  • False — Synsensorn är inte ansluten till IQ-hjärnan (2:a generationen).

Usage:
vision_1.installed()

Parametrar

Beskrivning

Den här metoden har inga parametrar.

# Display a message if the Vision Sensor is connected
if vision_1.installed():
    brain.screen.print("Installed!")

Fastigheter#

largest_object#

largest_object hämtar det största detekterade objektet att hämta data från i tupeln som returnerats från den senaste användningen av take_snapshot.

Den här metoden kan användas för att alltid hämta det största objektet från en tupel utan att ange ett index.

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)

Tuple Properties#

Det finns åtta egenskaper som ingår i varje objekt som lagras i en tupel efter att take_snapshot har använts.

Alla egenskapsvärden beskriver det detekterade objektets position och storlek i Vision Sensorns vy vid det ögonblick då take_snapshot användes. Dessa värden mäts i pixlar, baserat på sensorns upplösning på 316 x 212 pixlar.

.existerar#

.exists returnerar ett booleskt värde som anger om indexet finns i tupeln eller inte.

  • True — Indexet finns.

  • False — Indexet finns inte.

# Check if at least one red objects 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)

.bredd#

.width returnerar bredden på det detekterade objektet i pixlar, vilket är ett heltal mellan 1 och 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)

.höjd#

.height returnerar höjden på det detekterade objektet i pixlar, vilket är ett heltal mellan 1 och 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 returnerar x-koordinaten för det detekterade objektets centrum i pixlar, vilket är ett heltal mellan 0 och 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 returnerar y-koordinaten för det detekterade objektets centrum i pixlar, vilket är ett heltal mellan 0 och 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)

.vinkel#

.angle returnerar det detekterade objektets orientering i grader, vilket är ett heltal mellan 0 och 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 50 < box_code[0].angle < 100:
            drivetrain.turn(RIGHT)
            
        elif 270 < box_code[0].angle < 330:
            drivetrain.turn(LEFT)
        
        else:
            drivetrain.stop()
    else:
        drivetrain.stop()

    wait(50, MSEC)

.originX#

.originX returnerar x-koordinaten för det övre vänstra hörnet av det detekterade objektets avgränsningsram i pixlar, vilket är ett heltal mellan 0 och 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)

.ursprungY#

.originY returnerar y-koordinaten för det övre vänstra hörnet av det detekterade objektets avgränsningsram i pixlar, vilket är ett heltal mellan 0 och 212.

# 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)

Konstruktörer#

Konstruktorer används för att manuellt skapa Vision, Signatureoch Code objekt, vilka är nödvändiga för att konfigurera sensorerna utanför VEXcode.

Vision Sensor#

Vision skapar en visionssensor.

Användande

Vision(port, brightness, sigs)

Parametrar

Beskrivning

port

Vilken Smart Port Vision-sensorn är ansluten till, från 1 till 12.

brightness

Valfritt. Ljusstyrkan för synsensorn, från 1 till 100.

sigs

Valfritt. Namnet på ett eller flera Färgsignatur eller Färgkod objekt.

Exempel

# Create a new Signature "RED_BOX" with the Signature class
RED_BOX = Signature(1, -3911, -3435, -3673,10879, 11421, 11150,2.5, 0)
# Create a new Vision Sensor "vision_1" with the Vision
# class, with the "RED_BOX" Signature.
vision_1 = Vision(Ports.PORT1, 100, RED_BOX)

# Move forward if a red object is detected
while True:
    red_object = vision_1.take_snapshot(RED_BOX)
    if red_object[0].exists:
        drivetrain.drive_for(FORWARD, 10, MM)
    wait(5, MSEC)

Color Signature#

Signature skapar en färgsignatur. Upp till sju olika färgsignaturer kan lagras på en synssensor samtidigt.

Användande:

Signature(index, uMin, uMax, uMean, vMin, vMax, vMean, rgb, type)

Parameter

Beskrivning

index

Indexet för Signature objektet, från 1–7. Obs! Att skapa två Signature -objekt med samma indexnummer kommer att göra att det andra skapade objektet åsidosätter det första.

uMin

Värdet från uMin i Vision Utility.

uMax

Värdet från uMax i Vision Utility.

uMean

Värdet från uMean i Vision Utility.

vMin

Värdet från vMin i Vision Utility.

vMax

Värdet från vMax i Vision Utility.

vMean

Värdet från vMean i Vision Utility.

rgb

Värdet från rgb i Vision Utility.

type

Värdet från type i Vision Utility.

För att hämta värdena för att skapa en färgsignatur, gå till Vision Utility. När en färgsignatur har konfigurerats, kopiera parametervärdena från konfigurationsfönstret.

Exempel

# Create a new Signature RED_BOX with the Signature class
RED_BOX = Signature(1, 10121, 10757, 10439,-1657, -1223, -1440,2.5, 1)
# Create a new Vision Sensor "vision_1" with the Vision
# class, with the RED_BOX Signature.
vision_1 = Vision(Ports.PORT1, 100, RED_BOX)

# Move forward if a red object is detected
while True:
    red_object = vision_1.take_snapshot(RED_BOX)
    if red_object[0].exists:
        drivetrain.drive_for(FORWARD, 10, MM)
    wait(5, MSEC)

Color Code#

Code skapar en färgkod. Den kräver minst två redan definierade färgsignaturer för att kunna användas. Upp till åtta olika färgkoder kan lagras på en visionssensor samtidigt.

Användande:

Code(sig1, sig2, sig3, sig4, sig5)

Parameter

Beskrivning

sig1

En tidigare skapad Färgsignatur.

sig2

En tidigare skapad Färgsignatur.

sig3

Valfritt. En tidigare skapad Färgsignatur.

sig4

Valfritt. En tidigare skapad Färgsignatur.

sig5

Valfritt. En tidigare skapad Färgsignatur.

Exempel

# Create two new Signatures for a red and blue box
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 for a red box to the left of a blue box
RED_BLUE = Code(RED_BOX, BLUE_BOX)
# Create a new Vision Sensor "vision_1" with the Vision
# class, with the red_box and blue_box Signatures.
vision_1 = Vision(Ports.PORT1, 100, RED_BOX, BLUE_BOX)

# Display a message if Color Code is detected
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(RED_BLUE)
    if box_code[0].exists:
        brain.screen.print("Color code detected!")
        wait(100, MSEC)