AI-vision#

Introduktion#

VEX AIM-kodningsrobotens AI-visionssensor detekterar och spårar objekt, färger och AprilTag-ID:n. Detta gör att roboten kan analysera sin omgivning, följa objekt och reagera baserat på detekterad visuell data.

AI-visionssensorn har en upplösning på 320×240 pixlar. Origon (0, 0) är placerat i det övre vänstra hörnet, vilket placerar sensorns mittpunkt vid (160, 120), som visas i diagrammet nedan:

Ett diagram som visar upplösningen för AIM AI-visionssensorn, med koordinaten 0, 0 längst upp till vänster i diagrammet, 320, 0 längst upp till höger och 0, 240 längst ner till vänster, med 160, 120 exakt i mitten.

Nedan följer en lista över alla block:

Åtgärder — Styr AI Vision-flödet och samla in objektdata.

  • AI Vision-visare på skärmen — Aktiverar eller inaktiverar AI Vision-flödet i realtid på robotens skärm.

  • hämta objektdata — Samlar in data för en specifik signatur, till exempel en konfigurerad färg, ett förtränat objekt eller ett AprilTag-ID.

Inställningar — Justera vilka detekterade objekt som ska nås.

Värden — Returnerar objektets närvaro, klassificering och egenskaper.

Åtgärder#

AI Vision-visare på skärmen#

Blocket AI Vision-visning på skärmen aktiverar eller inaktiverar AI Vision-flödet i realtid på robotens skärm. När det är aktiverat visar skärmen sensordata i realtid, vilket förhindrar att andra bilder eller text visas. För att visa annat innehåll, använd det här blocket för att dölja flödet.

Visa eller dölj stackblocket för AI Vision-instrumentpanelen.#
AI Vision [visa v] visning på skärmen

Parametrar

Beskrivning

status

Styr visningen av dataflödet på robotens skärm: visa visar dataflödet, medan dölj tar bort dataflödet från skärmen.

Exempel

En stapel block som börjar med ett när-startat-block, följt av ett kommentarblock som läser Visa AI Vision-sensorns flöde i fem sekunder. Ett block för att visa AI Vision-instrumentpanelen visar flödet, sedan pausar ett vänteblock körningen i fem sekunder. Efter väntetiden tar ett block för att dölja AI Vision-instrumentpanelen bort flödet från vyn.#
när startad
[View the AI Vision Sensor's feed for five seconds.]
AI Vision [visa v] visning på skärmen
vänta [5] sekunder
AI Vision [dölj v] visning på skärmen

hämta objektdata#

Stackblocket get object data filtrerar data från AI Vision Sensor-ramen till en enda signatur – en sparad beskrivning av något som sensorn kan känna igen, till exempel ett förtränat objekt, ett AprilTag-ID eller en konfigurerad färg eller färgkod.

Färger och färgkoder måste först konfigureras i AI Vision Utility innan de kan användas med det här blocket.

Datasetet lagrar objekt sorterade från störst till minst efter bredd, med början vid index 0. Varje objekts egenskaper kan nås med hjälp av blocket AI Vision object property. En tom dataset rapporteras om inga matchande objekt upptäcks.

Blocket Hämta objektdatastacken.#
hämta [sportboll v]-data från AI Vision

Parameter

Beskrivning

signatur

Filtrerar datamängden för att endast inkludera data från den givna signaturen. Tillgängliga signaturer är:

  • sportboll
  • orange tunna
  • blå tunna
  • AIM-robot
  • AprilTag ID 0
  • AprilTag ID 1
  • AprilTag ID 2
  • AprilTag ID 3
  • AprilTag ID 4
  • all last - Sportbollar och alla tunnor
  • NAMN - En färg eller färgkod där NAMN är namnet som konfigurerats i AI Vision Utility

Exempel

En stapel block som börjar med ett när-startat-block, följt av ett kommentarblock som lyder Flytta framåt om en sportboll detekteras. Ett get object data*-block tar en bild av en sportboll. Ett if-block kontrollerar sedan om ett AI Vision-objekt finns. Om det är sant flyttar ett framåt-block roboten framåt med 10 millimeter.#
när startad
[Move forward if a sports ball is detected.]
för alltid
hämta [sportboll v]-data från AI Vision
om <AI Vision-objekt finns?> då
rör [framåt v] i [10] [mm v] ▶

Färgsignaturer#

En färgsignatur är en unik färg som AI-visionssensorn kan känna igen. Dessa signaturer gör det möjligt för sensorn att upptäcka och spåra objekt baserat på deras färg. När en färgsignatur har konfigurerats i AI Vision Utility kan sensorn identifiera objekt med den specifika färgen i sitt synfält.

Färgsignaturer används i blocket get object data för att bearbeta och detektera färgade objekt i realtid.

AI Vision Utility som visar en ansluten visionssensor som detekterar två färgade objekt. Vänster sida visar en live-kameraström med en blå ruta till vänster och en röd ruta till höger, var och en markerad med vita avgränsningsrutor. Svarta etiketter visar deras respektive namn, koordinater och dimensioner. Höger sida innehåller inställningar för färgsignatur, med skjutreglage för nyans och mättnadsområde för både den röda och blå rutan. Knappar för att lägga till färger, frysa video, kopiera och spara bilden finns längst ner, tillsammans med en stängningsknapp i det nedre högra hörnet.

Exempel

när startad
[Display if any objects matching the Red_Box signature is detected.]
för alltid
ställ markör på rad [1] kolumn [1] på skärmen
rensa rad [1] på skärmen
[Change the signature to any configured Color Signature.]
hämta [Red_Box v]-data från AI Vision
om <AI Vision-objekt finns?> då
skriv ut [Color signature detected!] på skärmen ▶

Färgkoder#

En färgkod är ett strukturerat mönster som består av 2 till 4 färgsignaturer arrangerade i en specifik ordning. När en färgkod har konfigurerats i AI Vision Utility kan sensorn känna igen fördefinierade färgmönster.

Färgkoder är särskilt användbara för att identifiera komplexa objekt, justera dem mot spelelement eller skapa unika markörer för autonom navigering.

AI Vision Utility-gränssnittet visar en ansluten visionssensor som detekterar två intilliggande objekt, en blå ruta till vänster och en röd ruta till höger, grupperade i en enda vit avgränsningsruta märkt BlueRed. Detekteringsinformationen inkluderar vinkel (A:11°), koordinater (X:143, Y:103), bredd (B:233) och höjd (H:108). På den högra panelen listas tre färgsignaturer: Red_Box, Blue_Box och BlueRed, med justerbara nyans- och mättnadsområden. BlueRed-signaturen kombinerar Blue_Box och Red_Box. Nedanför videoflödet finns knappar märkta Frys video, Kopiera bild, Spara bild och Stäng.

Exempel

när startad
[Display if any objects matching the BlueRed code is detected.]
för alltid
ställ markör på rad [1] kolumn [1] på skärmen
rensa rad [1] på skärmen
[Change the signature to any configured Color Code.]
hämta [BlueRed v]-data från AI Vision
om <AI Vision-objekt finns?> då
skriv ut [Color code detected!] på skärmen ▶

Inställningar#

ange AI Vision-objekt#

Stackblocket set AI Vision object item anger vilket objekt i datamängden som ska användas.

Objektstackblocket Set AI Vision-objektet.#
ställ in AI Vision-objektpost till (1)

Parametrar

Beskrivning

punkt

Numret på objektet i datasetet som ska användas.

Exempel

En stapel med block som börjar med ett “when started”-block, följt av ett kommentarblock som läser “Visa det största detekterade AprilTag-ID:t”. Inuti en forever-loop tar ett “get object data”-block en bild av AprilTag-ID:n. Ett “if”-block kontrollerar om ett AI Vision-objekt finns. Om värdet är sant tilldelar ett “set AI Vision object item”-block objektantalet till en variabel, och ett “print”-block visar tagg-ID:t för det detekterade objektet på skärmen.#
när startad
[Display the width of the smallest detected object.]
för alltid
hämta [allt gods v]-data från AI Vision
rensa rad [1] på skärmen
ställ markör på rad [1] kolumn [1] på skärmen
om <AI Vision-objekt finns?> då
ställ in AI Vision-objektpost till (antal AI Vision-objekt)
skriv ut (AI Vision-objekt [bredd v]) på skärmen ▶

Värden#

har objekt#

Det booleska blocket har objekt rapporterar om roboten för närvarande har ett detekterat objekt mot sin Kicker.

  • Sant — Roboten har objektet.

  • Falskt — Roboten har inte objektet.

<har [sportboll v]? :: custom-ai-vision>

Parameter

Beskrivning

objekt

Föremålet att detektera mot robotens spark:

  • sportboll
  • valfri tunna
  • orange tunna
  • blå tunna

Exempel

En stapel block som börjar med ett “när startat”-block, följt av ett kommentarblock som lyder “Kick when the robot has a Ball”. Inuti en evighetsloop kontrollerar ett “if”-block om roboten har en sportboll. Om det är sant exekveras ett “kick object block” med medelhög kraft.#
när startad
[Kick when the robot has a sports ball.]
för alltid
om <har [sportboll v]? :: custom-ai-vision> då
sparka objekt [medium v]

AI Vision-objekt finns#

Det booleska blocket AI Vision-objektet finns rapporterar om ett objekt har upptäckts i datamängden.

  • Sant — Datasetet innehåller ett detekterat objekt.

  • Falskt — Inga objekt upptäcktes.

AI Vision-objektet finns i ett booleskt block.#
<AI Vision-objekt finns?>

Parametrar

Beskrivning

Det här blocket har inga parametrar.

Exempel

En stapel block som börjar med ett när-startat-block, följt av ett kommentarblock som lyder Flytta framåt om en boll detekteras. Ett hämta-objektdatablock tar en bild av en sportboll. Ett if-block kontrollerar sedan om ett AI Vision-objekt finns. Om det är sant flyttar ett flytta framåt-block roboten framåt med 10 millimeter.#
när startad
[Move forward if a sports ball is detected.]
för alltid
hämta [sportboll v]-data från AI Vision
om <AI Vision-objekt finns?> då
rör [framåt v] i [10] [mm v] ▶

AI Vision-objektet är#

Det booleska blocket AI Vision-objektet är rapporterar om ett detekterat objekt matchar en specifik klassificering.

  • Sant — Objektet i datasetet är det specifika objektet.

  • Falskt — Objektet i datasetet är inte det specifika objektet.

AI Vision AI-klassificeringen är ett objektbooleskt block.#
<AI Vision-objekt är [sportboll v]?>

Parameter

Beskrivning

objekt

Vilket föremål ska man jämföra föremålet med:

  • sportboll
  • orange tunna
  • blå tunna
  • SIKTAD robot

Exempel

En stapel med block som börjar med ett “när startat”-block, följt av ett kommentarblock som läser “Visa om en sportboll detekteras”. Inom en evighetsloop tar ett “get object data”-block en bild med hjälp av AI-klassificeringar. Skärmen rensas och markören sätts till rad 1, kolumn 1. Ett “if”-block kontrollerar om ett AI Vision-objekt finns, och om det är sant verifierar ett annat “if”-block om klassificeringen är en sportboll. Om så är fallet visar ett “print block” “Boll detekterad!” på skärmen, följt av ett “vänteblock” som pausar i 0,5 sekunder innan processen upprepas.#
när startad
[Display if a sports ball is detected.]
för alltid
hämta [allt gods v]-data från AI Vision
rensa rad [1] på skärmen
ställ markör på rad [1] kolumn [1] på skärmen
om <AI Vision-objekt finns?> då
om <AI Vision-objekt är [sportboll v]?> då
skriv ut [Sports ball detected!] på skärmen ▶
vänta [0.5] sekunder

AI Vision-objektet är AprilTag-ID#

AI Vision-objektet är AprilTag ID Det booleska blocket rapporterar om ett detekterat AprilTag ID matchar ett specifikt ID.

  • Sant — AprilTag-ID:t är numret.

  • Falskt — AprilTag-ID:t är inte numret.

AI Vision upptäckte att AprilTag-ID:t är ett booleskt block.#
<AI Vision object is AprilTag ID [1] ?>

Parametrar

Beskrivning

AprilTag-ID

Numret som ska jämföras med det upptäckta AprilTag-ID-numret.

Antal AI Vision-objekt#

Rapportblocket AI Vision-objektantal rapporterar antalet detekterade objekt i datauppsättningen som ett heltal.

antal AI Vision-objekt

Parametrar

Beskrivning

Det här blocket har inga parametrar.

Exempel

när startad
[Display the amount of sports balls and barrels.]
för alltid
rensa rad [1] på skärmen
ställ markör på rad [1] kolumn [1] på skärmen
hämta [allt gods v]-data från AI Vision
om <AI Vision-objekt finns?> då
skriv ut (antal AI Vision-objekt) på skärmen ▶
avsluta
vänta [0.5] sekunder

AI Vision-objektets egenskap#

Det finns nio egenskaper som ingår i varje objekt (visas nedan) som lagras efter att blocket get object data har använts.

Rapporteringsblocket för AI Vision-objektets egenskap.#
AI Vision-objekt [bredd v]

Alla egenskapsvärden utom tagID beskriver det detekterade objektets position, storlek, orientering eller bäring vid det ögonblick då blocket get object data användes. Dessa värden mäts i pixlar eller grader, baserat på sensorns upplösning på 320 x 240 pixlar.

En blå cylinder med en orange rand är centrerad i ramen, omgiven av en svart avgränsningsram. X- och y-axlarna är märkta 0 till 320 från vänster till höger längs toppen, och 0 till 240 från topp till botten längs vänster sida.

Parameter

Beskrivning

egendom

Vilken egenskap för det detekterade objektet som ska användas:

bredd#

Egenskapen width rapporterar bredden på det detekterade objektet i pixlar som ett heltal från 1 till 320.

Obs! Pixelvärdena är relativa till sensorns koordinatsystem. Se diagrammet i inledningen som referens.

AI Vision-objektets egenskapsstackblock med dess parameter inställd på width.#
AI Vision-objekt [bredd v]

En blå trumma med en orange rand är centrerad i ramen, omgiven av en svart avgränsningsram. Två vertikala röda streckade linjer sträcker sig från ramens överkant ner till vänster och höger kant av avgränsningsramen. En dubbelhövdad svart pil mellan dessa linjer anger breddmåttet.

Exempel

när startad
[Move towards a blue barrel until its width is larger than 100 pixels.]
för alltid
hämta [blå tunna v]-data från AI Vision
om <AI Vision-objekt finns?> då
om <(AI Vision-objekt [bredd v]) [math_less_than v] [100]> då
rör [framåt v]
avsluta
annars
stoppa all rörelse

höjd#

Egenskapen höjd rapporterar höjden på det detekterade objektet i pixlar som ett heltal från 1 till 240.

Obs! Pixelvärdena är relativa till sensorns koordinatsystem. Se diagrammet i inledningen som referens.

AI Vision-objektets egenskapsstackblock med dess parameter inställd på höjd.#
AI Vision-objekt [höjd v]

En blå tunna med en orange rand är centrerad i ramen, omgiven av en svart avgränsningsram. Två horisontella röda streckade linjer sträcker sig från ramens vänstra sida till avgränsningsramens övre och nedre kanter. En dubbelhövdad svart pil mellan dessa linjer anger höjdmåttet.

Exempel

när startad
[Move towards a blue barrel until its height is larger than 100 pixels.]
för alltid
hämta [blå tunna v]-data från AI Vision
om <AI Vision-objekt finns?> då
om <(AI Vision-objekt [höjd v]) [math_less_than v] [100]> då
rör [framåt v]
avsluta
annars
stoppa all rörelse

centerX#

Egenskapen centerX rapporterar x-koordinaten för det detekterade objektets centrum i pixlar som ett heltal från 0 till 320.

Obs! Pixelvärdena är relativa till sensorns koordinatsystem. Se diagrammet i inledningen som referens.

AI Vision-objektets egenskapsstackblock med dess parameter inställd på centerX.#
AI Vision-objekt [centerX v]

En blå trumma med en orange rand är centrerad i ramen, omgiven av en svart avgränsningsram. En vertikal röd streckad linje sträcker sig från ramens överkant ner till mitten av avgränsningsramen och indikerar X-koordinaten för mitten.

Exempel

när startad
[Turn slowly until a blue barrel is centered in front of the robot.]
ställ in svänghastighet till [30]%
sväng [höger v]
för alltid
hämta [blå tunna v]-data från AI Vision
om <AI Vision-objekt finns?> då
om <[140] [math_less_than v] (AI Vision-objekt [centerX v]) [math_less_than v] [180]> då
stoppa all rörelse

centerY#

Egenskapen centerY rapporterar y-koordinaten för det detekterade objektets centrum i pixlar som ett heltal från 0 till 240.

Obs! Pixelvärdena är relativa till sensorns koordinatsystem. Se diagrammet i inledningen som referens.

AI Vision-objektets egenskapsstackblock med dess parameter inställd på centerY.#
AI Vision-objekt [centerY v]

En blå trumma med en orange rand är centrerad i ramen, omgiven av en svart avgränsningsram. En horisontell röd streckad linje sträcker sig från ramens vänstra sida till mitten av avgränsningsramen och indikerar Y-koordinaten för mitten.

Exempel

när startad
[Move towards a blue barrel until its center y-coordinate is more than 140 pixels.]
för alltid
hämta [blå tunna v]-data från AI Vision
om <AI Vision-objekt finns?> då
om <(AI Vision-objekt [centerY v]) [math_less_than v] [140]> då
rör [framåt v]
avsluta
annars
stoppa all rörelse

ursprungX#

Egenskapen originX rapporterar x-koordinaten för det övre vänstra hörnet av det detekterade objektets avgränsningsram i pixlar som ett heltal från 0 till 320.

Obs! Pixelvärdena är relativa till sensorns koordinatsystem. Se diagrammet i inledningen som referens.

AI Vision-objektets egenskapsstackblock med dess parameter inställd på originX.#
AI Vision-objekt [originX v]

En blå trumma med en orange rand är centrerad i ramen, omgiven av en svart avgränsningsram. En vertikal röd streckad linje sträcker sig från ramens överkant till den vänstra kanten av avgränsningsramen och indikerar X-koordinaten för avgränsningsramens origo.

Exempel

när startad
[Display if an orange barrel is to the left or the right.]
för alltid
rensa rad [1] på skärmen
ställ markör på rad [1] kolumn [1] på skärmen
hämta [orange tunna v]-data från AI Vision
om <AI Vision-objekt finns?> då
om <(AI Vision-objekt [originX v]) [math_less_than v] [160]> då
skriv ut [To the left!] på skärmen ▶
annars
skriv ut [To the right!] på skärmen ▶
avsluta
vänta [0.5] sekunder

ursprungY#

Egenskapen originY rapporterar y-koordinaten för det övre vänstra hörnet av det detekterade objektets avgränsningsram i pixlar som ett heltal från 0 till 240.

Obs! Pixelvärdena är relativa till sensorns koordinatsystem. Se diagrammet i inledningen som referens.

AI Vision-objektets egenskapsstackblock med dess parameter inställd på originY.#
AI Vision-objekt [originY v]

En blå trumma med en orange rand är centrerad i ramen, omgiven av en svart avgränsningsram. En horisontell röd streckad linje sträcker sig från ramens vänstra sida till avgränsningsramens övre kant och indikerar Y-koordinaten för avgränsningsramens origo.

Exempel

när startad
[Display if an orange barrel is close or far from the robot.]
för alltid
rensa rad [1] på skärmen
ställ markör på rad [1] kolumn [1] på skärmen
hämta [orange tunna v]-data från AI Vision
om <AI Vision-objekt finns?> då
om <(AI Vision-objekt [originY v]) [math_less_than v] [80]> då
skriv ut [Far!] på skärmen ▶
annars
skriv ut [Close!] på skärmen ▶
avsluta
vänta [0.5] sekunder

rotation#

Egenskapen rotation rapporterar orienteringen för det detekterade AprilTag-ID:t eller färgkoden som ett heltal i grader från 0 till 359.

AI Vision-objektets egenskapsstackblock med dess parameter inställd på rotation.#
AI Vision-objekt [rotation v]

Ett kameragränssnitt visar ett vertikalt staplat objekt med en blå övre halva och en röd nedre halva, centrerat i bilden. En etikett under objektet lyder Röd_Blå A:270° CX:185 CY:81 B:93 H:150, vilket anger objektets namn, rotationsvinkel, X- och Y-koordinater i mitten, bredd och höjd. Rutnät och numeriska axlar markerar bildens dimensioner, där X sträcker sig från 0 till 320 och Y från 0 till 240.

Exempel

när startad
[Slide left or right depending on how the Color Code is rotated.]
för alltid
hämta [Red_Blue v]-data från AI Vision
om <AI Vision-objekt finns?> då
om <[50] [math_less_than v] (AI Vision-objekt [rotation v]) [math_less_than v] [100]> då
rör [höger v]
annars om <[270] [math_less_than v] (AI Vision-objekt [rotation v]) [math_less_than v] [330]> då
rör [vänster v]
annars
stoppa all rörelse
avsluta
annars
stoppa all rörelse

lager#

Egenskapen bearing rapporterar hur långt ett objekt är till vänster eller höger om AI-visionssensorns vy, uttryckt i grader. Värdet 0 betyder att det är centrerat, positiva värden betyder att objektet är till höger och negativa värden betyder att objektet är till vänster.

En VEX AIM-kodningsrobot på en plan, med en sportboll diagonalt framåt och åt vänster. En vinkel är ritad mellan robotens mitt och sportbollen, och är märkt -30 grader. En VEX AIM-kodningsrobot på en plan, med en sportboll diagonalt framåt och till höger. En vinkel är ritad mellan robotens mitt och sportbollen, och är märkt 30 grader.
när startad
[Keep the blue barrel directly in front of the robot.]
ställ in svänghastighet till [40]%
för alltid
hämta [blå tunna v]-data från AI Vision
om <AI Vision-objekt finns?> då
om <(AI Vision-objekt [bäring v]) [math_greater_than v] [5]> då
sväng [höger v]
annars om <(AI Vision-objekt [bäring v]) [math_less_than v] [-5]> då
sväng [vänster v]
annars
stoppa all rörelse

tagg-ID#

Egenskapen tagID rapporterar identifieringsnumret för det upptäckta AprilTag-ID:t som ett heltal.

AI Vision-objektets egenskapsstackblock med dess parameter inställd på tagID.#
AI Vision-objekt [tagID v]

Exempel

när startad
[Move forward when AprilTag ID 0 is detected.]
för alltid
hämta [AprilTag ID 0 v]-data från AI Vision
om <AI Vision-objekt finns?> då
rör [framåt v]
avsluta
stoppa all rörelse