-
Notifications
You must be signed in to change notification settings - Fork 4
/
ops.tex
1307 lines (937 loc) · 45.6 KB
/
ops.tex
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
413
414
415
416
417
418
419
420
421
422
423
424
425
426
427
428
429
430
431
432
433
434
435
436
437
438
439
440
441
442
443
444
445
446
447
448
449
450
451
452
453
454
455
456
457
458
459
460
461
462
463
464
465
466
467
468
469
470
471
472
473
474
475
476
477
478
479
480
481
482
483
484
485
486
487
488
489
490
491
492
493
494
495
496
497
498
499
500
501
502
503
504
505
506
507
508
509
510
511
512
513
514
515
516
517
518
519
520
521
522
523
524
525
526
527
528
529
530
531
532
533
534
535
536
537
538
539
540
541
542
543
544
545
546
547
548
549
550
551
552
553
554
555
556
557
558
559
560
561
562
563
564
565
566
567
568
569
570
571
572
573
574
575
576
577
578
579
580
581
582
583
584
585
586
587
588
589
590
591
592
593
594
595
596
597
598
599
600
601
602
603
604
605
606
607
608
609
610
611
612
613
614
615
616
617
618
619
620
621
622
623
624
625
626
627
628
629
630
631
632
633
634
635
636
637
638
639
640
641
642
643
644
645
646
647
648
649
650
651
652
653
654
655
656
657
658
659
660
661
662
663
664
665
666
667
668
669
670
671
672
673
674
675
676
677
678
679
680
681
682
683
684
685
686
687
688
689
690
691
692
693
694
695
696
697
698
699
700
701
702
703
704
705
706
707
708
709
710
711
712
713
714
715
716
717
718
719
720
721
722
723
724
725
726
727
728
729
730
731
732
733
734
735
736
737
738
739
740
741
742
743
744
745
746
747
748
749
750
751
752
753
754
755
756
757
758
759
760
761
762
763
764
765
766
767
768
769
770
771
772
773
774
775
776
777
778
779
780
781
782
783
784
785
786
787
788
789
790
791
792
793
794
795
796
797
798
799
800
801
802
803
804
805
806
807
808
809
810
811
812
813
814
815
816
817
818
819
820
821
822
823
824
825
826
827
828
829
830
831
832
833
834
835
836
837
838
839
840
841
842
843
844
845
846
847
848
849
850
851
852
853
854
855
856
857
858
859
860
861
862
863
864
865
866
867
868
869
870
871
872
873
874
875
876
877
878
879
880
881
882
883
884
885
886
887
888
889
890
891
892
893
894
895
896
897
898
899
900
901
902
903
904
905
906
907
908
909
910
911
912
913
914
915
916
917
918
919
920
921
922
923
924
925
926
927
928
929
930
931
932
933
934
935
936
937
938
939
940
941
942
943
944
945
946
947
948
949
950
951
952
953
954
955
956
957
958
959
960
961
962
963
964
965
966
967
968
969
970
971
972
973
974
975
976
977
978
979
980
981
982
983
984
985
986
987
988
989
990
991
992
993
994
995
996
997
998
999
1000
\documentclass[11pt]{article}
\usepackage{mathptmx}
\usepackage{verbatim}
\usepackage[margin=1.25in]{geometry}
\usepackage{graphicx}
\usepackage{color}
\usepackage{xspace}
\usepackage{url}
\usepackage[colorlinks,
bookmarks=true,
hyperindex,
linkcolor={blue},
pdftitle={YURT Operations Manual}]{hyperref}
\newsavebox{\notebox}
\newenvironment{note}[1][Note]{\begin{lrbox}{\notebox}%
\begin{minipage}{0.9\columnwidth}\textcolor{red}{\textbf{#1}:~}}%
{\end{minipage}\end{lrbox}\begin{center}\setlength{\fboxsep}{8pt}%
\fbox{\usebox{\notebox}}\end{center}}
% \newenvironment{note}[1][Note]{%
% \begin{center}\setlength{\fboxsep}{10pt}
% \framebox\bgroup\begin{minipage}{0.9\columnwidth}\textbf{#1}:~}%
% {\end{minipage}\egroup\end{center}}
%{\textbf{#1}}{}
\newcommand{\yurt}{YURT\xspace}
\newcommand{\cmd}[1]{\texttt{#1}\xspace}
\newcommand{\dir}[1]{\textit{#1}\xspace}
\newcommand{\menu}[1]{``#1''\xspace}
\newcommand{\button}[1]{\framebox{\textsf{#1}\xspace}}
\newcommand{\file}[1]{\texttt{#1}\xspace}
\newcommand{\longcommand}[1]{-\rule{0pt}{1pt}-#1}
\newcommand{\argle}[1]{[#1]}
\newcommand{\bs}{$\backslash$}
\begin{document}
\title{Brown University YURT Operations Manual}
\author{Tom Sgouros}
\maketitle
\tableofcontents
\setlength{\parskip}{10pt}
\setlength{\parindent}{0pt}
\section{Access and safety}
\subsection{Access to catwalk}
Access to the catwalk is via the ladder leaning on the wall.
When doing work on the catwalk, there is a wooden grating that is to
be placed between the catwalk supports to prevent falls and dropping
items onto the mirrors below. There are two gratings stored under the
floor, just inside the eastern access door. Projectors shine through
those gaps so the gratings cannot be left in place.
\subsection{Access to upper mirrors and rear top of wall}
Inside the eastern access door to the under-floor area, there is a
platform with two long legs and two short legs. It is meant to sit
behind the front wall of the \yurt, with two short legs resting on the
back of the floor structure and the two long legs reaching down to the
actual room floor. From this platform, you can reach the bottom of
the catwalk, or the top of the upper mirrors.
\subsection{Removing upper projectors}
To remove an upper wall projector or a ceiling projector, please
follow these steps:
\begin{enumerate}
\item There is a small dolly that will fit on the catwalk, stored in
the work area behind the elevator.
\item Place safety grating over the nearest gap to the projector.
This is stored inside the eastern access door under the floor.
\item Loosen set screws on vertical shaft. The projector mount,
including the flat plate, and the shaft, must be removed with the
projector.
\item Slide projector and mount down and out of collar, place onto
dolly.
\end{enumerate}
\section{Care of Nodes}
The computers that run the \yurt are 20 server-class machines, named
cave001 through cave020. They each have 128G memory, and two network
interfaces, so are addressable as 172.20.160.X and 192.168.160.X,
where X is the number of the node, between 1 and 20. The projector
numbers correspond to the following cave nodes:
\begin{center}
\begin{tabular}{ll}
\textbf{Node} & \textbf{Projectors} \\ \hline
cave001 & 34,35,36,37 \\
cave002 & 30,31,32,33 \\
cave003 & 26,27,28,29 \\
cave004 & 22,23,24,25 \\
cave005 & 18,19,20,21 \\
cave006 & 14,15,16,17 \\
cave007 & 10,11,12,13 \\
cave008 & 7,8,9 \\
cave009 & 3,4,5,6 \\
cave010 & 0,1,2 \\
cave011 & 38,39,40,41 \\
cave012 & 44,45 \\
cave013 & 46,47,48,49 \\
cave014 & 50,51,52 \\
cave015 & 53,54,57,58 \\
cave016 & 55,56,59,60 \\
cave017 & 61,62,63,66 \\
cave018 & 64,65,67,68 \\
cave019 & 42,43 \\
cave020 & test \\
\end{tabular}
\end{center}
Cave node 20 is a spare computer, and is also used to power projectors
in the testing area. The test projector port can be addressed as
projector 70.
Each cave node carries four NVidia GPUs, one for each projector. The
GPUs are each mapped to a different X windows display, so cave001 has
cave001:0.0, cave001:0.1, cave001:0.2, and cave001:0.3.
\subsection{X11}
The X server is invoked in a locally written script called
\cmd{cavedm.conf}. This is where different command-line options
can be specified.
Do not modify the installed version of this file. During the
installation of the cave image, the init file found at
\cmd{/gpfs/runtime/nvidia/cave-X11/cavedm.conf} is copied to
\cmd{/etc/xinit}, where it is executed at boot time.
To restart the X server on a node, log into that node as cavedemo, and
run \cmd{killall unclutter}.
Find the relevant startx script here:
\cmd{/gpfs/runtime/nvidia/cave-X11/cave-startx}.
\subsection{NVidia driver}
To see details about the NVidia GPUs on a cave node, use the
\cmd{nvidia-smi} command. (Only works for the cavedemo user.)
You'll find all the installed drivers in
\cmd{/gpfs/runtime/nvidia}. There is a link to ``latest'' that
will indicate which driver has actually been installed on the cave nodes.
Upgrades to the NVidia drivers should be done with care. Upgrading
from v313 to v361 caused boot failures on two nodes.
\section{Projectors}
There are two documents we have from the projector manufacturer.
\begin{description}
\item[Brown 3D Spec Rev1 2011-11-21.pdf] The specification for the
projectors we have.
\item[DP HTD-8650\_Service Manual Guide.2015-4-30 Rev 01.pdf] A repair
manual for the projector breed that ours are hacked from.
\end{description}
Both documents can be found on the OSCAR system at
\cmd{/home/cavedemo/cave-documents}.
\subsection{Location}
The projectors are numbered 0 through 68, plus number 70, which is
used for machine control of projectors in the repair station.
\begin{center}
\begin{tabular}{ll}
0--9 & ceiling \\
10--37 & front wall \\
38--43 & west door \\
44--49 & east door \\
50--68 & floor \\
70 & repair station
\end{tabular}
\end{center}
\begin{center}
\includegraphics[width=5in]{ceiling.pdf}
\end{center}
\begin{center}
\includegraphics[width=5in]{wall.pdf}
\end{center}
\begin{center}
\includegraphics[width=5in]{floor.pdf}
\end{center}
\begin{center}
\includegraphics[width=4in]{doors.pdf}
\end{center}
\subsection{Operation}
\label{projector-operation}
Turn projectors on and off with the pjcontrol command.
The pjcontrol command also is used to configure the projector color
and brightness, and to log repairs and track inventory. The pjcontrol
script is part of the \cmd{cave-utils} module. Load this with:
\begin{verbatim}
$ module load cave-utils
\end{verbatim}
You can see a help message with \cmd{pjcontrol \longcommand{help}}.
\subsubsection{pjcontrol}
Synopsis:
\begin{verbatim}
pjcontrol.py [-h] [-s [SERIALNO]] [--clearErrs] [-d [MFGDATE]] [-a]
[-R] [-G]
[-r [{none,bulb,ballast,lens,board,install,uninstall,ship}]]
[-l [{none,long,short}]]
[-p [{none,spare,broken,installed,returned}]]
[-c [COMMENT]]
[projs] ...
\end{verbatim}
The pjcontrol script has two forms of usage, reference by projector
number, and reference by serial number. Reference by projector number
looks like the following.
\begin{verbatim}
$ pjcontrol projs command
\end{verbatim}
You can identify a projector by number individually, or in a list or
range:
\begin{verbatim}
$ pjcontrol 53 on
$ pjcontrol 33,34,35 on
$ pjcontrol 33-35 off
\end{verbatim}
The commands available are in the list below. Unique abbreviations
are allowed. Some of these arguments require further args. For example
'install' requires a serial number, switch name and port, and
location. And 'repair' needs a serial number.
\begin{description}
\item[on] Turns projector on. No arguments.
\item[off] Turns projector off. No arguments.
\item[power] Returns the power status (0 = standby, 1 = warm up, 2 = imaging,
3 = cooling, 4 = error)
\item[version] Returns a software version string for the projector firmware.
\item[mode] Return the operation mode (0 = mono, 2 = stereo)
\item[mono] Set the operation mode to mono (s3d.mode = 0).
\item[stereo] Set the operation mode to stereo (s3d.mode = 2).
\item[lamp] Return the lamp mode (0 = standard, 1 = economy).
\item[eco] Set the lamp mode to economy.
\item[std] Set the lamp mode to standard.
\item[hour] Return the lamp hour counter value.
\item[error] Print the error log.
\item[raw] Send a raw command to the projector. See the projector
manuals for a list of the commands. A command like the following
sets the red gain to 125.
\begin{verbatim}
$ pjcontrol 13 raw red.gain = 125
\end{verbatim}
\item[repair] Log a repair. (Please just use a single projector
number for this command.) This command needs a repair type and a
double-quoted comment.
\item[install] Install a projector at a given switch location. Use it
like this when you're replacing a projector:
\begin{verbatim}
$ pjcontrol 42 install WACY00041
\end{verbatim}
Use it like this if you have to replace the switch names as well:
\begin{verbatim}
$ pjcontrol 42 install WACY00041 switch03 1014 wall
\end{verbatim}
Where the three additional arguments represent the name of the serial
server switch, the number on the serial server that connects to the
right projector, and an arbitrary screen name.
\item[uninstall] Takes a serial number.
\item[report] Provide a report (from the projector database.
\item[gather] Gather the variables that will be sued in a report.
\end{description}
Reference by serial number looks like this:
\begin{verbatim}
$ pjcontrol -s WACY00060 -r "bulb" -c "replaced bulb with s/n WYL889214"
\end{verbatim}
Note that you cannot reference multiple projectors by serial number
wild cards. The serial numbers may be parial. The projector
referenced with a partial serial number is the first one in the list
that matches the given fraction of a number.
\begin{description}
\item[-h, \longcommand{help}] Show a help message and exit.
\item[-s \argle{SERIALNO}, \longcommand{serial} \argle{SERIALNO}]
A projector serial number (or fraction
thereof).
\item[\longcommand{clearErrs}] Clear the error log for a projector.
\item[-d \argle{MFGDATE}, \longcommand{date} \argle{MFGDATE}]
The projector serial number stickers have a
manufacturing date on them. Record it here, in the
format 2012-04-17.
\item[-a, \longcommand{add}] Add a projector to the
database. Requires that you specify a serial number
and date and optional lens type, and nothing else.
\item[-R, \longcommand{report}] Produce a summary report about a projector. Without a
serial number specified, produce a summary report
about all projectors and all projector controls.
Ignores all other arguments.
\item[-G, \longcommand{gather}] Run through all the projectors gathering all their
data. Ignores all other arguments.
\item[-r \argle{REPAIRTYPE}, \longcommand{repairType} \argle{REPAIRTYPE}]
Records a repair. Use this to
specify the type of repair, and do not forget to
include a comment. The possible repair types
are bulb, ballast, lens, board, install,
uninstall, ship. You can also use \cmd{none} to
insert a comment into the repair log.
\item[-l \argle{LENSTYPE}, \longcommand{lens} \argle{LENSTYPE}]
Sets type of lens (long, short, none) for the given
serial number.
\item[-p \argle{PURPOSE}, \longcommand{purpose} \argle{PURPOSE}]
Record the current purpose of the projector (spare,
broken, installed, returned).
\item[-c \argle{COMMENT}, \longcommand{comment} \argle{COMMENT}]
Commentary about the repair. Must be quoted
if it contains more than one word.
\end{description}
\subsubsection{pjlog}
The pjcontrol command logs its usage at cave-utils/yurt/log.
You can see the last few log entries with the pjlog command.
\subsubsection{pjreport}
Creates and stores a full report of the state of the projector
database. This should be run at least weekly.
\subsubsection{projd}
In order to address deficiencies in the Scalable Display Manager
software,\footnote{It expects all projectors to be connected via
ethernet, not serial control. This option was not available on our
projectors at the time of purchase.} there is a system by which
projector commands can be sent to an IP address, and forwarded to a
specific projector. The projd command listens on a set of ports, and
forwards the connections to the projector correponding to that port.
The projd script calls the projd.py Python script, which defines a
projChats object that takes two numbers as an argument:
\begin{verbatim}
projChats(address, projector)
\end{verbatim}
Where \cmd{address} is the last segment of an IP address that begins
with 192.168.160. and projector is the number of the projector to be
controlled at this address. The projd.py command uses the
pjcontrol-raw script, which is not to be used otherwise.
\subsubsection{pjexpect}
This is part of the pjcontrol script operation and is not meant to be
used independently.
\subsection{Problem on power up}
About one time in 200, a projector fails to power up properly and
displays a message about not being able to find a signal. Since
there are 69 projectors in the system, this happens fairly
frequently. Toggling the stereo on the problem projector seems to
address the issue:
\begin{verbatim}
$ pjcontrol 15 mono; sleep 15; pjcontrol 15 stereo
\end{verbatim}
This is also a generally useful way to restart a projector.
\subsection{Inventory and Logs}
\label{logging}
The projector database is currently held in the etc directory of the
cavedemo account. It is an anydbm file, readable with the pjcontrol
python script stored in the cavedemo bin directory.
\begin{verbatim}
$ /users/cavedemo/bin/pjcontrol -R
\end{verbatim}
This produces a report of the condition of all the projectors, and a
list of all the installed projectors.
The following commands will produce a report about a single
projector. The first will only work on an installed projector, while
the second will work on any projector in the database.
\begin{verbatim}
$ pjcontrol 53 report
\end{verbatim}
\begin{verbatim}
$ pjcontrol -s WOCY00022 -R
\end{verbatim}
\subsubsection{Periodic logs}
The pjcontrol system should have all the error and color calibration
records updated periodically. Run:
\begin{verbatim}
$ /users/cavedemo/bin/pjcontrol -g
\end{verbatim}
This steps through all the projectors, downloading their error
record, color calibration, and usage time data into the master
database.
\begin{note}[IMPORTANT]
This is only effective when all the projectors are turned on.
\end{note}
This should be run weekly, with a report run and recorded at least as
often. Use \cmd{pjreport} (with no arguments) to create and store a
report for the current date and time.
\subsection{Maintenance and repairs}
\begin{note}[Note]
All changes to the projectors, whether it be repairs or maintenance,
bulb replacement or guts, should be logged on the repair log clipboard
hanging on the right hand end of the cabinet in the tool area.
\end{note}
So far as we currently understand it, the only maintenance required is
the replacement of bulbs. Policy is to replace them when they blow
out, not to anticipate their demise.
All maintenance and repair actions should be recorded on the paper
maintenance log. The actions relevant to a specific projector will be
entered into the projector database from that record. (You
are welcome to enter them yourself with the pjcontrol script. Please
record on the paper log that it was successfully entered. See
section~\ref{logging}.)
\subsubsection{Bulbs}
Bulbs should be replaced when they blow out. We are not currently
replacing them proactively. Once the color calibration is functional,
we will be keeping data about color change over the bulb lifetime and
may change policy after analyzing that data.
We are currently procuring bulbs from Digital Projection, who also
services the projectors. We have also used this supplier
\begin{description}
\item[Greenleigh and Wong] Contact: Tom Greenleigh, Greenleigh Wong Lamps, 1680
Navajo Road, Ground Floor, Ogden UT, 84403, 801-475-7800,
[email protected]. \$535 new, \$361 relamp. Warranty runs 180 days from
shipping.
\item[Relampit] Contact: Tom Sullivan, Relampit, 120 Wilbur Place, Suite C,
Bohemia, NY 11716, 631-244-0051x122, [email protected], \$558
new, \$495 relamp. Warranty runs 90 days from installation, free
shipping. [ AS OF 1/18, NO LONGER IN RELAMPING BUSINESS ]
\end{description}
\subsubsection{Shipping for repair}
Units should be shipped for repair in one of the original boxes. There
are a few still around. We are using Digital for service, but
managing that through Ambient Sound, their local dealer.
Before sending off, please ensure that the error record of the
projector is recorded in the projector database. If the projector is
not currently installed, do this by installing it at port 70 (the
repair port), and issuing the following:
\begin{verbatim}
$ pjcontrol 70 gather
\end{verbatim}
\subsubsection{Reinstalling after repair}
The projectors come back from repair almost certainly have the wrong
firmware. To install the correct firmware, use the instructions
located in the yurt room at the repair station.
Most of the time, you can get away with updating the App01 and FPGA
software, and this can be done after the projector is installed, so
long as the back of the projector is accessible. To do this, insert
the master thumb drive into the projector, and issue the command:
\begin{verbatim}
$ pjcontrol 60 raw bootop = 4
\end{verbatim}
(But use the projector number instead of 60.) Then reboot the
projector by removing and reinstalling the power cord, with a 10
second wait in between. Then do the same thing with this command:
\begin{verbatim}
$ pjcontrol 60 raw bootop = 9
\end{verbatim}
Then
\begin{verbatim}
$ pjcontrol 60 raw factory.reset
\end{verbatim}
The instructions and master thumb drive are stored in the cabinet over
the tool area, on the bottom right.
\subsection{Ventilation}
The wall projectors are vented directly into the AC return duct at the
back of the room. It is important to make sure the lowest extension
of the duct is blocked.
Where is the system controlled? How? Does it change with the
heating/cooling season?
1) how can the cooling system be monitored so that problems with it
don’t lead to projector damage
2) is the return booster operating? How can we tell, and how do we
turn it on if it isn’t on
3) the makeup air intake through the roof will potentially mix in
outside air, potentially reducing the return flow. How do we ensure
that doesn’t cause problems with this system that is cooling both
people space and equipment?
\subsection{Frame Lock}
\label{framelock}
Sometimes the projectors get out of sync with each other, and the
stereo is different every way you look.
The projectors are synchronized electronically with daisy-chain
connections among the cave nodes which serve to synchronize the
graphics cards. The settings do not persist through a restart of the
cave X servers (which includes power interruptions or reboots). Use
this procedure to reset the frame lock.
\begin{enumerate}
\item Log in as cavedemo. Use one of the linux terminals in the lab,
or ssh -X to one of the cave nodes.
\item Run \cmd{nvidia-settings -c cave001:0}. This should start up
a GUI for you.
\item In the left pane of the window, look to the bottom for
\menu{Framelock} and click that. You should see a long list of
projectors appear in the main window.
\item Look in the bottom right of the window for a \button{Disable frame
lock} button. Click it, wait, then click \button{Enable frame lock}.
You'll see lots of green if it worked.
\end{enumerate}
The nvidia-settings program is initialized with a startup file called
\cmd{.nvidia-settings-rc}, currently in the cavedemo home
directory. We have not had good results editing this file directly;
editing configuration should be done with the GUI.
\subsection{Color calibration}
There is a manual color calibration procedure, using a Python program
to select a projector to adjust.
Go to yurtcol directory inside cave-utils.
python yurtcol.py gives a curses window, reloads config file. This
takes quite some time, so let it run before beginning to adjust
projectors.
j,k to go up and down, h,l to go right to left. Mostly. The mapping up
and down seems troublesome.
+,- for brightness
R,r G,g B,b for specific colors
q to exit
\section{Tracking, Heads and Pointers}
\subsection{Opti-Track tracking system}
\label{opti-track}
\begin{note}
The Scalable calibration display clients occasionally seem to affect
the sync signal received by the opti-track software. You may have
to restart the framelock after calibrating the projectors. See
section~\ref{framelock}.
\end{note}
The Opti-Track system consists of a bunch of cameras aimed at a bunch
of reflective balls. When three or more cameras see a particular
ball, they can pinpoint its position to within a millimeter. When the
cameras see three out of some random constellation of balls, such as
is on the tracked glasses, or the wand, the system can pinpoint that
constellation and thus the gaze or the hand of the user.
\begin{note}
The Opti-Track license dongle seems to interfere with the booting of
the kiosk machine. Remove the dongle to reboot and reinsert it when
the computer is safely up and running.
\end{note}
\subsubsection{Starting the Opti-Track}
Double click on the ``Motive'' software icon. When it comes up it
will ask whether you want to open an existing project. Say yes, and
then choose the \menu{Cave} project, usually at the bottom of the
list.
Note from dhl 7/31/20 -- it appears that the file should now be
cave-2.tts, according to Camilo based on working on it with Johannes.
\subsubsection{Calibrating the Opti-Track}
To calibrate the Opti-Track system, start it up as above, then click
\menu{Layout} and choose the calibration option from the drop-down menu.
\begin{enumerate}
\item Mask the visible light sources.
\item Choose calibration type (``full'') and `optiwand' option
(``large'').
\item Make sure that all the cameras are accounted for and reporting
properly in the list on the left of the window.
\item Click \button{start wanding} and start waving the wand around slowly
up and down. The cameras have some feedback capacity built into
their lights. You'll see the cameras near you turn green as they
are satisfied, then move over nearer another not-yet-green camera.
\item Eventually the software will tell you it has enough data for a
good (or very good) calibration, at which point you can stop.
\item Click \button{calculate}.
\item Set the ground plane thing on the floor. The origin of the cave is on
the seam of the true floor (not the sacrificial floor), halfway
across. Put the ground corner of the ground plane over that point,
and aim the long leg at the center of the screen. Level it if
necessary.
\item Click \button{ground plane}.
\item The actual zero of the \yurt is four feet above the ground plane,
so you'll have to adjust the Y dimension of the calibration to equal
-1219 (millimeters). You should see the lighting icons drop down in
the display pane.
\item Click on the file menu, and save project.
\end{enumerate}
\subsubsection{Adding an object to the calibration}
The glasses and wand are constellations of reflectors whose pattern is
stored and recognized by the Opti-Track software. Sometimes you'll
want to replace these items, or the metal may become bent and the
system will not recognize it any more.
To replace an object in the calibration, click on the project
description, then find the object in question and delete it.
To add an object, use the \menu{View/Rigid Bodies Properties} tool.
You will see two choices, \button{Create From Visible} and
\button{Create From Selected}. The easiest thing to do is often to
put the object to be tracked alone in the middle of the floor, leave
the \yurt, use the mouse cursor to select the area containing the
reflectors on the object, then use the \button{Create From Selected}
option. This will create a new object out of the markers visible to
the system at the time. Once the object is created, you should change
its name to whatever is appropriate.
\begin{note}{Note}
The ``Orientation'' of the wand usually winds up pointing in exactly
the opposite direction you expect. Click the \menu{Orientation} tab
and set the yaw or pitch to 180 degrees to make the pointer point the
way you expect.
\end{note}
\subsubsection{3D printer patterns}
There are a variety of 3D print patterns for various \yurt accessories
found in the cavedemo data directory, in the \cmd{yurt-tools} directory.
\subsection{Pointer}
The location of the wand is tracked and reported by the Opti-track
software, but the button presses and joystick operation take a
different route.
The wand is a PS/2 game controller that communicates with the system
via a Bluetooth dongle on the kiosk
computer. If the wand's VRPN server is running, the button presses
are reported as VRPN events, using the key below.
\begin{center}
\includegraphics[width=0.6\columnwidth]{yurt-wand-controller.jpg}
\end{center}
If the dongle is unplugged, you must restart the wand's VRPN server.
This is on the kiosk Desktop.
To plug in the dongle, look for a small button on its end. Press the
button while inserting the dongle into the kiosk computer's USB port.
Wand must sometimes be ``paired'' with the dongle. Sometimes this
happens on battery changes, and it definitely happens when the wand is
swapped for repair. The wand will complain that it is not paired by
flashing its blue power light. To pair, press the button on the
dongle and within eight seconds, press both the power button and the
select button (the button opposite the power button on the wand). This is an
undocumented feature of the wand, so these instructions are merely
provisional, but this appears to work.
\section{Glasses, Stereo}
The Volfoni glasses are operated by an RF signal generated by a small
transmitter plugged into the sync output of the Opti-Track synch box.
It is powered by a controllable plug strip, so that it can be turned
off then the \yurt is not in use. This allows the glasses to time out
and power down.
\subsection{Stereo backwards}
There is currently no positive identification of the left and right
eye in the stereo signal. Sometimes when the system is started
up, the signals will be swapped and the stereo will appear wrong, with
the viewer's left eye shown the image that belongs on the right.
Worse, the stereo polarity is known to spontaneously reverse from time to
time. This is irritating and we are working on fixing this problem.
In the meantime, to fix the problem, you can use the controls for the
Opti-Track software. (See section~\ref{opti-track}.)
Over on the right hand side of the Motive software window, you'll see
an \menu{Output 1} list of attributes. Beneath it, there is a
\button{Polarity} setting, with a dropdown menu. Click on that option,
change the polarity from inverse to normal or the other way around,
and click \button{Apply} at the top of that column of the screen.
The kiosk has a program on it for checking the stereo configuration
(on the System tab). It alternates red and green fields for the left
and right eyes. When you hold the glasses up against any part of the
\yurt screen, one lens will appear red and the other green. When the
glasses look like the image of the glasses in the icon, the stereo is
configured correctly.
When the framelock is not working, there will frequently be areas of
the screen for which the stereo is not working. If you see
inconsistencies across the field of view, try resetting the
framelock. See section~\ref{framelock} on Framelock.
\iffalse
You can also toggle the stereo by turning projector 11 stereo off and
then on again.
\begin{verbatim}
$ pjcontrol 11 mono
$ pjcontrol 11 stereo
\end{verbatim}
There is only a 50\% chance that this procedure will leave the system
in the correct state, so you may have to try it a few times before it
works properly. Take comfort in the fact that there is only a 6.25\%
chance you'll have to do it more than four times.
\fi
\subsection{Operating the glasses}
To turn the Volfoni glasses on, press the button (not the switch) on
the left temple. You'll see the lenses blink left, then right, then
wait a beat, and both lenses will go dark together. When you put the
glasses on you should see the stereo images.
The switch on the glasses does not do
anything. (Except on one pair somewhere, where it reverses the
stereo. That pair is marked with an `M' on the temple.)
If the glasses are on, pressing the button will cause the LED on the
bridge of the nose to blink. Three blinks mean fully charged, two
means sort of charged, and one blink means charge me.
The glasses will not turn themselves off as long as the RF transmitter
is within range. Since it covers the room, assume the glasses do not
turn themselves off. To power off the glasses, hold the button down
until the lenses go clear.
\section{Kiosk and Demos}
The Kiosk is a Windows machine. For the \yurt to operate, it needs
several pieces of software to be running:
\begin{enumerate}
\item Opti-Trak tracking software to monitor the location of the
tracked glasses and the wands. Use the Motive application, on the
kiosk machine Desktop. See section~\ref{opti-track} about starting
it.
\item The VRPN server to monitor button presses and joystick use on
the wands. This is started from a script on the Desktop called \cmd{start\_joysticks.bat}.
\item A sound server to run the sound effects for CaveWriting. This
is started from a script on the Desktop called \cmd{start\_cavewriting\_soundserver.bat}.
\end{enumerate}
One thing to note is that for now the script titled \cmd{start\_tracker.bat} is not used. Additionally, the scripts are currently most up to date on the Desktop, not in the Scripts folder.
In addition, the Kiosk itself is a web page, hosted on dev09. Running
the kiosk involves making sure there is a browser open, and pointing
to the kiosk host.
% the virtual host caveweb1.oscar.ccv.brown.edu.
\subsection{Rebooting the Kiosk}
When the kiosk misbehaves and needs to be rebooted, use this
procedure.
\begin{enumerate}
\item Remove the Opti-Track software dongle from the USB ports on the
back. Remember which port it came from. When inserted, this dongle
appears to prevent the machine from booting properly.
\item Reboot.
\item Replace Opti-Track dongle.
\item Restart tracking, pointer, and sound server software.
\item Start Internet Explorer and make sure it's pointing at the Kiosk
web page.
\end{enumerate}
\subsection{Web interface}
The Kiosk interface is a CGI Perl script that looks at the
\dir{yurt-kiosk} directory of the \cmd{cavedemo} account home
directory and creates a web page according to the structure it finds
there.
Each sub-directory of \dir{yurt-kiosk} becomes a tab that holds a
collection of demos. Each sub-directory of that contains an image and
a run script, and is transformed into a button with the given image
that executes the run script when the user clicks on it. So there
might be a \dir{Demos} sub-directory in \dir{yurt-kiosk}, and inside
it an \dir{Ode} directory, containing a PNG and a run script, called
\cmd{run}. This will result in a \dir{Demos} tab on the front page of
the kiosk, which will contain a button with the Ode PNG on it, and
which will execute the \cmd{run} script when clicked.
To add items to the demo page, create a \cmd{run} script and include
it (with that name) and a PNG file called \cmd{folder.png} in the same
directory. The source for any program should be stored in compilable
form in the cavedemo home directory, at
\dir{~cavedemo/project-archive}, and any data it uses should be in
\dir{~cavedemo/data/projects}. Please leave lots of README files
around and a working make or cmake file.
\subsubsection{Authorization}
The kiosk has a set of accounts with which to log activity. The
account authorization list is at \cmd{/users/cavedemo/etc/psd.txt}.
It is a simple comma-separated list with a username and a password on
each line. Use ``12345'' for an initial password, or to restore
access, and the script will demand a user change it, and store a
hashed password string when they sign in. (Yes, it is not a
high-security system, merely meant to log activity in a non-anonymous
way.)
\subsection{Tablet}
The YURT is equipped with a Samsung Galaxy S2 tablet with which to
operate the kiosk web interface.
There is a ``yurt-wifi'' user that has a Brown Internal ID that causes
it to acquire one of a specific set of IP addresses when the tablet
connects to the Brown network using that ID. Those IP addresses
(10.12.128.0/18) are permitted to make connections through the ccv
firewall to the caveweb1 server. Maintenance of the yurt-wifi user
and the hole in the firewall is the responsibility of the CIS network
services group.
\subsection{Demos}
\label{Demos}
Many of the demo programs use data assumed to be in the
\dir{/tmp/yurt-data} directories of the cave nodes. There is a model
directory in the cavedemo account, see
\dir{/users/cavedemo/data/model\_tmp}. You can copy the
\dir{model\_tmp} directory contents to the node \dir{/tmp/yurt-data}
directories with the \cmd{copy\_data\_to\_tmp} script in the cavedemo
\dir{bin} directory.
If you are writing a demo to be included in the kiosk that expects to
find data in \dir{/tmp}, please use the \dir{/tmp/yurt-data} and
\dir{model\_tmp} directories to load your data.
\section{Scalable software, Warping and Blending}
Software from Scalable Display manages the blending and warping of the
projector images so that several projectors can work as one. This is
commercial software, with a license that must be kept up to date.
Also, the system must be recalibrated periodically, as projectors are
jostled or vibrate to a different position.
The Scalable software consists of two components. There is an SDK