Látomás#

Bevezetés#

A VEX EXP vizuális érzékelője érzékeli és nyomon követi a színazonosítást és a színkódokat. Ez lehetővé teszi a vizuális érzékelő számára, hogy elemezze a környezetét, és a detektált vizuális adatok alapján reagáljon.

Ez az oldal vision_1, RED_BOXés BOX_CODE névváltozatokat használja példaként a Vision Sensor, Color Signature és Color Code nevekre. Szükség szerint cserélje le ezeket a saját konfigurált nevekkel.

Az alábbiakban felsoroljuk az összes módszert:

Getterek – Adatok lekérése a vizuális érzékelőről.

  • take_snapshot – Egy adott színaláíráshoz vagy színkódhoz tartozó adatokat rögzít.

  • largest_object – Válassza ki a pillanatképből a legnagyobb objektumot.

  • installed – Azt jelzi, hogy a vizuális érzékelő csatlakoztatva van-e az EXP agyhoz.

Tulajdonságok – A take_snapshot függvényből visszaadott objektumadatok.

  • .exists – Azt jelzi, hogy az objektum létezik-e az aktuális észlelésben.

  • .width – A detektált objektum szélessége.

  • .height – Az érzékelt objektum magassága.

  • .centerX – Az objektum középpontjának X pozíciója.

  • .centerY – Az objektum középpontjának Y pozíciója.

  • .angle – A színkód orientációja.

  • .originX – Az objektum bal felső sarkának X pozíciója.

  • .originY – Az objektum bal felső sarkának Y pozíciója.

Konstruktorok – A vizuális érzékelő és annak szignatúráinak manuális inicializálása és konfigurálása.

  • Vision – Létrehoz egy Vision érzékelőt.

  • Signature – Színaláírást hoz létre.

  • Code – Színkódot hoz létre.

Getterek#

take_snapshot#

take_snapshot A Vision Sensor keretrendszeréből származó adatokat egyetlen aláírásra szűri – egy mentett leírásra, ami az érzékelő által felismerhető, például egy konfigurált színaláírásra vagy színkódra –, és egy tuple-t ad vissza.

A Színaláírások és Színkódok beállításokat először a Vision Utility programban kell konfigurálni, mielőtt ezzel a módszerrel használhatók lennének.

A tuple a 0 indexszel kezdődően, szélesség szerint a legnagyobbtól a legkisebbig rendezve tárolja az objektumokat. Minden objektum properties tulajdonsága a hozzá tartozó index segítségével érhető el. Ha nem található egyező objektum, akkor egy üres tuple kerül visszaadásra.

Usage:
vision_1.take_snapshot(SIGNATURE)

Paraméterek

Leírás

SIGNATURE

Úgy szűri az adathalmazt, hogy csak az adott aláírás adatait tartalmazza. Az elérhető aláírások a következők:

  • Színaláírások vagy színkódok - A vizuális érzékelő neve, két aláhúzásjel, majd a színaláírás vagy színkód neve. Például: 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)

Színaláírások#

A színaláírás egy egyedi szín, amelyet a vizuális érzékelő felismer. Ezek az aláírások lehetővé teszik az érzékelő számára, hogy a színük alapján érzékelje és kövesse a tárgyakat. Miután egy színaláírást konfiguráltak, az érzékelő képes azonosítani a látóterében lévő adott színű objektumokat. A színaláírásokat a take_snapshot metódussal együtt használják a színes objektumok valós idejű feldolgozásához és érzékeléséhez.

Ahhoz, hogy egy konfigurált színjelzést használhassunk egy projektben, a nevének a vizuális érzékelő nevéből, két aláhúzásjelből, majd a színjelzés nevéből kell állnia. Például: 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)

Színkódok#

A színkód egy strukturált minta, amely meghatározott sorrendben elrendezett színaláírásokból áll. Ezek a kódok lehetővé teszik a vizuális érzékelő számára, hogy felismerje az előre meghatározott színmintákat. A színkódok hasznosak összetett objektumok azonosításához vagy egyedi jelölők létrehozásához az autonóm navigációhoz.

Ahhoz, hogy egy konfigurált színkódot egy projektben használhassunk, a nevének a vizuális érzékelő nevéből, két aláhúzásjelből, majd a színkód nevéből kell állnia. Például: 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 lekéri a take_snapshot metódus legutóbbi használata által visszaadott tuple-ben található legnagyobb észlelt objektumot, amelyből adatokat lehet kinyerni.

Ez a metódus arra használható, hogy mindig a legnagyobb objektumot kapjuk meg egy tuple-ből index megadása nélkül.

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 egy logikai értéket ad vissza, amely azt jelzi, hogy a Vision Sensor jelenleg csatlakoztatva van-e az EXP Brain-hez.

  • True – A vizuális érzékelő csatlakozik az EXP agyhoz.

  • False – A vizuális érzékelő nincs csatlakoztatva az EXP agyhoz.

Usage:
vision_1.installed()

Paraméterek

Leírás

Ennek a metódusnak nincsenek paraméterei.

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

Tulajdonságok#

Nyolc tulajdonság van, amelyek minden egyes objektumhoz hozzáadódnak, miután a take_snapshot metódust használtuk egy tuple-ben.

Minden tulajdonságérték a detektált objektum pozícióját és méretét írja le a vizuális érzékelő nézetében take_snapshot használatának pillanatában. Ezeket az értékeket pixelben mérik, az érzékelő 316 x 212 pixeles felbontása alapján.

.exists#

.exists függvény egy logikai értéket ad vissza, amely jelzi, hogy az index létezik-e a tuple-ben vagy sem.

  • True - Az index létezik.

  • False - Az index nem létezik.

# 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 Visszaadja a detektált objektum szélességét pixelben, ami egy 1 és 316 közötti egész szám.

# 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 A detektált objektum magasságát adja vissza pixelben, ami egy 1 és 212 közötti egész szám.

# 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 Visszaadja a detektált objektum középpontjának x koordinátáját pixelben, ami egy 0 és 316 közötti egész szám.

# 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 Visszaadja a detektált objektum középpontjának y koordinátáját pixelben, ami egy 0 és 212 közötti egész szám.

# 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 függvény visszaadja a detektált objektum orientációját fokban, ami egy 0 és 359 közötti egész szám.

# 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 visszaadja a detektált objektum határolókeretének bal felső sarkának x koordinátáját pixelben, ami egy 0 és 316 közötti egész szám.

# 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 visszaadja a detektált objektum határolókeretének bal felső sarkának y koordinátáját pixelben, ami egy 0 és 212 közötti egész szám.

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

Konstruktorok#

A konstruktorok segítségével manuálisan hozhatók létre Vision, Signatureés Code objektumok, amelyek a Vision Sensor VEXcode-on kívüli konfigurálásához szükségesek.

Vision#

Vision létrehoz egy Vision érzékelőt.

Használat

Vision(smartport, brightness, sigs)

Paraméterek

Leírás

smartport

Az az intelligens port, amelyhez a vizuális érzékelő csatlakozik, a következőképpen írva: Ports.PORTx , ahol x a port száma.

brightness

Opcionális. A vizuális érzékelő fényerőértéke 1-től 100-ig.

sigs

Opcionális. Egy vagy több Color Signature vagy Color Code objektum neve vesszővel (, ) elválasztva.

# 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 aláírás színaláírást hoz létre. Egyszerre akár hét különböző színaláírás is tárolható egy vizuális érzékelőn.

Használat:

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

Paraméter

Leírás

index

A Signature objektum indexe 1-től 7-ig. Megjegyzés: Két azonos indexszámú Signature objektum létrehozása azt eredményezi, hogy a másodikként létrehozott objektum felülírja az elsőt.

uMin

A Vision Utility uMin es értékének megadása.

uMax

A Vision Utility uMax közötti értéke.

uMean

A Vision Utility programban uMean közötti érték.

vMin

A Vision Utility vMin értékének megadása.

vMax

A Vision Utility vMax értékének megadása.

vMean

A Vision Utility vMean értékének megadása.

rgb

A Vision Utility rgb értékének megadása.

type

A type be írandó érték a Vision Utility programban.

A színaláírás létrehozásához szükséges értékek megszerzéséhez lépjen a Vision Utility programba. Miután a színaláírás konfigurálva van, másolja ki a paraméterértékeket a konfigurációs ablakból.

"""
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 kód színkódot hoz létre. Használatához legalább két már definiált színaláírás szükséges. Egyszerre akár nyolc különböző színkód is tárolható egy vizuális érzékelőn.

Használat:

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

Paraméter

Leírás

sig1

Egy korábban létrehozott Color Signature.

sig2

Egy korábban létrehozott Color Signature.

sig3

Opcionális. Egy korábban létrehozott Color Signature.

sig4

Opcionális. Egy korábban létrehozott Color Signature.

sig5

Opcionális. Egy korábban létrehozott Color Signature.

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