Commit 8960fc53 by Kai Westerkamp

Eineleitun v1

parent 0b4d0773
\chapter{Einleitung} \chapter{Einleitung}
\label{chaper:01einleitung} \label{chaper:01einleitung}
\section{Motivation und Ziel der Arbeit}
Mit der wachsenden Komplexität vieler Systeme wird es immer schwieriger diese zu warten und zu reparieren.
In vielen Fällen verfügen ein lokalen Benutzer oder Technikern nicht mehr über das nötige Fachwissen um ein Problem mti einer Hardware zu lösen und zu beheben.
Es muss ein spezialisierter Experte hinzugezogen werden der bei der Lösung des Problems helfen muss.
Experten sind meist nicht vor Ort und müssen entweder anreisen oder remote hin zugeschaltet werden.
Eine Anreise ist zeitaufwändig, teuer und in vielen Fällen deshalb unpraktikabel.
Das zuschalten eines Experten ist zum Beispiel durch eine Videokonferenz oder Fotos möglich.
Jedoch ist der Experte hierbei an die Perspektive aus dem Stream und den Fotos gebunden.
Als Kommunikationsmittel stehen hierbei häufig nur die Sprache und Einzeichnungen in die Bilder zur Verfügung.
\todo{TODO} In den lenzten Jahren wurden erschwingliche Systeme für immersive Virtual Reality (VR) vorgestellt.
Head Mounted Displays (HMDs) wie die HTC Vive und Oculus Rift bieten erschwingliche und platzsparende Lösungen einen Benutzer in hochqualitative virtuelle Realität eintauchen zu lassen.
Mit der HoloLens hat Microsoft eine Augmented Reality (AR) Brille vorgestellt mit der es möglich ist interaktive 3D Projektionen in der direkten Umgebung darzustellen.
\section{VR} Die Anwendungsfelder dieser Technologien ist vielfältig.
\subsection{vive} VR kann zum Beispiel eingesetzt werden um 3D Daten zu visualisieren und zu analysieren.
In der Automobilindustrie kann so ein virtueller Prototyp kostengünstig untersucht werden.
Auch die Telepräsenz ist ein mögliches Einsatzgebiet von VR Technologien.
In einer VR Umgebung können mehrere Nutzer aus verschiedenen entfernten Orten in einer gemeinsamen Welt zusammengebracht werden.
Ar Technologien bieten die Möglichkeit zusätzliche Informationen in die echte Welt zu projizieren.
Es können klassische Inhalte wie Webseiten, Videos und Bilder überall platziert und abgespielt werden.
So können Informationen wie Anleitungen und Beschriftungen von Maschinen direkt an der Richtigen Stelle eingeblendet werden.
Ein weiterer Anwendungsfall für AR Technologien ist das einblenden von 3D Hologrammen die die Echtwelt ergänzen.
So kann zum Beispiel ein Bereich durch eine Markierung hervorgehoben werden oder ein Pfeil direkt auf interessante Stellen weisen.
Ziel dieser Arbeit ist das zusammenarbeiten eines lokalen Nutzers mit einer AR Brille und eines entfernten Experten in VR zu ermöglichen.
Der lokale Nutzer hat ein Hardwareproblem bei dem Expertenwissen benötigt wird
Der Experte soll in einer VR Umgebung einen 3D Scan der Hardware sehen und daran seine Analyse vornehmen.
Anschließend soll der Experte mit dem Lokalen Benutzer interagieren.
An der Virtuellen Repräsentation kann der Experte Hilfestellungen geben die dem lokalen Benutzer mit Hilfe von Projektionen in die Echtwelt visualisiert werden.
In dieser Arbeit wird einen Lösungsansatz für das aufnehmen einer 3D Punktwolke für die Visualisierung in VR vorstellt.
Anschließend wird ein Lösungsansatz für die Zusammenarbeit des Experten und des lokalen Benutzers präsentiert und evaluiert.
In einem Scenario wird untersucht ob die Zusammenarbeit in VR und AR einen Vorteil gegenüber einem Videoanruf bietet.
Hierzu stehen dem Experten die gescannte Punktwolke eine Zeigegeste in Form eines Laserstrahls zur Verfügung.
Zunächst wird Evaluiert ob die 3D Repräsentation mit einer Punktwolke Vorteile oder Nachteile gegenüber 2D Bilden bietet.
Hierzu bekommt der Experte eine Aufgabe bei der er mit der Punktwolke, bzw. den Bildern etwas in dem Objekt erkenne muss.
Des weiteren wird evaluiert ob das Vorgestellte Interaktionsonzept zwischen dem Experten und dem lokalen Nutzer Vorteile oder Nachteile bietet.
\section{Aufbau der Arbeit}
Zunächst werden im Kapitel \ref{chapter:02related} theoretische und technisceh Grundlagen betrachtet die für die Entwicklung des Systems benötigt werden.
In Kapitel \ref{chapter:03points} wird eine Aufnahmetechnik von 3D Punktwolken von Objekten vorgestellt.
In Kapitel \ref{chaper:04tiles} stellen wir ein Datenvormat zur effizienten und kompakten Speicherung der Punktwolken vor und in Kapitel \ref{chapter:05visualization} wird über die Visualiserung dieser Punktwolken in einer VR Umgebung gesprochen.
Das Kapitel \ref{chapter:06Hololens}befasst sich mit der Synchronisation der VR Umgebung mit der AR Umgebung und Echtwelt.
In Kapitel \ref{chapter:07Evaluation} wird der Aufbau und die Durchführung der Nutzerstudie beschreiben.
Anschließend erfolgt die Evaluation der Ergebnisse.
Kapittel \label{chapter:08Ausblick} enthält eine Zusammenfassung der Ergebnisse der Arbeit und einen Ausblick auf zukünftige Erweiterungen und Verbesserungen.
\ No newline at end of file
...@@ -83,6 +83,7 @@ Poitn cloud generatiion ...@@ -83,6 +83,7 @@ Poitn cloud generatiion
Technische Grundlagen Technische Grundlagen
Unereal Unereal
Blueprints
Unity Unity
HTC Vive HTC Vive
Vive Tracker Vive Tracker
......
\chapter{Visualisierung} \chapter{Visualisierung}
\label{chapter:05visualization} \label{chapter:05visualization}
In diesem Kapitel wird die Visualisrung der Punktwolke in der Unreal Engine 4 \cite{UE4} erklärt. In diesem Kapitel wird die Visualisrung der Punktwolke in der Unreal Engine 4 \cite{UE4} beschrieben.
Die Unreal Engine ist eine mächtige Game Engine, die unter anderem Support für verschiedene Virtual Reality Systeme bietet. Die Unreal Engine ist eine mächtige Game Engine, die unter anderem Support für verschiedene Virtual Reality Systeme bietet.
Durch die Verwendung einer Game Engine muss kein eigener performanter Renderer geschrieben werden, der den Anforderungen für Virtual Realit entspricht. Durch die Verwendung einer Game Engine muss kein eigener performanter Renderer geschrieben werden, der den Anforderungen für Virtual Realit entspricht.
\section{UE4 Rendering System} \section{UE4 Rendering System}
Die Unreal Engine verwendet ein Redner System, das auf DirectX aufgebaut ist. Die Unreal Engine 4 verwendet ein Render System, das auf DirectX aufgebaut ist.
Die gesamte Rendering ist abstrahiert und aus der Engine hat man keinen direkten Zugriff auf die Grafikkarte und die Shader. Die gesamte Rendering ist abstrahiert und aus der Engine hat man keinen direkten Zugriff auf die Grafikkarte und die Shader.
Das Unreal Engine Materialsystem ist der vorgesehene Weg, um Shader zu implementieren. Das Unreal Engine Materialsystem ist der vorgesehene Weg, um Shader zu implementieren.
Im Stil der UE4 Blueprints lassen sich damit grafisch Materialien definieren, die von der Engine in zugehörige Shader umgewandelt werden. Im Stil der UE4 Blueprints lassen sich damit grafisch Materialien definieren, die von der Engine in zugehörige Shader umgewandelt werden.
\section{3D Tiles laden und vorbereiten} \section{3D Tiles laden und vorbereiten}
Die Punktwolken könne als Array direkt geladen werden, jedoch lässt die Unreal Engien nicht zu, diese auch direkt als 1D Buffer auf die Grafikkarte zu laden und zu verwenden. Die Punktwolken könne als Array direkt geladen werden, jedoch lässt die Unreal Engine nicht zu, diese auch direkt als 1D Buffer auf die Grafikkarte zu laden und zu verwenden.
Als Alternative wurde der Array in eine quadratische 2D Textur umgewandelt. Als Alternative wurde der eindimensionale Array an Punkten in eine quadratische 2D Textur umgewandelt.
Jeder Pixel der Textur besteht aus 3 Werten, jeweils einen für die 3 Farbkanäle Rot, Grün und Blau. Jeder Pixel der Textur besteht aus 4 Werten, jeweils einen für die 3 Farbkanäle Rot, Grün, Blau und $\alpha$ (Transparenz)
Ein Punkt im 3D Raum besteht ebenfalls aus 3 Werten für die Achsen X,Y und Z. Ein Punkt im 3D Raum besteht aus 3 Werten für die Achsen X,Y und Z.
Um die Daten auf die Grafikkarte zu laden, codieren wir die Positionen in den Farbkanälen. Um die Daten auf die Grafikkarte zu laden, werden die Positionen in den 3 Farbkanälen codiert.
Farbwerte sind im Wertebereich $[0-1]$ und werden in unterschiedlichen Datenformaten gespeichert. Farbwerte sind im Wertebereich $[0-1]$ und werden in unterschiedlichen Datenformaten gespeichert.
Für die Implementierung wurde das HDR Datenformat der Unreal Engine verwendet. Für die Implementierung wurde das HDR Datenformat der Unreal Engine verwendet.
Dabei wird jeder Farbkanal in einer 16 Bit Integer codiert und ergibt damit pro Farbkanal $2^16$ diskrete Farbwerte. Dabei wird jeder Farbkanal in einer 16 Bit Integer codiert und ergibt damit pro Farbkanal $2^{16}$ diskrete Farbwerte.
Das bedeutet auch für eine Punktwolke, die wir als Farbtextur codieren, haben wir eine maximale Auflösung pro Achse. Da wir die Koordinaten in der Farbtextur speichern ist der 3D Raum der Punktwolke ebenfalls in $2^{16}$ diskrete Schritte pro Achse unterteilt.
Um die Daten in eine Textur zu überführen, müssen wir diese vorbereiten.
Um die Daten in eine Textur zu überführen werden diese vorbereitet.
Zunächst wird das Minimum und die Größe entlang jeder Achse bestimmt. Zunächst wird das Minimum und die Größe entlang jeder Achse bestimmt.
Mit diesen Daten lässt sich die gesamte Punktwolke in den Einheitswürfel transformieren. Mit diesen Daten lässt sich die gesamte Punktwolke in den Einheitswürfel transformieren.
\begin{equation} \begin{equation}
...@@ -44,22 +45,26 @@ Die so codierten Punkte lassen sich in einer Textur abspeichern und im Shader wi ...@@ -44,22 +45,26 @@ Die so codierten Punkte lassen sich in einer Textur abspeichern und im Shader wi
Das Aufbereiten der Farbtextur ist einfach. Das Aufbereiten der Farbtextur ist einfach.
Die Farben sind im 3D Tile als Byte große Integer gespeichert und können direkt in eine Unreal Textur konvertiert werden. Die Farben sind im 3D Tile als Byte große Integer gespeichert und können direkt in eine Unreal Textur konvertiert werden.
Die erzeugten Texturen sind immer quadratisch aber die Anzahl der Punkte ist nicht vorgegeben. Die erzeugten Texturen sind immer quadratisch aber die Anzahl der Punkte ist nicht immer gleich.
Für die Implementeirung wurde immer die quadratische Textur bestimmt, die genug Platz für alle Punkte bietet und die nicht verwendeten Punkte haben in der Farbtextur einen $\alpha$ Wert (4. Farbkanal, Transparenz) von 0 sonst 1. Durch das verwerfen von falschen Punkten und das zusammenfügen von mehreren Aufnahmen kann die Größe der Punktwolke variieren.
Für die Implementeirung wurde immer die quadratische Textur bestimmt, die genug Platz für alle Punkte bietet und die nicht verwendeten Punkte haben in der Farbtextur einen $\alpha$ Wertvon 0 sonst 1.
\section{Rendering} \section{Rendering}
In der Unreal Engine ist das Rendern von Punktwolken nicht vorgesehen und deshalb gibt es keinen Punkt Modus wie in OpenGL. In der Unreal Engine ist das Rendern von Punktwolken nicht vorgesehen.
Als Basis für den Renderingprozess wurde deshalb eine Quadchain verwendet (Siehe Abbilduung \ref{ing:quadchain}) Als Basis für den Renderingprozess wurde deshalb eine Quadchain verwendet (Siehe Abbilduung \ref{img:quadchain})
Diese Quadchain besteht aus $2^20$ einzelnen Quadraten entlang der Z Achse. Diese Quadchain besteht aus $2^{20}$ einzelnen Quadraten entlang der Z Achse.
Jedes Quad ist dabei an einer ganzzahligen Z Position und die Ecken sind bei 1 und -1. Jedes Quad ist dabei an einer ganzzahligen Z Position und die Ecken sind bei 1 und -1.
Durch diese Anordnung hat jedes Quadrat einen Index, die Z Position.
Diese Indizierung wird verwendet um jedes Quadrate einem Punkt zuzuordnen und das Quadrat anschließend an die gewünschte Position zu transformieren.
\begin{figure} \begin{figure}
\begin{center} \begin{center}
\label{img:quadchain}
\includegraphics[width=\textwidth]{Bilder/Quadchain32.png} \includegraphics[width=\textwidth]{Bilder/Quadchain32.png}
\caption{Ein Quadchain mit 32 Quads} \caption{Ein Quadchain mit 32 Quads}
\label{img:quadchain}
\end{center} \end{center}
\end{figure} \end{figure}
...@@ -86,6 +91,7 @@ Bei kleineren Punktwolken werden die nicht verwendeten Quadrate verworfen. ...@@ -86,6 +91,7 @@ Bei kleineren Punktwolken werden die nicht verwendeten Quadrate verworfen.
Die resultierenden Punktwolken funktionieren für den Anwendungsfall und die in dieser Arbeit verwendeten relativ kleinen Punktwolken sind in VR visualisierbar. Die resultierenden Punktwolken funktionieren für den Anwendungsfall und die in dieser Arbeit verwendeten relativ kleinen Punktwolken sind in VR visualisierbar.
Außer dem Deaktivieren von Schattenberechnungen wurden keine Performance Optimierungen vorgenommen. Außer dem Deaktivieren von Schattenberechnungen wurden keine Performance Optimierungen vorgenommen.
Die Beispielwerte wurden mit einem i7 6700 und eine GTX 1070 aufgenommen. Eine genaue Analyse ist nicht erfolgt. Die Beispielwerte wurden mit einem i7 6700 und eine GTX 1070 aufgenommen. Eine genaue Analyse ist nicht erfolgt.
\todo{punktwolkengröße}
Eine Punktwolke mit 1596685 einzelnen Punkten erreicht ca 60fps (siehe Bild \ref{img:Pnts1}. Hierbei ist zu bedenken, das die ganze Quadchain von $2^20$ Punkten gerendert wird und überflüssige Geometrie erst im Shader/Material verworfen wird. Eine Punktwolke mit 1596685 einzelnen Punkten erreicht ca 60fps (siehe Bild \ref{img:Pnts1}. Hierbei ist zu bedenken, das die ganze Quadchain von $2^20$ Punkten gerendert wird und überflüssige Geometrie erst im Shader/Material verworfen wird.
Bei 4 einzelnen Punktwolken mit 443175 Punkten ( 110369, 115991, 110377, 106438; 4 Instanzen der Quadchain) erreicht dieses vorgehen ca 44 fps. Bei 4 einzelnen Punktwolken mit 443175 Punkten ( 110369, 115991, 110377, 106438; 4 Instanzen der Quadchain) erreicht dieses vorgehen ca 44 fps.
Für eine große Punktwolke mit 1797690 Punkten gesplittet in 2 Instanzen sind es ebenfalls 44 fps. Für eine große Punktwolke mit 1797690 Punkten gesplittet in 2 Instanzen sind es ebenfalls 44 fps.
......
\begin{landscape} \begin{landscape}
\begin{figure*} \begin{figure*}
\caption{Ergebnisse des User Experience Questionnaire} \caption{Ergebnisse des User Experience Questionnaire}
\label{plot:TLX} \label{plot:UEQ}
\begin{tikzpicture} \begin{tikzpicture}
\pgfplotstableread{Charts/UEQ.txt} \pgfplotstableread{Charts/UEQ.txt}
\datatable \datatable
......
\vspace*{36\baselineskip} \vspace*{36\baselineskip}
\hbox to \textwidth{\hrulefill} \hbox to \textwidth{\hrulefill}
\par \par
\iflanguage{english}{I declare that I have developed and written the enclosed thesis completely by myself, and have not used sources or means without declaration in the text.}{Ich versichere wahrheitsgem\"a\ss, die Arbeit selbstst\"andig angefertigt, alle benutzten Hilfsmittel vollst\"andig und genau angegeben und alles kenntlich gemacht zu haben, was aus Arbeiten anderer unver\"andert oder mit Ab\"anderungen entnommen wurde.} ch versichere wahrheitsgem\"a\ss, die Arbeit selbstst\"andig angefertigt, alle benutzten Hilfsmittel vollst\"andig und genau angegeben und alles kenntlich gemacht zu haben, was aus Arbeiten anderer unver\"andert oder mit Ab\"anderungen entnommen wurde.
\textbf{Karlsruhe, xx.xx.xx} \textbf{Karlsruhe, 30.11.2017}
\vspace{1.5cm} \vspace{1.5cm}
\dotfill\hspace*{8.0cm}\\ \dotfill\hspace*{8.0cm}\\
\hspace*{2cm}(\textbf{Max Mustermann}) %center name with hspace \hspace*{2cm}(\textbf{Kai Westerkamp}) %center name with hspace
\thispagestyle{empty} \thispagestyle{empty}
...@@ -57,13 +57,13 @@ ...@@ -57,13 +57,13 @@
\newcommand{\mytitle}{\iflanguage{english}{Fernunterstützung und Zusammenarbeit mit 3D Punktwolken}{Fernunterstützung und Zusammenarbeit mit 3D Punktwolken}}%Remote Assistance and Collaboration with 3D Point Clouds \newcommand{\mytitle}{\iflanguage{english}{Fernunterstützung und Zusammenarbeit mit 3D Punktwolken}{Fernunterstützung und Zusammenarbeit mit 3D Punktwolken}}%Remote Assistance and Collaboration with 3D Point Clouds
\newcommand{\reviewerone}{Prof. Dr.-Ing. Rainer Stiefelhagen} \newcommand{\reviewerone}{Prof. Dr.-Ing. Rainer Stiefelhagen}
\newcommand{\reviewertwo}{Prof. Dr.-Ing. habil. Jurgen Beyerer} \newcommand{\reviewertwo}{Prof. Dr.-Ing. habil. Jürgen Beyerer}
\newcommand{\advisor}{M.Sc. Adrian Hoppe} \newcommand{\advisor}{M.Sc. Adrian Hoppe}
\newcommand{\sadvisor}{M.Sc. Sebastian Maier} \newcommand{\sadvisor}{M.Sc. Sebastian Maier}
\newcommand{\timestart}{01.06.2017} \newcommand{\timestart}{01.06.2017}
\newcommand{\timeend}{30.11.2017} \newcommand{\timeend}{30.11.2017}
\newcommand{\submissiontime}{xx.xx.xxxx} \newcommand{\submissiontime}{30.11.2017}
%% --------------------------------- %% ---------------------------------
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment