AprilTag-Erkennung und Abwurf
Das erreichte Zwischenergebnis: Marker erkennen und daraufhin die Nutzlast fallen lassen.
Historische Demonstration, August 2026. Die beschriebenen Abwürfe sind keine aktuelle Funktionsfreigabe. Kamera, Servo und Mechanik werden separat geprüft. Für den gepflegten Betrieb gelten Servo-Dokumentation und die neuesten Hardwareaufzeichnungen.
Die damalige Demonstration zeigte Kamera → Erkennung → Aktuator. Die nach unten
gerichtete IMX500-Kamera erkennt tag36h11-Marker, und sobald ein Tag
stabil erkannt ist, öffnet der Servo den Haltebügel und lässt die Nutzlast fallen.
Verifiziert ist das am Boden und handgeführt — nicht im autonomen Flug; siehe
Flugversuche und Absturz.
Warum AprilTags statt Personenerkennung
Ursprünglich sollte ein neuronales Netz Personen erkennen und die Drohne ihnen folgen. Für einen gezielten Abwurf ist ein geometrischer Marker die bessere Wahl: Ein AprilTag hat eine eindeutige ID, seine vier Ecken lassen sich subpixelgenau bestimmen, und aus ihnen folgt bei bekannter Kamerakalibrierung die vollständige Lage des Tags relativ zur Kamera. Eine neuronale Bounding Box liefert dagegen nur ein Rechteck ohne belastbare Geometrie.
Deshalb wird der KI-Beschleuniger der IMX500 für die Tag-Erkennung nicht benutzt: Bei einem Fiducial zählen genaue Ecken, nicht eine gelernte Klassifikation.
Zwei Detektor-Backends
- AprilTag 3.4.2 nativ aus dem Debian-Paket. Bevorzugt, weil es Hamming-Korrektur und Decision Margin meldet — zwei Maße dafür, wie sicher eine Erkennung ist.
- OpenCV 4.11
ArucoDetectormitDICT_APRILTAG_36h11als Rückfallebene und für Kalibrierung, Pose-Berechnung, Reprojektionsprüfung und die Bildannotation.
Durchsatz auf dem Pi Zero 2 W
Gemessen am 18.08.2026, ohne Tag im Bild — es sind reine Durchsatzwerte, keine Erkennungsraten:
| Backend | Auflösung | Aufnahme + Erkennung | Nur Detektor |
|---|---|---|---|
| AprilTag 3 nativ | 640 × 480 | 29,7 fps | 36,5 fps |
| AprilTag 3 nativ | 1280 × 960 | 13,2 fps | 15,1 fps |
| OpenCV ArUco | 640 × 480 | 29,1 fps | 76,2 fps |
| OpenCV ArUco | 1280 × 960 | 14,9 fps | 20,4 fps |
Bei 640 × 480 begrenzt die Bildaufnahme, nicht der Detektor. Für den Abwurf reicht das deutlich: Der Marker steht still, und die Freigabe verlangt ohnehin mehrere aufeinanderfolgende Bilder.
Wie der Abwurf ausgelöst wird
- Ausgelöst wird erst, wenn mehrere aufeinanderfolgende Bilder dieselbe erlaubte Tag-ID zeigen, ohne Hamming-Korrektur und mit ausreichendem Decision Margin.
- Der Servo wird direkt vom Raspberry Pi über einen GPIO-Ausgang gestellt, im
sicheren Bereich
900–2100 µsum die Neutrallage1500 µs. - Die Freigabe ist verriegelt: Sie kann sich innerhalb eines Laufs nicht wiederholen.
- Der Servo zieht anlaufend bis 1,6 A. Eine geeignete geregelte Versorgung mit gemeinsamer Masse muss deshalb am aktuellen Aufbau überprüft werden.
Kommandos
Der gepflegte Aufzeichnungsbefehl ist drone-inspect. Auf dem
Pi zeigt uv run drone-inspect --help die aktuellen Aufnahmeoptionen.
Die Standardinspektion bleibt disarmiert und sendet keine Servo-Kommandos.
drone-tag-servo-record ist ein separates Werkzeug mit ausdrücklichen
Bestätigungen und begrenzten Pulsen. Es implementiert weder Flugnavigation noch
automatisches Armieren. Die alten Missionsbranches bleiben im
Quellarchiv erhalten.
Eine metrische Tag-Pose benötigt gemessene Taggröße und eine passende Kamerakalibrierung. Eine gewählte Beispielgröße ersetzt keine Messung.
Der gepflegte Weg: Aufzeichnung mit einmaliger Freigabe
Seit Mitte September gibt es dafür ein eigenes Skript auf dem Pi. Es zeichnet den vollständigen Sensor- und Kameradatensatz auf und öffnet dabei die Nutzlast-Halterung, wenn Tag ID 3 erkannt wird:
uv run --locked --group raspi python scripts/tag_mount_capture.py
- Ausgelöst wird nach drei aufeinanderfolgenden frischen Erkennungen ohne Hamming-Korrektur und mit Decision Margin von mindestens 30.
- Die Halterung öffnet einmal pro Lauf — dieselbe Stellung wie
drone-mount open, danach wird das PWM-Signal abgekoppelt. Es gibt kein automatisches Schließen; die Ausgangsstellung setzt vorherdrone-mount close. - Der Lauf funktioniert disarmiert, vor dem Armieren und während eines manuell geflogenen Fluges. Er sendet selbst keinen Armier-, Modus-, Motor-, RC- oder Missionsbefehl und rührt keinen Servo-Ausgang des Flight Controllers an.
- Der Servo hat keine Positionsrückmeldung: Protokolliert wird das gesendete Kommando, nicht die tatsächliche Stellung der Mechanik.
Grenzen, die bewusst so bleiben
- Ohne Kalibrierung keine metrische Distanz. Ohne hinterlegte Intrinsics meldet die Software nur IDs und Eckpunkte statt einer erfundenen Entfernung. Eine Kalibrierung gilt außerdem nur für genau denselben Fokus, Sensorausschnitt und dieselbe Auflösung wie im Flug.
- Die Kamera muss starr sitzen und nach unten schauen (Nadir), mit entlastetem Flachbandkabel und fixiertem Fokus. Solange sie das nicht tut, ist jede Posenangabe wertlos.
- Ein Abstandswert nach vorn ist keine Hindernisvermeidung. Seit dem 9. September misst ein vorderer MT-15 zuverlässig mit rund 52 Hz, aber die Firmware bringt keine Proximity-Unterstützung mit: Der Wert wird gemessen und angezeigt, nicht geflogen. LiDAR misst Höhe, optischer Fluss Geschwindigkeit, die Kamera den Boden.