Näköanturi#
Johdanto#
vision -luokkaa käytetään IQ (2. sukupolvi) -näköanturin tietojen ohjaamiseen ja käyttämiseen. Tämä anturi havaitsee ja seuraa väritunnisteita näkökentässään, jolloin robotti voi tunnistaa kohteet ja reagoida visuaalisiin tietoihin reaaliajassa.
Konenäköanturi pystyy havaitsemaan useita tunnistettavia kohteita samanaikaisesti ja antaa tietoja, kuten kohteen sijainnin, leveyden, korkeuden ja keskipisteen koordinaatit.
Luokanrakentajat#
vision(
int32_t index,
uint8_t bright,
Args&... sigs );
Luokan tuhoaja#
Tuhoaa vision -objektin ja vapauttaa siihen liittyvät resurssit.
~vision();
Parametrit#
Parametri |
Tyyppi |
Kuvaus |
|---|---|---|
|
|
Älyportti, johon konenäköanturi on kytketty, kirjoitetaan muodossa |
|
|
Näköanturin kirkkaustaso. |
|
|
Yksi tai useampi |
Esimerkkejä#
// Create Color Signatures
vision::signature Vision1__REDBOX = vision::signature(
1, // signature id
10121, // uMin
10757, // uMax
10439, // uMean
-1657, // vMin
-1223, // vMax
-1440, // vMean
2.5, // range
1 ); // type
vision::signature Vision1__BLUEBOX = vision::signature(
2, // signature id
-4479, // uMin
-3277, // uMax
-3878, // uMean
5869, // vMin
7509, // vMax
6689, // vMean
2.5, // range
1 ); // type
// Create a Color Code from two signatures
vision::code Vision1__BOXCODE = vision::code(
Vision1__REDBOX, // first signature
Vision1__BLUEBOX // second signature
);
// Create the Vision Sensor instance
vision Vision1 = vision(
PORT1, // Smart Port
50, // brightness
Vision1__REDBOX, // signature
Vision1__BOXCODE ); // Color Code
Jäsenten toiminnot#
vision -luokka sisältää seuraavat jäsenfunktiot:
takeSnapshot— Tallentaa tiedot tietylle väriallekirjoitukselle tai värikoodille.installed— Onko näköanturi yhdistetty IQ (2. sukupolvi) aivoihin.
Päästäksesi havaittujen objektien tietoihin takeSnapshot-funktion kutsumisen jälkeen, käytä käytettävissä olevia Properties-ominaisuuksia.
Ennen minkään vision -jäsenfunktion kutsumista on luotava vision -instanssi alla olevan mukaisesti:
/* This constructor is required when using VS Code.
Vision Sensor configuration is generated automatically
in VEXcode using the Device Menu. Replace the values
as needed. */
// Create Color Signatures
vision::signature Vision1__REDBOX = vision::signature(
1, // signature id
10121, // uMin
10757, // uMax
10439, // uMean
-1657, // vMin
-1223, // vMax
-1440, // vMean
2.5, // range
1 ); // type
vision::signature Vision1__BLUEBOX = vision::signature(
2, // signature id
-4479, // uMin
-3277, // uMax
-3878, // uMean
5869, // vMin
7509, // vMax
6689, // vMean
2.5, // range
1 ); // type
// Create a Color Code from two signatures
vision::code Vision1__BOXCODE = vision::code(
Vision1__REDBOX, // first signature
Vision1__BLUEBOX // second signature
);
// Create the Vision Sensor instance
vision Vision1 = vision(
PORT1, // Smart Port
50, // brightness
Vision1__REDBOX, // signature
Vision1__BOXCODE ); // Color Code
takeSnapshot#
Kaappaa kuvan konenäköanturilta, käsittelee sen allekirjoituksen perusteella ja päivittää objects -matriisin. Tällä menetelmällä voidaan myös rajoittaa tilannekuvaan kaapattavien objektien määrää.
objects -taulukko tallentaa objektit leveyden mukaan suurimmasta pienimpään järjestettyinä alkaen indeksistä 0. Kunkin objektin properties-ominaisuuteen pääsee käsiksi sen indeksin avulla. Jos vastaavia objekteja ei löydy, objectCount on 0 ja objects[i].exists on false.
1 — Ottaa tilannekuvan ja etsii määritettyä allekirjoitustunnusta vastaavia objekteja.
int32_t takeSnapshot( uint32_t id );
2 — Ottaa tilannekuvan ja etsii määritettyä
vision::code-objektia vastaavia objekteja.int32_t takeSnapshot( code &cc );
3 — Ottaa tilannekuvan ja etsii määritettyä
vision::signature-objektia vastaavia objekteja.int32_t takeSnapshot( signature &sig );
4 — Ottaa tilannevedoksen ja tallentaa vain suurimman määritetyn määrän allekirjoitustunnusta vastaavia objekteja.
int32_t takeSnapshot( uint32_t id, uint32_t count );
5 — Ottaa tilannekuvan ja tallentaa vain suurimman määritetyn määrän objekteja, jotka vastaavat määritettyä
vision::code-objektia.int32_t takeSnapshot( code &cc, uint32_t count );
Parameters6 — Ottaa tilannekuvan ja tallentaa vain suurimman määritetyn määrän objekteja, jotka vastaavat määritettyä
vision::signature-objektia.int32_t takeSnapshot( signature &sig, uint32_t count );
Parametri |
Tyyppi |
Kuvaus |
|---|---|---|
|
|
Haettava allekirjoitustunnusnumero. |
|
|
Viittaus etsittävään |
|
|
Viittaus etsittävään |
|
|
Havaittavien kohteiden enimmäismäärä. |
Palauttaa arvon int32_t joka edustaa havaittujen vastaavien objektien lukumäärää.
Konenäköanturin on otettava tilannekuva ennen kuin objektitietoihin voidaan päästä käsiksi.
Kun määritetään
count, vain suurimmat havaitut objektit (määritettyyn määrään asti) tallennetaan.
Esimerkkejä
while (true) {
// Display if a blue object is detected
Vision1.takeSnapshot(Vision1__BLUEBOX);
Brain.Screen.clearScreen();
Brain.Screen.setCursor(1, 1);
if (Vision1.objects[0].exists) {
Brain.Screen.print("Blue detected");
}
else {
Brain.Screen.print("No blue");
}
wait(0.5, seconds);
}
// Display when a blue object is detected
while (true) {
Brain.Screen.setCursor(1, 1);
Brain.Screen.clearLine(1);
Vision1.takeSnapshot(Vision1__BLUEBOX);
if (Vision1.objects[0].exists) {
Brain.Screen.print("Color detected!");
}
wait(100, msec);
}
// Display when BOXCODE is detected
while (true) {
Brain.Screen.setCursor(1, 1);
Brain.Screen.clearLine(1);
Vision1.takeSnapshot(Vision1__BOXCODE);
if (Vision1.objects[0].exists) {
Brain.Screen.print("Code detected!");
}
wait( 100, msec);
}
installed#
Palauttaa, onko näköanturi yhdistetty IQ (2. sukupolvi) aivoihin.
Available Functionsbool installed();
Tämä funktio ei ota vastaan parametreja.
Return ValuesPalauttaa totuusarvon, joka ilmaisee, onko näköanturi kytkettynä:
-
true— The Vision Sensor is connected. -
false— The Vision Sensor is not connected.
Ominaisuudet#
Kutsumalla takeSnapshot päivitetään konenäköanturin tunnistustulokset. Jokainen tilannevedos päivittää objects -taulukon, joka sisältää pyydetyn väritunnisteen tai värikoodin havaitut kohteet.
Vision Sensor -tietoihin päästään käsiksi Vision1.objects[index]-hakemistoon tallennettujen objektien ominaisuuksien kautta, missä index alkaa merkistä 0.
Näköanturin kuvan resoluutio on 316 x 212 pikseliä. Kohteen sijainti ja koko ilmoitetaan pikseliyksiköissä suhteessa anturin nykyiseen näkymään.
Seuraavat ominaisuudet ovat saatavilla:
largestObject— Valitsee suurimman havaitun objektin viimeisimmästä tilannevedoksesta.objectCount— Palauttaaobjects.objects— Havaittujen objektien taulukko, jota päivittäätakeSnapshot..exists— Sisältääkö objektimerkintä kelvollisia tietoja..width— Havaitun kohteen leveys pikseleinä..height— Havaitun kohteen korkeus pikseleinä..centerX— Objektin keskipisteen X-sijainti pikseleinä..centerY— Objektin keskipisteen Y-sijainti pikseleinä..originX— Objektin vasemman yläkulman X-sijainti pikseleinä..originY— Objektin vasemman yläkulman Y-sijainti pikseleinä..angle— Havaitun värikoodin suunta asteina (jos sovellettavissa).
largestObject#
Hakee suurimman havaitun objektin objects -taulukosta.
Tätä metodia voidaan käyttää aina suurimman objektin hakemiseen objects joukosta ilman indeksin määrittämistä.
VisionSensor.largestObject
Komponentti |
Kuvaus |
|---|---|
|
Vision Sensor -instanssisi nimi. |
Esimerkkejä
int main() {
// Initializing Robot Configuration. DO NOT REMOVE!
vexcodeInit();
// Display the largest detected object's width
while (true) {
Vision1.takeSnapshot(Vision1__BLUEBOX);
Brain.Screen.clearScreen();
Brain.Screen.setCursor(1, 1);
if (Vision1.objects[0].exists) {
Brain.Screen.print("%d", Vision1.largestObject.width);
}
wait(0.5, seconds);
}
}
objectCount#
Palauttaa objects -taulukon alkioiden määrän kokonaislukuna.
VisionSensor.objectCount
Komponentti |
Kuvaus |
|---|---|
|
Vision Sensor -instanssisi nimi. |
Esimerkkejä
int main() {
// Initializing Robot Configuration. DO NOT REMOVE!
vexcodeInit();
// Display how many blue objects are detected
while (true) {
Vision1.takeSnapshot(Vision1__BLUEBOX);
Brain.Screen.clearScreen();
Brain.Screen.setCursor(1, 1);
Brain.Screen.print("Object Count: %d", Vision1.objectCount);
wait(0.5, seconds);
}
}
objects#
objects on taulukko, joka sisältää viimeisimmästä takeSnapshot-kutsusta havaitut objektit.
Jokainen taulukon elementti edustaa havaittua objektia ja tarjoaa pääsyn sen ominaisuuksiin, kuten width, height, centerX ja muihin.
Objektit järjestetään suurimmasta pienimpään (leveyden mukaan) indeksistä 0 alkaen.
VisionSensor.objects[index].property
Komponentti |
Kuvaus |
|---|---|
|
Vision Sensor -instanssisi nimi. |
|
Objektin indeksi taulukossa. Indeksi alkaa luvusta |
|
Yksi käytettävissä olevista objektin ominaisuuksista. |
.olemassa#
.exists palauttaa, sisältääkö määritetty objekti-indeksi kelvollisen havaitun objektin.
Käyttöoikeus
SensorName.objects[index].exists
Paluuarvot
Palauttaa totuusarvon, joka ilmaisee, sisältääkö määritetty objekti-indeksi kelvollisen havaitun objektin:
-
true— A valid object exists at the specified index. -
false— No object exists at the specified index.
Esimerkkejä
// Display when a blue object is detected
while (true) {
Brain.Screen.setCursor(1, 1);
Brain.Screen.clearLine(1);
Vision1.takeSnapshot(Vision1__BLUEBOX);
if (Vision1.objects[0].exists) {
Brain.Screen.print("Color detected!");
}
wait(100, msec);
}
.leveys#
.width palauttaa havaitun objektin leveyden.
Käyttöoikeus
SensorName.objects[index].width
Paluuarvot
Palauttaa arvon int joka edustaa havaitun objektin leveyttä pikseleinä. Arvo vaihtelee välillä 1 - 316.
Esimerkkejä
// Approach an object until it's at least 100 pixels wide
while (true) {
Vision1.takeSnapshot(Vision1__BLUEBOX);
if (Vision1.objects[0].exists && Vision1.objects[0].width < 100) {
Drivetrain.driveFor(forward, 10, mm);
}
else {
Drivetrain.stop();
}
wait(0.5, seconds);
}
.korkeus#
.height palauttaa havaitun objektin korkeuden.
Käyttöoikeus
SensorName.objects[index].height
Paluuarvot
Palauttaa arvon int joka edustaa havaitun objektin korkeutta pikseleinä. Arvo vaihtelee välillä 1 - 212.
Esimerkkejä
// Approach an object until it's at least 100 pixels tall
while (true) {
Vision1.takeSnapshot(Vision1__BLUEBOX);
if (Vision1.objects[0].exists && Vision1.objects[0].height < 100) {
Drivetrain.driveFor(forward, 10, mm);
}
else {
Drivetrain.stop();
}
wait(0.5, seconds); // Avoid over-processing
}
.centerX#
.centerX palauttaa havaitun objektin keskipisteen x-koordinaatin.
Käyttöoikeus
SensorName.objects[index].centerX
Paluuarvot
Palauttaa arvon int joka edustaa objektin keskipisteen x-koordinaattia pikseleinä. Arvo vaihtelee välillä 0 - 316.
Esimerkkejä
// Turn until an object is directly in front of the sensor
Drivetrain.setTurnVelocity(10, percent);
Drivetrain.turn(right);
while (true) {
Vision1.takeSnapshot(Vision1__BLUEBOX);
if (Vision1.objects[0].exists) {
int centerX = Vision1.largestObject.centerX;
if (140 < centerX && centerX < 180) {
Drivetrain.stop();
}
}
wait(0.5, seconds);
}
.centerY#
.centerY palauttaa havaitun objektin keskipisteen y-koordinaatin.
Käyttöoikeus
SensorName.objects[index].centerY
Paluuarvot
Palauttaa arvon int joka edustaa objektin keskipisteen y-koordinaattia pikseleinä. Arvo vaihtelee välillä 0 - 212.
Esimerkkejä
// Approach an object until it's at least 90 pixels tall
while (true) {
Vision1.takeSnapshot(Vision1__BLUEBOX);
if (Vision1.objects[0].exists) {
if (Vision1.objects[0].centerY < 90) {
Drivetrain.drive(forward);
} else {
Drivetrain.stop();
}
} else {
Drivetrain.stop();
}
wait(50, msec);
}
.originX#
.originX palauttaa havaitun objektin rajaavan laatikon vasemman yläkulman x-koordinaatin.
Käyttöoikeus
SensorName.objects[index].originX
Paluuarvot
Palauttaa arvon int joka edustaa objektin rajaavan laatikon vasemman yläkulman x-koordinaattia pikseleinä. Arvo vaihtelee välillä 0 - 316.
Esimerkkejä
// Display if an object is to the left or the right
while (true) {
Brain.Screen.clearScreen();
Brain.Screen.setCursor(1, 1);
Vision1.takeSnapshot(Vision1__BLUEBOX);
if (Vision1.objects[0].exists) {
if (Vision1.objects[0].originX < 160) {
Brain.Screen.print("To the left!");
}
else {
Brain.Screen.print("To the right!");
}
}
wait(0.5, seconds);
}
.originY#
.originY palauttaa havaitun objektin rajaavan laatikon vasemman yläkulman y-koordinaatin.
Käyttöoikeus
SensorName.objects[index].originY
Paluuarvot
Palauttaa arvon int joka edustaa objektin rajaavan laatikon vasemman yläkulman y-koordinaattia pikseleinä. Arvo vaihtelee välillä 0 - 212.
Esimerkkejä
// Display if an object is close or far
while (true) {
Brain.Screen.clearScreen();
Brain.Screen.setCursor(1, 1);
Vision1.takeSnapshot(Vision1__BLUEBOX);
if (Vision1.objects[0].exists) {
if (Vision1.objects[0].originY < 80) {
Brain.Screen.print("Far");
} else {
Brain.Screen.print("Close");
}
}
wait(0.5, seconds);
}
.kulma#
.angle palauttaa havaitun värikoodin suunnan.
Käyttöoikeus
SensorName.objects[index].angle
Paluuarvot
Returns a double representing the orientation of the detected Color Code in degrees. The value ranges from 0 to 359.9.
Esimerkkejä
// Turn left or right depending on how a configured
// Color Code is rotated
while (true) {
Vision1.takeSnapshot(Vision1__BOXCODE);
if (Vision1.objects[0].exists) {
double angle = Vision1.objects[0].angle;
if (70 < angle && angle < 110) {
Drivetrain.turnFor(right, 45, degrees);
}
else if (250 < angle && angle < 290) {
Drivetrain.turnFor(left, 45, degrees);
}
else {
Drivetrain.stop();
}
}
wait(0.5, seconds);
}