**Object Tracking**


Task
====
A hidden object is moved in the [standard setup](/doc/setup). For each frame, the position and / or orientation of the object has to be reconstructed.

Dataset
=======
Three different rigid objects are used throughout this challenge:

- a sphere
- a golem figurine and
- an airplane.

For each object, there are a total of four tasks:
1) movement along the three main axes without rotation
2) rotation at a fixed position along the three main axes
3) movement along a complex path with constant orientation
4) movement along a complex path while changing orientation

Task name              | Material | Shape known | Position | Rotation | Frames
-----------------------|----------|-------------|----------|----------|--------
**SphereAxesMove**     | diffuse  |  **yes**    | yes      | no       | 30
SpherePathMove         | diffuse  |  **yes**    | yes      | no       | 40
**GolemAxesMove**      | diffuse  |  **yes**    | yes      | no       | 30
**GolemAxesRotate**    | diffuse  |  **yes**    | no       | yes      | 30
GolemPathMove          | diffuse  |  **yes**    | yes      | no       | 40
GolemPathMoveRotate    | diffuse  |  **yes**    | yes      | yes      | 40
**AirplaneAxesMove**   | specular |  no         | yes      | no       | 30
**AirplaneAxesRotate** | specular |  no         | no       | yes      | 30
AirplanePathMove       | specular |  no         | yes      | no       | 40
AirplanePathMoveRotate | specular |  no         | yes      | yes      | 40

For the tasks marked in bold font, the ground truth information is available.

Due to its symmetry, the challenges involving rotations are not included for the sphere dataset. The paths are different for each object and challenge, e.g. the golem moves along one path with constant orientation and along another path for the combined orientation and translation.

We provide ground truth geometric information about the sphere and golem object. Reconstructing the shape of the airplane is not part of the challenge, however it might help for a more precise tracking. Furthermore, the ground truth positions and orientations for the movements and rotations along the main axes are provided.

[  ](/database/Tracking/Models.7z)**Models**

[  ](/database/Tracking/TrackingGT.7z)**Ground truth paths**

The origin of each object is its center of mass. Because the default orientation is not equally easy to define, the orientation of the first frames (`"id": 0`) are given:

~~~~~~~~ json
{
"AirplanePathMoveRotate" :[
            0.7083696193608413,
            0.15121412639522358,
            -0.15869476550036576,
            0.6709417389641497
        ],
"GolemPathMoveRotate":[
            0.30332050263039323,
            0.008433319515670317,
            0.15430989238141551,
            0.9402734475086361
        ]
}
~~~~~~~~


As some tracking algorithms only support position and not orientation tracking, the challenge is split in two parts. As usual, solutions for each task must be provided, but users can decide whether they want to participate in the orientation tracking.


Download
--------
The tracking dataset is pretty large, as each task consist of many frames. The download is therefore provided as an individual file per task:

Task                   | Download
-----------------------|-------------------------------------------------------------------------------------------
SphereAxesMove         | [  ](/database/Tracking/SphereAxesMove.7z)
SpherePathMove         | [  ](/database/Tracking/SpherePathMove.7z)
GolemAxesMove          | [  ](/database/Tracking/GolemAxesMove.7z)
GolemAxesRotate        | [  ](/database/Tracking/GolemAxesRotate.7z)
GolemPathMove          | [  ](/database/Tracking/GolemPathMove.7z)
GolemPathMoveRotate    | [  ](/database/Tracking/GolemPathMoveRotate.7z)
AirplaneAxesMove       | [  ](/database/Tracking/AirplaneAxesMove.7z)
AirplaneAxesRotate	   | [  ](/database/Tracking/AirplaneAxesRotate.7z)
AirplanePathMove       | [  ](/database/Tracking/AirplanePathMove.7z)
AirplanePathMoveRotate | [  ](/database/Tracking/AirplanePathMoveRotate.7z)


Submission
==========
Tracking results for each task should be saved in a `json` file with the same name as the task. For each frame, the position and rotation should be stored:

~~~~~~~~ json 
[
    {
        "id": 0,
        "position": [-0.16, -0.4, 0.0],
        "rotation": [0.0, 1.0, 0.0, 0.0]
    },
    {
        "id": 1,
        "position": [-0.13, -0.4, 0.0],
        "rotation": [0.0, 1.0, 0.0, 0.0]
    },
	... etc
]
~~~~~~~~


Because all reconstructions of this benchmark happen on the participants hardware, run time comparison (and in particular real time capability which can be important in tracking tasks) suffers from two problems: The individual hardware can vary greatly and there is no way of telling whether the reported times of (anonymous) participants are accurate. Thus, participants are encouraged to report their run times, but they are not part of the official evaluation.