GithubHelp home page GithubHelp logo

cqtan / ar-deco Goto Github PK

View Code? Open in Web Editor NEW
2.0 3.0 0.0 268.01 MB

An iOS augmented reality project using the Leap Motion Controller on an iPhone 6 to move virtual furniture around through hand gestures while using a smartphone compatible head-mounted-device. Check Readme for more info (in German).

C# 55.23% ShaderLab 3.19% HLSL 0.29% JavaScript 6.71% ASP 34.59%

ar-deco's Introduction

AR-Decorator 🙌


ardeco01_title


Zusammenfassung

Es soll eine mobile AR-Anwendung entwickelt werden, mit der es möglich ist, Möbelstücke bzw. Gegenstände virtuell in die reale Welt anzuzeigen und zu positionieren. Mit Hilfe eines Head-mounted-displays (HMD) für das Smartphone und einen Handtracking-Sensor sollte kontaktlose Interaktionen mit den virtuellen Objekten möglich sein, während man sich selbst frei in allen Richtungen drehen kann.


Technologien & Hardware


Anforderungen

1) Reale Welt anzeigen

Es soll zunächst möglich sein, mit dem HMD die reale Welt zu sehen, die von dem Smartphone aufgenommen wird.

2) Virtuelle Objekte anzeigen

Mit Hilfe von Vuforia-Marker sollen virtuelle Objekte in die reale Welt angezeigt werden. Dazu soll die App die Marker erkennen und das entsprechende virtuelle Objekt über dem Marker kreieren. Sobald der Marker nicht mehr im Blickfeld der Kamera ist, verschwindet das Objekt wieder.

3) Handgesten Interaktionen

Ein Handtracking Sensor von LeapMotion soll ebenso auf dem HMD befestigt werden, damit Handgesten vor dem HMD erkannt werden können. Mögliche Interaktionen mit virtuellen Obkjekten:

  • positionieren im 3D Raum
  • rotieren
  • skalieren
  • entfernen aus der Szene

Mögliches Szenario

Ein User führt die 'AR-Deco' App auf dem Smartphone aus und befestigt diese an einem HMD. Der Leap Motion Sensor befindet sich auch an der vorderen Seite des HMDs. Die Kamera des Smartphones nimmt die reale Welt auf und auf dem Display wird das Aufgenommene für beide Augen jeweils angezeigt.

Der User nimmt ein Vuforia-Marker vor der Kamera, um ein virtuelles Objekt auszuwählen und auf die reale Welt anzuzeigen. Damit dieses Objekt in der Szene bleibt, sollte der User dieses mit der Hand greifen (z.B. mit einem Grab-Gesture).

Andere Interaktionen mit den virtuellen Objekten sollten auch möglch sein, z.B. rotieren, skalieren und entfernen.


Setup Guide

Um die Anwendung benutzen zu können, müssen folgende Schritte durchgeführt werden:

1) Folgendes bereithalten:

  • Computer mit Windows (für den Coloreality Server)
  • iPhone (auf dem die Anwendung läuft)
  • Leap Motion Controller
  • HMD (Smartphone Rückenkamera muss freigehalten sein)
  • Mac (für die Installation auf dem iPhone)
  • Ausgedruckte VuMarker

2) Anwendung Installieren:

  • siehe Build and Installation (iOS)

3) Geräte kalibrieren und Server starten:

  • (Windows): Leap Motion mit dem Leap Motion Control Panel kalibrieren. Setup auf Leap Motion Seite folgen (hier).
  • (Windows): Coloreality.io Server starten auf einem. IP und Port merken. Die ausführbare Datei befindet sich im Projekt under 'others/Coloreality/executables/ColorealityServer_PC'
  • (iOS): Anwendung starten und mit dem Server verbinden.
  • Smartphone und Leap am HMD befestigen.

LeapServerSettingsHMD


User Guide:

Die folgenden Interaktionsmöglicheiten sind implementiert:

  • Möbel anzeigen mit VuMarker
  • Möbel anvisieren
  • Position der Möbel mit ändern (Grab Gesture mit 1 Hand)
  • Distanz variieren (Grab und Pinch Gesture)
  • Rotation (Grab Gesture mit beiden Händen)
  • Skalieren (Pinch Gesture mit beiden Händen)
  • Löschen mit VuButton

1) Begriffserklärung:

  • Grab Gesture: Wenn mit der Hand eine Faust geformt wird. Entweder mit der linken oder rechten Hand.
  • Pinch Gesture: Wenn der Zeigerfinger den Daumen berührt. Jeweils mit der linken oder rechten Hand.
  • Anvisieren: In diesem Kontext leuchten die Konturen von Möbel gelb, wenn sie im Blickfeld zentriert sind.
  • VuMarker: Ein von Vuforia generiertes Bild um virtuelle Objekte zu ankern. Wird hier benutzt, um virtuelle Objekte anzuzeigen, sobald der VuMarker von der Kamera erfasst wird.
  • VuButton: Die runde Fläche unterhalb des VuMarkers. Simuliert einen Knopf, der bei dessen Verdeckung aktiviert wird.
  • Objekt: Möbel und Objekte sind hier gleichzusetzen.

2) Interaktionen:

Möbel anzeigen:

Halte einen VuMarker vor der Kamera, damit er erfasst werden kann. Bei guten Lichverhältnissen wird das Tracken erleichtert. Hierfür sind 4 Exemplare im Projekt beigelegt (Sofa, Cabinett, Bed, Bin)

ardeco02_show


Möbel instanziieren und positionieren:

Beim Anvisieren eines Möbelstücks vom VuMarker kann man mit einem Grab Gesture das gleiche Objekt instanziieren und die Position ändern.

Somit ist das Objekt unabhängig von dem VuMarker. Während das Grab Gesture erkannt wird, bleibt das Objekt im Blickfeld. So können auch Objekte, die weiter weg sind vom User genommen und platziert werden. Dabei muss die Hand nicht zwangsläufig das Objekt berühren, sondern sie muss lediglich von der Leap Motion erkannt werden.

ardeco03_position


Distanz ändern:

Nachdem man ein Objekt mit dem Grab Gesture erfasst hat, kann man mit der anderen Hand ein Pinch Gesture vorführen, um den Abstand zwischen Objekt und User zu ändern.

Sobald beide Gestures von der Leap erkannt werden, erhöht sich der Abstand in Relation zum Abstand beider Hände. Im Umkehrschluss verringert sich der Abstand, je näher die Hände zusammenkommen.

ardeco04_distance


Möbel rotieren:

Hat man ein Objekt anvisiert, kann man mit einem beidhändigen Grab Gesture die Rotation des Objekts beeinflußen.

Man kann es sich so vorstellen, als hätte man zwischen den Händen einen Ball. Rotiert man den Ball im Uhrzeigersinn, dann rotiert das Objekt auch in der selben Richtung. Hierbei spielen die Position beider Hände eine große Rolle. Je nachdem wie diese beiden zueinander im 3D-Raum stehen, so ändert sich auch die Rotation des anvisierten Objekts.

ardeco05_rotate


Möbel skalieren:

Sobald ein Objekt anvisiert wird, kann man mit einem beidhändigen Pinch Gesture die Größe des Objekts ändern.

Dieses Feature funktioniert ähnlich wie bei der obigen Erklärung zur Änderung der Distanz. Je größer der Abstand beider Hände sind, desto größer wird das Objekt.

ardeco06_scale


Möbel löschen

Wie beim ersten Punkt, zeigt man hierfür den VuMarker der für das Löschen von Objekten zuständig ist. In diesem Fall der, der das 'Bin' Objekt (Mülleimer) anzeigt. Wenn dieser sichtbar ist und man ein Objekt anvisiert hat, kann man den VuButton verdecken, um das anvisierte Objekt zu löschen.

ardeco07_delete


Project Setup

  • Bei einem neuen Projekt die Ar-Deco Assets mit der beigefügten Datei 'ArDeco.unitypackage' laden.

  • Entweder im Ordner 'ArLeapAssets' das Prefab 'ArLeap' in die Szene bzw. Hierarchy ziehen und die standardmäßige Main Camera entfernen.

  • Oder unter 'ArLeapAssets/Scenes' die Szene 'VuLeap' mit der letzten Version (Bsp: _v200) auswählen.

  • Um Vuforia zu aktivieren, die Player Settings im nächsten Abschnitt beachten.


Build and Installation (iOS)

Auf dem 'Build Settings' Fenster sollte man zunächst auf dem Platform 'iOS' wählen, um schließlich Änderungen auf dem 'Player Settings' durchführen zu können.

ar_navigatebuildsettings

ar_buildwindow

ar_playersettings

Unter dem Reiter 'Other Settings' muss eine ID im Textfeld 'Bundle Identifier' und im Textfeld 'Camera Usage Description' irgendein Text eingegeben werden (Letzteres, weil sonst schwarzes Display).

ar_othersettings

Unter dem Reiter 'XR Settings' braucht 'Virtual Reality Supported' ein Häkchen und beide SDKs 'Vuforia' und 'Cardboard' müssen hinzugefügt werden. Cardboard ist notwendig, da sonst das Builden mit Xcode nicht funktioniert wird (Fehlende Dateien etc.).

ar_xrsettings

Schließlich den 'Build' Knopf auf dem Build Settings Fenster wählen und ein Ziel festlegen.

Deploy (iOS)

In dem 'Build' Ordner, der in Unity generiert wurde, befinden sich Xcode Projekt Dateien. Statt der gewohnten '.xcodeproj' Datei zu öffnen, sollte man stattdessen '.xcworkspace' öffnen, da sonst die Cardboard Dateien nicht gefunden werden (hier zB. die Podfiles).

ar_xcodefile

Nach dem Ausführen der 'xcworkspace' Datei gelangt man auf die Build Settings, indem man links auf 'Unity-iPhone' wählt.

ar_xcodesettings

Hier kann man noch den endgültigen Namen der App eingeben. Im 'Signing' Bereich muss man im Team einen Provisioning Profile auswählen (einen Kostenlosen reicht auch aus, um ein Paar Tage zu testen. Danach muss man diesen Xcode Schritt nochmal machen.

Schließlich ein iOS Gerät per USB verbinden, das Gerät auswählen und über 'Run' installieren lassen. Die App sollte dann automatisch ausgeführt werden.

ar_xcoderun

ar-deco's People

Contributors

cqtan avatar notcatcouch avatar chibbs avatar

Stargazers

Roman avatar  avatar

Watchers

 avatar  avatar  avatar

ar-deco's Issues

Gestures: new grab gesture for positioning

Instead of doing a collision with hand and furniture, another idea that includes raycasting as a way to manipulate objects further away is made. By outlining furniture that the user targets with raycasting from 1 hand, it becomes visibly clear what the user is targeting. While the ray collides with the furniture and the user performs and holds the grab gesture, the furniture is attached to the point of collision, making the furniture move with the ray in relation to the distance of the hand.

  • make raycast from hand
  • make outline react to raycast collision
  • make furniture lerp smoothly to initial point of collision on the ray

Gesture: Scale objects

The user should be able to scale the size of the targeted object with the use of a specific gesture. The suggested gesture for this is a 2 handed grab gesture. Similar to how the user is now able to change the distance of a target object (see ticket #15 ), the hand distance is used to determine the scale of the object, i.e. the nearer the hands are when performing the gesture, the smaller the object becomes and vice-versa.

  • 2 handed grab gesture
  • change scale of object

Möbel löschen

Wie wollen wir das angehen? Möglichkeiten:

  • VuMarker als Mülleimer implementieren und dahin tragen
  • Anvisieren und auf einem UI auf 'löschen' wählen

LeapMotion Server/Client mit NodeJs

Es soll untersucht werden, wie die Kommunikation mit LeapMotion stattfinden könnte zwischen Win/Mac PC und Smartphone. Eine Möglichkeit wäre die von Coloreality vorgeschlagen. Vielleicht klappt das mit NodeJS

Coloreality

6DoF implementieren

Wird wohl nichts. Hardware technisch haben wir das nicht so druff, weil wir entweder einer der neueren Smartphone Versionen haben müssen oder ein externes Gerät für die Tiefenwahrnehmung. Momentan würde nur die Rotation funktionieren

Gesture: Rotating objects

The user should be able to rotate the targeted object with a specific gesture. The gesture suggested for this is a 2 handed pinch gesture. When performing these, the hand position of both hands are targeted and depending on where they are in 3D space to each other, the targeted object will change its rotation in relation to the position of the hands.

  • 2 handed pinch gesture
  • rotate on the x-, y-, z-axis

Gesture: Moving furniture on the z-axis

To be able to move furniture away from or closer to the user (z-axis) another gesture is required. This could be done while positioning the furniture with 1 hand and the other can manage the distance of the furniture. By performing 2 grab gestures at the same time the distance should be able to be manipulated. Bringing both grab gestures nearer to each other should decrease the distance while the opposite may also take place.

  • add additional grab gesture for manipulating the distance of target furniture
  • calculate distance in relation to distance of both grab gestures

VuMarker Buchlein für Möbel

Magst du dich schonmal um die Möbel-Marker kümmern? Ich habe in meinem Demo Unity app ein PaarMöble Objekte schon, falls du die brauchst.

vu_sofa

Möbel instanziieren und platzieren

Nachdem ein VuMarker von der App erkannt wurde, sollte man das dargestellte Möbel-Objekt mit einem Grab Gesture nehmen können, um es im Raum zu positionieren.

Vorbereitung | Zwischenpräsentation

Am 13.11.17 (diesen Mittwoch) findet ja die Zwischenpräsentation statt. Der momentane Stand der Dinge ist wie folgt:
Version 3.1

  • App lässt sich mit dem Headset anzeigen (wenn nicht optimal)
  • LeapMotion bzw. virtuelle Hände sind sichtbar
  • VuMarker Sofa lässt sich mit Hilfe eines Markers instanziieren
  • Sofa Instanz lässt sich mit dem Grab Gesture duplizieren
  • Position des Sofas kann man mit dem Grab Gesture ändern

Damit könnte man schon den Zwischenstand zwar zeigen, aber ich versuche noch einen long-distance grab zu implementieren für Version 4

Mehr oder weniger optimale Einstellung für den Coloreality Server ist hier beigefügt

colorserver_settingsforhmd

Stereoskopie und Vuforia

In Unity kann man zwar ein stereoskopischer Display leicht implementieren, aber in Verbindung mit Vuforia ist das noch mit iOS relativ schwierig. Vielleicht klappt das besser mit Android? Ich arbeite gerade dieses Tutorial durch: (Link)

Handgestensteuerung

Die ersten Ansätze der Gestensteuerung soll implementiert werden: Positionieren, Tiefenplatzierung, Rotation, skalieren

Collisionserkennung von Möbel

Möbel Objekts dürfen nicht instanziiert werden, wenn ein anderes schon instanziiert wurde, ohne dass dieses schon bewegt wurde.

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.