Overview | All Modules | Tutorial | User's Guide | Programming Guide
Previous

COVISE Online Documentation

Next


Input Devices

COVER supports headtracking and a tracked hand device with several buttons. Headtracking means, that the position and orientation of the users head is captured and used to compute an appropriate view on the scene. With the tracked hand device the user can select and manipulate parts of the scene.

Supported tracking devices are the Polhemus FASTRAK (POLHEMUS), the Ascension Motionstar (MOTIONSTAR), and the Ascension Flock of Birds (FOB). Additionally all devices supported by the CAVELIB can be used if a trackerdeamon from CAVELIB is installed. These tracking systems use electromagnetic fields to determine the position and orientation of a remote object. The Polhemus FASTRAK and the Ascension Flock of Birds are connected to the serial port of the computer, the Ethernet Motionstar system is a PC where each sensor is connected to an internal Motionstar receiver (ISA) card. The PC transmitts the position and orientation data via ethernet to the graphics workstation.

The input devices mouse (SPACEPOINTER), the Spaceball (SPACEBALL), the Phantom (PHANTOM), the Flybox (COVER_FLYBOX) and the Beebox (COVER_BEEBOX) and can be used only for hand tracking.

The Ascension and Polhemus trackers can also be combined with other commercial or selfmade button devices. Supported button devices are the ICIDO Mike (MIKE), the division Joystick (DVISION), the CEREAL Box (CEREAL), the Virtual Presense xxx (VIRTUAL_PRESENCE), the Pinch Glove (PINCH) and all devices supported by cavelib.

Tracking Systems

The tracking system is described in the section COVERCOnfig with the keyword TRACKING_SYSTEM.

COVERConfig
{
    ....
    TRACKING_SYSTEM  <POLHEMUS|MOTIONSTAR|FOB|CAVELIB|
                      SPACEBALL|SPACEPOINTER|COVER_BEEBOX|COVER_FLYBOX|PHANTOM>
    ....
}

All supported tracking systems need a common configuration section TrackerConfig in which the receiver addresses and the offsets between the tracker coordinate system and the COVER coordinate systems are described and special configuration section where for example the serial port or the IP address is described. The special configuration sections have the same name as the devive, for example PolhemusConfig.

Depending how the transmitter and sensors are mounted, the coordinate systems of the electromagnetic trackers have to be transformed to match the coordinate systems of COVER. COVER coordinate systems are Performer coordinate systems, this means xaxis right, yaxis into the screen, and zaxis up.

The COVER world coordinate systems is specified implicit when you specify the position and orientation of the screens (see Graphics Board and Display ). The origin of a Powerwall is typically the center of the screen, the origin of a CAVE is typically the center of the cube.

The COVER viewer coordinate system has its origin between the users eyes. The COVER hand coordinate system has its origin in the center of the hand device.

The transmitter position and orientation have to be choosen individually for each virtual environment. It should be far away from metal, monitors and current cables. The sensor for headtracking is normally mounted at one of the frames of the eyeglasses. The sensor for the hand device is normally integrated into the device.

The position and orientation offsets, the number of receivers and the receiver addresses (or station numbers) are stored in the section TrackerConfig.

TrackerConfig
{
    TRANSMITTER_OFFSET  <x in cm> <y in cm> <z in cm>
    TRANSMITTER_OFFSET  <heading in degree> <pitch in deg> <roll in deg> 
    
    HEADSENSOR_OFFSET  <x in cm> <y in cm> <z in cm>
    HEADSENSOR_ORIENTATION  <heading in degree> <pitch in deg> <roll in deg>
    
    HANDSENSOR_OFFSET  <x in cm> <y in cm> <z in cm>
    HANDSENSOR_OFFSET  <heading in degree> <pitch in deg> <roll in deg>

    NUM_SENSORS <n>
    HAND_ADDR <station nr or address>
    HEAD_ADDR <station nr or address>
}

At the end of this chapter you find two examples, a CAVE with a Motionstar and a workbench with a Polhemus system.

Button Devices

If you combine the Ascension or Polhemus tracker with an external button device you have to indicate this in the section COVERConfig with the keyword BUTTON_SYSTEM.

COVERConfig
{
    ....
    BUTTON_SYSTEM  <MIKE|VIRTUAL_PRESENCE|PINCH|CEREAL|CAVELIB|DIVISION>
    ....
}

As these button devices use different serial ports than the tracking systems, you have to describe it in the section ButtonConfig.

ButtonConfig
{
    SERIAL_PORT <portname>
    ...
}

Most button devices have more than one buttons. As you need only one button to select functions from the 3D menu, you can put the most often used function XFORM and DRIVE on the other buttons. For example if you put the function XFORM on button number three, you don't have to select this from the menu first but can directly move the world while the third button is pressed.

The mapping of button numbers to functions is also described in the section ButtonConfig:

ButtonConfig
{
    MAP 1   <function>
    MAP 2   <function>
    ...
}

function can be ACTION_BUTTON, DRIVE_BUTTON or XFORM_BUTTON. With ACTION_BUTTON the button which is used for functions selected from the menu is meant.

Polhemus FASTRAK

The Polhemus FASTRAK consists of the System Electronic Unit (SEU), the transmitter and one to four sensors.

Figure: Longranger Transmitter, Sensor and Stylus
polhemus_all.png

There are two types of transmitters: the standard transmitter which is a 10 cm box, and the long ranger, which is a transparent sphere of 30 cm diameter.

COVER supports one sensor for headtracking and the polhemus stylus as 3d input device.

FASTRAK Installation

Connect the SEU to a serial port of the computer. The RS232 output is on the rear side of the SEU. For connecting the SEU to the serial port of an Onyx2 or an Octane computer, you need a DB-9 male connector. For connecting it to a Onyx1 system, you need a DB-9 female connector. For an Indigo2 you need a DIN-8 connector (type man serial on your sgi computer for more information).

Figure: Rear View of the Polhemus FASTRAK SEU
polhemus_seu_rear.png

Choose a baud rate with the IO-Select switches on the rear side of the SEU. The meaning of the IO-Select switches is:

Position Function
1 Baud Rate Select
2 Baud Rate Select
3 Baud Rate Select
4 Hardware Handshake Select
5 Character Width
6 Parity Select
7 Parity Select
8 IO Select UP for RS232

For COVER you can select only the baud rate with the first three switches. The other functions can't be configured. Their value must be: Switch_4 = 0, Switch_5 = 1, Switch_6=0, Switch_7=0, Switch_8=1. The meaning of the baud rate switches is:
Baud Rate 1 2 3
1200 0 0 0
2400 1 0 0
4800 0 1 0
9600 1 1 0
19200 0 0 1
38400 1 0 1
57600 0 1 1
115200 1 1 1

On SGI Onyx systems we recommend 19200 or 38400. The selection for 19200 is: 00101001 (0=down, 1=up).

Figure: IO Select Switches for 19200 baud
polhemus_ioselectswitch.png

Connect the transmitter and the receivers to the SEU (frontside).

Figure: Front View of the Polhemus FASTRAK SEU
polhemus_seu_front.png

Select the stations with the station select switches.

Figure: Station Select Switches
polhemus_stationswitch.png

Attention: On some Polhemus FASTRAK SEUs the label next to the switches says on=up. This is wrong. According to the manual and our experience on=down.

Switch the SEU on and wait until the green led stops blinking.

Test the Polhemus system with the progamme polhemustest, which you find under covise/sgin32/bin. It should continously print the position of the two sensors.

polhemustest /dev/ttyd2 19200 1 2

FASTRAK Configuration

For the Polhemus FASTRAK system you ave to add the following section to the file covise.config:

COVERConfig
{
    ...
    TRACKING_SYSTEM POLHEMUS
    ....
}

TrackerConfig
{
    NUM_SENSORS                 <n>
    HAND_ADDR                   <station no>
    HEAD_ADDR                   <station no>
    TRANSMITTER_OFFSET          <x y z>
    TRANSMITTER_OFFSET          <h p r>
    HEADSENSOR_OFFSET           <x y z>
    HEADSENSOR_ORIENTATION      <h p r>
    HANDSENSOR_OFFSET           -90 0 90
    HANDSENSOR_ORIENTATION      <h p r>
}

PolhemusConfig
{
    SERIAL_PORT                 </dev/ttyd...>
    BAUDRATE                   <baudrate>
    HEMISPHERE                  <x y z>  
}

FASTRAK Coordinate Systems

The transmitter coordinate system and the sensors coordinate system are scetched below. The stylus coordinate system is identical to the sensor system (the button is in -z direction).

Figure: Coordinate Systems of the Transmitter and the Sensor
polhemus_coordsystems.png

Ethernet Motionstar

The Ethernet Motionstar system consists of a transmitter, a number of receivers, a PC containing the transmitter controller, an Ethernet Network card and several Motionstar receiver controller cards.If you use an extended range transmitter (ERT) you need also a transmitter controller box (ERC).

The receivers can also be a 6DOF mouse which is a receiver with additionally 3 buttons.

Figure: Motionstar System
motionstar.png

Motionstar Installation

The transmitter and receiver cards in the PC are connected by a proprietarty interface called FBB.

The ERT is connected to the ERC box. The ERC box is connected to the PC through a serial cable. The receivers are connected to the receiver controller card. The PC is connected to the graphics workstation using a twisted pair cable.The ethernet cable should not be connected to the LAN, because hight traffic on the LAN could delay the tracking. Please refer to the Ethernet Motionstar Documentation for configuring a system which was not setup to operate in ERC mode.

The PC runs under DOS. After booting DOS a programm (NAME?) which reads the receiver controller cards, computes position and orientation values and qrites them to the Ethernet Interace is started. Please note that under DOS you need a license for the TCP programme called (NAME?).

Motionstar Configuration

COVERConfig
{
    TRACKING_SYSTEM MOTIONSTAR
}
TrackerConfig
{
    NUM_SENSORS                 <n>
    HAND_ADDR                   <address>
    HEAD_ADDR                   <address>
    TRANSMITTER_OFFSET          <x y z>
    TRANSMITTER_ORIENTATION     <h p r>     
    HEADSENSOR_OFFSET           <x y z>
    HEADSENSOR_ORIENTATION      <h p r>
    HANDSENSOR_OFFSET           0 0 0
    HANDSENSOR_ORIENTATION      90 0 0
}
The motionstar system has a single Ethernet IP address. The default IP address is 192.200.9.50, but you can change it to a custom IP address.

Insert the IP address into the file covise.config in the section MotionstarConfig

MotionstarConfig
{
    IP_ADDRESS                  <address>
    HEMISPHERE                  <FRONT|REAR|LEFT|RIGHT|UPPER|LOWER>
    DualTransmitter             <ON|OFF>
    # only for wireless systems instead configuring a button system
    MotionstarButtonSystem      <MIKE VIRTUAL_PRESENCE CEREAL CAVELIB DIVISION>
    SamplingRate                <default is 80>
    BIOS                        <OLD|NEW>
}

Flock of Birds

FOB Installation

The flock of Birds (FOB) system consists of one or more Bird electronic units, a standard transmitter and as many receivers as Birds. Optionally an extended range transmitter (ERC) can be used which needs an extra electronic unit called the extended range controller (ERC).

Figure: Flock of Birds System
flock.png

The birds are connected to each other with the Fast Bird Bus (FBB) and to the computer through the serial port. For COVER you need two birds. The transmitter is connected to the first bird, which is also connected to the computer.

Figure: Connecting the Birds without ERC
birds.png

When an ERT is used, you need additionally the ERC box. The ERC is connected to the computer and the ERT is connected to the ERC. The ERC and the other Birds are connected through the FBB.

Figure: Connecting the Birds with ERC
birds_erc.png

Each Bird and the ERC can be configured for RS232, or RS485 use with internal jumpers. Normally Ascension has pre-set the jumpers for your interface. In case you have to change it, refer to page 6 in the FOB Installation and Operation Guide. The FOB has to be connected through the RS232 interface for COVER.

The Birds and ERC can be operated in two addressing modes: normal addressing mode and expanded addressing mode. The Flock of Birds needs to be operated in normal addressing mode for COVER. This mode is set with the dip switches 4567 and 8 set to TEST (ON=DOWN). For changing the address mode set the switches of each bird to [4=on 5=on 6=on 7=off 8=on] (see page 54 in the FOB Installation and Operation Guide) and turn the power on. When the front panel indicator blinks, the normal addressing mode has been set.

Table: Dip Switches in Configuration Mode
meaning baudrate address mode
Switch 1 2 3 4 5 6 7 8
value - - - on on on off on


With the dip switches 4567 and 8 set to FLY (off), the address is configured: The first bird gets address 1, the second birds gets address 2. In case the ERC is the first bird, it gets address 1, the first bird gets address 2 and the the second bird gets address 3.

The baud rate is set with the switches 1,2 and 3, the following example is for baud rate 19200.


Table: Dip Switches in Fly Mode
meaning baudrate address mode
Switch 1 2 3 4 5 6 7 8
ERC (Addr 1) on off off off off off on off
Bird 1 (Addr 2) on off off off off on off off
Bird 2 (Addr 3) on off off off off on on off


FOB Configuration

The tracking system type is configured in the section COVERConfig:

COVERConfig
{
   ....
    TRACKING_SYSTEM         FOB
    ...
}

TrackerConfig
{
    NUM_SENSORS             <n>
    HAND_ADDR               <address>
    HEAD_ADDR               <address>
    TRANSMITTER_OFFSET      <x y z>
    TRANSMITTER_OFFSET      <h p r>
    HEADSENSOR_OFFSET       <x y z>
    HEADSENSOR_ORIENTATION  <h p r>
    HANDSENSOR_OFFSET       0 0 0
    HANDSENSOR_ORIENTATION  90 0 0
}

FobConfig
{
    SERIAL_PORT             </dev/ttyd...>
    BAUDRATE                <baudrate>
    HEMISPHERE              <FRONT|REAR|LEFT|RIGHT|UPPER|LOWER>
    FULLRANGE               <ON|OFF>
}

The transmitter type and hemisphere are configured in the section FLockConfig. The hemisphere can be FRONT, REAR, UPPER, LEFT or RIGHT.

FOB Coordinate Systems

See Pg. 64 in the FOB Installation and Operation Guide for a sketch of the FOB coordinate system.

FOBserver (Device-Server)

FOBserver [options]  dev0[=map0] dev1[=map1] ...

   devX = Device Numbers of Receivers (1..14)
   mapX = COVER device numbers (0..31)

Options:

   -t <host:port>          set target to send tracking UDP packets
   --target=host:port      (default: localhost:7777)

   -r <value>              transmission speed in Packets/sec
   --rate=value            (default: 20)

   -d <serialPort>         Device name of serial port
   --device=serialPort     (default: SGI /dev/ttyd1, Linux /dev/ttyS2)

   -b <baudrate>           Speed of serial interface
   --baudrate=<baudrate>   (default 19200 Baud)

   -H <hemisphere>         Hemisphere selection: FRONT REAR LEFT RIGHT UPPER LOWER
   --Hemisphere=Hemisphere (default: FRONT)

   -m <selection>          Flock mode selection: STREAM or POINT
   --mode=<selection>      (default: STREAM)

   -n <numBirds>           Number of Flocks attached: ERC counts as 1 bird!
   --numbirds=number       (default: number of given stations)

   -h, --help              Show this help

Examples:

   

    FOBserver -d /dev/ttyS2 1 2

Start a Server to localhost:7777, reading with 19200 Baud on /dev/ttyS2 from a Flock with 2 stations. Use FRONT Hemisphere and STREAM mode, transmit stations 1 and 2 to COVER.

   

   FOBserver -d /dev/ttyS2 1=0 2=4

   Same as before, but send station 1 results with ID=0 and station 2 with ID=4

   FOBserver --target=devil:7234 --device=/dev/ttyS2 --baudrate=38400 \
             --hemisphere=LOWER --mode=POINT --numbirds=4  4=0 3=1

Start a Server to host "devil" Port 7234, reading from a Flock with Extended Range Transmitter and 3 receivers using LOWER hemisphere and POINT mode. Send Station 4 results with ID=0 and station 3 results with ID=1

Startup:

   

 # /common/FOBserver -d /dev/ttyS2 1 2

  +-----------------------------------------------------+
  + VRC FOBserver 2.0           (C) 2003 VirCinity GmbH +
  +-----------------------------------------------------+
  + Settings:                                           +
  +   UDP Target:        localhost:7777                 +
  +   Send Rate:         20.0 Packets/s                 +
  +   Serial Interface:  /dev/ttyS2                     +
  +   Baudrate:          19200                          +
  +   FOB Hemisphere:    FRONT                          +
  +       Mode:          STREAM                         +
  +       Birds:         2  (including ERT if exist.)   +
  +-----------------------------------------------------+
  + Mapping:                                            +
  +   Bird 1   --> COVER: ID 1                          +
  +   Bird 2   --> COVER: ID 2                          +
  +-----------------------------------------------------+
  BirdNo  Access. Rec.    Trans.  ERT
   1       X       X       X       -
   2       X       X       -       -
   3       -       -       -       -
   4       -       -       -       -
   5       -       -       -       -
   6       -       -       -       -
   7       -       -       -       -
   8       -       -       -       -
   9       -       -       -       -
  10       -       -       -       -
  11       -       -       -       -
  12       -       -       -       -
  13       -       -       -       -
  14       -       -       -       -

VRC 1   0 [   15   -73    22] - [-0.18  0.50  0.85  0.98  0.18  0.10 -0.11  0.85 -0.52] 
                                                                       - [ 0.00  0.00 ]
VRC 2   0 [   33   109    87] - [ 0.44 -0.64 -0.63 -0.59 -0.74  0.34 -0.68  0.22 -0.70] 
                                                                       - [ 0.00  0.00 ]
---
VRC 1   0 [   15   -73    22] - [-0.18  0.50  0.85  0.98  0.18  0.10 -0.10  0.85 -0.52] 
                                                                       - [ 0.00  0.00 ]
VRC 2   0 [   32   108    87] - [ 0.45 -0.64 -0.63 -0.59 -0.74  0.33 -0.67  0.22 -0.70] 
                                                                       - [ 0.00  0.00 ]
---
VRC 1   0 [   15   -73    22] - [-0.18  0.50  0.85  0.98  0.18  0.10 -0.11  0.85 -0.52] 
                                                                       - [ 0.00  0.00 ]
VRC 2   0 [   32   109    87] - [ 0.46 -0.64 -0.62 -0.58 -0.74  0.34 -0.68  0.20 -0.71] 
                                                                       - [ 0.00  0.00 ]
---
...

trackd

trackd is a tracking daemon software from VRCO (www.cavelib.de). It supports nearly all tracking and button devices. trackd is used by VRCO product like CAVElib. trackd writes the position, orientation and button states to shared memory, so other programmes can also access the data.

COVER can use trackd as input instead of it's own device drivers. TRACKING_SYSTEM and BUTTON_SYSTEM have to be set to CAVELIB. In the section CaveLibConfig you specify the shared memory id. The values in the following example are the default values of trackd.

The trackd world coordinate system is OpenGL-like

Typically the trackd configuration file contains the transformations from tracker coordinates to trackd coordinates. Therefore you have to define the transformtion between trackd coordinates and COVER coordinates.

In the following example the trackd origin is on the bottom of the CAVE. The tracking system is an intersense 900 and trackd is used instead of COVER's own driver.

COVERConfig
{
    ....
    TRACKING_SYSTEM CAVELIB
    BUTTON_SYSTEM CAVELIB
    ....
}

CaveLibConfig
{
   TRACKER_SHMID  4126
   WAND_SHMID     4127
}

TrackerConfig
{
    HAND_ADDR                   1
    HEAD_ADDR                   0

    # cover origin is in the middle of the cave
    TRANSMITTER_OFFSET            0   0   -150
    # rotation around pitch (x)
    TRANSMITTER_ORIENTATION       0  90      0

    HEADSENSOR_OFFSET             0    0    0
    HEADSENSOR_ORIENTATION        0    0    0

    HANDSENSOR_OFFSET             0    0    0

A.R.T

A.R.T is an optical tracking system. Cameras track objects, which are marked with combinations of white, reflecting objects called markers. The cameras are connected via an internal ethernet to a PC system running the DTrack software. The position information is then sent to COVER by a second Ethernet interface of the controller PC. The A.R.T system distinguishes between three different kinds of tracked objects:

Marker
A single Marker object can only give a 3D position, but no orientation: not used by COVER.
Body
A body or rigid body is a fixed combination of multiple markers, which allows to identify both position and orientation of an object. These can either be fixed at different parts fo a tracked object, or mounted on a set of sticks connected to the tracked object.
FlyStick
A FlyStick is a Body with multiple buttons on it.

Figure: A.R.T body and flystick
art.png

Features not supported by COVER:

Binary protocol
The A.R.T Dtrack program offers ASCII and Binary protocol. Using the binary protocol is not recommended and therefore not supported by the COVER driver.
Receive Port
The A.R.T Dtrack program can activate and de-activate tracking data transmission by sending a special UDP packet to the DTrack controller. This feature is currently not supported by COVER. The Receive Port feature can be deactivated in the "Preferences" Panel of the DTrack software on the controller PC.

For further information about A.R.T tracking see http://www.ar-tracking.de .

A.R.T Configuration

All Bodies and FlySticks have unique IDs. The A.R.T protocol numbers the Bodies and FlySticks separately beginning with 0. Since COVER has a common numbering for all kinds of tracked objects, FlyStick IDs are separated by adding 10 to their ID.

Warning: Some devices with buttons, e.g. Mike devices, are Bodies, not FlySticks, because they transfer their button information by an own serial connected interface. This can be identified on the controller PC: FlySticks show "F<number>" in their ID field.

COVERConfig
{
    TRACKING_SYSTEM DTRACK
}

TrackerConfig
{
    NUM_SENSORS                 <n>
    HAND_ADDR                   <flystick_id+10> or <body_id>
    HEAD_ADDR                   <body_id>
    TRANSMITTER_OFFSET          <x y z>
    TRANSMITTER_ORIENTATION     <h p r>     
    HEADSENSOR_OFFSET           <x y z>
    HEADSENSOR_ORIENTATION      <h p r>
    HANDSENSOR_OFFSET           0 0 0
    HANDSENSOR_ORIENTATION      <h p r>
}

DTrackConfig
{
    Port                          <port number default: 5000>
}

Important:

The control window of the A.R.T tracking counts the Bodies and FlySticks 1,2,... and F1,F2,... while messages sent to the application start counting from 0. The IDs used in covise.config are those received by COVER, so when using the Body "1" for head-tracking and FlyStick "F1" displayed in the control window, you must specify

    HEAD_ADDR                   0
    HAND_ADDR                   10
in the covise.config file.

ARTserver (Device-Server)

The ARTserver receives A.R.T tracking information, transforms it to VRC protocol, removes recundancies if necessary, and transfers it to COVER.

If you start it w/o arguments, you get the user information:

ARTserver [options]  dev0=map0 dev1=map1 ...

   devX = Device Numbers of Bodies    (B1, B2, ...)
                         or FlySticks (F1, F2, ...)
   mapX = COVER device numbers (0..31)

Options:

   -t <host:port>           set target to send tracking UDP packets
   --target=host:port       (default: localhost:7777)

   -r <value>               transmission speed in Packets/sec
   --rate=value             (default: 20)

   -p <portNo>              Port number to receive A.R.T Tracker
   --port=portNo            (default 5000)
   -s <host:portNo>         Send A.R.T Tracker Start/Stop command to
   --sendStart=host:portNo  (default none, do not use "receive port"

Examples:

   ARTserver F1 B1          Receive ART information on port 5000, and send
                            it with 20 Hz frequency to localhost Port 7777.
                            send Flystick F1  -->  COVER ID 0
                            send Body 1       -->  COVER ID 1

   ARTserver F1=2 B1=3      as before, but
                            send Flystick F1  -->  COVER ID 1
                            send Body 1       -->  COVER ID 3

   ARTserver --sendStart=10.0.0.1:5001 F1=2 B1=3
                            as before, but send signal Tracker PC at address
                            10.0.0.1, Port 5001 to start/stop measurement 
                            before/after ARTserver execution

At start time you at an information window, afterwards you get once per second the current values of the parameters:

ARTserver F1 B1

  +-----------------------------------------------------+
  + VRC ARTserver 1.2           (C) 2003 VirCinity GmbH +
  +-----------------------------------------------------+
  + Settings:                                           +
  +   ART port:          5000                           +
  +   ART startup:       (Not used)                     +
  +   UDP Target:        localhost:7777                 +
  +   Send Rate:         20.0 Packets/s                 +
  +-----------------------------------------------------+
  + Mapping:                                            +
  +   Target F1   --> COVER ID 0                        +
  +   Target B1   --> COVER ID 1                        +
  +-----------------------------------------------------+

INFO: DTrack server started
INFO: DTrack server forked
VRC 0   0 [   15   -73    22] - [-0.18  0.50  0.85  0.98  0.18  0.10 -0.11  0.85 -0.52] 
                                                                       - [ 0.00  0.00 ]
VRC 1   0 [   33   109    87] - [ 0.44 -0.64 -0.63 -0.59 -0.74  0.34 -0.68  0.22 -0.70] 
                                                                       - [ 0.00  0.00 ]
---
VRC 0   0 [   15   -73    22] - [-0.18  0.50  0.85  0.98  0.18  0.10 -0.10  0.85 -0.52] 
                                                                       - [ 0.00  0.00 ]
VRC 1   0 [   32   108    87] - [ 0.45 -0.64 -0.63 -0.59 -0.74  0.33 -0.67  0.22 -0.70] 
                                                                       - [ 0.00  0.00 ]
---
VRC 0   0 [   15   -73    22] - [-0.18  0.50  0.85  0.98  0.18  0.10 -0.11  0.85 -0.52] 
                                                                       - [ 0.00  0.00 ]
VRC 1   0 [   32   109    87] - [ 0.46 -0.64 -0.62 -0.58 -0.74  0.34 -0.68  0.20 -0.71] 
                                                                       - [ 0.00  0.00 ]
---

   ID  Buttons x     y     z     Rotation                                        Analog

Buttons:  Bits 0-7 for max. 8 buttons, Bit=1 pressed, Bit=0 released

Spaceball

The SPACEBALL device and the Magellan Spacemouse or the DLR Space Mouse contain an opto-electronic measuring system which measures the movement of the cap or ball. Suspended by springs, the cap or ball always tends to return to its initial position.

Figure: The Spaceball Input Device
spaceball.png

Spaceball Installation

On SGI systems the Magellan SPACE MOUSE or the DLR SPACE MOUSE can be used as a X Windows Input device. You have to install the package eoe.sw.optinput. Connect the spacemouse to the serial port. Now reboot the system. Use the tool '/usr/sysadm/bin/sysmgr' (as root). Select 'Hardware and Devices' - 'Add a Serial Device' and install the 'Magellan' device.

For testing the magellan device you can run the confidence test '/usr/sbin/confidence'.

For the COVER and the inventor renderer module you have to use the old name "spaceball". You must create the file /usr/lib/X11/input/config/magellan with the following contents:

x_init{

name "spaceball"

}

After that you should make a reboot.

Note: Please make sure that the serial interface

 /dev/ttyd<no>
or
 /hw/ttys/ttyd<no>
is readable and writable for the user, where
<no>
specifies the number of the serial interface the spaceball is connected to.

Coordinate Systems

You don't have to care about different coordinate systems when using the spacemouse. The spacemouse is used only for the hand. You have to switch off headtracking and set the viewer position to an appropriate value. For the space mouse on the table next to the monitor the viewer is usually about 50 cm behind the monitor:

COVERConfig
{
    ....
    FREEZE              ON
    VIEWER_POSITION     0.0 -500.0 0.0
    ....
}

Spaceball Usage

As mentioned above the space mouse can be used only as hand input device. Without any interaction selected from the menu the space mouse steers the laser sword. To select an menu item, move the laser sworld so that it points to the menu item and then click on button 1. For interactions like XFORM (“move world”), where you have to keep the button pressed, you have to keep the button 1 pressed to perform the movement of the scene.

Instead of pressing the button 1 and keep it pressed you can also click on button 5 (without keeping it pressed). To release it, click on button 5 again. In addition you can use the following features:

SPACEBALL has to be added as tracking system in COVERConfig; depending on the scene size and the frame rate you may want to change the translation and rotation rate of the space mouse:

COVERConfig
{
    ....
    TRACKING_SYSTEM     SPACEBALL
    ....
}
SpaceballConfig
{
    SCALE_TRANSLATION   <tfactor>
    SCALE_ROTATION      <rfactor>
}

Recommended values are 1.0 for translation and 5.0 for rotation; if you want more precision for rotation, select a value less than 5.0.

MIKE

MIKEserver

The MIKE device supplies button information only, no tracking information. So the MIKE server has to send its values to an ID different from the tracking device used, and BUTTON_ADDR in TrackerConfig has to point to the corresponding ID. If e.g. in the example above A.R.T. tracking uses the IDs 0 and 1, the MIKE server may send its values to ID 2.

   

MIKEserver [options]  coverID

   coverID = Station ID for COVER's BUTTON_ADDR config

Options:

   -t <host:port>          set target to send tracking UDP packets
   --target=host:port      (default: localhost:7777)

   -d <serialPort>         Device name of serial port
   --device=serialPort     (default: SGI /dev/ttyd1, Linux /dev/ttyS2)

Examples:

   

   MIKEserver 3            Read MIKE device at default port and send
                           data to localhost:7777 with ID=3

   MIKEserver -d /dev/ttyS15 -t vircinity:6666 4
                           Read MIKE device at /dev/ttyS15 and send data
                           to Host "vircinity" Port 6666 with ID=4

VRC

VRC (Tracking-Device)

COVER has a new Tracking-Device, called 'VRC'.

Add in Covise-Config:

COVERConfig
{
    ...

    TRACKING_SYSTEM             VRC
}

The VRC system is not a standalone tracker, but a receiver for externally generated tracking and button information. This information can be supplied by UDP via the network and is generated by device servers that have to be started separately.

VRC tracking is configured in a dedicated section:

VRCTracker
{
  Port         <Port number>
  DebugLevel   <0..4>
  Unit         <measurement unit>
}

The VRC tracker is capable to receive input from more than one device simultaneously. The channels are identified by IDs [0..31]. Use section TrackerConfig to specify which channel contains which information.

TrackerConfig
{
    ...
    HEAD_ADDR   <ID>
    HAND_ADDR   <ID>
    BUTTON_ADDR <ID>
    ANALOG_ADDR <ID>
    ...
}

Example: Workbench with Polhemus

Figure: Determine the transmitter offsets
transmitter_offset.png
In the RUS workbench example the trackings system is a polhemus FASTRAK. The SEU is connected to the second serial port of the Onyx, the baud rate is 19200. A long ranger transmitter is connected to the SEU. The longranger is mounted at the ceiling, therefore we select the hemisphere with the cenit in -z direction (the hemisphere direction is defined in the transmitter coordinate system).

The stylus,connected to station 1, is used as input device and a sensor, connected to station 2 is used for headtracking. The sensor is mounted at the left side of the glasses.

The transmitter position offset TRANSMITTER_OFFSET_POS can be easily measured. Please note that contrary to the screen dimensions the offset is defined in centimeters. The image above shows the world coordinate system with the origin at the center of the workbench and the transmitter coordinate system with the origin in the longranger sphere.

The orientation of the transmitter coordinate system is also different from the world coordinate system. As mentioned above we have to determine the euler angles. We have to rotate an imaginary transmitter with the same orientation as the world coordinate first around the (world) y-axis, then around the (world) x-axis and at least around the (world) z-axis. It is easy to see that it needs only a rotation of 180 degree around the z axis to match the imaginary transmitter with the real one.

Figure: Determine the sensor offsets
sensor_offset.png

The position of the viewer coordinate system in the sensor system (the sensor is mounted at the left frame of the glasses), can be measured (see image). To find the euler angles, we rotate an imaginary sensor with the same orientation as the viewer coordinate system, -90 degree around the y-axis, and -90 degree around the z-axis to match the real sensor system.

As the sensor in the stylus is always mounted in the same way, it doesn't need to be described here.

PolhemusConfig
{
    SERIAL_PORT             /dev/ttyd2 19200
    HEMISPHERE              -1 0 0
    HAND                    POLHEMUS_STYLUS     1
    HEAD                    POLHEMUS_SENSOR     2
    TRANSMITTER_OFFSET_POS  -108 -120 20
    TRANSMITTER_OFFSET_EULER 180 0 0
    SENSOR_OFFSET_POS        5 0 10
    SENSOR_OFFSET_EULER     -90 0 -90
    STYLUS_OFFSET_POS        0 0 0
    STYLUS_OFFSET_EULER      90 0 0
}
PreviousNext

Authors: Martin Aumüller, Ruth Lang, Daniela Rainer, Jürgen Schulze-Döbold, Andreas Werner, Peter Wolf, Uwe Wössner
Copyright © 1993-2022 HLRS, 2004-2014 RRZK, 2005-2014 Visenso
COVISE Version 2021.12