Vīzija#

Ievads#

VEX EXP redzes sensors nosaka un izseko krāsu parakstus un krāsu kodus. Tas ļauj redzes sensoram analizēt apkārtni un reaģēt, pamatojoties uz noteiktajiem vizuālajiem datiem.

Šajā lapā kā piemēri redzamības sensoram, krāsas parakstam un krāsas kodam tiek izmantoti attiecīgi vision_1, RED_BOXun BOX_CODE . Ja nepieciešams, nomainiet tos ar saviem konfigurētajiem nosaukumiem.

Zemāk ir visu metožu saraksts:

Ieguvēji — iegūstiet datus no redzes sensora.

  • take_snapshot – Iegūst datus konkrētam krāsu parakstam vai krāsu kodam.

  • largest_object – Atlasiet lielāko objektu no momentuzņēmuma.

  • installed – Vai redzes sensors ir pievienots EXP smadzenēm.

Īpašības — no take_snapshot atgrieztie objekta dati.

  • .exists – Vai objekts eksistē pašreizējā noteikšanā.

  • .width – Noteiktā objekta platums.

  • .height – Height of the detected object.

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

  • .centerY – objekta centra Y pozīcija.

  • .angle – Krāsu koda orientācija.

  • .originX – objekta augšējā kreisā stūra X pozīcija.

  • .originY – objekta augšējā kreisā stūra Y pozīcija.

Konstruktori — manuāli inicializējiet un konfigurējiet redzes sensoru un tā parakstus.

  • Vision – Izveido redzes sensoru.

  • Signature – Izveido krāsas parakstu.

  • Code – Izveido krāsu kodu.

Getteri#

take_snapshot#

take_snapshot filtrē datus no redzes sensora kadra līdz vienam parakstam — saglabātam aprakstam par kaut ko, ko sensors var atpazīt, piemēram, konfigurētam krāsas parakstam vai krāsas kodam — un atgriež kortežu.

Krāsu paraksti un Krāsu kodi vispirms ir jākonfigurē Vision utilītā, pirms tos var izmantot ar šo metodi.

Kortežs saglabā objektus, kas sakārtoti no lielākā līdz mazākajam pēc platuma, sākot ar indeksu 0. Katra objekta īpašībām var piekļūt, izmantojot tā indeksu. Ja netiek atrasti atbilstoši objekti, tiek atgriezts tukšs kortežs.

Usage:
vision_1.take_snapshot(SIGNATURE)

Parametri

Apraksts

SIGNATURE

Filtrē datu kopu, lai iekļautu tikai dotā paraksta datus. Pieejamie paraksti ir:

  • Krāsu paraksti vai krāsu kodi — redzes sensora nosaukums, divas pasvītras un pēc tam krāsas paraksta vai krāsas koda nosaukums. Piemēram: 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)

Krāsu paraksti#

Krāsas paraksts ir unikāla krāsa, ko redzes sensors spēj atpazīt. Šie paraksti ļauj sensoram noteikt un izsekot objektus, pamatojoties uz to krāsu. Kad krāsas paraksts ir konfigurēts, sensors var identificēt objektus ar šo konkrēto krāsu tā redzes laukā. Krāsu paraksti tiek izmantoti kopā ar take_snapshot, lai apstrādātu un noteiktu krāsainus objektus reāllaikā.

Lai projektā izmantotu konfigurētu krāsas parakstu, tā nosaukumam jābūt redzes sensora nosaukumam, divām pasvītrojuma zīmēm un pēc tam krāsas paraksta nosaukumam. Piemēram: 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)

Krāsu kodi#

Krāsu kods ir strukturēts raksts, kas sastāv no noteiktā secībā sakārtotiem krāsu parakstiem. Šie kodi ļauj redzes sensoram atpazīt iepriekš definētus krāsu rakstus. Krāsu kodi ir noderīgi sarežģītu objektu identificēšanai vai unikālu marķieru izveidei autonomai navigācijai.

Lai projektā izmantotu konfigurētu krāsu kodu, tā nosaukumam ir jābūt redzes sensora nosaukumam, divām pasvītrojuma zīmēm un pēc tam krāsas koda nosaukumam. Piemēram: 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 izgūst lielāko noteikto objektu, no kura iegūt datus, no jaunākās take_snapshot lietošanas reizes atgrieztā korteža.

Šo metodi var izmantot, lai vienmēr iegūtu lielāko objektu no korteža, nenorādot indeksu.

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 atgriež Būla vērtību, kas norāda, vai redzes sensors pašlaik ir savienots ar EXP Brain.

  • True – Redzes sensors ir savienots ar EXP smadzenēm.

  • False – Redzes sensors nav savienots ar EXP smadzenēm.

Usage:
vision_1.installed()

Parametri

Apraksts

Šai metodei nav parametru.

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

Īpašumi#

Pēc take_snapshot izmantošanas katrā objektā, kas tiek glabāts kortežā, ir iekļautas astoņas īpašības.

Visas īpašību vērtības apraksta noteiktā objekta pozīciju un izmēru redzes sensora skatā brīdī, kad tika izmantots take_snapshot Šīs vērtības tiek mērītas pikseļos, pamatojoties uz sensora 316 x 212 pikseļu izšķirtspēju.

.exists#

.exists atgriež Būla vērtību, kas norāda, vai indekss eksistē kortežā vai nē.

  • True — Indekss pastāv.

  • False — Indekss nepastāv.

# 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 atgriež noteiktā objekta platumu pikseļos, kas ir vesels skaitlis no 1 līdz 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 atgriež noteiktā objekta augstumu pikseļos, kas ir vesels skaitlis no 1 līdz 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 atgriež noteiktā objekta centra x koordinātu pikseļos, kas ir vesels skaitlis no 0 līdz 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 atgriež noteiktā objekta centra y koordinātu pikseļos, kas ir vesels skaitlis no 0 līdz 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 atgriež noteiktā objekta orientāciju grādos, kas ir vesels skaitlis no 0 līdz 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 atgriež noteiktā objekta ierobežojošā lodziņa augšējā kreisā stūra x koordinātu pikseļos, kas ir vesels skaitlis no 0 līdz 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 atgriež noteiktā objekta ierobežojošā lodziņa augšējā kreisā stūra y koordinātu pikseļos, kas ir vesels skaitlis no 0 līdz 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)

Konstruktori#

Konstruktori tiek izmantoti, lai manuāli izveidotu Vision, Signatureun Code objektus, kas ir nepieciešami Vision sensora konfigurēšanai ārpus VEXcode.

Vision#

Vision izveido redzes sensoru.

Lietošana

Vision(smartport, brightness, sigs)

Parametri

Apraksts

smartport

Viedports, kuram ir pievienots redzes sensors, kas pierakstīts kā Ports.PORTx , kur x ir porta numurs.

brightness

Neobligāti. Redzes sensora spilgtuma vērtība no 1 līdz 100.

sigs

Neobligāti. Viena vai vairāku Color Signature vai Color Code objektu nosaukumi, atdalīti ar komatiem (,).

# 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  paraksts izveido krāsas parakstu. Redzes sensorā vienlaikus var saglabāt līdz septiņiem dažādiem krāsu parakstiem.

Lietojums:

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

Parametrs

Apraksts

index

Signature objekta indekss no 1 līdz 7. Piezīme: Izveidojot divus Signature objektus ar vienādu indeksa numuru, otrais izveidotais objekts ignorēs pirmo.

uMin

Vērtība no uMin Vision utilītā.

uMax

Vērtība no uMax Vision utilītā.

uMean

Vērtība no uMean Vision utilītā.

vMin

Vērtība no vMin Vision utilītā.

vMax

Vērtība no vMax Vision utilītā.

vMean

Vērtība no vMean Vision utilītā.

rgb

Vērtība no rgb Vision utilitātē.

type

Vērtība no type Vision utilītā.

Lai iegūtu vērtības krāsu paraksta izveidei, dodieties uz Vision Utility. Kad krāsu paraksts ir konfigurēts, kopējiet parametru vērtības no konfigurācijas loga.

"""
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 izveido krāsu kodu. Lai to izmantotu, nepieciešami vismaz divi jau definēti krāsu paraksti. Redzes sensorā vienlaikus var saglabāt līdz astoņiem dažādiem krāsu kodiem.

Lietojums:

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

Parametrs

Apraksts

sig1

Iepriekš izveidots Krāsu paraksts.

sig2

Iepriekš izveidots Krāsu paraksts.

sig3

Neobligāti. Iepriekš izveidots Krāsu paraksts.

sig4

Neobligāti. Iepriekš izveidots Krāsu paraksts.

sig5

Neobligāti. Iepriekš izveidots Krāsu paraksts.

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