Coderen met de AI Vision Sensor in VEXcode V5 C++

Zorg ervoor dat u kleurhandtekeningen en kleurcodes hebt geconfigureerd met uw AI Vision Sensor, zodat u ze met uw blokken kunt gebruiken. Voor meer informatie over hoe u deze kunt configureren, kunt u de onderstaande artikelen lezen:

De AI Vision Sensor kan ook AI-classificaties en AprilTags detecteren. Voor meer informatie over het inschakelen van deze detectiemodi klikt u hier:

Ga naar de API-site voor meer informatie over deze afzonderlijke opdrachten en hoe u ze in VEXcode kunt gebruiken.


Verkrijg visuele gegevens met de AI Vision Sensor

Elke AI Vision Sensor-opdracht begint met de naam van de geconfigureerde AI Vision Sensor. Voor alle voorbeelden in dit artikel is de naam van de gebruikte AI Vision Sensor AIVision.

neemSnapshot

Met de methode takeSnapshot wordt een foto gemaakt van wat de AI Vision Sensor op dat moment ziet en worden er gegevens uit die momentopname gehaald. Deze gegevens kunnen vervolgens in een project worden gebruikt. Wanneer u een momentopname maakt, moet u opgeven van welk type object de AI Vision Sensor gegevens moet verzamelen:

  • Eenkleurenhandtekening ofkleurencode
    • Deze visuele handtekeningen beginnen met de naam van de AI Vision Sensor, een dubbele onderstrepingsteken en vervolgens de naam van de visuele handtekening, bijvoorbeeld: AIVision1__Blue.
  • AI-classificaties - aivision::ALL_AIOBJS
  • aprilTags- aivision::ALLE_TAGS

Wanneer u een momentopname maakt, wordt er een matrix gemaakt van alle gedetecteerde objecten die u hebt opgegeven. Als u bijvoorbeeld een 'blauwe' kleur met een kleursignatuurwilt detecteren en de AI Vision Sensor detecteert 3 verschillende blauwe objecten, dan worden de gegevens van alle drie in de matrix geplaatst.

In dit voorbeeld wordt een momentopname gemaakt van de "Blauwe" Kleursignatuurvan de AI Vision Sensor met de naam AIVision1. Het geeft het aantal objecten weer dat in de matrix is gedetecteerd en maakt elke 0,5 seconde een nieuwe momentopname.

while (true) {
// Maak een momentopname van alle Blue Color-objecten.
AIVision.takeSnapshot(AIVision1__Blue);

// Controleer of er een object is gedetecteerd in de momentopname voordat er gegevens worden opgehaald.
if (AIVision.objectCount > 0) {

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

objecten

Elk object in een momentopname heeft verschillende eigenschappen die gebruikt kunnen worden om informatie over dat object te rapporteren. Met de objectsmethode krijgt u toegang tot deze eigenschappen.

De beschikbare eigenschappen zijn als volgt:

  • id
  • centerX en centerY
  • oorsprongX en oorsprongY
  • breedte
  • hoogte
  • hoek
  • bestaat
  • score

Om toegang te krijgen tot de eigenschap van een object, gebruikt u de naam van de AI Vision Sensor, gevolgd door de objectmethode en ten slotte de index van het object.

De objectindex geeft aan welke specifieke eigenschap van een object u wilt ophalen. Nadat er een momentopname is gemaakt, sorteert de AI Vision Sensor de objecten automatisch op grootte. Het grootste object krijgt index 0 toegewezen, terwijl kleinere objecten hogere indexnummers krijgen.

Als u bijvoorbeeld de breedte van het grootste object aanroept, is dat AIVision1.objects[0].width.

id

De eigenschap id is alleen beschikbaar voor aprilTags en AI-classificaties.

Drie vierkante identificatiemarkeringen met de ID's 0, 9 en 3, elk met bijbehorende coördinaten en groottemetingen weergegeven in witte tekst. ID 0 staat links, ID 9 staat rechts en ID 3 staat onderaan in het midden. Elke markering heeft een uniek zwart-witpatroon in een vierkant.

Voor eenAprilTagvertegenwoordigt de eigenschap id het gedetecteerdeAprilTag(s) ID-nummer.

Het identificeren van specifieke AprilTags maakt selectieve navigatie mogelijk. U kunt uw robot programmeren om naar bepaalde tags te rijden en andere te negeren. Zo kunt u de tags gebruiken als wegwijzers voor automatische navigatie.

Op de afbeelding zijn twee ballen en twee ringen te zien, met labels die hun positie, grootte en score aangeven. De rode bal staat links, de blauwe bal staat rechts, de groene ring staat linksonder en de rode ring staat rechtsonder. Elk object wordt omlijnd met een wit kader en details zoals X- en Y-coördinaten, breedte, hoogte en een score van 99% worden in witte tekst weergegeven.

VoorAI-classificatiesvertegenwoordigt de eigenschap id het specifieke type gedetecteerde AI-classificatie.

Door specifieke AI-classificatieste identificeren, kan de robot zich alleen op specifieke objecten concentreren, zoals bijvoorbeeld alleen naar een rode Buckyball willen navigeren, niet naar een blauwe.

Ga naar deze artikelen voor meer informatie over aprilTags en AI-classificaties en hoe u de detectie ervan in de AI Vision Utility kunt inschakelen.

centerX en centerY

Dit zijn de middelpuntcoördinaten van het gedetecteerde object in pixels.

Een blauwe Buckyball wordt gevolgd door een computer vision-systeem. Het object wordt omlijnd door een wit vierkant. Binnen de omlijning bevindt zich een kleiner rood vierkant met een wit kruis in het midden. In de linkerbovenhoek van de afbeelding staat een label dat aangeeft dat het object blauw is, met coördinaten X:176, Y:117 en afmetingen B:80, H:78.

CenterX- en CenterY-coördinaten helpen bij navigatie en positionering. De AI Vision Sensor heeft een resolutie van 320 x 240 pixels.

Twee blauwe kubusvormige objecten gevolgd door een visueel systeem. Het bovenste object is gemarkeerd met de coördinaten X:215, Y:70 en de afmetingen B:73, H:84, met een witte omtrek en een wit kruis in het midden. Het onderste object is gemarkeerd met de coördinaten X:188, Y:184 en de afmetingen B:144, H:113, ook aangegeven met een witte rand en een wit kruis in het midden.

Zoals u ziet, heeft een object dat zich dichter bij de AI Vision Sensor bevindt, een lagere CenterY-coördinaat dan een object dat zich verder weg bevindt.

In dit voorbeeld draait de robot naar rechts, omdat het middelpunt van het gezichtsveld van de AI Vision Sensor (160, 120) is, totdat de centerX-coördinaat van een gedetecteerd object groter is dan 150 pixels, maar kleiner dan 170 pixels.

while (true) {
  // Krijg een momentopname van alle Blue Color-objecten.
  AIVision.takeSnapshot(AIVision__Blue);

  // Controleer of er een object is gedetecteerd in de momentopname voordat de gegevens worden opgehaald.
  als (AIVision.objectCount > 0) {

    als (AIVision.objects[0].centerX > 150.0 && 170.0 > AIVision.objects[0].centerX) {
      Aandrijving.draai(rechts);
    } anders {
      Aandrijving.stop();
    }
  }
  wacht(5, msec);
}

oorsprongX en oorsprongY

OriginX en OriginY zijn de coördinaten in de linkerbovenhoek van het gedetecteerde object in pixels.

Een blauwe Buckyball wordt gevolgd door een visiesysteem. Het object wordt omgeven door een witte omtrek, met in het midden een wit kruis. Het label linksboven geeft de kleur van het object aan in het blauw, samen met de coördinaten X:176, Y:117 en de afmetingen B:80, H:78. Een klein rood vierkantje markeert de linkerbovenhoek van het object.

OriginX- en OriginY-coördinaten helpen bij navigatie en positionering. Door deze coördinaat te combineren met de breedte en hoogte van het object, kunt u de grootte van de omsluitende doos van het object bepalen. Dit kan helpen bij het volgen van bewegende objecten of bij het navigeren tussen objecten.

breedte en hoogte

Dit is de breedte of hoogte van het gedetecteerde object in pixels.

Op de afbeelding is een blauwe Buckyball te zien met een witte, vierkante omtrek die hem volgt. In de linkerbovenhoek staat een label dat aangeeft dat het een blauw object is, met coördinaten X:176, Y:117 en afmetingen B:80, H:78. Rode pijlen markeren de breedte en hoogte van het object.

De breedte- en hoogtematen helpen bij het identificeren van verschillende objecten. Een Buckyball is bijvoorbeeld hoger dan een Ring.

Twee blauwe kubusvormige objecten worden gevolgd door een visueel herkenningssysteem. De bovenste kubus heeft een witte omtrek met een label dat de positie aangeeft: X:215, Y:70 en de afmetingen B:73, H:84. De onderste kubus heeft een vergelijkbare witte omtrek met op het label de volgende afmetingen: X:188, Y:184 en B:144, H:113. Elke kubus heeft een wit kruis in het midden, wat waarschijnlijk het brandpunt voor het volgen aangeeft. De labels markeren de metingen en trackinggegevens voor elk object.

De breedte en hoogte geven ook de afstand van een object tot de AI Vision Sensor aan. Kleinere metingen betekenen meestal dat het object verder weg is, terwijl grotere metingen aangeven dat het dichterbij is.

In dit voorbeeld wordt de breedte van het object gebruikt voor navigatie. De robot nadert het object totdat de breedte een bepaalde grootte heeft bereikt, waarna hij stopt.

while (true) {
  // Krijg een momentopname van alle Blue-objecten.
  AIVision.takeSnapshot(AIVision1__Blue);

  // Controleer of er een object is gedetecteerd in de momentopname voordat de gegevens worden opgehaald.
  als (AIVision.objectCount > 0) {

    als (AIVision.objects[0].breedte < 250,0) {
      Aandrijving.drive(vooruit);
    } anders {
      Aandrijving.stop();
    }
  }
  wacht(5, msec);
}

hoek

Een roterende gif met rode en groene blokken. Wanneer de blokken perfect horizontaal van rood naar groen worden geplaatst, worden ze weergegeven als 0 graden. Als het rode blok verticaal op het groene blok ligt, staat de hoek 90 graden. Als de blokken horizontaal van groen naar rood lopen, is de hoek 180 graden. Als het groene blok verticaal op het rode blok ligt, is de hoek 20 graden.

De eigenschap hoek is alleen beschikbaar voorkleurcodes enAprilTags,

Dit geeft aan of de gedetecteerde kleurcodeof AprilTag anders is georiënteerd.

Een stapel van twee kubussen, één groen aan de bovenkant en één blauw aan de onderkant, wordt gevolgd door een visueel systeem. Beide kubussen worden omgeven door een witte omtrek, met een wit kruis in het midden van de groene kubus. Het label onder aan de afbeelding geeft Groen_Blauw A:87° weer, wat de gedetecteerde kleuren en een hoekmeting aangeeft. Daaronder zijn de coördinaten gerangschikt als X:117, Y:186, met afmetingen B:137, H:172. Deze geven de positie en grootte van de gestapelde kubussen in het frame weer.

U kunt zien of de robot anders is georiënteerd ten opzichte van dekleurcode ofAprilTag en op basis daarvan navigatiebeslissingen nemen.

Twee kubussen, één groene en één blauwe, naast elkaar geplaatst en gevolgd door een visueel systeem. Beide kubussen zijn omgeven door een witte omtrek, met in het midden een wit kruis. Het label linksboven geeft Groen_Blauw A:0° aan en verwijst naar de gedetecteerde kleuren en een hoekmeting. Daaronder worden de coördinaten weergegeven als X:150, Y:102, met afmetingen B:179, H:109. Deze geven de positie en grootte van de kubussen binnen het frame weer.

Als bijvoorbeeld eenkleurcode niet onder de juiste hoek wordt gedetecteerd, kan het zijn dat het object dat het vertegenwoordigt, niet goed door de robot kan worden opgepakt.

score

De eigenschap score wordt gebruikt bij het detecteren vanAI-classificaties met de AI Vision Sensor.

De afbeelding toont vier objecten die door een visueel systeem worden gevolgd: twee ballen en twee ringen. De rode bal is gemarkeerd met de coördinaten X:122, Y:84, B:67, H:66 en een score van 99%. De blauwe bal heeft X:228, Y:86, B:70, H:68, met een score van 99%. De groene ring heeft de coördinaten X:109, Y:186, B:98, H:92 en een score van 99%. De rode ring is gelabeld als X:259, Y:187, B:89, H:91, met een score van 99%. Elk object is met een witte rand omlijnd, wat de nauwkeurigheid van de tracking aangeeft.

De betrouwbaarheidsscore geeft aan hoe zeker de AI Vision Sensor is van de detectie. In deze afbeelding is 99% zekerheid aanwezig dat de AI-classificaties van deze vier objecten worden geïdentificeerd. Met deze score kunt u ervoor zorgen dat uw robot zich alleen richt op detecties die zeer betrouwbaar zijn.

bestaat

De eigenschap bestaat wordt gebruikt om te detecteren of een opgegeven Visuele handtekening is gedetecteerd in de laatst genomen momentopname.

Hiermee kunt u controleren of er gedetecteerde objecten zijn gedetecteerd in de vorige momentopname. Deze eigenschap retourneert True als een object bestaat en False als het object niet bestaat.


objectAantal

De objectCount-methode retourneert het aantal gedetecteerde objecten in de laatste momentopname.

De interface van AI Vision Utility met twee blauwe kubussen aan de linkerkant, elk gemarkeerd met hun X- en Y-coördinaten en afmetingen. Het systeem is verbonden en AprilTags is ingeschakeld, terwijl AI-classificatie is uitgeschakeld. Rechts worden de instellingen voor de blauwe kleur weergegeven met instelbare tinten en verzadigingsbereiken, respectievelijk ingesteld op 22 en 0,34. Er is een optie om kleur toe te voegen of in te stellen en video te bevriezen. De firmware is up-to-date en draait op versie 1.0.0.b16. Onderaan is een knop om te sluiten beschikbaar.

In dit voorbeeld zijn twee objecten gedetecteerd met de kleursignatuur, "Blauw". Ze worden beide in de array geplaatst wanneer de takeSnapshot-methode wordt gebruikt.

Dit codefragment zorgt ervoor dat de EXP Brain voortdurend wordt bijgewerkt met het aantal gedetecteerde objecten. Op basis van het gegeven voorbeeld wordt herhaaldelijk de waarde 2 verzonden, wat aangeeft dat er twee objecten zijn gedetecteerd.

while (true) {
// Maak een momentopname van alle Blue-objecten.
AIVision.takeSnapshot(AIVision__Blue);

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

// Controleer of er een object is gedetecteerd in de momentopname voordat de gegevens worden opgehaald.
if (AIVision.objectCount > 0) {
Brain.Screen.print(AIVision1.objectCount);
}
wait(5, msec);
}

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

Last Updated: