Vision#
Einführung#
Die VEX AIR Drohne verfügt über zwei Bildsensoren, die AprilTag-IDs erkennen und verfolgen. Dadurch kann die Drohne ihre Umgebung analysieren, Objekten folgen und auf Basis der erfassten Bilddaten reagieren.
Nachfolgend finden Sie eine Liste aller verfügbaren Blöcke:
Aktionen – Bilddatenstrom steuern und Objektdaten erfassen.
get object data — Erfasst Daten für AprilTag-IDs.
Einstellungen – Legen Sie fest, auf welche erkannten Objekte zugegriffen wird.
set Vision object item — Wählt ein bestimmtes Objekt aus der Liste der erkannten Objekte aus.
Werte – Objektpräsenz, Klassifizierung und Eigenschaften abrufen.
Vision-Objekt vorhanden — Meldet, ob ein Objekt erkannt wurde.
Vision object is AprilTag ID — Prüft, ob eine erkannte AprilTag-ID mit einer bestimmten ID übereinstimmt.
Objektanzahl der visuellen Objekte — Gibt die Anzahl der erkannten Objekte an.
Vision-Objekt-Eigenschaft — Ruft Details wie die folgenden ab:
centerX & centerY — Koordinaten der Mittelpunktposition im Sichtfeld des Sensors.
Peilung — Winkel des Objekts relativ zum vorderen Sichtsensor oder die Gradzahl, die erforderlich ist, damit die Drohne auf das Objekt ausgerichtet ist.
Rotation — Orientierung des Objekts.
originX & originY — Koordinaten der Position der oberen linken Ecke im Sichtfeld des Sensors.
id — Identifikationsnummer einer AprilTag-ID.
Aktionen#
Objektdaten abrufen#
Der Objektdaten abrufen-Stackblock filtert Daten aus dem Frame des Vision-Sensors. Die Vision-Sensoren können AprilTag-IDs erkennen.
Der Datensatz speichert Objekte, sortiert nach ihrer Breite von groß nach klein, beginnend mit Index 0. Auf die Eigenschaften jedes Objekts kann über den Block Vision-Objekteigenschaft zugegriffen werden. Wird kein passendes Objekt gefunden, wird ein leerer Datensatz gemeldet.
hole [alle AprilTags v] Daten von Vision [vorwärts v] Kamera
Parameter |
Beschreibung |
|---|---|
Unterschrift |
Filtert den Datensatz so, dass er nur Daten mit der angegebenen Signatur enthält. Die verfügbare Signatur umfasst alle AprilTags. |
Kamera |
Der Bildsensor dient zum Abrufen von Daten, entweder nach vorne oder nach unten. |
Beispiel
wenn gestartet
[Climb upward when an AprilTag ID is detected.]
starte auf [300] [mm v] ▶
für immer
hole [alle AprilTags v] Daten von Vision [vorwärts v] Kamera
wenn <Vision Objekt vorhanden?> dann
steige [hoch v] für [200] [mm v] ▶
Einstellungen#
Vision-Objektelement festlegen#
Der set Vision object item-Stackblock legt fest, welches Element im Datensatz verwendet werden soll.
setze Vision Objektelement auf [1]
Parameter |
Beschreibung |
|---|---|
Artikel |
Die Nummer des zu verwendenden Elements im Datensatz. |
Beispiel
wenn gestartet
[Display the smallest-appearing AprilTag ID.]
für immer
hole [alle AprilTags v] Daten von Vision [vorwärts v] Kamera
Konsole löschen
wenn <Vision Objekt vorhanden?> dann
setze Vision Objektelement auf (Vision Objektanzahl)
drucke (Vision Objekt [id v]) in Konsole ▶
Werte#
Vision-Objekt existiert#
Der boolesche Block Vision-Objekt existiert gibt an, ob der angegebene Vision-Sensor aktuell Objekte erkennt.
Wahr — Der angegebene Bildsensor erkennt ein Objekt.
Falsch — Der angegebene Bildsensor erkennt kein Objekt.
<Vision Objekt vorhanden?>
Parameter |
Beschreibung |
|---|---|
Dieser Block hat keine Parameter. |
Beispiel
wenn gestartet
[Climb upward when an AprilTag ID is detected.]
starte auf [300] [mm v] ▶
für immer
hole [alle AprilTags v] Daten von Vision [vorwärts v] Kamera
wenn <Vision Objekt vorhanden?> dann
steige [hoch v] für [200] [mm v] ▶
Das Vision-Objekt ist die AprilTag-ID.#
Der boolesche Block Vision object is AprilTag ID gibt an, ob es sich bei der AprilTag ID um eine bestimmte ID-Nummer handelt.
Wahr — Die AprilTag-ID ist die Nummer.
Falsch — Die AprilTag-ID ist nicht die Nummer.
<Vision object is AprilTag ID [1]>
Parameter |
Beschreibung |
|---|---|
AprilTag-ID-Nummer |
Die Zahl, die mit der ermittelten AprilTag-ID-Nummer von 0 bis 37 verglichen werden soll. |
Beispiel
wenn gestartet
[Display when the target AprilTag ID is detected.]
für immer
hole [alle AprilTags v] Daten von Vision [vorwärts v] Kamera
Konsole löschen
wenn <Vision Objekt vorhanden?> dann
wenn <Vision object is AprilTag ID [21]> dann
drucke [Target found!] in Konsole ▶
Ende
Anzahl der Vision-Objekte#
Der Vision Objektzählungsblock gibt die Anzahl der erkannten Objekte im Datensatz als ganze Zahl aus.
(Vision Objektanzahl)
Parameter |
Beschreibung |
|---|---|
Dieser Block hat keine Parameter. |
Beispiel
wenn gestartet
[Display how many AprilTag IDs are detected.]
für immer
hole [alle AprilTags v] Daten von Vision [vorwärts v] Kamera
Konsole löschen
drucke (Vision Objektanzahl) in Konsole ▶
warte [0.2] Sekunden
Eigenschaften des Vision-Objekts#
Es gibt mehrere Eigenschaften, die zu jedem Objekt (siehe unten) hinzugefügt werden, das nach der Verwendung des Blocks get object data gespeichert wird.
(Vision Objekt [Breite v])
Alle Eigenschaftswerte außer id beschreiben Position, Größe, Ausrichtung oder Richtung des erkannten Objekts zum Zeitpunkt der Verwendung des Blocks Objektdaten abrufen. Diese Werte werden in Pixeln oder Grad gemessen. Jeder Bildsensor hat eine andere Auflösung.
Frontansicht: 640 x 480 Pixel
Nach unten gerichtet: 640 x 400 Pixel
Parameter |
Beschreibung |
|---|---|
Eigentum |
Welche Eigenschaft des erkannten Objekts soll verwendet werden? |
Breite#
Die width-Eigenschaft gibt die Breite des erkannten Objekts in Pixeln als ganze Zahl von 1 bis 640 an.
(Vision Objekt [Breite v])
Beispiel
wenn gestartet
[Show if the AprilTag ID appears large or small.]
für immer
hole [alle AprilTags v] Daten von Vision [vorwärts v] Kamera
Konsole löschen
wenn <Vision Objekt vorhanden?> dann
wenn <(Vision Objekt [Breite v]) [math_greater_than v] [100]> dann
drucke [Large] in Konsole ▶
sonst
drucke [Small] in Konsole ▶
Ende
Ende
warte [0.2] Sekunden
Höhe#
Die height-Eigenschaft gibt die Höhe des erkannten Objekts in Pixeln als ganze Zahl von 1 bis 480 an.
(Vision Objekt [Höhe v])
Beispiel
wenn gestartet
[Show if the AprilTag ID appears large or small.]
für immer
hole [alle AprilTags v] Daten von Vision [vorwärts v] Kamera
Konsole löschen
wenn <Vision Objekt vorhanden?> dann
wenn <(Vision Objekt [Höhe v]) [math_greater_than v] [100]> dann
drucke [Large] in Konsole ▶
sonst
drucke [Small] in Konsole ▶
Ende
Ende
warte [0.2] Sekunden
centerX#
Die centerX-Eigenschaft gibt die x-Koordinate des Mittelpunkts des erkannten Objekts in Pixeln als ganze Zahl von 1 bis 640 an.
(Vision Objekt [centerX v])
Beispiel
wenn gestartet
[Show if an AprilTag ID is to the left or the right of the camera.]
für immer
hole [alle AprilTags v] Daten von Vision [vorwärts v] Kamera
Konsole löschen
wenn <Vision Objekt vorhanden?> dann
wenn <(Vision Objekt [centerX v]) [math_less_than v] [320]> dann
drucke [To the left] in Konsole ▶
sonst
drucke [To the right] in Konsole ▶
Ende
Ende
warte [0.2] Sekunden
ZentrumY#
Die centerY-Eigenschaft gibt die y-Koordinate des Mittelpunkts des erkannten Objekts in Pixeln als ganze Zahl von 1 bis 480 an.
(Vision Objekt [centerY v])
Beispiel
wenn gestartet
[Take off and attempt to align the drone with an AprilTag ID on the wall.]
[Adjust the takeoff height to observe different results.]
starte auf [800] [mm v] ▶
hole [alle AprilTags v] Daten von Vision [vorwärts v] Kamera
wenn <Vision Objekt vorhanden?> dann
wenn <(Vision Objekt [centerY v]) [math_less_than v] [240]> dann
drucke [Below the target!] in Konsole ▶
sonst
drucke [Above the target!] in Konsole ▶
Ende
sonst
drucke [No target found!] in Konsole ▶
Lager#
Die Peilungseigenschaft gibt einen Winkel an, der die Position eines Objekts relativ zur Drohne beschreibt. Das Verhalten hängt vom verwendeten Bildsensor ab.
Ein Wert von 0° bedeutet, dass Objekt und Sensor deckungsgleich sind. Positive Werte bedeuten, dass sich das Objekt rechts befindet, negative Werte bedeuten, dass es sich links befindet.
Sensor |
Rücksendungen |
|---|---|
Nach unten |
Gradzahl, um die sich die Vorderseite der Drohne drehen muss, um mit dem Mittelpunkt des Objekts übereinzustimmen, von –180º bis 180º. |
Nach vorne |
Gradzahl, in der das Objekt von der Mitte des Bildsensors nach links oder rechts versetzt ist, von –180º bis 180º. |
(Vision Objekt [Peilung v])
Beispiele
wenn gestartet
[Align the front of the drone to an AprilTag ID.]
setze Drehgeschwindigkeit auf (15)%
starte auf [500] [mm v] ▶
für immer
hole [alle AprilTags v] Daten von Vision [nach unten v] Kamera
wenn <Vision Objekt vorhanden?> dann
wenn <[-20] [math_less_than v] (Vision Objekt [Peilung v]) [math_less_than v] [20]> dann
[Hover once sensor is centered on the AprilTag ID.]
schweben
spiele Ton [Erfolg v] ▶
sonst wenn <(Vision Objekt [Peilung v]) [math_less_than v] [-21]> dann
drehe [links v]
sonst
drehe [rechts v]
Drehung#
Die Rotationseigenschaft gibt die Ausrichtung der erkannten AprilTag-ID als ganze Zahl in Grad von 1 bis 359 an.
(Vision Objekt [Drehung v])
Beispiel
wenn gestartet
[Turn left or right based on the rotation of an AprilTag ID.]
starte auf [1000] [mm v] ▶
für immer
hole [alle AprilTags v] Daten von Vision [vorwärts v] Kamera
wenn <Vision Objekt vorhanden?> dann
wenn <[240] [math_less_than v] (Vision Objekt [Drehung v]) [math_less_than v] [300]> dann
drehe [links v] für [90] Grad ▶
sonst wenn <[60] [math_less_than v] (Vision Objekt [Drehung v]) [math_less_than v] [120]> dann
drehe [rechts v] für [90] Grad ▶
sonst
schweben
originX#
Die originX-Eigenschaft gibt die x-Koordinate der oberen linken Ecke des Begrenzungsrahmens des erkannten Objekts in Pixeln als ganze Zahl von 1 bis 640 an.
(Vision Objekt [originX v])
Beispiel
wenn gestartet
[Draw lines to the AprilTag ID origin from all corners.]
für immer
Bildschirm löschen
get [all AprilTags v] data from vision [forward v] camera
wenn <Vision Objekt vorhanden?> dann
zeichne Linie [0] [0] (Vision Objekt [originX v]) (Vision Objekt [originY v]) auf Bildschirm
zeichne Linie [0] [480] (Vision Objekt [originX v]) (Vision Objekt [originY v]) auf Bildschirm
zeichne Linie [640] [0] (Vision Objekt [originX v]) (Vision Objekt [originY v]) auf Bildschirm
zeichne Linie [640] [480] (Vision Objekt [originX v]) (Vision Objekt [originY v]) auf Bildschirm
Ende
warte [0.2] Sekunden
UrsprungY#
Die originY-Eigenschaft gibt die y-Koordinate der oberen linken Ecke des Begrenzungsrahmens des erkannten Objekts in Pixeln als ganze Zahl von 1 bis 480 an.
(Vision Objekt [originY v])
Beispiel
wenn gestartet
[Draw lines to the AprilTag ID origin from all corners.]
für immer
Bildschirm löschen
get [all AprilTags v] data from vision [forward v] camera
wenn <Vision Objekt vorhanden?> dann
zeichne Linie [0] [0] (Vision Objekt [originX v]) (Vision Objekt [originY v]) auf Bildschirm
zeichne Linie [0] [480] (Vision Objekt [originX v]) (Vision Objekt [originY v]) auf Bildschirm
zeichne Linie [640] [0] (Vision Objekt [originX v]) (Vision Objekt [originY v]) auf Bildschirm
zeichne Linie [640] [480] (Vision Objekt [originX v]) (Vision Objekt [originY v]) auf Bildschirm
Ende
warte [0.2] Sekunden
Ausweis#
Die id-Eigenschaft gibt die Identifikationsnummer der erkannten AprilTag-ID als ganze Zahl an.
(Vision Objekt [id v])
Beispiel
wenn gestartet
[Display the detected AprilTag ID.]
für immer
hole [alle AprilTags v] Daten von Vision [vorwärts v] Kamera
Konsole löschen
wenn <Vision Objekt vorhanden?> dann
drucke (Vision Objekt [id v]) in Konsole ▶
Ende
warte [0.2] Sekunden