Object Tracker

The Object Tracker loads the map file and renders 3D object on it.

Configuring the Object Tracker Scene
Setting a Map
Adding / Replacing a Map
Starting / Stopping the Tracker
Using the Tracking Information

Configuring the Object Tracker Scene

  1. Install MAXST AR SDK for Unity.

  2. Create a new scene.

  3. Delete the Main Camera that exists by default and add 'Assets > MaxstAR > Prefabs > ARCamera, ObjectTrackable' to the scene.

    objectPrefab

    ※ If you build, you should add License Key to ARCamera.

  4. Create an empty object and add 'Assets > MaxstARSamples > Scripts > ObjetTrackerSample' as a component.

    objectSample

  5. Place the map file created by Visual SLAM scene or Documentation > Map Manager in Assets > StreamingAssets > MaxstAR, and drag map file to Inspector of ObjectTrackable to set map file. Press the Load button to set the map in the map viewer described later.

    objectMap

  6. Create a Cube as a child of ObjectTrakable.

    objectCube

  7. In MapViewer's Inspector, check Generate Mesh, Transparent, and adjust the scale and position of the cube.

    objectMapViewerOption

    ※ MapViewer

    • If you set a map file in ObjectTrackable, MapViewer is automatically created as child of ObjectTrackable.

    • Keyframe Id: When creating a map, the camera looks at the target in various directions. At this time, a Keyframe is created for each direction that satisfies a certain condition. If you change Keyframe Id, Mesh / Image of the Keyframe is displayed in Game View. By positioning Cube in each Keyframe, you can position Cube more precisely.

    • Generate Mesh: If checked, the image displayed in the Game View changes to Mesh.

    • Auto Camera: If checked, the Keyframe closest to the screen of Scene View is automatically selected.

    • Transparent: If checked, Mesh / Image becomes transparent.

  8. The cube will be augmented by illuminating the space learned in the camera after playing.

Setting a Map

By calling addTrackerData () to register the map file and calling loadTrackerData (), Space can be tracked. To set a map, refer to the following code.

>ObjectTrackerSample.cs

private void AddTrackerData()
{
    foreach (var trackable in objectTrackablesMap)
    {
        if (trackable.Value.TrackerDataFileName.Length == 0)
        {
            continue;
        }

        if (trackable.Value.StorageType == StorageType.AbsolutePath)
        {
            TrackerManager.GetInstance().AddTrackerData(trackable.Value.TrackerDataFileName);
        }
        else
        {
            if (Application.platform == RuntimePlatform.Android)
            {
                TrackerManager.GetInstance().AddTrackerData(trackable.Value.TrackerDataFileName, true);
            }
            else
            {
                TrackerManager.GetInstance().AddTrackerData(Application.streamingAssetsPath + "/" + trackable.Value.TrackerDataFileName);
            }
        }
    }

    TrackerManager.GetInstance().LoadTrackerData();
}

Adding / Replacing a Map

  1. Create a map file refer to Documentation > Map Manager.

  2. Copy the received map file to the desired path.

  3. Set a map.

  4. If you have an existing map file, call AddTrackerData () and LoadTrackerData () after calling TrackerManager.GetInstance ().RemoveTrackerData().

Starting / Stopping the Tracker

To start / stop Tracker after loading the map, refer to the following code.

>ObjectTrackerSample.cs

void Update()
{
    ...
    if (!startTrackerDone)
    {
        TrackerManager.GetInstance().StartTracker(TrackerManager.TRACKER_TYPE_OBJECT);
        ...
    }
    ...
}

void OnApplicationPause(bool pause)
{
    ...
    TrackerManager.GetInstance().StopTracker();
    ...
}

void OnDestroy()
{
    TrackerManager.GetInstance().StopTracker();
    TrackerManager.GetInstance().DestroyTracker();
    ...
}

Using the Tracking Information

To use the Tracking information, refer to the following code.

>ObjectTrackerSample.cs

void Update()
{
    ...
    TrackingState state = TrackerManager.GetInstance().UpdateTrackingState();
    TrackingResult trackingResult = state.GetTrackingResult(); 

    for (int i = 0; i < trackingResult.GetCount(); i++)
    {
        Trackable trackable = trackingResult.GetTrackable(i);

        if (!objectTrackablesMap.ContainsKey(trackable.GetName()))
        {
            return;
        }

        objectTrackablesMap[trackable.GetName()].OnTrackSuccess(trackable.GetId(), trackable.GetName(), trackable.GetPose());
    }
}