WATCH OUT !! Button bits are leastsignificant first invert (10000000) with buttonin(00000000) will result in (00000001) !! sequence : validtrans, radiobuttons, invertstr, buttonmask, buttonmap
The element has the following attributes :
validtrans (8bit) specify valid transmission bit for radio pen (1_2_____) means radio pen 1 has VT on bit 0, radio pen 2 has VT on bit 2 radiobuttons (8bit) specify bits for radio pen (ref to validtrans) (_1_22___) means bit 1 is for radio-pen 1, bit 3&4 is for radio-pen 2 (has two buttons) buttonmask binary mask to enable the individual buttons, e.g. "11110000" enables buttons 0-3 buttonmap 8-digit string, assigning an output number to every individual button input, e.g. "01324567" swaps buttons 2 and 3. Multiple assignments ar ORed together, e.g "00001111" means button 0=true if one (or more) of buttons 0-3 is pressed, button 1=true if one of buttons 4-7 is pressed. invert binary mask for inverting individual buttons. 0 stands for leave alone, 1 for invert. this is applied before the button mapping !<ButtonFilter buttonmask="11110000" buttonmap="32107777" invert="00100000"> <ParButtonSource dev="0x378" DEF="buttons"/> </ButtonFilter>
Example_ for one bit(n=3) - over time)
input : 11110111001101000011111 output: 11111111111111111011111
input : 11110111001101000011111 output: 11111111101111100011111
Example usage/defaults:
\<ButtonHoldFilter offDuration="2" > ... (any Event Source) \</ButtonHoldFilter>
The element has the following attributes :
op (OR | AND) whether it should do an OR or AND.<ButtonOp op="OR"> <Arg1> <any event generator ...> </Arg1> <Arg2> <any event generator ...> </Arg2> </ButtonOp>
name a unique name to identify it among all Callback nodes.<Callback name="cb1"> <Any EventGenerator element type> </Callback>
name a unique name to identify it among all Callforward nodes.<Callforward name="cf1">
treshhold the treshhold value in [0,1] type high either high or low to denote the mode<ConfidenceFilter treshhold="0.8" type="high" > ...any event node </ConfidenceFilter>
It will store the confidence value of an event received and filter out any events that arrive within a certain time span set by the timeout parameter and that have a confidence value below ( or higher ) than the stored one. After the timeout it will again store the next event received. If an event passes the test, the events confidence value is stored and the timeout starts again. Two modes are possible : high filters out lower values and low filters out higher values. The element has the following attributes :
timeout the timeout value in milliseconds type high either high or low to set the type of filtering<ConfidenceSelect timeout="100" type="high" > ...any event node </ConfidenceFilter>
comment a line of text describing the output active on (on|off) flag defining whether this sink should store and output data and be displayed or not.<ConsoleSink comment="my Console node"> <Any EventGenerator element type> </ConsoleSink>
It has the following attributes :
number a number ( 0 - 9 ) giving the station number.<ConsoleSource number="2"/>
Example usage/defaults:
\<DESPFilter filter-position="0.5" filter-orientation="0.3"> ... (any Event Source) \</DESPFilter>
timeframe time between events in difference calculation attributeName attribute to focus on in difference calculation<Difference timeframe="1000" attributeName="button"> <Any EventGenerator element type> </Difference>
Example usage/defaults:
\<ElasticFilter force="0.02" damp="0.5" frequency="1" offset="0"> ... (any Event Source) \</ElasticFilter>
length 1 the maximal number of last events to store<EventQueue length="10"> <Any EventGenerator element type> </EventQueue>
The element has the following attributes:
rename an attribute's name and a new name for this attribute separated by a space (' ') discard the name of an attribute to be discarded create generic type name, name, and value (separated by spaces) of an attribute that should be added to the event<EventUtilityNode rename="position pos" discard="confidence" create="double doubleAttribute 7.4"> <Any EventGenerator element type> </EventUtilityNode>
file the file name to use station the station number to record<FileSink file="test.out" station="0"> <Any EventGenerator element type> </FileSink>
The event data is processed in the order appearing in the file. During each cycle, each source fires at most once. Data that has a station number which is not used by any FileSource is dropped.
A FileSource has the following attributes :
file the file name to use station the station number to record localtime false (true|false) whether to use the local time as time stamp or the time recorded in the file<FileSource file="name" station="0" localtime="false"/>
The position is calculated as the weighted average of the last events positions. No normalization is done, so one can use this filter to calculate gain != 1. The rotation is calculated in exponential space of the unit sphere of quaternions. Here the average is normalized to stay within the result space. Confidence values are also averaged and not normalized.
The element has the following attributes :
weight a number of float values giving the individual weights of the events averaged. The number of events used from the queue are equal to the number of weights specified here. The first weight relates to the newest event. If less events are stored in the queue, no new event is generated. type all (all|position|orientation) a mode attribute that specifies to which part of the event data the filter should be applied to. position will apply it only to the position part, orientation to the orientation and to both.<Filter weight="0.5 0.5 0.5" type="all"> <EventQueue>...</EventQueue> </Filter>
A GroupGate only generates an event if the node itself or its neighbors are active.
The GroupGate element has the following attributes :
DEF defines the name of the node. This name must not be used more than once within a group group defines the group to which the node is added if the group does not exist, a new one is created neighbors defines the neighbors of the node within a groupOverride element is used to activate a node within a group. See also the ActiveGate element that outputs the currently active GroupGate of a given group.example: elements for a cyclic three noded graph looks like this
<GroupGate DEF="Node1" group="CyclicGraph" neighbors="Node3"> <Override> <...incomming events...> </Override> <...incomming events...> </GroupGate> <GroupGate DEF="Node2" group="CyclicGraph" neighbors="Node1"> <...incomming events...> </GroupGate> <GroupGate DEF="Node3" group="CyclicGraph" neighbors="Node2"> <...incomming events...> </GroupGate> <ActiveGate group="CyclicGraph"/>
ActiveGate node is used to determine the currently active GroupGate of a group. It returns a numeric value in the button field of the event structure The value is used to call the getGroupGateName() method of GroupGateModule to return the name of the GroupGate. See the GroupGate element for an example of the ActiveGate element. It has the following attributes :
group defines the group of which the active node should be traced.
MergeAttribute only attributes with the name defined by the attributeName tag is taken from events received from children of this wrapper element MergeTime only the time stamp data is taken MergeTrigger if this element is present, the local event will only be propageted to parent nodes after an event from the trigger was received MergeDefault any data that is not set by a child of another wrapper element is used.An example element using all wrapper elements looks like this :
<Merge agingFactor="0.8" confidenceCalculation="multiply"> <MergeDefault> <Exactly one EventGenerator element type> </MergeDefault> <MergeTime> <One or more of any EventGenerator element type> </MergeTime> <MergeTrigger> <One or more of any EventGenerator element type> </MergeTrigger> <MergeAttribute attributeName="someAttribute"> <One or more of any EventGenerator element type> </MergeAttribute> </Merge>
min and max attribute that define the minimum and maximum of position data to be passed through (like a BoundingBox). Other events are droppedmin -1, -1, -1, minimal position in meters max 1, 1, 1, maximal position in meters<PositionFilter min="-1 -1 -1" max="1 1 1"> <Any EventGenerator element type> </PositionFilter>
min and max attribute that define the range of lengths of events to be passed through. Other events are droppedThe element has the following attributes :
min 0, minimal length in meters max large value, maximal length in meters<RangeFilter min="0.1" max="2.5"> <Any EventGenerator element type> </RangeFilter>
timeout, time period between two input events (in milliseconds)Select marks the preferred EventGenerator<Selection timeout="100"> <Select> <One of any EventGenerator element type> </Select> <One of any EventGenerator element type> </Selection>
Has the following XML attributes:
CSOrientationQuat quaternion quadruple determining the orientation difference of application screen coordinate system to the world coordination system (mandatory) CSRoot2ScreenRootVec positional 3D vector directing from the application screen coordinate system origin (location of ASPD) to the screen root position, per definition the top left corner of the desktop screen (mandatory) ASWidthVec the 3D width vector (x-axis) of the desktop screen plane (mandatory) ASHeightVec the 3D height vector (y-axis) of the desktop screen plane (mandatory)
ot::ThreeToTwoDimCalc descriptionThe ThreeToTwoDimFilters are driven by the ThreeToTwoDimFilterModule which holds the singular config for the calibration.
An example element looks like this :
<ThreeToTwoDimFilter> <AspdInput> <Any6DOFsource/> </AspdInput> <PointingDeviceInput> <Any6DOFsource/> </PointingDeviceInput> </ThreeToTwoDimFilter>
The element has the following attributes :
positionmin 0 minimal distance between the two positions positionmax inf maximal distance between the two positions, inf means largest possible value rotationmin 0 minimal angle between the two quaternions, a very general measure rotationmax 3.141592654 maximal angle, default is pi the maximal possible angle. Any values will be clamped to these intervals and it is ensured that max is >= min, by setting max = min, if necessary.<ThresholdFilter positionmin="0.1" positionmax="3" rotationmin="0" rotationmax="3"> <Any EventGenerator element type> </ThresholdFilter>
timeframe, time period between two input events (in milliseconds) mode (pass|block) in pass mode it will only let events pass, that fall within a timeframe interval of an event received through the Gate input. In block mode it will block these events.Gate marks the gate that opens or closes the node for some time<TimeGate timeframe="100" mode="pass"> <Gate> <One of any EventGenerator element type> </Gate> <One of any EventGenerator element type> </TimeGate>
timeout timeout after which the last event is regenerated<TimestampGenerator timeout="1000"> <Any EventGenerator element type> </TimestampGenerator>
It also supports simulation of noisy data. The parameter noise defines the size of a uniform distribution used to perturb the given default position and orientation. In addition to that it also defines the probability that the orientation representation is using the negative representation.
Moreover, the TestSource provides some multi-modal attributes of type int, char, double, and float. These attributes can either be renamed by an EventUtilityNode and used as test data for the implementation of new nodes, or you can add more or different attributes in the same way to get test data for your implementation.
The node has the following elements : @
frequency every freq. cycle it fires offset starting after offset cycles position position value of the event to fire as 3 floats orientation orientation value of the event to fire as 4 floats representing a quaternion button a 16 bit integer value representing the button events confidence a float value in [0,1] to represent the confidence value noise a float value > 0, if present will output noisy data for simulations<TestSource frequency="10" offset="5" />
number the body number of the specific source, starting with 0<ARTDataTrackerSource number="0"/>
cfg-file the file containing setup the marker patterns<ARToolKitMultiMarkerSource cfg-file="test_setup.cfg" />
tag-file the file containing the marker pattern center the center within the marker as two coordinates in millimeters size the size of the quadratic marker in millimeters<ARToolKitSource tag-file="pip.tag" center="0,0" size="40" />
An example element looks like this :
<CyberMouseSource/>
number the target number, between 0 and 8<DynaSightSource target="0" />
number the stations number<FastTrakSource number="1"/>
number specifies the bird to use. An example element looks like this : <FOBSource number="1"/>
see also the gogomodule.
An example element looks like this :
<ConsoleSink comment="GoGo" active="on"> <EventSink tracking="gogo"> <GoGoSinkSource rotationWeight="0.1" translationWeight="1.0"> <RelativeInput> <ConsoleSink comment="SpaceDevice" active="on"> <SpaceDeviceSource/> </ConsoleSink> </RelativeInput> <ViewerLocation> <ConsoleSink comment="ViewerLocation" active="on"> <EventKeyboardSource number="9"/> </ConsoleSink> </ViewerLocation> <GoGoDeviceKit> <ConsoleSink comment="GoGoDeviceKit" active="on"> <EventSource node="GOGODEVICEKIT" button="gogoButton"/> </ConsoleSink> </GoGoDeviceKit> </GoGoSinkSource> </EventSink> </ConsoleSink>
An example element looks like this :
<GPSDirectionSource/>
An example element looks like this :
<GPSGarminAltitude/>
An example element looks like this :
<GPSGarminCompass/>
An example element looks like this :
<GPSInfoSource/>
An example element looks like this :
<GPSSource/>
id attribute. See the InterSenseModule for details on the reported position and orientation data. The element has the following attributes : id the id of the tracker as set in the configuration element station the number of the station of the tracker to output. This attribute is ignored for InterTrax devices. Between 0 and 7 inclusive.<InterSenseSource id="IS600" station="1"/>
id the ID of the joystick the source is associated with<JoystickSource id="1"/>
An example element looks like this :
<Linmousesource/>
number the number of the wand, between 0 and 99 average, when set to 1 it ignores the number and calculates the average of all MagicY points.<MagicYSource number="0" average="false"/>
number the body number of the specific source, starting with 0<MulticastInputSource number="0"/>
In general the sensor module behaves like a Bluetooth GPS device. After the device discovery phase and connection phase the module opens a serial port profile service and starts sending data continually to the serial port. The data format is in the form: nnn.n,nn.n,nn.n The first group shows the direction of the magnetic compass, then follows the tilt angle in x and y direction. All data are in decimal degrees. Tilt angles can also be negative.
The device has 2 switches. The BT switch is for the Bluetooth module to start and stop. The HW module is for the sensor module to start and stop. In the first step only the BT module must be 1, the HW switch has to be turned off. Else the BT module doesnt go to data mode. After having established a connection, the HW switch can be turne on.
An example element looks like this :
<OrientationSource/>
It has the following attributes
finger the number of the finger to track, in the range 0 - 4. The mapping is: 0 = thumb, 1 = index, 2 = middle, 3 = ring, 4 = pinky<P5GloveSource finger="1"/>
An example element looks like this :
<PanTiltUnitSinkSource/>
dev attribute.An example element looks like this :
<ParButtonSource dev="0x378"/>
See the ParButtonModule (Parallel Button Input) for information on how to get it to work on different operating systems.
deviceName the Windows device name of the input device which should be tracked <RawInputSource deviceName="\??\HID#Vid_046d&Pid_c016#6&3473f8a6&0&0000#{378de44c-56ef-11d1-bc8c-00a0c91405dd}" />see also the SpaceDeviceModule.
An example element looks like this :
<ConsoleSink comment="spaceDevice"> <EventSink tracking="spaceDevice"> <SpaceDeviceSource/> </EventSink> </ConsoleSink>
see also the SpaceMouseModule.
An example element looks like this :
<ConsoleSink comment="space device cursor"> <EventSink tracking="spaceCursor"> <SpaceMouseSource rotationWeight="0.1" translationWeight="1.0"> <!-- viewer location sink for space device--> <ConsoleSink comment="ViewerLocation"> <EventSink tracking="ViewerLocation"> <ConsoleSource number="1"/> </EventSink> </ConsoleSink> <!-- ExtSpaceMouseConfig is for changing the weights (WILL MOVE TO KIT)--> <ExtSpaceMouseConfig> <ConsoleSink comment="ExtSpaceMouseConfig"> <ConsoleSource number="0"/> </ConsoleSink> </ExtSpaceMouseConfig> <!-- This Node receives data from the SpaceMouseKit Node --> <SpaceMouseKitData> <ConsoleSink comment="SpaceMouseKitData"> <EventSource node="SPACEMOUSEKIT" button="otcButton" /> </ConsoleSink> </SpaceMouseKitData> </SpaceMouseSource> </EventTransform>
This node always pushes 2 events, one speech "start" event, and one speech "end" event. This is used for button press/release actions. The start is coded as button 0 pressed, end as button 0 released. The source only fires events when a command is successfully recognised. It has the following attributes :
name is the name of the source node. set specifies the name of the command set to use in this node.<SpeechRecoSource name="numberset" set="CmdSet1"/>
An example element looks like this :
<SysMouseSink> <AbsoluteInput> <Any EventGenerator element type normalized to 65535> </AbsoluteInput> <RelativeInput> <Any EventGenerator element type> </RelativeInput> </SysMouseSink>
object the name of any Ubisense object which should be tracked<UbisenseSource object="Person" />
number the stations number, between 0 and any positive number<UltraTrakSource number="1" />
device, type of pointing device (pen, eraser, puck)<WacomGraphireSource device="1" />
comport the number of the serial port the tracker is connected to, starting with 1 amd (true|false) false whether to use the automatic adjustment to magnetic disturbances.<XSensSource comport="1"/>
The coordinate system of the orientation data is as follows. X and Y form the horizontal plane and Z is upwards. The measurement cube itself has a similar body system and reports orientations from the body system into the global system. To convert the readings into an Open Inventor like system use the following configuration. Then X and Z form the horizontal plane and Y is upwards for both global and body system.
<EventTransform rotationtype="matrix" rotation="1 0 0 0 0 1 0 -1 0"> <EventVirtualTransform rotationtype="matrix" rotation="1 0 0 0 0 -1 0 1 0"> <Ref USE="xsens"/> </EventVirtualTransform> </EventTransform>
name the name to bind to in the CORBA NamingService station the station number to record<CORBASink name="CORBANodes.Context/Sink001.Object/">
It also supports simulation of noisy data. The parameter noise defines the size of a uniform distribution used to perturb the given default position and orientation. In addition to that it also defines the probability that the orientation representation is using the negative representation.
The node has the following elements :
frequency every freq. cycle it fires offset starting after offset cycles position position value of the event to fire as 3 floats orientation orientation value of the event to fire as 4 floats representing a quaternion button a 16 bit integer value representing the button states confidence a float value in [0,1] to represent the confidence value noise a float value > 0, if present will output noisy data for simulations<CORBASource name="Ubitrack.Context/Fred.Source" frequency="10" />
name the name to bind to in the CORBA NamingService station the station number to record<CORBATransform name="CORBANodes.Context/Sink001.Object/">
<DwarfSink frequency="10" offset="5" />
<DwarfSource frequency="10" offset="5" />
mode (unicast|multicast) chooses between multicast and unicast mode name the stations name number the (nonnegative) stations number multicast-address the multicast group to send to in multicast mode port port to send to in multicast mode or to listen for in unicast mode interface ip address of the interface to work on<NetworkSink mode="unicast" name="station name" number="0" port="54321"> <Any EventGenerator element type> </NetworkSink> <NetworkSink mode="multicast" name="station name" number="1" multicast-address="224.0.0.10" port="12345" interface="192.168.2.100"> <Any EventGenerator element type> </NetworkSink>
mode (unicast|multicast) chooses between multicast and unicast mode number the (nonnegative) station number multicast-address the multicast group to receive from in multicast mode address the address to receive from in unicast mode port port to receive from An example element looks like this : <NetworkSource mode="unicast" number="0" address="localhost" port="54321"/> <NetworkSource mode="multicast" number="1" multicast-address="224.0.0.10" port="12345"/>
number the stations number, between 0 and any positive number multicast-address the multicast group to send to port port to send to<NetworkSource number="1" multicast-address="224.0.0.10" port="12345"/>
group the group to send multicast Phantom events pid the unique phantom id of the object frequency the frequency at which OT events are converted to Phantom events<PhantomMiddlewareSink group="225.0.0.12" pid="147" frequency="1">
group the group to send multicast Phantom events pid the unique phantom id of the object frequency the frequency at which OT events are converted to Phantom events<PhantomMiddlewareSink group="225.0.0.12" pid="147" frequency="1">
It also supports simulation of noisy data. The parameter noise defines the size of a uniform distribution used to perturb the given default position and orientation. In addition to that it also defines the probability that the orientation representation is using the negative representation.
The node has the following elements :
frequency every freq. cycle it fires offset starting after offset cycles position position value of the event to fire as 3 floats orientation orientation value of the event to fire as 4 floats representing a quaternion button a 16 bit integer value representing the button states confidence a float value in [0,1] to represent the confidence value noise a float value > 0, if present will output noisy data for simulations<PushCons name="Ubitrack.Context/Fred.EventChannel"/>
name the name to bind to in the CORBA NamingService station the station number to record<PushSupp name="Ubitrack.Context/EventChannel/">
name the name to bind to in the CORBA NamingService station the station number to record<SharedEngineNode name="Ubitrack.Context/EventChannel/">
station number of the station position on|off flag to specify whether position information is to be send orientation on|off flag to specify whether orientation information is to be send button on|off flag to specify whether button information is to be send time on|off flag to specify whether timestamp information is to be send<TCPSink station="0" position="on" rotation="off" > <Any EventGenerator element type> </TCPSink>
name attribute that specifies the device name of the node. The type field selects the type of device to be, either a tracker for 6DOF information or a button with up to 8 buttons. The values correspond to the OpenTracker event type. See http://www.vrpn.org/ for details on VRPN.It has the following attributes :
name the VRPN device name to distinguish it from other devices on the server (tracker|button) to configure the type of device to be <VRPNSink name="tracker3" type="tracker" station="2"> <Any EventGenerator element type> </VRPNSink>
type selects between the two modes. The station attribute selects the tracker station to report on. The most important attribute is
1.4.6