Back to
main page.
An Introduction to the Ubitrack library
This page is some kind of minutes of the introduction, held on Thursday, June 28, 2007.
There are additional
slides (pdf) containing lots of images and examples.
Since the slides were created, two important things have changed:
- The renderer works differently now, see
doc/utql/ExampleRenderMarker.utql
for an example.
- To connect components, you have to write
pattern-ref
instead of graph-ref
in UTQL.
After this, you'll
- have a compiled Ubitrack on your harddrive
- know how to write and run data flows in UTQL
- be able to use it in your own programs
Ubitrack intends to solve tracking and calibration problems in various applications.
DP add here: What is Ubitrack!?
SRGs and Patterns
Spatial Relationships Graph
Spatial Relationships Graphs (SRGs) describe the tracking situation:
- Nodes represents coordinate systems (in common six degrees of freedom, 6DOF)
- Edges represent known transformations (usually directed)
Patterns
- Describe sturctural properties of tracking algorithms
- Input edges are necessary preconditions
- Output edges describe the result of the algorithm
- The patterns desscribe how new relationships can be infered
Patterns and Data Flow Networks
- Data Flow Networks (DFN) are formed by connected components to compute new relationships at runtime
- DFNs only need to change when the topology of the underlying SRG changes
- DFns are constructed by applying patterns
Push and Pull Communication
- Push is asynchronous (in common tracking hardware)
- Pull is synchronous (request by timestamp, accuracy about 100ms to 1s)
- Pull-Pull: Use in Concatenation, where n incoming values need fusion
- Push-Pull: Requests pull-value on certain push
- Push-Push: in general not possible - special case if incoming measurements are synchronous (e.g. one cam delivers n poses to the same concatenation (i.e. DTrack))
- Push-to-Pull-Conversion: requires extra component, e.g.: Buffering, Averaging, Interpolation, Extraploation, Kalman Filter
Library Overview
Layered Approach:
Middleware Layer | Distribution | Tracker Registration | |
Data Flow Layer | Data Flow Framework | Data Flow Components | API |
Algorithmic Layer: | Data Structures | Tracking Algs | SRG Algs |
Writing and running data flow in UTQL
UTQL specifies:
- SRGs
- SR Patterns
- Application queries
- Patterns are patterns - there can be multiple instances of patterns
- Edges are referenced by Pattern-ID and name of edge
- Names of nodes and edges are used by pattern to look up attributes
Practice 1
Get the snowman running (call from lib folder):
> utConsole snowman.utql
Practice 2
see slides
Practice 3
see slides
The API in C++ and Java
- Find docs here: http://campar.in.tum.de/personal/fardemo/ubidoc
- What is the utConsole doing? Do it on your own:
- C++
- Java
- import ubitrack.*;
- System.loadLibrary("ubitrack_java");
- SimpleFacade sf = new SimpleFacade();
- sf.loadDataFlow("xxx");
- start, stop
- Receive data in your app
- Build a pattern
ApplicationPushSink
with class ApplicationPushSinkPose
- C++
- Java
- class MyReceiver extends SimplePoseReceiver{...}
- sf.setPoseCallback("idName", new MyReceiver());
- Notes
- SimpleFacade methods return
false
on errors
- Logging
- C++
-
#include
-
Ubitrack::Util::initLogging();
- Java
- C++ also supports an
AdvancedFacade
Outlook (Ubitrack server)
- What components are already implemented: see List (TODO: Link)
- UbitrackServer?'s goal
- Automatic dataflow generation
- Share tracking among different clients
- Queries for (unknown) objects
- automatic reconfiguration