Näköanturi#

Johdanto#

vision -luokkaa käytetään EXP-näköanturin datan 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

index

int32_t

Älyportti, johon konenäköanturi on kytketty, kirjoitetaan muodossa PORTx, jossa x on portin numero (esimerkiksi PORT1).

bright

uint8_t

Näköanturin kirkkaustaso.

sigs

vision::signature or vision::code objects

Yksi tai useampi vision::signature tai vision::code objekti rekisteröidään anturiin.

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 kytketty EXP Brainiin.

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.

Available Functions

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

6 — 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 );

Parameters

Parametri

Tyyppi

Kuvaus

id

uint32_t

Haettava allekirjoitustunnusnumero.

cc

code &

Viittaus etsittävään vision::code -objektiin.

sig

signature &

Viittaus etsittävään vision::signature -objektiin.

count

uint32_t

Havaittavien kohteiden enimmäismäärä.

Return Values

Palauttaa arvon int32_t joka edustaa havaittujen vastaavien objektien lukumäärää.

Notes
  • 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 EXP Brainiin.

Available Functions
bool installed();

Parameters

Tämä funktio ei ota vastaan ​​parametreja.

Return Values

Palauttaa 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 — Palauttaa objects.

  • 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ä.

Syntax
VisionSensor.largestObject

Components

Komponentti

Kuvaus

VisionSensor

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.

Syntax
VisionSensor.objectCount

Components

Komponentti

Kuvaus

VisionSensor

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.

Syntax
VisionSensor.objects[index].property

Components

Komponentti

Kuvaus

VisionSensor

Vision Sensor -instanssisi nimi.

index

Objektin indeksi taulukossa. Indeksi alkaa luvusta 0.

property

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);
}