Object Tracker

Visual SLAM에서 생성 / 저장한 맵을 불러오고 해당 맵 위로 3D 콘텐츠를 띄워줍니다.

Tracker 시작 / 종료
Tracking 정보 이용
Object Tracker 씬 구성
맵 설정
맵 추가 / 교체

Tracker 시작 / 종료

맵을 로딩한 후 Tracker를 시작 / 종료하려면 다음 코드를 참고하세요.

ObjectTrackerSample.cs

void Update()
{
    ...
    if (!startTrackerDone)
    {
        TrackerManager.GetInstance().StartTracker(MaxstARUtils.TrackerMask.OBJECT_TRACKER);
        ...
    }
    ...
}

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

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

Tracking 정보 이용

Tracking 정보를 이용하려면 다음 코드를 참고하세요.

ObjectTrackerSample.cs

void Update()
{
    ...
    TrackingResult trackingResult = TrackerManager.GetInstance().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());
    }
}

Object Tracker 씬 구성

  1. 유니티용 MAXST AR SDK를 설치하세요.

  2. 새로운 씬을 생성하세요.

  3. Default로 존재하는 Main Camera를 삭제한 후, Assets > MaxstAR > Prefabs > ARCamera, ObjectTrackable을 씬에 추가하세요.

    objectPrefab

    ※ 빌드할 경우 ARCamera에 라이선스 키를 추가해야 합니다.

  4. 빈 객체를 생성하고 Assets > MaxstARSamples > Scripts > ObjetTrackerSample 스크립트를 컴포넌트로 추가하세요.

    objectSample

  5. Visual SLAM 씬이나 Documentation > Map Manager에서 생성한 맵 파일을 Assets > StreamingAssets > MaxstAR에 위치 시킨 후, 맵 파일을 ObjectTrackable의 Inspector에 드래그하여 맵 파일을 설정합니다. Load 버튼을 눌러 뒤에 설명될 MapViewer에 맵을 설정합니다.

    objectMap

  6. ObjectTrakable 하위에 Cube를 생성하세요.

    objectCube

  7. MapViewer의 Inspector에서 Generate Mesh, Transparent를 체크한 후 Cube의 스케일, 위치를 적절히 조절하세요.

    objectMapViewerOption

    ※ MapViewer

    • ObjectTrackable에 맵 파일을 설정하면 ObjectTrackable 하위에 MapViewer가 자동 생성됩니다.

    • Keyframe Id: 맵을 생성할 때, 카메라로 대상을 여러 방향에서 비추게 됩니다. 이 때 특정 조건을 만족하는 방향마다 Keyframe이 생성됩니다. Keyframe Id를 변화시키면 해당 Keyframe의 Mesh / Image가 Game View에 표시됩니다. 각각의 Keyframe에서 Cube의 위치를 조절하면 Cube를 보다 정확하게 배치할 수 있습니다.

    • Generate Mesh: 체크하면 Game View에 표시되던 Image가 Mesh로 바뀝니다.

    • Auto Camera: 체크하면 Scene View의 화면과 가장 유사한 Keyframe이 자동으로 선택됩니다.

    • Transparent: 체크하면 Mesh / Image가 투명해집니다.

  8. Play 한 후 카메라에 학습한 공간을 비추면 Cube가 증강됩니다.

맵 설정

addTrackerData ()를 호출해서 맵 파일을 등록하고 loadTrackerData ()를 호출하면 공간을 Tracking 할 수 있는 상태가 됩니다. 맵을 설정하는 방법은 다음 코드를 참고하세요.

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();
}

맵 추가 / 교체

  1. Documentation > Map Manager를 이용하여 맵 파일을 생성합니다.

  2. 전송 받은 맵 파일을 원하는 경로에 복사합니다.

  3. 맵을 설정합니다.