Codifica con il sensore di visione AI in VEXcode EXP C++

Assicurati di avere Firme colore e Codici colore configurati con il tuo sensore di visione AI in modo che possano essere utilizzati con i tuoi blocchi. Per saperne di più su come configurarli, puoi leggere gli articoli seguenti:

Il sensore di visione AI può anche rilevare le classificazioni AI e gli AprilTag. Per sapere come abilitare queste modalità di rilevamento, vai qui:

Per saperne di più su questi singoli comandi e su come utilizzarli in VEXcode, visita il sito API.


Ottieni dati visivi con il sensore di visione AI

Ogni comando AI Vision Sensor inizierà con il nome dell'AI Vision Sensor configurato. Per tutti gli esempi in questo articolo, il nome del sensore di visione AI utilizzato sarà AIVision.

scatta un'istantanea

Il metodo takeSnapshot scatta una foto di ciò che il sensore di visione AI sta attualmente vedendo ed estrae dati da tale istantanea che possono poi essere utilizzati in un progetto. Quando si acquisisce un'istantanea, è necessario specificare di quale tipo di oggetto il sensore di visione AI deve raccogliere dati:

  • AColore Firma oCodice Colore
    • Queste firme visive iniziano con il nome del sensore di visione AI, un doppio trattino basso e poi il nome della firma visiva, ad esempio: AIVision1__Blue.
  • Classificazioni AI - aivision::ALL_AIOBJS
  • aprileTags- aivision::ALL_TAGS

L'acquisizione di uno snapshot creerà una matrice di tutti gli oggetti rilevati specificati. Ad esempio, se si desidera rilevare una firma di colore "Blu" e il sensore di visione AI rileva 3 diversi oggetti blu, i dati di tutti e tre verranno inseriti nell'array.

In questo esempio, viene scattata un'istantanea della firma di colore "Blu" dal sensore di visione AI denominato AIVision1. Visualizza il numero di oggetti rilevati nell'array e cattura una nuova istantanea ogni 0,5 secondi.

while (true) {
// Ottieni un'istantanea di tutti gli oggetti di colore blu.
AIVision.takeSnapshot(AIVision1__Blue);

// Verifica che un oggetto sia stato rilevato nello snapshot prima di estrarre i dati.
se (AIVision.objectCount > 0) {

Brain.Screen.clearScreen();
Brain.Screen.setCursor(1, 1);
Brain.Screen.print(AIVision1.objectCount);
}
wait(5, msec);
}

oggetti

Ogni oggetto di uno snapshot ha proprietà diverse che possono essere utilizzate per segnalare informazioni su quell'oggetto. Il metodo objects consente di accedere a queste proprietà.

Le proprietà disponibili sono le seguenti:

  • id
  • centroX e centroY
  • origineX e origineY
  • larghezza
  • altezza
  • angolo
  • esiste
  • punto

Per accedere alle proprietà di un oggetto, utilizzare il nome del sensore di visione AI, seguito dal metodo objects e infine dall'indice dell'oggetto.

L'indice dell'oggetto indica quale proprietà specifica dell'oggetto si desidera recuperare. Dopo aver scattato un'istantanea, il sensore di visione AI ordina automaticamente gli oggetti in base alle dimensioni. All'oggetto più grande viene assegnato l'indice 0, mentre agli oggetti più piccoli vengono assegnati numeri di indice più alti.

Ad esempio, la chiamata della larghezza dell'oggetto più grande sarebbe AIVision1.objects[0].width.

id

La proprietà id è disponibile solo per le classificazioni AI AprilTags e

Tre AprilTag vengono monitorati dall'AI Vision Utility. Ogni tag viene identificato, localizzato e delineato, indicando il suo tracciamento da parte del sistema. In questo esempio gli ID AprilTag sono 0, 3 e 9.

Per un AprilTag, la proprietà rappresenta il numero ID AprilTagrilevato

L'identificazione di specifici AprilTags consente una navigazione selettiva. Puoi programmare il tuo robot in modo che si muova verso determinati tag ignorandone altri, utilizzandoli di fatto come segnali per la navigazione automatizzata.

L'utilità AI Vision sta monitorando quattro oggetti: due BuckyBall e due Ring. Ogni oggetto viene identificato, localizzato e delineato, indicando il suo tracciamento da parte del sistema. L'utilità annota l'ID dell'oggetto: in questo esempio ci sono una palla rossa, una palla blu, un anello verde e un anello rosso.

PerClassificazioni AI, la proprietà id rappresenta il tipo specifico di Classificazione AI rilevata.

L'identificazione di specifiche Classificazioni AIconsente al robot di concentrarsi solo su oggetti specifici, ad esempio volendo navigare solo verso una Buckyball rossa, non verso una blu.

Per maggiori informazioni sulle classificazioni AI di AprilTags e e su come abilitarne il rilevamento in AI Vision Utility, consulta questi articoli.

centroX e centroY

Si tratta delle coordinate centrali dell'oggetto rilevato in pixel.

Il sensore di visione AI viene mostrato mentre traccia un Buckyball blu. Il Buckyball è circondato da un rettangolo di tracciamento e l'etichetta sopra mostra che ha una posizione X di 176 e una posizione Y di 117. Il centro del rettangolo di tracciamento è evidenziato per dimostrare che la posizione è misurata dal centro.

Le coordinate CenterX e CenterY aiutano nella navigazione e nel posizionamento. Il sensore di visione AI ha una risoluzione di 320 x 240 pixel.

Il sensore di visione AI è mostrato mentre traccia due cubi blu. I Cubi sono circondati da rettangoli di tracciamento e uno di essi è molto più vicino alla telecamera. Quello più vicino ha una posizione Y di 184, mentre quello più lontano ha una posizione Y di 70.

Come puoi vedere, un oggetto più vicino al sensore di visione AI avrà una coordinata CenterY inferiore rispetto a un oggetto più lontano.

In questo esempio, poiché il centro della visuale del sensore di visione AI è (160, 120), il robot girerà a destra finché la coordinata centraleX di un oggetto rilevato non sarà maggiore di 150 pixel, ma minore di 170 pixel.

while (true) {
  // Ottieni un'istantanea di tutti gli oggetti di colore blu.
  AIVision.takeSnapshot(AIVision__Blue);

  // Verifica che un oggetto sia stato rilevato nello snapshot prima di estrarre i dati.
  se (AIVision.objectCount > 0) {

    se (AIVision.objects[0].centerX > 150.0 && 170.0 > AIVision.objects[0].centerX) {
      Drivetrain.turn(right);
    } altrimenti {
      Drivetrain.stop();
    }
  }
  attendi(5, msec);
}

origineX e origineY

OriginX e OriginY sono le coordinate nell'angolo in alto a sinistra dell'oggetto rilevato in pixel.

Il sensore di visione AI viene mostrato mentre traccia un Buckyball blu. Il Buckyball è circondato da un rettangolo di tracciamento e l'etichetta sopra mostra che ha una posizione X di 176 e una posizione Y di 117. L'angolo superiore sinistro del rettangolo di tracciamento è evidenziato per dimostrare che la posizione di origine viene misurata a partire dal suo angolo superiore sinistro.

Le coordinate OriginX e OriginY aiutano nella navigazione e nel posizionamento. Combinando questa coordinata con la larghezza e l'altezza dell'oggetto, è possibile determinare la dimensione del riquadro di delimitazione dell'oggetto. Può essere utile per tracciare oggetti in movimento o per spostarsi tra gli oggetti.

larghezza e altezza

Questa è la larghezza o l'altezza dell'oggetto rilevato in pixel.

Il sensore di visione AI viene mostrato mentre traccia un Buckyball blu. Il Buckyball è circondato da un rettangolo di tracciamento e l'etichetta sopra mostra che ha una larghezza di 80 pixel e un'altezza di 78 pixel. Le frecce rosse evidenziano il rettangolo di tracciamento per mostrarne la larghezza e l'altezza.

Le misure di larghezza e altezza aiutano a identificare i diversi oggetti. Ad esempio, un Buckyball avrà un'altezza maggiore di un Ring.

Il sensore di visione AI è mostrato mentre traccia due cubi blu. I Cubi sono circondati da rettangoli di tracciamento e uno di essi è molto più vicino alla telecamera. Quello più vicino ha una larghezza di 144 e un'altezza di 113, mentre quello più lontano ha una larghezza di 73 e un'altezza di 84.

Larghezza e altezza indicano anche la distanza di un oggetto dal sensore di visione AI. Di solito, misure più piccole indicano che l'oggetto è più lontano, mentre misure più grandi indicano che è più vicino.

In questo esempio, la larghezza dell'oggetto viene utilizzata per la navigazione. Il robot si avvicinerà all'oggetto finché la larghezza non avrà raggiunto una dimensione specifica prima di fermarsi.

while (true) {
  // Ottieni un'istantanea di tutti gli oggetti Blue.
  AIVision.takeSnapshot(AIVision1__Blue);

  // Verifica che un oggetto sia stato rilevato nello snapshot prima di estrarre i dati.
  se (AIVision.objectCount > 0) {

    se (AIVision.objects[0].width < 250.0) {
      Drivetrain.drive(forward);
    } altrimenti {
      Drivetrain.stop();
    }
  }
  attendi(5, msec);
}

angolo

Animazione di un quadrato rosso e di un quadrato verde ruotati insieme per dimostrare i 360 gradi di un valore angolare.

La proprietà angolo è disponibile solo percodici colore eAprilTags.

Indica se il codice colore o AprilTag rilevato è orientato in modo diverso.

Il sensore di visione AI viene mostrato mentre traccia un codice colore verde e poi blu. Il video mostra un cubo verde impilato sopra un cubo blu. Il valore dell'angolo del codice colore è evidenziato e corrisponde a 87 gradi, il che indica che il codice colore è orientato verticalmente.

È possibile vedere se il robot è orientato in modo diverso rispetto al codice colore oAprilTag e prendere decisioni di navigazione di conseguenza.

Il sensore di visione AI viene mostrato mentre traccia un codice colore verde e poi blu. Il video mostra un cubo verde accanto a un cubo blu, ma sono posizionati in un'angolazione scomoda rispetto al sensore. Il valore dell'angolo del codice colore è evidenziato e indica 0 gradi, il che indica che l'angolo del codice colore non può essere letto.

Ad esempio, se un codice colore viene rilevato con l'angolazione corretta, l'oggetto che rappresenta potrebbe non essere rilevato correttamente dal robot.

punto

La proprietà punteggio viene utilizzata quando si rilevanoclassificazioni AI con il sensore di visione AI.

L'utilità AI Vision sta monitorando quattro oggetti: due BuckyBall e due Ring. Ogni oggetto viene identificato, localizzato e delineato, indicando il suo tracciamento da parte del sistema. L'utilità elenca anche il punteggio di classificazione AI di ciascun oggetto; in questo esempio, ogni punteggio è pari al 99%.

Il punteggio di affidabilità indica il livello di certezza del sensore di visione AI in merito al suo rilevamento. In questa immagine, l'identificazione delle classificazioni AI di questi quattro oggetti è sicura al 99%. Puoi usare questo punteggio per assicurarti che il tuo robot si concentri solo su rilevamenti altamente affidabili.

esiste

La proprietà exists viene utilizzata per rilevare se una specifica Visual Signature è stata rilevata nell'ultimo snapshot acquisito.

Ciò consente di verificare se sono stati rilevati oggetti nello snapshot precedente. Questa proprietà restituirà True quando un oggetto esiste e False quando l'oggetto non esiste.


numero di oggetti

Il metodo objectCount restituisce la quantità di oggetti rilevati nell'ultimo snapshot.

Il sensore di visione AI è mostrato mentre traccia due cubi blu. I Cubi sono circondati da rettangoli di tracciamento e uno di essi è molto più vicino alla telecamera.

In questo esempio sono stati rilevati due oggetti con la firma di colore "Blu". Entrambi verranno inseriti nell'array quando verrà utilizzato il metodo takeSnapshot.

Questo frammento di codice aggiorna continuamente EXP Brain con il numero di oggetti rilevati. In base all'esempio fornito, invierà ripetutamente il valore 2, indicando che sono stati rilevati due oggetti.

while (true) {
// Ottieni un'istantanea di tutti gli oggetti blu.
AIVision.takeSnapshot(AIVision__Blue);

Brain.Screen.clearScreen();
Brain.Screen.setCursor(1, 1);

// Verifica che un oggetto sia stato rilevato nello snapshot prima di estrarre i dati.
se (AIVision.objectCount > 0) {
Brain.Screen.print(AIVision1.objectCount);
}
attendi(5, msec);
}

For more information, help, and tips, check out the many resources at VEX Professional Development Plus

Last Updated: