Näköanturi#
Johdanto#
Vision Sensor on kameraan perustuva anturi, joka pystyy havaitsemaan ja seuraamaan väritunnisteita ja värikoodeja. Sen avulla robotti voi analysoida ympäristöään ja reagoida visuaaliseen syötteeseen.
Alla olevissa esimerkeissä konfiguroidun Vision Sensorin nimeksi annetaan vision_1, ja konfiguroituja Color Signature -objekteja, kuten RED_BOX, käytetään kaikissa seuraavissa esimerkeissä tässä API-dokumentaatiossa viitattaessa Vision -luokan metodeihin.
Alla on luettelo kaikista menetelmistä:
Getterit — Hae tietoja näköanturista.
take_snapshot— Tallentaa tietoja tietylle allekirjoitukselle.installed— Onko näköanturi yhdistetty IQ (2. sukupolvi) aivoihin.
Ominaisuudet — take_snapshot-funktiosta palautetut objektitiedot.
largest_object— Valitsee välittömästi suurimman kohteen näköanturin tilannevedoksesta..exists— Onko objekti olemassa nykyisessä havainnossa..width— Havaitun kohteen leveys..height— Havaitun kohteen korkeus..centerX— Objektin keskipisteen X-sijainti..centerY— Objektin keskipisteen Y-sijainti..angle— Värikoodin suunta..originX— Objektin vasemman yläkulman X-sijainti..originY— Objektin vasemman yläkulman Y-sijainti.
Konstruktorit — Alusta ja konfiguroi anturit 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 näkö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 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)
installed#
installed palauttaa totuusarvon, joka ilmaisee, onko näköanturi tällä hetkellä yhdistetty IQ (2. sukupolvi) aivoihin.
True— Näköanturi on yhdistetty IQ (2. sukupolvi) aivoihin.False— Näköanturi ei ole yhteydessä IQ (2. sukupolvi) aivoihin.
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("Installed!")
Ominaisuudet#
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)
Tuple Properties#
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.
.olemassa#
.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 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)
.leveys#
.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)
.korkeus#
.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)
.kulma#
.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 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 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 Vision, Signatureja Code -objektien manuaaliseen luomiseen, jotka ovat välttämättömiä antureiden konfiguroimiseksi VEXcoden ulkopuolella.
Vision Sensor#
Vision luo visioanturin.
Käyttö
Vision(port, brightness, sigs)
Parametrit |
Kuvaus |
|---|---|
|
Mihin älyporttiin näköanturi on kytketty, 1–12. |
|
Valinnainen. Näköanturin kirkkausarvo väliltä 1–100. |
|
Valinnainen. Yhden tai useamman Color Signature- tai Code-objektin nimi. |
Esimerkki
# 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 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.
Esimerkki
# 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 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. |
Esimerkki
# 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)