Visio#
Johdanto#
VEX V5:n näköanturi tunnistaa ja seuraa väritunnisteita ja värikoodeja. Näin näköanturi voi analysoida ympäristöään ja reagoida havaittujen visuaalisten tietojen perusteella.
Tällä sivulla käytetään esimerkkinä nimiä vision_1, RED_BOXja BOX_CODE : Vision Sensor, Color Signature ja Color Code. Korvaa ne tarvittaessa omilla määritetyillä nimilläsi.
Alla on luettelo kaikista menetelmistä:
Getterit – Hae tietoja näköanturilta.
take_snapshot– Tallentaa tiedot tietylle väriallekirjoitukselle tai värikoodille.largest_object– Valitse tilannekuvasta suurin objekti.installed– Onko näköanturi kytketty V5 Brainiin.
Ominaisuudet – take_snapshot-funktiosta palautetut objektitiedot.
.exists– Onko objekti olemassa nykyisessä havainnossa totuusarvona..width– Havaitun kohteen leveys pikseleinä..height– Havaitun kohteen korkeus pikseleinä..centerX– Objektin keskipisteen X-sijainti pikseleinä..centerY– Objektin keskipisteen Y-sijainti pikseleinä..angle– Värikoodin suunta asteina..originX– Objektin vasemman yläkulman X-sijainti pikseleinä..originY– Objektin vasemman yläkulman Y-sijainti pikseleinä.
Konstruktorit – Alusta ja konfiguroi konenäköanturi ja sen tunnisteet manuaalisesti.
Getterit#
take_snapshot#
take_snapshot suodattaa Vision Sensor -kehyksen tiedot yhdeksi tunnisteeksi – tallennetuksi kuvaukseksi jostakin, jonka tunnistin voi tunnistaa, kuten määritetystä väritunnisteesta tai värikoodista – ja palauttaa tuplen.
Väritunnisteet ja Värikoodit on ensin määritettävä Vision-apuohjelmassa, ennen kuin niitä voidaan käyttää tämän menetelmän kanssa.
Tuple tallentaa objektit leveyden mukaan suurimmasta pienimpään järjestettyinä alkaen indeksistä 0. Kunkin objektin properties-ominaisuuksiin pääsee käsiksi sen indeksin avulla. Jos vastaavia objekteja ei löydy, palautetaan tyhjä tuple.
Usage:
vision_1.take_snapshot(SIGNATURE)
Parametrit |
Kuvaus |
|---|---|
|
Suodattaa tietojoukon sisältämään vain annetun allekirjoituksen tiedot. Käytettävissä olevat allekirjoitukset ovat:
|
# 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)
Väriallekirjoitukset#
Väritunniste on ainutlaatuinen väri, jonka näköanturi tunnistaa. Näiden tunnisteiden avulla anturi voi havaita ja seurata kohteita niiden värin perusteella. Kun väritunniste on määritetty, anturi voi tunnistaa näkökentässään olevia kohteita, joilla on kyseinen väri. Väritunnisteita käytetään yhdessä take_snapshot -funktion kanssa värillisten kohteiden käsittelyyn ja havaitsemiseen reaaliajassa.
Jotta voit käyttää konfiguroitua väritunnistetta projektissa, sen nimen on oltava konenäköanturin nimi, kaksi alaviivaa ja sitten väritunnisteen nimi. Esimerkiksi: 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)
Värikoodit#
Värikoodi on jäsennelty kuvio, joka koostuu tietyssä järjestyksessä olevista väritunnisteista. Näiden koodien avulla näköanturi tunnistaa ennalta määritellyt värikuviot. Värikoodit ovat hyödyllisiä monimutkaisten kohteiden tunnistamisessa tai ainutlaatuisten merkkien luomisessa autonomista navigointia varten.
Jotta voit käyttää konfiguroitua värikoodia projektissa, sen nimen on oltava konenäköanturin nimi, kaksi alaviivaa ja sitten värikoodin nimi. Esimerkiksi: 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 hakee suurimman havaitun objektin, josta tietoja haetaan take_snapshot-metodin viimeisimmästä käytöstä palautetusta tuplesta.
Tätä metodia voidaan käyttää aina tuplen suurimman objektin hakemiseen ilman indeksin määrittämistä.
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 palauttaa totuusarvon, joka ilmaisee, onko näköanturi tällä hetkellä kytkettynä V5 Brainiin.
True– Näköanturi on kytketty V5 Brainiin.False– Näköanturia ei ole kytketty V5 Brainiin.
Usage:
vision_1.installed()
Parametrit |
Kuvaus |
|---|---|
Tällä menetelmällä ei ole parametreja. |
# Display a message if the Vision Sensor is connected
if vision_1.installed():
brain.screen.print("Vision Sensor Installed!")
Ominaisuudet#
Tupleen tallennetussa objektissa on kahdeksan ominaisuutta take_snapshot -metodin käytön jälkeen.
Kaikki ominaisuusarvot kuvaavat havaitun kohteen sijainnin ja koon konenäköanturin näkymässä sillä hetkellä, kun toimintoa take_snapshot käytettiin. Nämä arvot mitataan pikseleinä anturin 316 x 212 pikselin resoluution perusteella.
.exists#
.exists palauttaa totuusarvon, joka ilmaisee, onko indeksi olemassa tuplessa vai ei.
True: Indeksi on olemassa.False: Indeksiä ei ole olemassa.
# 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 palauttaa havaitun objektin leveyden pikseleinä, joka on kokonaisluku väliltä 1–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 palauttaa havaitun objektin korkeuden pikseleinä, joka on kokonaisluku väliltä 1 ja 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 palauttaa havaitun objektin keskipisteen x-koordinaatin pikseleinä, joka on kokonaisluku väliltä 0–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 palauttaa havaitun objektin keskipisteen y-koordinaatin pikseleinä, joka on kokonaisluku väliltä 0–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 palauttaa havaitun kohteen suunnan asteina, joka on kokonaisluku väliltä 0–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 palauttaa havaitun objektin rajaavan laatikon vasemman yläkulman x-koordinaatin pikseleinä, joka on kokonaisluku väliltä 0–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 palauttaa havaitun objektin rajaavan laatikon vasemman yläkulman y-koordinaatin pikseleinä, joka on kokonaisluku väliltä 0–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)
Rakentajat#
Konstruktoreita käytetään objektien Vision, Signatureja Code manuaaliseen luomiseen. Nämä objektit ovat välttämättömiä Vision Sensorin konfiguroimiseksi VEXcoden ulkopuolella.
Vision#
Vision luo visioanturin.
Käyttö
Vision(smartport, brightness, sigs)
Parametrit |
Kuvaus |
|---|---|
|
Älyportti, johon konenäköanturi on kytketty, kirjoitetaan muodossa |
|
Valinnainen. Näköanturin kirkkausarvo väliltä 1–100. |
|
Valinnainen. Yhden tai useamman Color Signature- tai Code-objektin nimi pilkuilla ( |
# 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 luo väriallekirjoituksen. Koneen anturiin voidaan tallentaa samanaikaisesti jopa seitsemän eri väriallekirjoitusta.
Käyttö:
Signature(index, uMin, uMax, uMean, vMin, vMax, vMean, rgb, type)
Parametri |
Kuvaus |
|---|---|
|
|
|
Arvo väliltä |
|
Arvo väliltä |
|
Arvo väliltä |
|
Arvo välillä |
|
Arvo väliltä |
|
Arvo väliltä |
|
Arvo välillä |
|
Arvo |
In order to obtain the values to create a Color Signature, go to the Vision Utility. Once a Color Signature is configured, copy the parameter values from the Configuration window.
"""
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 luo värikoodin. Se vaatii vähintään kaksi jo määritettyä väritunnistetta toimiakseen. Konenäköanturiin voidaan tallentaa kerralla jopa kahdeksan eri värikoodia.
Käyttö:
Code(sig1, sig2, sig3, sig4, sig5)
Parametri |
Kuvaus |
|---|---|
|
Aiemmin luotu Väriasetus. |
|
Aiemmin luotu Väriasetus. |
|
Valinnainen. Aiemmin luotu Väriasetus. |
|
Valinnainen. Aiemmin luotu Väriasetus. |
|
Valinnainen. Aiemmin luotu Väriasetus. |
# 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)