dissertation/midyear report/midyear.lyx

2071 lines
45 KiB
Plaintext
Raw Normal View History

2019-12-03 10:14:59 +00:00
#LyX 2.3 created this file. For more info see http://www.lyx.org/
\lyxformat 544
\begin_document
\begin_header
\save_transient_properties true
\origin unavailable
2019-12-11 20:51:53 +00:00
\textclass article
2019-12-03 10:14:59 +00:00
\use_default_options true
2019-12-06 16:13:29 +00:00
\begin_modules
customHeadersFooters
minimalistic
todonotes
\end_modules
2019-12-03 10:14:59 +00:00
\maintain_unincluded_children false
\language english
\language_package default
\inputencoding auto
\fontencoding global
2020-01-09 14:10:03 +00:00
\font_roman "utopia" "default"
2019-12-03 10:14:59 +00:00
\font_sans "default" "default"
\font_typewriter "default" "default"
\font_math "auto" "auto"
\font_default_family default
\use_non_tex_fonts false
\font_sc false
\font_osf false
\font_sf_scale 100 100
\font_tt_scale 100 100
\use_microtype false
\use_dash_ligatures true
\graphics default
\default_output_format default
\output_sync 0
2019-12-06 16:13:29 +00:00
\bibtex_command biber
2019-12-03 10:14:59 +00:00
\index_command default
\paperfontsize default
2020-01-09 19:43:23 +00:00
\spacing onehalf
2019-12-03 10:14:59 +00:00
\use_hyperref false
2019-12-06 16:13:29 +00:00
\pdf_title "Holoportation"
\pdf_author "Andy Pack"
\pdf_subject "The use of Kinect cameras to stream 3D video from client to server"
\pdf_bookmarks true
\pdf_bookmarksnumbered false
\pdf_bookmarksopen false
\pdf_bookmarksopenlevel 1
\pdf_breaklinks false
\pdf_pdfborder false
\pdf_colorlinks false
\pdf_backref false
\pdf_pdfusetitle true
2019-12-03 10:14:59 +00:00
\papersize default
\use_geometry true
\use_package amsmath 1
\use_package amssymb 1
\use_package cancel 1
\use_package esint 1
\use_package mathdots 1
\use_package mathtools 1
\use_package mhchem 1
\use_package stackrel 1
\use_package stmaryrd 1
\use_package undertilde 1
\cite_engine biblatex
\cite_engine_type authoryear
\biblio_style plain
\biblatex_bibstyle ieee
\biblatex_citestyle ieee
\use_bibtopic false
\use_indices false
\paperorientation portrait
\suppress_date true
\justification true
\use_refstyle 1
\use_minted 0
\index Index
\shortcut idx
\color #008000
\end_index
\leftmargin 2cm
\topmargin 2cm
\rightmargin 2cm
\bottommargin 2cm
\secnumdepth 3
\tocdepth 3
\paragraph_separation indent
\paragraph_indentation default
\is_math_indent 0
\math_numbering_side default
\quotes_style english
\dynamic_quotes 0
\papercolumns 1
\papersides 1
2019-12-06 16:13:29 +00:00
\paperpagestyle fancy
2019-12-03 10:14:59 +00:00
\bullet 1 0 9 -1
\tracking_changes false
\output_changes false
\html_math_output 0
\html_css_as_file 0
\html_be_strict false
\end_header
\begin_body
\begin_layout Title
2020-01-09 09:37:42 +00:00
\size giant
2019-12-10 20:06:32 +00:00
Multi-Source Holoportation
2019-12-03 10:14:59 +00:00
\end_layout
\begin_layout Author
2020-01-09 09:37:42 +00:00
Andy Pack
2019-12-03 10:14:59 +00:00
\end_layout
2019-12-16 23:57:43 +00:00
\begin_layout Standard
\align center
2020-01-09 09:37:42 +00:00
\size largest
2019-12-16 23:57:43 +00:00
Mid-Term Report
\end_layout
2020-01-09 09:37:42 +00:00
\begin_layout Standard
\begin_inset VSpace bigskip
\end_inset
\end_layout
\begin_layout Standard
\align center
\begin_inset Graphics
filename ../surreylogo.png
lyxscale 30
width 60col%
\end_inset
\end_layout
\begin_layout Standard
\begin_inset VSpace vfill
\end_inset
\end_layout
\begin_layout Standard
\align center
\size large
Department of Electrical and Electronic Engineering
\begin_inset Newline newline
\end_inset
Faculty of Engineering and Physical Sciences
\begin_inset Newline newline
\end_inset
University of Surrey
\end_layout
2019-12-03 10:14:59 +00:00
\begin_layout Standard
\begin_inset Newpage newpage
\end_inset
\end_layout
\begin_layout Abstract
2020-01-09 14:10:03 +00:00
The scope and current state of the multi-source holoportation project is
examined.
The aim is to take a suite of 3D video capture software and extend it from
the current capabilities of multiple sensors but a single client to handle
multiple groups of sensors called sources during frame collection and display.
Currently the display methods have been extended in line with the specification
in order to allow simultaneous display and arbitrary real-time placement
within the display space.
\end_layout
\begin_layout Abstract
The future work for the project is described including the current designs
2020-01-09 19:43:23 +00:00
these endeavours.
2020-01-09 14:10:03 +00:00
The bulk of this remaining work involves developing the network capabilities
2020-01-09 19:43:23 +00:00
of the software to accommodate multiple sources.
2019-12-03 10:14:59 +00:00
\end_layout
\begin_layout Standard
\begin_inset CommandInset toc
LatexCommand tableofcontents
\end_inset
2020-01-09 14:10:03 +00:00
\begin_inset Newpage newpage
\end_inset
\end_layout
\begin_layout Standard
\begin_inset FloatList figure
\end_inset
\begin_inset CommandInset toc
LatexCommand lstlistoflistings
\end_inset
2019-12-06 16:13:29 +00:00
\end_layout
\begin_layout List of TODOs
2019-12-03 10:14:59 +00:00
\end_layout
\begin_layout Standard
\begin_inset Newpage newpage
\end_inset
\end_layout
2019-12-13 13:48:47 +00:00
\begin_layout Right Footer
Andy Pack / 6420013
\end_layout
\begin_layout Left Footer
January 2020
\end_layout
2019-12-03 10:14:59 +00:00
\begin_layout Section
Introduction
\end_layout
2019-12-11 20:51:53 +00:00
\begin_layout Standard
The aim of this project is to develop a piece of software capable of supporting
multi-source holoportation (hologram teleportation) using the
\emph on
\noun on
LiveScan3D
\emph default
\noun default
\begin_inset CommandInset citation
LatexCommand cite
key "livescan3d"
literal "false"
\end_inset
suite of software as a base.
\end_layout
\begin_layout Standard
2020-01-09 19:43:23 +00:00
As the spaces of augmented and virtual reality become more commonplace and
mature, the ability to capture and stream 3D renderings of objects and
people over the internet using consumer-grade hardware has many possible
applications.
2019-12-11 20:51:53 +00:00
\end_layout
2020-01-05 15:31:33 +00:00
\begin_layout Standard
This represents one of the most direct evolutions of traditional video streaming
when applied to this new technological space.
\end_layout
2019-12-11 20:51:53 +00:00
\begin_layout Standard
2020-01-09 19:43:23 +00:00
LiveScan3D is a suite of 3D video software capable of recording and transmitting
video from client to server for rendering.
The suite is fast and uses consumer grade hardware for capture in the form
of
2019-12-11 20:51:53 +00:00
\noun on
2020-01-09 19:43:23 +00:00
Xbox Kinect
\noun default
cameras, it is used in projects at various levels throughout the
\noun on
University of Surrey
\noun default
and has multiple setups in dedicated laboratory space.
\end_layout
\begin_layout Standard
\noun on
LiveScan3D's
\noun default
use
\noun on
2019-12-11 20:51:53 +00:00
\noun default
2020-01-09 19:43:23 +00:00
of
2019-12-11 20:51:53 +00:00
\noun on
Xbox Kinect
\noun default
2020-01-09 19:43:23 +00:00
cameras allows the capture and stream of 3D renders in single or multi-view
configurations using multiple cameras however the server is only able to
process and reconstruct one environment at a time.
2019-12-11 20:51:53 +00:00
\end_layout
\begin_layout Standard
The capability to concurrently receive and reconstruct streams of different
objects further broadens the landscape of possible applications, analogous
to the movement from 1-to-1 phone calls to conference calling.
\end_layout
2019-12-03 10:14:59 +00:00
\begin_layout Section
Literature Review
\end_layout
2020-01-09 09:37:42 +00:00
\begin_layout Standard
The significance of the 3D video captured and relayed with the
\noun on
LiveScan
\noun default
suite is closely related to the development of new technologies able to
immersively display such video content.
Therefore before discussing the specific extension that this project will
make to the
\noun on
LiveScan
\noun default
software it is important to contextualise it within the space of 3D video
capture while also considering it's implications for AR and VR applications.
\end_layout
2019-12-11 20:51:53 +00:00
\begin_layout Subsection
2019-12-16 23:57:43 +00:00
Augmented and Virtual Reality
2019-12-11 20:51:53 +00:00
\end_layout
\begin_layout Subsection
2020-01-09 09:37:42 +00:00
Traditional Optical 3D Reconstruction
2019-12-11 20:51:53 +00:00
\end_layout
2019-12-17 16:34:12 +00:00
\begin_layout Subsection
2020-01-09 09:37:42 +00:00
Kinect and RGB-D Cameras
2019-12-17 16:34:12 +00:00
\end_layout
2019-12-11 20:51:53 +00:00
\begin_layout Subsection
2020-01-09 09:37:42 +00:00
Holoportation and Telepresence
\end_layout
\begin_layout Standard
The term Holoportation is defined and exemplified in the
\noun on
Microsoft Research
\noun default
paper
\begin_inset CommandInset citation
LatexCommand cite
key "holoportation"
literal "false"
\end_inset
, where an end-to-end pipeline is laid out for the acquisition, transmission
and display of 3D video facilitating real-time AR and VR experiences.
The
\noun on
Microsoft Research
\noun default
paper builds on works such as
\begin_inset CommandInset citation
LatexCommand cite
key "Immersive-telepresence"
literal "false"
\end_inset
2 years earlier which describes attempts at achieving
\begin_inset Quotes eld
\end_inset
telepresence
\begin_inset Quotes erd
\end_inset
, a term coined by Marvin Minksy to describe the transparent and intuitive
remote control of robot arms as if they were the controllers own
\begin_inset CommandInset citation
LatexCommand cite
key "marvin-minksy"
literal "false"
\end_inset
.
The term was broadened by Bill Buxton
\begin_inset CommandInset citation
LatexCommand cite
key "buxton-telepresence"
literal "false"
\end_inset
to include the space of telecommunications to describe technology being
used to make someone feel present in a different environment.
In the context of holoportation this is through the use of 3D video reconstruct
ion.
The aforementioned
\begin_inset CommandInset citation
LatexCommand cite
key "Immersive-telepresence"
literal "false"
\end_inset
used 10
\noun on
Microsoft Kinect
\noun default
cameras to capture a room before virtually reconstructing the models.
\end_layout
\begin_layout Standard
In service of demonstrating it's applicability to achieving telepresence,
a figure was isolated from the surroundings and stereoscopically rear-projected
onto a screen for a single participant, a result of this can be seen in
figure
\begin_inset CommandInset ref
LatexCommand ref
reference "fig:stereoscopic"
plural "false"
caps "false"
noprefix "false"
\end_inset
.
\end_layout
\begin_layout Standard
\begin_inset Float figure
wide false
sideways false
status open
\begin_layout Plain Layout
\align center
\begin_inset Graphics
filename ../media/telepresence-stereoscopic.png
lyxscale 30
width 40col%
\end_inset
\end_layout
\begin_layout Plain Layout
\begin_inset Caption Standard
\begin_layout Plain Layout
An example of stereoscopic projection of depth aware footage captured during
\begin_inset CommandInset citation
LatexCommand cite
key "Immersive-telepresence"
literal "false"
\end_inset
\begin_inset CommandInset label
LatexCommand label
name "fig:stereoscopic"
\end_inset
\end_layout
\end_inset
\end_layout
\begin_layout Plain Layout
\end_layout
\end_inset
\end_layout
\begin_layout Standard
The
\noun on
Microsoft Research
\noun default
paper demonstrates a system using 8 cameras surrounding a space.
Each camera captured both Near Infra-Red and colour images to construct
a colour-depth video stream, .
\end_layout
\begin_layout Subsection
Multi-Source Holoportation
\end_layout
\begin_layout Standard
The space of work implementing multi-source holoportation has been explored
in works such as
\begin_inset CommandInset citation
LatexCommand cite
key "group-to-group-telepresence"
literal "false"
\end_inset
in the context of shared architectural design spaces in virtual reality
similar to a conference call.
Two groups of people were captured in 3D using clusters of
\noun on
2019-12-11 20:51:53 +00:00
Kinect
2020-01-09 09:37:42 +00:00
\noun default
cameras before having these renders transmitted to the other group.
Each group reconstructs the other's render for display in virtual reality
in conjunction with their own.
In doing so a shared virtual space for the two groups has been created
and it can be seen to implement the process of holoportation.
The shared architectural design experience is emergent of the semantics
of the virtual space where a World in Miniature (WIM) metaphor is used.
\end_layout
\begin_layout Subsubsection
Worlds in Miniature
\end_layout
\begin_layout Standard
2020-01-09 14:10:03 +00:00
The Worlds in Miniature is described in
2020-01-09 09:37:42 +00:00
\begin_inset CommandInset citation
LatexCommand cite
key "wim"
literal "false"
\end_inset
as a set of interfaces between the user and the virtual space they experience
using tactile and visual tools.
The interface involves providing the user with a miniature render of the
2020-01-09 14:10:03 +00:00
world they are inhabiting that can interacted with in order to affect the
full scale environment around them.
2020-01-09 09:37:42 +00:00
\end_layout
\begin_layout Standard
This navigation tool maps well to the architecture groupware structure of
\begin_inset CommandInset citation
LatexCommand cite
key "group-to-group-telepresence"
literal "false"
\end_inset
, an image captured during the work can be seen in figure
\begin_inset CommandInset ref
LatexCommand ref
reference "fig:World-in-Miniature-group-by-group"
plural "false"
caps "false"
noprefix "false"
\end_inset
.
\end_layout
\begin_layout Standard
\begin_inset Float figure
wide false
sideways false
status open
\begin_layout Plain Layout
\align center
\begin_inset Graphics
filename ../media/group-by-group.png
lyxscale 30
width 50col%
\end_inset
\end_layout
\begin_layout Plain Layout
\begin_inset Caption Standard
\begin_layout Plain Layout
World in Miniature render demonstrated in a multi-source holoporation context
during
\begin_inset CommandInset citation
LatexCommand cite
key "group-to-group-telepresence"
literal "false"
\end_inset
\begin_inset CommandInset label
LatexCommand label
name "fig:World-in-Miniature-group-by-group"
\end_inset
\end_layout
\end_inset
\end_layout
\end_inset
2019-12-11 20:51:53 +00:00
\end_layout
2019-12-10 20:06:32 +00:00
\begin_layout Section
LiveScan3D
\end_layout
2019-12-11 20:51:53 +00:00
\begin_layout Standard
\noun on
LiveScan3D
\noun default
is a suite of software developed by Marek Kowalski, Jacek Naruniec and
Michal Daniluk of the Warsaw University of Technology in 2015
\begin_inset CommandInset citation
LatexCommand cite
key "livescan3d"
literal "false"
\end_inset
.
The suite utilises the
\noun on
Xbox Kinect
\noun default
2019-12-19 01:12:54 +00:00
v2 camera to record and transmit 3D renders over an IP network.
2020-01-05 15:31:33 +00:00
A server can manage multiple clients simultaneously and is responsible
for processing, reconstructing and displaying the renderings in real-time.
\end_layout
\begin_layout Standard
These renderings take the form of a point cloud, a collection of 3D co-ordinates
indicating the position of each voxel (3D pixel) and it's associated RGB
colour value.
As a result of it's analogous nature to a traditional frame of 2D video,
the terms
\begin_inset Quotes eld
\end_inset
render
\begin_inset Quotes erd
\end_inset
,
\begin_inset Quotes eld
\end_inset
point cloud
\begin_inset Quotes erd
\end_inset
and
\begin_inset Quotes eld
\end_inset
frame
\begin_inset Quotes erd
\end_inset
are used interchangeably from here.
2019-12-11 20:51:53 +00:00
\end_layout
\begin_layout Subsection
2019-12-19 01:12:54 +00:00
\noun on
LiveScan
\noun default
Client
\end_layout
\begin_layout Standard
The
\noun on
LiveScan
\noun default
Client is responsible for interfacing with the
\noun on
Kinect
\noun default
sensor via the
\noun on
Kinect
\noun default
v2 SDK and transmitting frames to the
\noun on
LiveScan
\noun default
Server.
Body detection takes place client side, as does calibration when using
multiple sensors.
2019-12-11 20:51:53 +00:00
\end_layout
\begin_layout Subsection
2019-12-19 01:12:54 +00:00
\noun on
LiveScan
\noun default
Server
2019-12-11 20:51:53 +00:00
\end_layout
\begin_layout Standard
The server component of the
\noun on
LiveScan
\noun default
suite is responsible for managing and receiving 3D renders from connected
clients.
2019-12-13 13:48:47 +00:00
These renderings are reconstructed in an
\noun on
OpenGL
\noun default
2019-12-19 01:12:54 +00:00
window, the structure of the
\noun on
LiveScan
\noun default
server can be seen in figure
2019-12-13 13:48:47 +00:00
\begin_inset CommandInset ref
LatexCommand ref
reference "fig:server-structure"
plural "false"
caps "false"
noprefix "false"
\end_inset
.
\end_layout
\begin_layout Standard
\begin_inset Float figure
wide false
sideways false
status open
\begin_layout Plain Layout
\align center
\begin_inset Graphics
2019-12-16 23:57:43 +00:00
filename ../media/initial-state.png
2019-12-13 13:48:47 +00:00
lyxscale 30
width 50col%
\end_inset
\end_layout
\begin_layout Plain Layout
\begin_inset Caption Standard
\begin_layout Plain Layout
2020-01-09 14:10:03 +00:00
Initial architecture of the
2019-12-13 13:48:47 +00:00
\noun on
LiveScan3D
\noun default
server
\begin_inset CommandInset label
LatexCommand label
name "fig:server-structure"
\end_inset
\end_layout
\end_inset
\end_layout
\end_inset
\end_layout
\begin_layout Standard
The
\noun on
KinectServer
\noun default
is responsible for the network layer of the program, managing client connection
s via
\noun on
KinectSocket
\noun default
s and frame reception.
Received frames in the form of lists of vertices, RGB values, camera poses
and bodies override shared variables between the main window and the
\noun on
OpenGL
\noun default
window.
2019-12-11 20:51:53 +00:00
\end_layout
\begin_layout Subsection
2019-12-17 16:34:12 +00:00
Frame Geometry & Multi-View Configurations
2019-12-11 20:51:53 +00:00
\end_layout
2019-12-19 01:12:54 +00:00
\begin_layout Standard
When using a single client setup frames are transmitted in their own co-ordinate
space, the sensor is made the origin with the scene being rendered in front
of it.
\end_layout
\begin_layout Standard
When using multiple sensors, the server would be unable to combine these
unique Euclidean spaces without knowledge of the sensors relative positions.
\end_layout
\begin_layout Standard
In order to make a composite frame a calibration process is completed client
side following instruction by the server.
\end_layout
2019-12-03 10:14:59 +00:00
\begin_layout Section
Current Work
\end_layout
2020-01-09 09:37:42 +00:00
\begin_layout Standard
The required development to take the existing
\noun on
LiveScan
\noun default
2020-01-09 14:10:03 +00:00
codebase to the desired multi-source result can be split into two areas
of concern.
2020-01-09 09:37:42 +00:00
\end_layout
2020-01-09 14:10:03 +00:00
\begin_layout Labeling
\labelwidthstring 00.00.0000
\series bold
\emph on
Network
\series default
\emph default
The network layer of the
2020-01-09 09:37:42 +00:00
\noun on
LiveScan
\noun default
server must be updated in order to accommodate multiple clients logically
grouped into
\begin_inset Quotes eld
\end_inset
sources
\begin_inset Quotes erd
\end_inset
for which separate frames are collected for display.
\end_layout
2020-01-09 14:10:03 +00:00
\begin_layout Labeling
\labelwidthstring 00.00.0000
\series bold
\emph on
Display
\series default
\emph default
Finally the display element of the server should be extended to allow the
2020-01-09 09:37:42 +00:00
simultaneous presentation of multiple point clouds.
These objects should be individually arrangeable in the display space allowing
both movement and rotation.
\end_layout
2019-12-11 20:51:53 +00:00
\begin_layout Standard
As of January 2020 the method for displaying renderings, the server's
\noun on
OpenGL
\noun default
window, has been modified such that it can construct and render point clouds
from multiple sources.
2020-01-09 14:10:03 +00:00
To do so a dynamic sub-system of geometric transformations has been written
in order to coherently arrange sources within the space when reconstructed.
2020-01-09 09:37:42 +00:00
The default arrangements can be overridden with keyboard controls facilitating
2019-12-16 23:57:43 +00:00
arbitrary placement and rotation of separate sources within the
2019-12-11 20:51:53 +00:00
\noun on
2019-12-13 13:48:47 +00:00
OpenGL
2019-12-11 20:51:53 +00:00
\noun default
2019-12-13 13:48:47 +00:00
window's co-ordinate space.
2019-12-11 20:51:53 +00:00
\end_layout
\begin_layout Subsection
Geometric Transformations
\end_layout
\begin_layout Standard
Within the
\noun on
LiveScan3D
\noun default
2019-12-13 13:48:47 +00:00
server source code are utility structures and classes which were extended
in order to develop a wider geometric manipulation system.
2020-01-09 09:37:42 +00:00
Structures defining Cartesian coordinates in both 3D and 2D spaces called
2019-12-11 20:51:53 +00:00
\noun on
Point3f
\noun default
and
\noun on
Point2f
\noun default
respectively are used in drawing skeletons.
2020-01-09 14:10:03 +00:00
There is also a class defining an affine transformation, the definitions
for all three can be seen in appendix
\begin_inset CommandInset ref
LatexCommand ref
reference "sec:Existing-Data-Structures"
plural "false"
caps "false"
noprefix "false"
\end_inset
.
2019-12-11 20:51:53 +00:00
\end_layout
\begin_layout Standard
2020-01-09 09:37:42 +00:00
Affine transformations are a family of geometric transformations that preserve
2019-12-11 20:51:53 +00:00
parallel lines within geometric spaces.
Some examples of affine transformations include scaling, reflection, rotation,
translation and shearing.
\end_layout
\begin_layout Standard
The class definition is made up of a three-by-three transformation matrix
2020-01-09 09:37:42 +00:00
and single 3D vector for translation, within the initial code it is used
for both camera poses and world transformations.
\end_layout
\begin_layout Standard
A camera pose is the affine transformation defining the position and orientation
of the
2019-12-11 20:51:53 +00:00
\noun on
Kinect
\noun default
camera when drawn in the
\noun on
OpenGL
\noun default
2020-01-09 09:37:42 +00:00
space as a green cross.
2019-12-11 20:51:53 +00:00
The world transformations are used when using multiple sensors simultaneously.
When completing the calibration process, the origin of the
\noun on
OpenGL
\noun default
space shifts from being the position of the single
\noun on
Kinect
\noun default
sensor to being the calibration markers that each camera now orbits.
The server, however, still receives renders from each sensor defined by
their own Euclidean space and as such the server must transform each view
into a composite one.
The world transforms define the transformations for each sensor that correctly
construct a calibrated 3D render.
\end_layout
\begin_layout Standard
When considering how each source's render would be arranged in the space
the use of this class definition of affine transformations was extended.
As the use of the class is fairly limited within the base source code,
some utility classes and functions were required in order to fully maximise
their effectiveness.
\end_layout
\begin_layout Standard
The
\noun on
Transformer
\noun default
class has static methods to apply
\noun on
AffineTransform
\noun default
s to both
\noun on
Point3f
\noun default
structures and raw vertices when received from
\noun on
LiveScan
\noun default
clients.
\end_layout
\begin_layout Standard
It also has static methods to generate affine transformations for rotations
in each axis given an arbitrary angle.
This provided a foundation on which to define how the
\noun on
OpenGL
\noun default
space would arrange separate sources within it's combined co-ordinate space.
\end_layout
\begin_layout Subsection
2019-12-16 23:57:43 +00:00
Separation of Network and Presentation Layer
\end_layout
\begin_layout Standard
During initial testing frames received from a live sensor were intercepted
2020-01-09 14:10:03 +00:00
and serialized to XML in local storage.
These frames were loaded into memory as the server was started and merged
with those received live before display.
2019-12-16 23:57:43 +00:00
\end_layout
\begin_layout Standard
The composite frame can be seen in figure
\begin_inset CommandInset ref
LatexCommand ref
reference "fig:Initial-composite-frame"
plural "false"
caps "false"
noprefix "false"
\end_inset
.
\end_layout
\begin_layout Standard
\begin_inset Float figure
wide false
sideways false
status open
\begin_layout Plain Layout
\align center
\begin_inset Graphics
filename ../media/pretransform.jpg
lyxscale 10
width 50col%
\end_inset
\end_layout
\begin_layout Plain Layout
\begin_inset Caption Standard
\begin_layout Plain Layout
2020-01-09 14:10:03 +00:00
Initial multi-source composite testing frame
2019-12-16 23:57:43 +00:00
\begin_inset CommandInset label
LatexCommand label
name "fig:Initial-composite-frame"
\end_inset
\end_layout
\end_inset
\end_layout
\end_inset
\end_layout
\begin_layout Standard
The objects can be seen to be occupying the same space due to their similar
2020-01-09 14:10:03 +00:00
positions in the frame during capture.
2019-12-16 23:57:43 +00:00
This is not a sufficient solution for displaying separate sources and so
2020-01-09 14:10:03 +00:00
geometric transformations like those mentioned above were employed to separate
the two.
The change in software structure at this stage can be seen in figure
2019-12-16 23:57:43 +00:00
\begin_inset CommandInset ref
LatexCommand ref
reference "fig:Initial-testing-layout"
plural "false"
caps "false"
noprefix "false"
\end_inset
.
A rotation of 180° in the
\begin_inset Formula $y$
\end_inset
axis pivoted the frames such that they faced those being received live,
the results can be seen in figure
\begin_inset CommandInset ref
LatexCommand ref
reference "fig:180-degree-rotation"
plural "false"
caps "false"
noprefix "false"
\end_inset
.
\end_layout
\begin_layout Standard
\begin_inset Float figure
wide false
sideways false
status open
\begin_layout Plain Layout
\align center
\begin_inset Graphics
filename ../media/local-testing.png
lyxscale 30
width 70col%
\end_inset
\end_layout
\begin_layout Plain Layout
\begin_inset Caption Standard
\begin_layout Plain Layout
Initial testing process transforming frames loaded from local storage
\begin_inset CommandInset label
LatexCommand label
name "fig:Initial-testing-layout"
\end_inset
\end_layout
\end_inset
\end_layout
\begin_layout Plain Layout
\end_layout
\end_inset
\end_layout
\begin_layout Standard
\begin_inset Float figure
wide false
sideways false
status open
\begin_layout Plain Layout
\align center
\begin_inset Graphics
filename ../media/180flip.jpg
lyxscale 10
width 50col%
\end_inset
\end_layout
\begin_layout Plain Layout
\begin_inset Caption Standard
\begin_layout Plain Layout
2020-01-09 14:10:03 +00:00
Composite testing frame following 180° rotation of recorded source in
2019-12-16 23:57:43 +00:00
\begin_inset Formula $y$
\end_inset
axis
\begin_inset CommandInset label
LatexCommand label
name "fig:180-degree-rotation"
\end_inset
\end_layout
\end_inset
\end_layout
\begin_layout Plain Layout
\end_layout
\end_inset
\end_layout
\begin_layout Standard
At this point it was noted that transforming and arranging figures within
the main window before passing the
\noun on
OpenGL
\noun default
window a complete point cloud spreads responsibility for the display process
logic to the main window.
\end_layout
\begin_layout Standard
\noun on
LiveScan3D
\noun default
is capable of supporting more display methods than just the native
\noun on
OpenGL
\noun default
implementation with versions available for both
\noun on
Microsoft Hololens
\noun default
and Mobile AR applications.
2020-01-09 14:10:03 +00:00
Therefore when designing the multi-source capabilities, the separation
of logic between the network and presentation layer is important.
2019-12-16 23:57:43 +00:00
The way in which the
\noun on
OpenGL
\noun default
2020-01-09 14:10:03 +00:00
window arranges the figures in it's display space should be defined by
the
2019-12-16 23:57:43 +00:00
\noun on
OpenGL
\noun default
2020-01-09 14:10:03 +00:00
window itself.
2019-12-16 23:57:43 +00:00
The network layer should be display agnostic and not make assumptions about
how the display will process figures.
\end_layout
\begin_layout Standard
In order to follow this design the transformations were moved to instead
occur within the
\noun on
OpenGL
\noun default
window class.
To allow this the shared variables between the
\noun on
MainWindow
\noun default
and
\noun on
OpenGL
\noun default
were changed.
2020-01-09 14:10:03 +00:00
A Frame structure was defined to wrap an individual point cloud with a
client ID to allow differentiation, the definition can be seen in appendix
\begin_inset CommandInset ref
LatexCommand ref
reference "subsec:Frame"
plural "false"
caps "false"
noprefix "false"
\end_inset
.
2019-12-16 23:57:43 +00:00
The structure holds fields for each of the lists previously shared between
the two objects including a list of vertices or co-ordinates and the RGB
values for each as well as the camera poses and bodies.
\end_layout
\begin_layout Standard
The original
\noun on
LiveScan3D
\noun default
2020-01-09 14:10:03 +00:00
cleared each of these variables before retrieving a new frame, when moving
2019-12-16 23:57:43 +00:00
to a multi-source architecture the ability to individually update source
2020-01-09 14:10:03 +00:00
point clouds was noted as being important.
This would remove blocking the entire display when unable to receive frames
from a specific client, other clients would still be able to have frames
updated promptly.
2019-12-16 23:57:43 +00:00
\end_layout
\begin_layout Standard
To accomplish this a dictionary was used as the shared variable with each
clients frame being keyed by it's client ID.
In doing so only one frame per client is kept and each new frame overrides
the last.
During rendering the dictionary is iterated through and each point cloud
combined.
Before combination a client specific transformation is retrieved from an
instance of the
\noun on
DisplayFrameTransformer
\noun default
class.
This object is a member of the
\noun on
OpenGL
\noun default
window and is responsible for defining the orientation and position of
each point cloud.
\end_layout
\begin_layout Subsection
DisplayFrameTransformer
\end_layout
2019-12-17 16:34:12 +00:00
\begin_layout Standard
The
\noun on
DisplayFrameTransformer
\noun default
is responsible for generating transformations for the sources displayed
within the
\noun on
OpenGL
\noun default
2020-01-09 14:10:03 +00:00
window, a UML diagram for the class can be seen in figure
\begin_inset CommandInset ref
LatexCommand ref
reference "fig:UML-displayframetransformer"
plural "false"
caps "false"
noprefix "false"
\end_inset
.
\end_layout
\begin_layout Standard
\begin_inset Float figure
wide false
sideways false
status open
\begin_layout Plain Layout
\align center
\begin_inset Graphics
filename ../media/DisplayFrameTransformer.png
lyxscale 30
width 50col%
\end_inset
\end_layout
\begin_layout Plain Layout
\begin_inset Caption Standard
\begin_layout Plain Layout
UML diagram for
\noun on
DisplayFrameTransformer
\noun default
\begin_inset CommandInset label
LatexCommand label
name "fig:UML-displayframetransformer"
\end_inset
\end_layout
\end_inset
\end_layout
\begin_layout Plain Layout
\end_layout
\end_inset
2019-12-17 16:34:12 +00:00
\end_layout
\begin_layout Standard
Each client is assigned a default transformation which can be overridden
using keyboard controls.
\end_layout
\begin_layout Standard
2020-01-09 14:10:03 +00:00
Clients are initially arranged in a circle around the origin in the center
2019-12-17 16:34:12 +00:00
of the space.
This is done by retrieving a transformation for a rotation in the
\begin_inset Formula $y$
\end_inset
axis for each client number,
\begin_inset Formula $n$
\end_inset
, using the below,
\end_layout
\begin_layout Standard
\begin_inset Formula
\[
\alpha\left(n\right)=\frac{n}{client\:total}\cdotp360\textdegree
\]
\end_inset
\end_layout
\begin_layout Standard
Similar to the shared variables between the
\noun on
MainWindow
\noun default
and
\noun on
OpenGL
\noun default
window, client transformations are stored within a dictionary indexed by
client ID.
\end_layout
\begin_layout Standard
The
\noun on
DisplayFrameTransformer
\noun default
also has methods to override these initial transforms with the RotateClient()
and TranslateClient() methods.
When these methods are called for the first time for a client an object
2020-01-09 14:10:03 +00:00
defining the position and rotation is populated using the default rotation.
From here the presence of a client override results in applied transforms
being defined by these values as opposed to the default orientation.
\end_layout
\begin_layout Standard
This leaves the current architecture of the server application as described
in figure
\begin_inset CommandInset ref
LatexCommand ref
reference "fig:current-state-diagram"
plural "false"
caps "false"
noprefix "false"
\end_inset
.
2019-12-17 16:34:12 +00:00
\end_layout
2019-12-16 23:57:43 +00:00
\begin_layout Standard
\begin_inset Float figure
wide false
sideways false
status open
\begin_layout Plain Layout
\align center
\begin_inset Graphics
filename ../media/december-state.png
lyxscale 30
width 60col%
\end_inset
\end_layout
\begin_layout Plain Layout
\begin_inset Caption Standard
\begin_layout Plain Layout
2019-12-17 16:34:12 +00:00
Current state of
\noun on
LiveScan
\noun default
server structure with
2019-12-16 23:57:43 +00:00
\noun on
OpenGL
\noun default
window-based transformer
\begin_inset CommandInset label
LatexCommand label
name "fig:current-state-diagram"
\end_inset
\end_layout
\end_inset
\end_layout
\begin_layout Plain Layout
\end_layout
\end_inset
2019-12-11 20:51:53 +00:00
\end_layout
2020-01-09 14:10:03 +00:00
\begin_layout Subsection
Control Scheme
\end_layout
\begin_layout Standard
The movement of objects within the
\noun on
OpenGL
\noun default
space is conducted through keyboard controls.
While mouse control would fine-grained and intuitive, the axes of motion
and rotation available to objects makes defining specific keys for each
more flexible.
This additionally removes the need to redefine or overload the camera controls.
\end_layout
\begin_layout Standard
The
\begin_inset Quotes eld
\end_inset
I
\begin_inset Quotes erd
\end_inset
key is used to cycle through displayed sources, the currently selected
source is the subject of each of the movement actions.
Sources are moved across the horizontal plane (
\family roman
\series medium
\shape up
\size normal
\emph off
\bar no
\strikeout off
\xout off
\uuline off
\uwave off
\noun off
\color none
\begin_inset Formula $x$
\end_inset
\family default
\series default
\shape default
\size default
\emph default
\bar default
\strikeout default
\xout default
\uuline default
\uwave default
\noun default
\color inherit
and
\family roman
\series medium
\shape up
\size normal
\emph off
\bar no
\strikeout off
\xout off
\uuline off
\uwave off
\noun off
\color none
\begin_inset Formula $z$
\end_inset
\family default
\series default
\shape default
\size default
\emph default
\bar default
\strikeout default
\xout default
\uuline default
\uwave default
\noun default
\color inherit
axis) of the display space using a WASD-esque layout of the UHJK keys.
Objects can be rotated about the vertical (
\begin_inset Formula $y$
\end_inset
) axis using the B and N keys.
Finally the placement of an object can be reset to default using the R
key, the addition of the shift modifier resets all clients.
\end_layout
\begin_layout Standard
Worth noting is that this represents arbitrary placement of sources in two
axes of position and one of rotation.
This is a result of these being the most common and intuitive axes with
which sources will need to be manipulated.
The ability to allow movement in all degrees would require only binding
these actions to keys.
\end_layout
2020-01-09 19:43:23 +00:00
\begin_layout Standard
There is room to improve these controls, however, as the directions of movement
for selected objects are in relation to the fixed axes of the display space
as opposed to the view of the viewpoint camera.
In practice this means that when moving objects in the display space the
orientation of the space must be considered in order to identify which
direction the object should be moved.
This is less intuitive than could be expected in other areas where such
a control scheme is used such as video games or modelling software.
In such implementations when moving objects the directions are typically
taken from the camera's frame of reference and as the feasibility of employing
a similar control philosophy should be considered.
\end_layout
2019-12-03 10:14:59 +00:00
\begin_layout Section
Future Work
\end_layout
2020-01-09 09:37:42 +00:00
\begin_layout Standard
Following the extension of the
\noun on
OpenGL
\noun default
window, the network layer of the
\noun on
KinectServer
\noun default
2020-01-09 14:10:03 +00:00
can now be developed with the advantage of a fully functional display method
for debugging.
\end_layout
\begin_layout Standard
The aim of this aspect of the project will be to alter the the
\noun on
KinectServer
\noun default
in order to allow the logical grouping of connected clients into sources
for separate display.
\end_layout
\begin_layout Standard
When integrated together the server as a whole will then be able to collect
discrete point clouds from different sources and coherently display them
separately in the space, in doing so achieving the objectives for this
project3.
\end_layout
\begin_layout Subsection
Network Layer Design Considerations
\end_layout
\begin_layout Standard
Some thought as to the design for the network layer has been undertaken.
Although this has not yielded a final design for implementation, it has
made apparent some of the conditions and constraints which must be considered.
\end_layout
\begin_layout Standard
When considering the initial steps for the project, it was thought that
the network layer should be developed first.
The design would involve separating much of the logic contained within
the
\noun on
KinectServer
\noun default
object into a new
\noun on
KinectSource
\noun default
object which would represent a group of clients acting as a single source.
It would function as a group of
\noun on
KinectSocket
\noun default
s that could be individually polled for new frames using the same interface
currently being used by the
\noun on
KinectServer
\noun default
.
The
\noun on
KinectServer
\noun default
object itself would be reduced to simply managing these
\noun on
KinectSource
\noun default
s.
\end_layout
\begin_layout Standard
2020-01-09 19:43:23 +00:00
An advantage of this approach would be that it could also contain the additional
information which should exist per source such as the calibration data
and settings.
2020-01-09 14:10:03 +00:00
\end_layout
\begin_layout Standard
2020-01-09 19:43:23 +00:00
However it would have also represented a significant architecture change
2020-01-09 14:10:03 +00:00
in the entire server application and without a functioning display method
2020-01-09 19:43:23 +00:00
it would have been challenging to debug.
2020-01-09 14:10:03 +00:00
As a result, it was instead decided to work on the display method first.
\end_layout
\begin_layout Standard
Coming back to the network design following this work, a different method
has been considered.
A separate piece of work currently being undertaken is investigating the
2020-01-09 19:43:23 +00:00
network behaviour of the suite with focus on unblocking the sockets and
2020-01-09 14:10:03 +00:00
aid in the parallel operation of the server.
\end_layout
\begin_layout Standard
2020-01-09 19:43:23 +00:00
Considerations from this work in combination with an emphasis on simplicity
has suggested a new approach.
2020-01-09 14:10:03 +00:00
\end_layout
\begin_layout Subsubsection
Socket Handshake
\end_layout
\begin_layout Standard
A handshake process has been suggested for when new clients connect to the
\noun on
KinectServer
\noun default
.
The aim is to implement the method by which clients are grouped into sources
but also to solve how clients identify themselves consistently when communicati
ng over multiple sockets.
Multiple sockets can be used by clients in order to make simultaneous connectio
ns to the server and increase bandwidth.
However when doing so it is important to be able to identify which sockets
represent which client.
\end_layout
\begin_layout Standard
The proposed handshake would be initiated by the client when connecting
to the server, at this point they include which source they should be grouped
with using an integer ID.
The server groups the socket as such and, if one has not been received,
responds with a random identifier string that should be used across all
sockets to identify the client.
Should the newly connected socket be for a client that is already connected
then the client will respond with it's existing identifier to inform the
server that this ID has been ignored.
In doing so the client now has a method of identifying itself agnostic
of socket, and the server has a way of identifying the source which is
frame is representing.
\end_layout
\begin_layout Subsection
Deliverables and Additional Goals
\end_layout
\begin_layout Standard
At this point in the project it is worth considering the viability of the
final deliverables with relation to the time remaining.
Based on the work completed so far the original objectives of multi-source
holoportation remain viable with a round of complete testing defined and
employed.
\end_layout
\begin_layout Standard
This testing suite is yet to be defined but will comprise performance evaluation
for both the network and display aspects of the software.
\end_layout
\begin_layout Standard
Should the original specification be delivered and evaluated with time remaining
, additional goals and investigations should be examined.
2020-01-09 19:43:23 +00:00
Initially, aspects already completed should be investigated for further
refinement, namely the control scheme as mentioned above.
\end_layout
\begin_layout Standard
Additionally, when considering the design principle of network and presentation
separation in combination with the relevance of the technology to the spaces
of AR and VR, an interesting analysis could be made into the applicability
of multi-source network developments to additional display methods.
2020-01-09 14:10:03 +00:00
Mobile AR and
\noun on
Hololens
\noun default
display for
\noun on
LiveScan
\noun default
have both been demonstrated and either could prove interesting when considered
in a multi-source context.
\end_layout
\begin_layout Subsection
Final Report Structure
\end_layout
\begin_layout Standard
2020-01-09 19:43:23 +00:00
The final report for the project will, to an extent, be based off of this
2020-01-09 14:10:03 +00:00
piece in terms of structure and content.
The literature review will be expanded to include an investigation of simultane
ous video streaming in order to contextualise the coming work on the network
layer of the application suite.
\end_layout
\begin_layout Standard
A results section will describe the quantitative and qualitative results
of the final product, these will then be evaluated and discussed in the
discussion section.
At this point a discussion can also be had about further developments that
can be made, both to the
\noun on
LiveScan
\noun default
2020-01-09 19:43:23 +00:00
codebase but also to the multi-source version presented by this project.
2020-01-09 14:10:03 +00:00
The structure will be as follows,
\end_layout
\begin_layout Itemize
Title Page
\end_layout
\begin_layout Itemize
Abstract
\end_layout
\begin_layout Itemize
Table of Contents
\end_layout
\begin_deeper
\begin_layout Itemize
Including lists of figures, code listings
\end_layout
\end_deeper
\begin_layout Itemize
Acknowledgements
\end_layout
\begin_layout Itemize
Introduction
\end_layout
\begin_layout Itemize
Literature Review
\end_layout
\begin_layout Itemize
Methodology and Developments
\end_layout
\begin_layout Itemize
Results
\end_layout
\begin_layout Itemize
Discussion
\end_layout
\begin_deeper
\begin_layout Itemize
2020-01-09 19:43:23 +00:00
A description of possible further developments
2020-01-09 14:10:03 +00:00
\end_layout
\end_deeper
\begin_layout Itemize
Conclusion
\end_layout
\begin_layout Itemize
References
\end_layout
\begin_layout Itemize
Appendices
2020-01-09 09:37:42 +00:00
\end_layout
2019-12-03 10:14:59 +00:00
\begin_layout Section
Summary
\end_layout
2020-01-09 19:43:23 +00:00
\begin_layout Standard
Within this piece the process of extending the
\noun on
LiveScan3D
\noun default
software to include multi-source holoportation has been introduced.
The use of such a system has many applications from uses inherited from
it's 2D video basis such as conference calls to new utilisations that are
wholly unique to the environment.
\end_layout
\begin_layout Standard
The literature review contextualises the
\noun on
LiveScan
\noun default
suite and the wider spaces of AR, VR, 3D video and multi-source holoportation
itself.
Previous examples of holoportation are described and their aims of achieving
telepresence are discussed.
\end_layout
\begin_layout Standard
The current state of the project is laid out showing good progress through
the required areas of development.
Of the display and network layers requiring development to fulfil the project,
the display element has been extended in order to allow the rendering of
multiple environments simultaneously with a dynamic sub-system of geometric
transformations.
The transforms are responsive to user input allowing arbitrary placement
and orientation of individual sources within the display space.
While this control interface allows free movement in the most naturally
traversed axes it could use some additional tuning to make it feel more
intuitive.
\end_layout
\begin_layout Standard
The next steps for the project leading up to its completion are presented,
the initial and current plans for the remaining work is described and additiona
l stretch goals are defined for any additional time.
How the work will be presented in a final report is also described.
\end_layout
2019-12-03 10:14:59 +00:00
\begin_layout Section
Conclusions
\end_layout
2020-01-09 14:10:03 +00:00
\begin_layout Standard
2020-01-09 19:43:23 +00:00
At roughly halfway through the time allowed for the project the native display
methods have successfully been extended to meet the deliverable specification.
This involves allowing the display of multiple sources while also allowing
arbitrary placement and orientation within the display space.
2020-01-09 14:10:03 +00:00
\end_layout
\begin_layout Standard
From this point the network layer of the suite will be developed to also
2020-01-09 19:43:23 +00:00
match the specification, allowing connected clients to be grouped into
sources for polling and processing.
2020-01-09 14:10:03 +00:00
\end_layout
\begin_layout Standard
Following the development of the two, testing methodologies will be defined
and carried out to gather quantitative results for the final product.
A final report on the results will be available in May 2020.
\end_layout
2019-12-06 16:28:10 +00:00
\begin_layout Standard
\begin_inset Newpage pagebreak
\end_inset
\end_layout
2019-12-03 10:14:59 +00:00
\begin_layout Standard
\begin_inset CommandInset bibtex
LatexCommand bibtex
btprint "btPrintCited"
bibfiles "references"
options "bibtotoc"
\end_inset
2020-01-09 09:37:42 +00:00
\end_layout
2020-01-09 14:10:03 +00:00
\begin_layout Section
2020-01-09 09:37:42 +00:00
\start_of_appendix
2020-01-09 14:10:03 +00:00
Existing Data Structures
\begin_inset CommandInset label
LatexCommand label
name "sec:Existing-Data-Structures"
\end_inset
\end_layout
\begin_layout Standard
\begin_inset CommandInset include
LatexCommand lstinputlisting
filename "../snippets/point2f.cs"
lstparams "language={[Sharp]C},keywordstyle={\\color{blue}},commentstyle={\\color{magenta}\\itshape},emphstyle={\\color{red}},basicstyle={\\ttfamily},stringstyle={\\color{green}},identifierstyle={\\color{cyan}},caption={Cartesian coordinate in 2 dimensions}"
\end_inset
\end_layout
\begin_layout Standard
\begin_inset CommandInset include
LatexCommand lstinputlisting
filename "../snippets/point3f.cs"
lstparams "language={[Sharp]C},keywordstyle={\\color{blue}},commentstyle={\\color{magenta}\\itshape},emphstyle={\\color{red}},basicstyle={\\ttfamily},stringstyle={\\color{green}},identifierstyle={\\color{cyan}},caption={Cartesian coordinate in 3 dimensions}"
\end_inset
\end_layout
\begin_layout Standard
\begin_inset CommandInset include
LatexCommand lstinputlisting
filename "/home/andy/uni/dissertation/snippets/affinetransform.cs"
lstparams "language={[Sharp]C},keywordstyle={\\color{blue}},commentstyle={\\color{magenta}\\itshape},emphstyle={\\color{red}},basicstyle={\\ttfamily},stringstyle={\\color{green}},identifierstyle={\\color{cyan}},caption={Affine transformation matrix with translation}"
\end_inset
\end_layout
\begin_layout Section
New Data Structures
\end_layout
\begin_layout Subsection
Frame
\begin_inset CommandInset label
LatexCommand label
name "subsec:Frame"
\end_inset
\end_layout
\begin_layout Standard
\begin_inset CommandInset include
LatexCommand lstinputlisting
filename "../snippets/frame.cs"
lstparams "language={[Sharp]C},keywordstyle={\\color{blue}},commentstyle={\\color{magenta}\\itshape},emphstyle={\\color{red}},basicstyle={\\ttfamily},stringstyle={\\color{green}},identifierstyle={\\color{cyan}},caption={Point cloud with Client ID}"
2020-01-09 09:37:42 +00:00
\end_inset
2019-12-03 10:14:59 +00:00
\end_layout
\end_body
\end_document