Bridging the Gap

Ich habe letzte Woche einige Nachforschungen für ein Projekt angestellt, das wir für ein Museum umsetzen. Ich kann hier nicht ins Detail gehen, da wir die Vertragsdetails noch nicht abgeschlossen haben, aber ich kann ein wenig über unseren Denkprozess bei der Suche nach einem überzeugenden Aufbau und den technologischen Puzzleteilen erzählen, die ihn zum Laufen bringen.

Die Grundidee des Aufbaus ist, dass wir unsere Ökosystemsimulation Trophix den Besuchern des Museums so nahe wie möglich bringen wollen. Also keine Bildschirme mit Maus oder Gamecontroller. Grundsätzlich wollen wir jedes Setup vermeiden, das auf dem heimischen Laptop besser funktionieren würde. Stattdessen bemühen wir uns, den gesamten Raum, den uns das Museum bietet, als Leinwand zu nutzen, auf der wir unsere Simulation zeigen und mit der die Besucher interagieren können.

In diesem Fall ist die Ausstellung in Phasen aufgeteilt. Die Installation der ersten Phase ist als Demonstration der zukünftigen Entwicklung gedacht. Das bedeutet auch, dass wir mit einem begrenzten Budget und wenig Platz arbeiten müssen.

Wenn Besucher den Ausstellungsraum im Museum betreten, sehen sie einen Tisch, auf den eine vereinfachte Karte projiziert ist. Sie sehen auch eine Reihe von Objekten, die sie auf diesem Tisch platzieren und bewegen können.

Die Tischplatte wird mit einem Beamer von der Decke projiziert. Die Objekte, die auf dem Tisch platziert werden können, sind markiert, sodass wir ihre Position und Drehung im Raum verfolgen und die auf dem Tisch angezeigte Simulation in Echtzeit anpassen können. Dies geschieht mit einer Kamera, die auf den Tisch gerichtet ist.
Die offensichtlichen technischen Herausforderungen, die wir uns bei einem Setup wie diesem vorstellen konnten, waren:

  • Visuelle Markierungen können ein großes Problem darstellen, da sich die Lichtverhältnisse auf dem Tisch je nach gezeigter Simulation ständig ändern.
  • Wie gut (korrekt und stabil) können wir das Tracking der Objekte angesichts des begrenzten Budgets machen? Reichen eine Webcam und ein QR-Code wie Marker aus?
  • Wie können wir das mit der Godot Game Engine realisieren? Godot hat einige AR-Tracking-Funktionen, aber es zielt hauptsächlich auf das VR-Headset-Tracking ab, nicht auf generische Marker.

Nach einer kurzen Google-Suche sah es so aus, als ob Aruco-Marker in Kombination mit der OpenCV- Bibliothek eine gute Idee sein könnten.

Ich bin ein großer Fan davon, die Komponenten der technischen Systeme zu trennen, insbesondere in Echtzeit-Ausstellungskontexten. Die Idee war also, zuerst die Tracking-Qualität zu überprüfen und anschließend in unser Godot-Setup einzubinden.

Da ich auch ein großer Freund von Python bin, habe ich als nächstes nach einem Beispiel-Python-Code für Aruco-Marker-Tracking gegoogelt. Wie sich herausstellte, gibt es auf www.automaticaddison.com einige nette Snippets. Ich habe den größten Teil des Codes umgeschrieben, aber es ist immer eine große Hilfe, ein funktionierendes Referenzbeispiel zu haben. Darüber hinaus habe ich Docker und Docker Compose verwendet, damit alles in einer containerisierten Umgebung funktioniert und um die benötigten Bibliotheken von meinem Host-Linux-System zu trennen.

Das Drucken der Marker stellte sich als etwas mühselig heraus, weil sich unser Drucker spontan dazu entschied, grandios schlecht zu drucken. Das habe ich “behoben”, indem ich ausgewaschene Schwarztöne mit einem Permanentmarker nachgezeichnet habe… Uuuund:

Für die Kamera habe ich eine Intel Realsense verwendet, die wir herumliegen hatten, und einfach ihre Albedo-Kamera genutzt (und die Tiefenfunktionen für den Moment ignoriert). An der Stelle überspringe ich mal die üblichen Hardwareprobleme. Denn: es funktionierte nach einer Stunde Debuggen von v4l. Eine weitere halbe Stunde ging dafür drauf, mit den Tiefenfunktionen zu spielen.

Der nächste Schritt war, die Daten in Godot zu bekommen. Dafür habe ich einen Barebones-Websocket-Server in Python und einen empfangenden GDScript-Websocket-Client in Godot implementiert. Die Idee war, ein paar 3D-Objekte auf der Grundlage der verfolgten Marker zu bewegen/rotieren, indem man einfach Websocket-Pakete lokal mit 60 Bildern pro Sekunde überträgt. Ich habe mir ein paar Minuten lang UDP-Netzwerke angesehen, aber beschlossen, mich jetzt noch nicht zu sehr um die Leistung zu kümmern.

Yay. Die Rotation habe ich vorerst deaktiviert, da die Objekte etwas zu stark geflackert haben.

Wie geht es weiter?

  • Erhöhen der Kameraauflösung (wahrscheinlich eine Gopro @ 4k), um die Tracking-Stabilität zu verbessern.
  • Experimentieren mit Infrarotlichtern und Kameras, um das Verfolgungslicht von der Wellenlänge des Projektorlichts zu trennen.

Das war’s für heute. Schreibt mir gerne eine PN auf Twitter oder Discord , wenn ihr Fragen oder Kommentare habt.

Newsletter

Gamestudio from Leipzig, GER

SOFTWARE

🇬🇧🔁🇩🇪

Funded by

MDM_MEDIAstart_Logo

Copyright 2021 ROTxBLAU © All Rights Reserved