Visie#
Invoering#
De VEX AIR-drone heeft twee vision-sensoren die AprilTag-ID’s detecteren en volgen. Hierdoor kan de drone zijn omgeving analyseren, objecten volgen en reageren op basis van de gedetecteerde visuele gegevens.
Hieronder vindt u een lijst met alle beschikbare blokken:
Acties — Bedien de beeldfeed en leg objectgegevens vast.
get object data — Legt gegevens vast voor AprilTag ID’s.
Instellingen — Pas aan welke gedetecteerde objecten worden geopend.
set Vision object item — Selecteert een specifiek object uit de lijst met gedetecteerde objecten.
Waarden — Haal de aanwezigheid, classificatie en eigenschappen van objecten op.
Visieobject bestaat — Rapporteert of een object is gedetecteerd.
Vision object is AprilTag ID — Controleert of een gedetecteerde AprilTag ID overeenkomt met een specifieke ID.
Aantal gedetecteerde objecten — Geeft het aantal gedetecteerde objecten weer.
Eigenschap van het Vision-object — Haalt details op zoals:
centerX & centerY — Coördinaten van de middenpositie in het gezichtsveld van de sensor.
richting — De hoek van het object ten opzichte van de voorste Vision Sensor of het aantal graden dat de drone nodig heeft om het object te volgen.
rotatie — Oriëntatie van het object.
originX & originY — Positiecoördinaten van de linkerbovenhoek in het gezichtsveld van de sensor.
id — Identificatienummer van een AprilTag ID.
Acties#
objectgegevens ophalen#
Het stackblok get object data filtert gegevens uit het frame van de Vision Sensor. De Vision Sensors kunnen AprilTag ID’s detecteren.
De dataset bevat objecten die van groot naar klein zijn gesorteerd op breedte, beginnend bij index 0. De eigenschappen van elk object kunnen worden opgevraagd via het blok Vision object property. Er wordt een lege dataset gerapporteerd als er geen overeenkomende objecten worden gevonden.
haal [alle AprilTags v] gegevens op van Vision [vooruit v] camera
Parameter |
Beschrijving |
|---|---|
handtekening |
Filtert de dataset zodat alleen gegevens met de opgegeven signatuur worden weergegeven. De beschikbare signatuur is alle AprilTags. |
camera |
De beeldsensor kan gegevens ophalen, zowel voorwaarts als neerwaarts. |
Voorbeeld
wanneer gestart
[Climb upward when an AprilTag ID is detected.]
stijg op naar [300] [mm v] ▶
altijd
haal [alle AprilTags v] gegevens op van Vision [vooruit v] camera
als <Vision object bestaat?> dan
klim [omhoog v] voor [200] [mm v] ▶
Instellingen#
stel het Vision-objectitem in#
Het stackblok set Vision object item bepaalt welk item in de dataset gebruikt moet worden.
stel Vision object-item in op [1]
Parameters |
Beschrijving |
|---|---|
item |
Het nummer van het item in de dataset dat gebruikt moet worden. |
Voorbeeld
wanneer gestart
[Display the smallest-appearing AprilTag ID.]
altijd
haal [alle AprilTags v] gegevens op van Vision [vooruit v] camera
wis console
als <Vision object bestaat?> dan
stel Vision object-item in op (Vision object aantal)
druk (Vision object [id v]) af op console ▶
Waarden#
Het visieobject bestaat#
Het Booleaanse blok Vision object exists geeft aan of de opgegeven Vision Sensor momenteel objecten detecteert.
Waar — De opgegeven beeldsensor detecteert een object.
Onjuist — De opgegeven beeldsensor detecteert geen object.
<Vision object bestaat?>
Parameter |
Beschrijving |
|---|---|
Dit blok heeft geen parameters. |
Voorbeeld
wanneer gestart
[Climb upward when an AprilTag ID is detected.]
stijg op naar [300] [mm v] ▶
altijd
haal [alle AprilTags v] gegevens op van Vision [vooruit v] camera
als <Vision object bestaat?> dan
klim [omhoog v] voor [200] [mm v] ▶
Het Vision-object is AprilTag ID#
Het Booleaanse blok Vision object is AprilTag ID geeft aan of de AprilTag ID een specifiek ID-nummer is.
Klopt — De AprilTag ID is het nummer.
Onjuist — De AprilTag ID is niet het nummer.
<Vision object is AprilTag ID [1]>
Parameters |
Beschrijving |
|---|---|
AprilTag ID-nummer |
Het getal dat vergeleken moet worden met het gedetecteerde AprilTag ID-nummer (van 0 tot 37). |
Voorbeeld
wanneer gestart
[Display when the target AprilTag ID is detected.]
altijd
haal [alle AprilTags v] gegevens op van Vision [vooruit v] camera
wis console
als <Vision object bestaat?> dan
als <Vision object is AprilTag ID [21]> dan
druk [Target found!] af op console ▶
einde
Aantal objecten in het gezichtsveld#
Het Vision object count reporterblok rapporteert het aantal gedetecteerde objecten in de dataset als een geheel getal.
(Vision object aantal)
Parameters |
Beschrijving |
|---|---|
Dit blok heeft geen parameters. |
Voorbeeld
wanneer gestart
[Display how many AprilTag IDs are detected.]
altijd
haal [alle AprilTags v] gegevens op van Vision [vooruit v] camera
wis console
druk (Vision object aantal) af op console ▶
wacht [0.2] seconden
Eigenschap van het Vision-object#
Er zijn meerdere eigenschappen die bij elk object zijn inbegrepen (zie hieronder) en die worden opgeslagen nadat het get object data blok is gebruikt.
(Vision object [breedte v])
Alle eigenschapswaarden, behalve id, beschrijven de positie, grootte, oriëntatie of richting van het gedetecteerde object op het moment dat het blok get object data werd gebruikt. Deze waarden worden gemeten in pixels of graden. Elke Vision Sensor heeft een andere resolutie:
Vooraanzicht: 640 x 480 pixels
Naar beneden gericht: 640 x 400 pixels
Parameter |
Beschrijving |
|---|---|
eigendom |
Welke eigenschap van het gedetecteerde object te gebruiken: |
breedte#
De eigenschap width geeft de breedte van het gedetecteerde object in pixels weer als een geheel getal van 1 tot 640.
(Vision object [breedte v])
Voorbeeld
wanneer gestart
[Show if the AprilTag ID appears large or small.]
altijd
haal [alle AprilTags v] gegevens op van Vision [vooruit v] camera
wis console
als <Vision object bestaat?> dan
als <(Vision object [breedte v]) [math_greater_than v] [100]> dan
druk [Large] af op console ▶
anders
druk [Small] af op console ▶
einde
einde
wacht [0.2] seconden
hoogte#
De eigenschap hoogte geeft de hoogte van het gedetecteerde object in pixels weer als een geheel getal van 1 tot 480.
(Vision object [hoogte v])
Voorbeeld
wanneer gestart
[Show if the AprilTag ID appears large or small.]
altijd
haal [alle AprilTags v] gegevens op van Vision [vooruit v] camera
wis console
als <Vision object bestaat?> dan
als <(Vision object [hoogte v]) [math_greater_than v] [100]> dan
druk [Large] af op console ▶
anders
druk [Small] af op console ▶
einde
einde
wacht [0.2] seconden
centrumX#
De eigenschap centerX geeft de x-coördinaat van het middelpunt van het gedetecteerde object in pixels weer als een geheel getal van 1 tot 640.
(Vision object [centerX v])
Voorbeeld
wanneer gestart
[Show if an AprilTag ID is to the left or the right of the camera.]
altijd
haal [alle AprilTags v] gegevens op van Vision [vooruit v] camera
wis console
als <Vision object bestaat?> dan
als <(Vision object [centerX v]) [math_less_than v] [320]> dan
druk [To the left] af op console ▶
anders
druk [To the right] af op console ▶
einde
einde
wacht [0.2] seconden
centrumY#
De eigenschap centerY geeft de y-coördinaat van het middelpunt van het gedetecteerde object in pixels weer als een geheel getal van 1 tot 480.
(Vision object [centerY v])
Voorbeeld
wanneer gestart
[Take off and attempt to align the drone with an AprilTag ID on the wall.]
[Adjust the takeoff height to observe different results.]
stijg op naar [800] [mm v] ▶
haal [alle AprilTags v] gegevens op van Vision [vooruit v] camera
als <Vision object bestaat?> dan
als <(Vision object [centerY v]) [math_less_than v] [240]> dan
druk [Below the target!] af op console ▶
anders
druk [Above the target!] af op console ▶
einde
anders
druk [No target found!] af op console ▶
handelswijze#
De eigenschap richting geeft een hoek weer die de positie van een object ten opzichte van de drone aangeeft. Het gedrag is afhankelijk van de gebruikte beeldsensor.
Een waarde van 0° geeft aan dat het middelpunt van het object en de sensor op één lijn liggen. Positieve waarden betekenen dat het object zich rechts bevindt, terwijl negatieve waarden betekenen dat het object zich links bevindt.
Sensor |
Retourneert |
|---|---|
Omlaag |
Het aantal graden waarmee de voorkant van de drone moet draaien om zich uit te lijnen met het midden van het object, van –180º tot 180º. |
Vooruit |
De hoek waarin het object zich links of rechts van het midden van de Vision Sensor bevindt, varieert van –180º tot 180º. |
(Vision object [koers v])
Voorbeelden
wanneer gestart
[Align the front of the drone to an AprilTag ID.]
stel draaisnelheid in op (15)%
stijg op naar [500] [mm v] ▶
altijd
haal [alle AprilTags v] gegevens op van Vision [naar beneden v] camera
als <Vision object bestaat?> dan
als <[-20] [math_less_than v] (Vision object [koers v]) [math_less_than v] [20]> dan
[Hover once sensor is centered on the AprilTag ID.]
zweef
speel geluid [succes v] ▶
anders als <(Vision object [koers v]) [math_less_than v] [-21]> dan
draai [links v]
anders
draai [rechts v]
rotatie#
De eigenschap rotatie geeft de oriëntatie van de gedetecteerde AprilTag ID weer als een geheel getal in graden van 1 tot 359.
(Vision object [rotatie v])
Voorbeeld
wanneer gestart
[Turn left or right based on the rotation of an AprilTag ID.]
stijg op naar [1000] [mm v] ▶
altijd
haal [alle AprilTags v] gegevens op van Vision [vooruit v] camera
als <Vision object bestaat?> dan
als <[240] [math_less_than v] (Vision object [rotatie v]) [math_less_than v] [300]> dan
draai [links v] voor [90] graden ▶
anders als <[60] [math_less_than v] (Vision object [rotatie v]) [math_less_than v] [120]> dan
draai [rechts v] voor [90] graden ▶
anders
zweef
oorsprongX#
De eigenschap originX geeft de x-coördinaat van de linkerbovenhoek van het begrenzingskader van het gedetecteerde object weer in pixels als een geheel getal van 1 tot 640.
(Vision object [originX v])
Voorbeeld
wanneer gestart
[Draw lines to the AprilTag ID origin from all corners.]
altijd
wis scherm
get [all AprilTags v] data from vision [forward v] camera
als <Vision object bestaat?> dan
teken lijn [0] [0] (Vision object [originX v]) (Vision object [originY v]) op scherm
teken lijn [0] [480] (Vision object [originX v]) (Vision object [originY v]) op scherm
teken lijn [640] [0] (Vision object [originX v]) (Vision object [originY v]) op scherm
teken lijn [640] [480] (Vision object [originX v]) (Vision object [originY v]) op scherm
einde
wacht [0.2] seconden
oorsprong#
De eigenschap originY geeft de y-coördinaat van de linkerbovenhoek van het begrenzingskader van het gedetecteerde object weer in pixels als een geheel getal van 1 tot 480.
(Vision object [originY v])
Voorbeeld
wanneer gestart
[Draw lines to the AprilTag ID origin from all corners.]
altijd
wis scherm
get [all AprilTags v] data from vision [forward v] camera
als <Vision object bestaat?> dan
teken lijn [0] [0] (Vision object [originX v]) (Vision object [originY v]) op scherm
teken lijn [0] [480] (Vision object [originX v]) (Vision object [originY v]) op scherm
teken lijn [640] [0] (Vision object [originX v]) (Vision object [originY v]) op scherm
teken lijn [640] [480] (Vision object [originX v]) (Vision object [originY v]) op scherm
einde
wacht [0.2] seconden
id#
De eigenschap id geeft het identificatienummer van de gedetecteerde AprilTag ID weer als een geheel getal.
(Vision object [id v])
Voorbeeld
wanneer gestart
[Display the detected AprilTag ID.]
altijd
haal [alle AprilTags v] gegevens op van Vision [vooruit v] camera
wis console
als <Vision object bestaat?> dan
druk (Vision object [id v]) af op console ▶
einde
wacht [0.2] seconden