Kodning med AI-visionssensorn i VEXcode EXP C++

Se till att du har färgsignaturer och färgkoder konfigurerade med din AI-visionssensor så att de kan användas med dina block. För att lära dig mer om hur du konfigurerar dem kan du läsa artiklarna nedan:

AI-visionssensorn kan även upptäcka AI-klassificeringar och AprilTags. För att lära dig hur du aktiverar dessa detekteringslägen, gå hit:

För att lära dig mer om dessa individuella kommandon och hur du använder dem i VEXcode, gå till API-webbplatsen.


Skaffa visuell data med AI-visionssensorn

Varje AI Vision Sensor-kommando börjar med namnet på den konfigurerade AI Vision Sensorn. För alla exempel i den här artikeln kommer namnet på den använda AI-visionssensorn att vara AIVision.

taSnapshot

Metoden takeSnapshot tar en bild av vad AI-visionssensorn ser för närvarande och hämtar data från den ögonblicksbilden som sedan kan användas i ett projekt. När en ögonblicksbild tas måste du ange vilken typ av objekt AI-visionssensorn ska samla in data om:

  • AFärgsignatur ellerFärgkod
    • Dessa visuella signaturer börjar med namnet på AI-visionssensorn, ett dubbelt understreck och sedan namnet på den visuella signaturen, till exempel: AIVision1__Blue.
  • AI-klassificeringar - aivision::ALL_AIOBJS
  • aprilTaggar- aivision::ALL_TAGS

Att ta en ögonblicksbild skapar en array av alla detekterade objekten som du angav. Om du till exempel ville detektera en "blå" färgsignatur, och AI-visionssensorn detekterade 3 olika blå objekt, skulle data från alla tre läggas i arrayen.

I det här exemplet tas en ögonblicksbild av den "blå" färgsignaturenfrån AI-visionssensorn med namnet AIVision1. Den visar antalet objekt som upptäckts i matrisen och tar en ny ögonblicksbild var 0,5 sekund.

medan (true) {
// Få en ögonblicksbild av alla blåfärgade objekt.
AIVision.takeSnapshot(AIVision1__Blue);

// Kontrollera att ett objekt upptäcktes i ögonblicksbilden innan data hämtas.
om (AIVision.objectCount > 0) {

Brain.Screen.clearScreen();
Brain.Screen.setCursor(1, 1);
Brain.Screen.print(AIVision1.objectCount);
}
vänta(5, ms);
}

föremål

Varje objekt från en ögonblicksbild har olika egenskaper som kan användas för att rapportera information om objektet. Metoden objekt ger dig åtkomst till dessa egenskaper.

De tillgängliga fastigheterna är följande:

  • id
  • mittenX och mittenY
  • ursprungX och ursprungY
  • bredd
  • höjd
  • vinkel
  • finns
  • göra

För att komma åt ett objekts egenskap, använd namnet på AI Vision Sensor, följt av metoden objects och sedan objektets index.

Objektindexet anger vilken specifik objektegenskap du vill hämta. Efter att en ögonblicksbild tagits sorterar AI-visionssensorn automatiskt objekt efter storlek. Det största objektet tilldelas index 0, medan mindre objekt får högre indexnummer.

Till exempel, om man anropar det största objektets bredd skulle det vara AIVision1.objects[0].width.

id

Egenskapen id är endast tillgänglig för AprilTags och AI-klassificeringar.

Tre AprilTags spåras av AI Vision Utility. Varje tagg identifieras, lokaliseras och markeras, vilket indikerar att systemet spårar den. AprilTag-ID:na i det här exemplet är 0, 3 och 9.

För enAprilTagrepresenterar id egenskapen det detekteradeAprilTag(s) ID-numret.

Identifiering av specifika AprilTags möjliggör selektiv navigering. Du kan programmera din robot att röra sig mot vissa taggar medan den ignorerar andra, och effektivt använda dem som vägvisare för automatiserad navigering.

Fyra objekt spåras av AI Vision-verktyget, två BuckyBalls och två ringar. Varje objekt identifieras, lokaliseras och kontureras, vilket indikerar dess spårning av systemet. Verktyget noterar objektets ID, i det här exemplet finns det en röd boll, en blå boll, en grön ring och en röd ring.

FörAI-klassificeringarrepresenterar egenskapen id den specifika typen av AI-klassificering som detekterats.

Identifiera specifika AI-klassificeringarlåter roboten bara fokusera på specifika objekt, som att bara vilja navigera mot en röd Buckyball, inte en blå.

Gå till dessa artiklar för mer information om AprilTags och AI-klassificeringar och hur du aktiverar deras detektering i AI Vision Utility.

centerX och centerY

Detta är centrumkoordinaterna för det detekterade objektet i pixlar.

AI-visionssensorn visas spåra en blå Buckyball. Buckyballen har en spårningsrektangel runt sig, och etiketten ovan visar att den har en X-position på 176 och en Y-position på 117. Spårningsrektangelns centrum är markerat för att visa att positionen mäts från centrum.

CenterX- och CenterY-koordinater hjälper till med navigering och positionering. AI-visionssensorn har en upplösning på 320 x 240 pixlar.

AI-visionssensorn visas spåra två Blue Cubes. Kuberna har spårningsrektanglar runt sig, och en av dem är mycket närmare kameran. Den närmaste har en Y-position på 184, och den längre bort har en Y-position på 70.

Du kan se att ett objekt närmare AI-visionssensorn kommer att ha en lägre CenterY-koordinat än ett objekt som är längre bort.

I det här exemplet, eftersom AI-visionssensorns vy är (160, 120), kommer roboten att svänga åt höger tills ett detekterat objekts centrumX-koordinat är större än 150 pixlar, men mindre än 170 pixlar.

medan (true) {
  // Få en ögonblicksbild av alla blåfärgade objekt.
  AIVision.takeSnapshot(AIVision__Blue);

  // Kontrollera att ett objekt upptäcktes i ögonblicksbilden innan data hämtas.
  om (AIVision.objectCount > 0) {

    om (AIVision.objects[0].centerX > 150.0 && 170.0 > AIVision.objects[0].centerX) {
      Drivlina.sväng(höger);
    } annars {
      Drivlina.stopp();
    }
  }
  vänta(5, ms);
}

ursprung X och ursprung Y

UrsprungX och UrsprungY är koordinaten i det övre vänstra hörnet av det detekterade objektet i pixlar.

AI-visionssensorn visas spåra en blå Buckyball. Buckyballen har en spårningsrektangel runt sig, och etiketten ovan visar att den har en X-position på 176 och en Y-position på 117. Spårningsrektangelns övre vänstra hörn är markerat för att visa att ursprungspositionen mäts från dess övre vänstra hörn.

OriginX- och OriginY-koordinaterna hjälper till med navigering och positionering. Genom att kombinera denna koordinat med objektets bredd och höjd kan du bestämma storleken på objektets avgränsningsram. Detta kan hjälpa till med att spåra rörliga objekt eller navigera mellan objekt.

bredd och höjd

Detta är bredden eller höjden på det detekterade objektet i pixlar.

AI-visionssensorn visas spåra en blå Buckyball. Buckyballen har en spårningsrektangel runt sig, och etiketten ovan visar att den har en bredd på 80 pixlar och en höjd på 78 pixlar. Röda pilar markerar spårningsrektangeln för att visa dess bredd och höjd.

Bredd- och höjdmåtten hjälper till att identifiera olika objekt. Till exempel kommer en Buckyball att ha en större höjd än en ring.

AI-visionssensorn visas spåra två Blue Cubes. Kuberna har spårningsrektanglar runt sig, och en av dem är mycket närmare kameran. Den närmaste har en bredd på 144 och en höjd på 113, och den längre bort har en bredd på 73 och en höjd på 84.

Bredd och höjd anger också ett objekts avstånd från AI-visionssensorn. Mindre mått betyder vanligtvis att objektet är längre bort, medan större mått antyder att det är närmare.

I det här exemplet används objektets bredd för navigering. Roboten kommer att närma sig objektet tills bredden har nått en viss storlek innan den stannar.

medan (true) {
  // Få en ögonblicksbild av alla blå objekt.
  AIVision.takeSnapshot(AIVision1__Blue);

  // Kontrollera att ett objekt upptäcktes i ögonblicksbilden innan data hämtas.
  om (AIVision.objectCount > 0) {

    om (AIVision.objects[0].width < 250.0) {
      Drivetrain.drive(framåt);
    } annars {
      Drivetrain.stop();
    }
  }
  vänta(5, ms);
}

vinkel

Animering av en röd och en grön fyrkant som roteras tillsammans för att demonstrera 360-graderna av ett vinkelvärde.

Egenskapen vinkel är endast tillgänglig förfärgkoder ochAprilTags

Detta representerar om den detekterade färgkodeneller AprilTag är orienterad annorlunda.

AI-visionssensorn visas som spårar en färgkod i grönt och sedan blått. Videoflödet visar en grön kub staplad ovanpå en blå kub. Färgkodens vinkelvärde är markerat och visar 87 grader, vilket indikerar att färgkoden är orienterad vertikalt.

Du kan se om roboten är orienterad annorlunda i förhållande tillFärgkod ellerAprilTag och fatta navigeringsbeslut utifrån det.

AI-visionssensorn visas som spårar en färgkod i grönt och sedan blått. Videoflödet visar en grön kub som sitter bredvid en blå kub, men de är i en obekväm vinkel jämfört med sensorn. Färgkodens vinkelvärde är markerat och visar 0 grader, vilket indikerar att färgkodens vinkel inte kan läsas.

Om till exempel en färgkod inte detekteras i rätt vinkel, kanske objektet den representerar inte kan plockas upp ordentligt av roboten.

göra

Egenskapen poäng används vid detektering avAI-klassificeringar med AI-visionssensorn.

Fyra objekt spåras av AI Vision-verktyget, två BuckyBalls och två ringar. Varje objekt identifieras, lokaliseras och kontureras, vilket indikerar dess spårning av systemet. Verktyget listar också varje objekts AI-klassificeringspoäng, i det här exemplet är varje poäng 99 %.

Konfidenspoängen visar hur säker AI-visionssensorn är på sin detektering. I den här bilden är den 99 % säker på att identifiera dessa fyra objekts AI-klassificeringar. Du kan använda den här poängen för att säkerställa att din robot bara fokuserar på mycket säkra detektioner.

finns

Egenskapen exists används för att detektera om en specificerad visuell signatur har detekterats i den senast tagna ögonblicksbilden.

Detta låter dig kontrollera om några upptäckta objekt upptäcktes i den föregående ögonblicksbilden. Den här egenskapen returnerar ett True (Sant) när ett objekt existerar och ett False (Falskt) när objektet inte existerar.


objektAntal

Metoden objectCount returnerar antalet upptäckta objekt i den senaste ögonblicksbilden.

AI-visionssensorn visas spåra två Blue Cubes. Kuberna har spårningsrektanglar runt sig, och en av dem är mycket närmare kameran.

I det här exemplet har två objekt detekterats med färgsignaturen "Blå". Båda kommer att placeras i arrayen när metoden takeSnapshot används.

Detta kodavsnitt uppdaterar kontinuerligt EXP Brain med antalet upptäckta objekt. Baserat på det givna exemplet kommer den upprepade gånger att skicka värdet 2, vilket indikerar att två objekt har detekterats.

medan (true) {
// Få en ögonblicksbild av alla blå objekt.
AIVision.takeSnapshot(AIVision__Blue);

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

// Kontrollera att ett objekt upptäcktes i ögonblicksbilden innan data hämtas.
om (AIVision.objectCount > 0) {
Brain.Screen.print(AIVision1.objectCount);
}
vänta(5, ms);
}

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

Last Updated: