Coderen met de AI Vision Sensor in VEXcode EXP 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 gaat u hierheen:

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


Visuele gegevens verkrijgen 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.

TakeSnapshot

Met de methode takeSnapshot wordt een foto gemaakt van wat de AI Vision Sensor op dat moment ziet. Vervolgens worden er gegevens uit die momentopname gehaald die vervolgens in een project kunnen 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::ALL_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 signatuur wilt 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) {
// Krijg een momentopname van alle Blue Color-objecten.
AIVision.takeSnapshot(AIVision1__Blue);

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

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

objecten

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

De beschikbare eigenschappen zijn als volgt:

  • id
  • centerX en centerY
  • originX en originY
  • 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. Aan het grootste object wordt index 0 toegekend, 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 AprilTags worden gevolgd door de AI Vision Utility. Elke tag wordt geïdentificeerd, gelokaliseerd en omlijnd, waardoor wordt aangegeven hoe het systeem de tag volgt. De AprilTag-ID's in dit voorbeeld zijn 0, 3 en 9.

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 bewegen en andere te negeren. Zo kunt u de tags gebruiken als wegwijzers voor geautomatiseerde navigatie.

Vier objecten worden door het hulpprogramma AI Vision gevolgd: twee BuckyBalls en twee Rings. Elk object wordt geïdentificeerd, gelokaliseerd en omlijnd, waardoor duidelijk wordt welke route het systeem volgt. Het hulpprogramma onthoudt de ID van het object. In dit voorbeeld is er een rode bal, een blauwe bal, een groene ring en een rode ring.

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. Hij wil bijvoorbeeld alleen naar een rode Buckyball navigeren en 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.

Er wordt getoond hoe de AI Vision Sensor een Blue Buckyball volgt. De Buckyball is voorzien van een trackingrechthoek en het label hierboven laat zien dat de X-positie 176 en de Y-positie 117 is. Het midden van de trackingrechthoek is gemarkeerd om aan te geven dat de positie vanuit het midden wordt gemeten.

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

De AI Vision Sensor volgt twee blauwe kubussen. De Cubes zijn voorzien van tracking-rechthoeken eromheen, en één daarvan bevindt zich veel dichter bij de camera. Hoe dichterbij, hoe hoger de Y-positie: 184. Hoe verder weg, hoe hoger de Y-positie: 70.

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

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.

Er wordt getoond hoe de AI Vision Sensor een Blue Buckyball volgt. De Buckyball is voorzien van een trackingrechthoek en het label hierboven laat zien dat de X-positie 176 en de Y-positie 117 is. De linkerbovenhoek van de trackingrechthoek is gemarkeerd om aan te geven dat de oorspronkelijke positie wordt gemeten vanaf de linkerbovenhoek.

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 het omsluitende kader 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.

Er wordt getoond hoe de AI Vision Sensor een Blue Buckyball volgt. De Buckyball heeft een trackingrechthoek om zich heen en het label hierboven laat zien dat de breedte 80 pixels en de hoogte 78 pixels is. Rode pijlen markeren de trackingrechthoek om de breedte en hoogte ervan aan te geven.

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

De AI Vision Sensor volgt twee blauwe kubussen. De Cubes zijn voorzien van tracking-rechthoeken eromheen, en één daarvan bevindt zich veel dichter bij de camera. De dichtstbijzijnde heeft een breedte van 144 en een hoogte van 113, en de verdere heeft een breedte van 73 en een hoogte van 84.

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.aandrijving(vooruit);
    } anders {
      Aandrijving.stop();
    }
  }
  wacht(5, msec);
}

hoek

Animatie van een rood vierkant en een groen vierkant die samen worden gedraaid om de 360 graden van een hoekwaarde te demonstreren.

De eigenschap hoek is alleen beschikbaar voorkleurcodes enAprilTags.

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

De AI Vision-sensor volgt een kleurcode van groen en daarna blauw. De video toont een groene kubus die op een blauwe kubus is gestapeld. De hoekwaarde van de kleurcode is gemarkeerd en bedraagt 87 graden, wat aangeeft dat de kleurcode verticaal is georiënteerd.

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

De AI Vision-sensor volgt een kleurcode van groen en daarna blauw. De videofeed toont een Groene Kubus naast een Blauwe Kubus, maar ze staan in een vreemde hoek ten opzichte van de sensor. De hoekwaarde van de kleurcode is gemarkeerd en geeft 0 graden aan, wat aangeeft dat de hoek van de kleurcode niet kan worden gelezen.

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

score

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

Vier objecten worden door het hulpprogramma AI Vision gevolgd: twee BuckyBalls en twee Rings. Elk object wordt geïdentificeerd, gelokaliseerd en omlijnd, waardoor duidelijk wordt welke route het systeem volgt. Het hulpprogramma geeft ook de AI-classificatiescore van elk object weer. In dit voorbeeld is de score 99%.

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 objecten zijn gedetecteerd die ook in de vorige momentopname zijn gedetecteerd. 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 AI Vision Sensor volgt twee blauwe kubussen. De Cubes zijn voorzien van tracking-rechthoeken eromheen, en één daarvan bevindt zich veel dichter bij de camera.

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) {
// Krijg een momentopname van alle blauwe objecten.
AIVision.takeSnapshot(AIVision__Blue);

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

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

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

Last Updated: