ARTTracker
This service provides tracking data from the
ART DTrack system to DWARF.
DTrack provides two distinct kinds of tracking output: 6DOF data of precalibrated bodies or flysticks consisting of multiple retrorefelective balls and 3DOF data of all balls that could not be assigned to a body. The ARTTracker service converts both data streams to a set of DWARF
PoseData event streams.
Configuration is handled entirely using the XML service description.
Needs & Abilities
An example can be found in
ARTTracker.xml.
The service's functionality is defined by the
PoseData Abilities given in the service description. At startup, the service parses the description and looks for
PoseData Abilities with a
ScvProtPushSupplier? connector having names with the following prefixes:
- 6DMarker
Provides an ability sending PoseData for the DTrack body with the internal ID number defined in the Ability's attribute InternalID
. The ThingID? and ThingType? of this ability are set accordingly.
- 6DFlystick
Provides an ability sending PoseData for the DTrack flystick with the internal ID number defined in the Ability's attribute InternalID
. The ThingID? and ThingType? of this ability are set accordingly.
- 3D
Provides an ability sending PoseData for DTrack 3DOF data. The ThingType? of the PoseData struct is set according to the definition in the service description, the ThingID? is set according to the internal DTrack ID. DTrack tries to actually track 3D objects, but no guarantee is given that the same object has always the same ID number.
All Abilities can have the additional integer attribute
DataDivisor
, sending only every n-th frame.
Interaction with other Services
- Data is sent to all other services interested in. Usually ServiceObjectCalibration preprocesses the raw data in order to do some calibration.
More Documentation
How-To
Write your own XML configuration of this service. A toy example looks as follows:
<?xml version="1.0" encoding="ISO-8859-1"?>
<!DOCTYPE service SYSTEM "service.dtd">
<service name="ARTTracker" startOnDemand="false" stopOnNoUse="false" startCommand="ARTTracker">
<ability name="6DMarkerForDeRasda type="PoseData">
<attribute name="ThingID" value="Rasdaman"/>
<attribute name="ThingType" value="ART6DMarker"/>
<attribute name="InternalID" value="2"/>
<attribute name="DataDivisor" value="10"><!--Relax, man!>
<connector protocol="PushSupplier"/>
</ability>
<ability name="6DFlystick#1" type="PoseData">
<attribute name="ThingID" value="Flystick1"/>
<attribute name="ThingType" value="ART6DFlystick"/>
<attribute name="InternalID" value="1"/>
<connector protocol="PushSupplier"/>
</ability>
<ability name="3D" type="PoseData">
<attribute name="ThingType" value="ART3DObject"/>
<connector protocol="PushSupplier"/>
</ability>
</service>
Start it if it's not started automatically. That's all. Care has to be taken that the ARTTracker is running on a computer that gets the UDP stream from DTrack. If the service does not work as intended, it is most likely that the DTrack settings are wrong.
Installation
No special packages are required. If you have a running DWARF installation, do a
make install
in the ARTTracker directory. This creates an application called
ARTTracker
which can be started on the command line.
Testing
Start
ARTTracker
, start some service that needs
PoseData (for example
ServicePoseDataReceiver?). Have fun with
ServiceDIVE then.
Command Line Parameter
You can use the following command line parameter:
- -Dport=<int>: set the UDP port the service listens to (default 5000)
- -Dfast=<bool>: enable superlinear speedup. Yields superior performance on 3 CPU Macs.
Known Bugs and Limitations
The service description must have the
InternalID
attribute set. If it is not given for 6DOF objects, the service terminates (rather crashes...) unhappily.
History