Kodning med AI-visionssensorn i VEXcode V5 Python

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 AI-visionssensor som används att vara ai_vision_1.

ta_ögonblicksbild

Metoden take_snapshot 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: ai_vision_1__Blue.
  • AI-klassificeringar - AiVision.ALL_AIOBJS
  • AprilTaggar- AiVision.ALL_TAGS

Att ta en ögonblicksbild skapar en tupel 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 tupeln.

I det här exemplet lagrar variabeln vision_objects en tupel som innehåller de detekterade "lila"färgsignaturerna från AI-visionssensorn med namnet ai_vision_1. Den visar antalet upptäckta objekt och tar en ny ögonblicksbild var 0,5 sekund.

medan True: 
# Få en ögonblicksbild av alla lila färgsignaturer och lagra den i vision_objects.
vision_objects = ai_vision_1.take_snapshot(ai_vision_1__Purple)

# Kontrollera att ett objekt upptäcktes i ögonblicksbilden innan data hämtas.
om vision_objects[0].exists == True

brain.screen.clear_screen()
brain.screen.set_cursor(1, 1)

brain.screen.print("Antal objekt:", len(vision_objects))
wait(0.5, SEKUNDER)

Objektegenskaper

Varje objekt från en ögonblicksbild har olika egenskaper som kan användas för att rapportera information om objektet. De tillgängliga fastigheterna är följande:

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

För att komma åt ett objekts egenskap, använd variabelnamnet som lagrar tupeln, följt av objektindexet.

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.

Om man till exempel anropar det största objektets bredd inuti variabeln vision_objects blir det följande: vision_objects[0].width.

id

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

Tre fyrkantiga identifieringsmarkörer märkta med ID:n 0, 9 och 3, var och en med motsvarande koordinater och storleksmått visade i vit text. ID 0 är till vänster, ID 9 är till höger och ID 3 är längst ner i mitten. Varje markör har ett unikt svartvitt mönster inuti en kvadrat.

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.

Två bollar och två ringar identifieras i bilden, med etiketter som anger deras position, storlek och poäng. Den röda bollen är till vänster, den blå bollen är till höger, den gröna ringen är längst ner till vänster och den röda ringen är längst ner till höger. Varje objekt är markerat med en vit ruta, och detaljer som X- och Y-koordinater, bredd, höjd och en poäng på 99 % visas i vit text.

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.

En blå Buckyball som spåras av ett datorseendesystem. Objektet är konturerat med en vit fyrkant, och inuti konturen finns en mindre röd fyrkant som omger ett centrerat vitt kors. I bildens övre vänstra hörn anger en etikett att objektet är blått, med koordinaterna X:176, Y:117 och måtten B:80, H:78.

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

Två blå kubiska objekt spårade av ett visionssystem. Det övre objektet är märkt med koordinaterna X:215, Y:70 och måtten B:73, H:84, med en vit kontur och ett centrerat vitt kors. Det nedre objektet är märkt med koordinaterna X:188, Y:184 och måtten B:144, H:113, också markerade med vitt med ett centrerat vitt kors.

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ärgssignaturer och lagra den i vision_objects.
vision_objects = ai_vision_1.take_snapshot(ai_vision_1__Blue)

# Kontrollera att ett objekt upptäcktes i ögonblicksbilden innan data hämtas.
if vision_objects[0].exists == True

# Kontrollera om objektet inte är i mitten av AI-visionssensorns synfält.
om vision_objects[0].centerX > 150 och 170 > vision_objects[0].centerX:

# Fortsätt svänga höger tills objektet är i mitten av vyn.
drivetrain.turn(HÖGER)
annars:
drivetrain.stop()
wait(5, MSEC)

ursprung X och ursprung Y

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

En blå Buckyball som spåras av ett visionssystem. En vit kontur omger objektet, med ett centrerat vitt kors inuti konturen. Etiketten längst upp till vänster anger objektets färg som blå, tillsammans med koordinaterna X:176, Y:117 och måtten B:80, H:78. En liten röd fyrkant markerar objektets ö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.

Bilden visar en blå Buckyball med en vit fyrkantig kontur som spårar den. Det övre vänstra hörnet har en etikett som anger att det är ett blått objekt, med koordinaterna X:176, Y:117 och måtten B:80, H:78. Röda pilar markerar objektets 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.

Två blå kubiska objekt spåras av ett visuellt igenkänningssystem. Den övre kuben har en vit kontur med en etikett som anger dess position som X:215, Y:70 och måtten B:73, H:84. Den nedre kuben har en liknande vit kontur med etiketten som visar X:188, Y:184 och måtten B:144, H:113. Varje kub har ett centrerat vitt kors, vilket sannolikt indikerar fokuspunkten för spårning. Etiketterna markerar mätningar och spårningsdata för varje objekt.

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åfärgssignaturer och lagra den i vision_objects.
vision_objects = ai_vision_1.take_snapshot(ai_vision_1__Blue)

# Kontrollera att ett objekt upptäcktes i ögonblicksbilden innan data hämtas.
if vision_objects[0].exists == True

# Kontrollera om det största objektet är nära AI-visionssensorn genom att mäta dess bredd.
if vision_objects[0].width < 250:

# Kör närmare objektet tills det är bredare än 250 pixlar.
drivetrain.drive(FRAMÅT)
annars:
drivetrain.stop()

wait(5, MSEC)

vinkel

En roterande gif som visar röda och gröna block. När blocken är placerade helt horisontellt från rött till grönt visas de som 0 grader. Om det röda blocket är ovanpå det gröna blocket vertikalt, är det i 90 graders vinkel. Om blocken är horisontellt gröna till röda är det 180 grader. Om det gröna blocket är ovanpå det röda blocket vertikalt är det 20 grader.

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

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

En stapel med två kuber, en grön på toppen och en blå på botten, som spåras av ett visionssystem. En vit kontur omger båda kuberna, med ett vitt kors centrerat på den gröna kuben. Etiketten längst ner på bilden visar Grön_Blå A:87°, vilket indikerar de detekterade färgerna och en vinkelmätning. Nedanför det listas koordinaterna som X:117, Y:186, med måtten B:137, H:172, vilket representerar positionen och storleken på de staplade kuberna i ramen.

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

Två kuber, en grön och en blå, placerade sida vid sida och spårade av ett visionssystem. En vit kontur omger båda kuberna med ett vitt kors i mitten. Etiketten längst upp till vänster indikerar Grön_Blå A:0°, vilket refererar till de detekterade färgerna och en vinkelmätning. Nedanför visas koordinaterna som X:150, Y:102, med måtten B:179, H:109, vilket representerar kubernas position och storlek inom ramen.

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.

Bilden visar fyra objekt som spåras av ett visionssystem: två bollar och två ringar. Den röda bollen är märkt med koordinaterna X:122, Y:84, B:67, H:66 och en poäng på 99 %. Den blå bollen har X:228, Y:86, B:70, H:68, med en poäng på 99%. Den gröna ringen har koordinaterna X:109, Y:186, W:98, H:92 och en poäng på 99 %. Den röda ringen är märkt X:259, Y:187, B:89, H:91, med en poäng på 99 %. Varje objekt är konturerat i vitt, vilket indikerar spårningsnoggrannhet.

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.

 

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

Last Updated: