Object Tracker
| 관련 문서 |
|---|
| Map Manager |
| Tracker Coordinate System in Unity |
| Visual SLAM Learning Guide |
Visual SLAM에서 생성 / 저장한 맵을 불러오고 해당 맵 위로 3D 콘텐츠를 띄워줍니다.
3D 공간을 학습하는 방법은 Visual SLAM Learning Guide를 참고하세요.
Object Tracker 씬 구성
맵 설정
맵 추가 / 교체
Tracker 시작 / 종료
Tracking 정보 이용
Object Tracker 씬 구성
새로운 씬을 생성하세요.
Default로 존재하는 Main Camera를 삭제한 후, Assets > MaxstAR > Prefabs > ARCamera, ObjectTrackable을 씬에 추가하세요.

※ 빌드할 경우 ARCamera에 License Key를 추가해야 합니다.
빈 객체를 생성하고 Assets > MaxstARSamples > Scripts > ObjetTrackerSample 스크립트를 컴포넌트로 추가하세요.

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

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

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

※ 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가 투명해집니다.
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();
}
맵 추가 / 교체
Map Manager를 이용하여 맵 파일을 생성합니다.
전송 받은 맵 파일을 원하는 경로에 복사합니다.
기존에 등록한 맵 파일이 있을 경우, TrackerManager.GetInstance ().RemoveTrackerData() 를 호출 후 AddTrackerData (), LoadTrackerData () 를 호출하면 됩니다.
Tracker 시작 / 종료
맵을 로딩한 후 Tracker를 시작 / 종료하려면 다음 코드를 참고하세요.
>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();
...
}
Tracking 정보 이용
Tracking 정보를 이용하려면 다음 코드를 참고하세요.
>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());
}
}
Tracking 모드 변경
Object Tracker는 JITTER_REDUCTION_ACTIVATION, JITTER_REDUCTION_DEACTIVATION 모드가 있습니다.
기본 설정은 JITTER_REDUCTION_DEACTIVATION 모드 입니다.
- JITTER_REDUCTION_ACTIVATION: Tracking시 떨림을 줄여 줍니다.
TrackerManager.GetInstance().SetTrackingOption(TrackerManager.TrackingOption.JITTER_REDUCTION_ACTIVATION);
- JITTER_REDUCTION_DEACTIVATION: Tracking시 떨림을 줄이는 기능을 취소합니다.
TrackerManager.GetInstance().SetTrackingOption(TrackerManager.TrackingOption.JITTER_REDUCTION_DEACTIVATION);
