Exploratory Programming of Distributed Augmented Environments
Total Page:16
File Type:pdf, Size:1020Kb
Exploratory Programming of Distributed Augmented Environments Blair MacIntyre Submitted in partial fulfillment of the requirements for the degree of Doctor of Philosophy in the Graduate School of Arts and Sciences COLUMBIA UNIVERSITY 1999 © 1999 Blair MacIntyre All Rights Reserved Abstract Exploratory Programming of Distributed Augmented Environments Blair MacIntyre Augmented reality is a form of virtual reality that uses see-through displays to enhance the world with computer-generated material. When combined with more traditional displays, a powerful augmented environment emerges in which two and three dimensional informa- tion can be presented to a user simultaneously on a combination of displays. Prototyping these environments is challenging both because they are highly distributed, interactive sys- tems, and because of the exploratory nature of building systems for new interaction para- digms. We have developed a testbed for exploratory programming of distributed augmented envi- ronments, called Coterie. A single programming model is used for both single and multi- process programs by building applications as groups of threads communicating via shared objects. The distributed programming model is distributed object memory (DOM), an object-based approach to distributed shared memory. Coterie’s DOM presents the pro- grammer with both client-server and replicated distributed objects. Both interpreted (Repo) and compiled (Modula-3) languages present the application pro- grammer with similar DOM programming models. Modula-3’s replicated objects are implemented using Shared Objects, an object replication package that is tightly integrated with the Modula-3 object system and designed to be flexible and easy-to-use. Repo is implemented using the Shared Object package, and presents the programmer with an interpreted language that supports both client-server and replicated objects uniformly across its entire type system. The final important component of Coterie is Repo-3D, a high-level, distributed graphics library, built using the Shared Objects package and tightly integrated with Repo. By making all graphical objects extensible and transparently distrib- utable, programmers can use Repo-3D scene graphs as the basis for their application data structures, allowing complex distributed graphical applications to be created in a straight- forward manner. Numerous stand-alone and distributed augmented environment systems have been devel- oped using Coterie, and demonstrate its usefulness. These include an architectural anat- omy system for viewing the support structures inside the walls of a building, a construction assistant for space frame buildings, a maintenance and repair task for tele- phone crossboxes, an augmented reality tour guide, and a number of interface concepts for the National Tele-Immersion Initiative. Table of Contents CHAPTER 1 Introduction . 1 1.1 Exploratory Programming of Distributed Augmented Environments . 3 1.2 Research Contributions . 6 1.2.1 Shared Objects: A Distributed Shared Object Memory. 6 1.2.2 Repo: A Distributed Interpreted Language . 8 1.2.3 Repo-3D: A Distributed 3D Graphics Library. 9 1.2.4 Coterie: Exploratory Programming of AE Systems. 11 1.2.5 Prototype Augmented Reality Applications . 11 CHAPTER 2 An Overview of Coterie . 13 2.1 Previous Work: Augmented Reality . 13 2.1.1 KARMA. 14 2.1.2 Windows on the World. 15 2.1.3 Architectural Anatomy. 16 2.2 Motivation . 17 2.3 Requirements for the Testbed . 19 2.4 Related Research Areas . 22 2.4.1 Virtual Environment Systems . 22 2.4.2 Distributed Groupware. 25 2.5 Implementation Overview . 26 2.5.1 Virtual Environments: Tracker Support . 28 2.6 Initial Prototypes . 30 2.6.1 Architectural Anatomy. 30 2.6.2 Telephone Crossbox Maintenance . 31 2.6.3 Spaceframe Construction. 32 2.6.4 Automated Tour Guide . 33 CHAPTER 3 Shared Objects. 38 3.1 Distributed Shared Memory. 39 3.2 Related Work . 42 3.3 Shared Object Package Design . 47 3.3.1 Goal: Tight Integration. 47 3.3.2 Model: Totally Ordered, Write-Update Objects . 48 3.3.3 Event Driven Control Flow: Callback Objects . 53 3.4 Implementation . 54 3.4.1 Object Definition and Runtime Code Generation . 55 i 3.4.1.1 Example Object Definition . 56 3.4.1.2 Callback Object Usage . 61 3.4.1.3 Passing State Between Processes . 63 3.4.1.4 Additional Tracker Examples . 65 3.4.2 The Shared Object Runtime. 66 3.4.2.1 Thread Management . 68 3.4.2.2 Exception and Return Value Handling . 71 3.4.3 Restrictions . 72 3.5 Performance and Usability. 73 3.5.1 Shared Object Performance . 73 3.5.2 Shared Object Usability . 79 3.6 Discussion . 82 CHAPTER 4 Repo. 84 4.1 Related Work . 86 4.2 An Overview of Obliq and Repo . 87 4.3 Distributed Semantics . 88 4.4 Replication Syntax. 92 4.4.1 Declarations . 92 4.4.2 Cloning Data . 95 4.4.3 User-defined Picklers . 97 4.5 The Replication Module . 98 4.6 Examples . 99 4.6.1 Simple Tracker Report Distribution. 99 4.6.2 Asynchronous Change Notification . 101 4.6.3 Multi-person Spaceframe Construction . 102 4.6.4 Distributed Mutexes. 105 4.6.5 Hierarchical Object Directories . 108 4.7 Implementation . 111 4.8 Usability of Repo . 115 CHAPTER 5 Repo-3D . 118 5.1 Related Work . 121 5.2 Obliq-3D: An Overview. 123 5.3 Design Of Repo-3D . 126 5.3.1 Conversion to Shared Objects . 126 5.3.1.1 Graphical Objects . 127 5.3.1.2 Properties . 128 5.3.1.3 Animation Handles . 129 5.3.1.4 Input Callbacks . 131 5.3.1.5 Change Notification . 131 ii 5.3.2 Local Variations. 133 5.3.3 Extensibility . 135 5.4 Examples . 137 5.4.1 A Tutorial Example . 138 5.4.2 Yet Another Tracker Example . 138 5.4.3 A Truncated Pyramid Object . 140 5.4.4 An Animation Examiner . 141 5.5 Implementation . 144 5.6 Performance . 153 5.7 Discussion . 155 CHAPTER 6 Coterie Examples. ..