ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • AR Session
    iOS/AR 2019. 7. 26. 04:04

    안녕하세요 dely입니다:)

    오늘은 ARSession 객체에 대해 정리해보겠습니다.

     

    ARSession은 객체는 ARKit의 모션 추적 및 이미지 처리를 담당합니다.

    (CMMotionManager와 AVCaptureSession을 관리하는 클래스: Image data와 Motion data를 조합하여 ARFrame을 생성,

    cf, VIO(Visual Inertial Odomery)를 이용한 CV연산으로 위치를 추적해 ARFrame을 만들어낸다고 합니다.)

     

    - AR Session Configuration

    ARSession을 시작하기 전에 AR Session Configuration을 만들어야합니다.

    이것은 실제 세계와 가상 3D 세계 사이의 연결을 설정하는 데 사용됩니다.

    모션 추적 및 이미지 처리를 하는 것에 가장 기본적인 tracking 설정을 하는 것입니다.

     

    AR Session Configuration에는 다섯 가지가 있는데, 

    1. AROrientationTrackingConfiguration,

    2. ARWorldTrackingConfiguration,

    3. ARImageTrackingConfiguration,

    4. ARFaceTrackingConfiguration,

    5. ARObjectScanningConfiguration

    입니다.

     

    일단 이 글에서는 AROrientationTrackingConfiguration와 ARWorldTrackingConfiguration에 대한 설명만 정리합니다.

     

    AROrientationTrackingConfiguration을 위한 3DOF(3 Degrees of Freedom)는 Pitch, Roll, Yaw가 있고,

    ARWorldTrackingConfiguration 6DOF(6 Degrees of Freedom)는 3DOF에 Sway, Heave, Surge가 추가 된 것입니다.

    ARKit by Tutorials(62p) - raywenderlich

     

    각 AR App에 따라 개발에 필요한 AR Session Configuration을 사용하면 되는데,

    구동하기 전에 사용자의 기기가 지원을 하는지 먼저 확인을 해야합니다.

    그래서 initARSession()에 아래의 코드를 작성함으로써

    각각의 AR Session Configuration을 지원하는지 확인할 수 있습니다.

    // AR Orientation Tracking(Pick, Roll, Yaw) 지원여부 확인
    guard AROrientationTrackingConfigurationisSupported else { 
    	print("AR Orientation Tracking을 지원하지 않습니다.")
    	return
    }
    
    // AR World Tracking(Pick, Roll, Yaw, Sway, Heave,Surge) 지원여부 확인
    guard ARWorldTrackingConfiguration.isSupported else { 
    	print("AR World Tracking을 지원하지 않습니다.")
    	return
    }

     

    - Configuration 속성 설정

    그 다음으로 이어서 initARSession()에서 Configuration 속성을 설정하는데요

    ARWorldTrackingConfiguration를 사용하여

    현실세계에 가상컨텐츠를 어떻게 보여줄 지 정하는 worldAligment 옵션과

    AR session이 오디오도 캡쳐가능할 수 있도록 할 지 정하는 providesAudioData를 설정해줍니다.

    let config = ARWorldTrackingConfiguration()
    config.worldAlignment = .gravity
    config.providesAudioData = false

    -- worldAligment 옵션

    worldAligment 옵션은 .gravity, .gravityAndHeading, .camera로 3가지가 있는데,

    각각의 설명은 다음과 같습니다.

    (애플 문서도 참고함 : https://developer.apple.com/documentation/arkit/arconfiguration/worldalignment)

     

    1. gravity

    The coordinate system's y-axis is parallel to gravity, and its origin is the initial position of the device.

    가상 콘텐츠 좌표 시스템의 Y축은 지구 중력에 평행합니다.

    그리고 기기의 초기 위치를 가상 콘텐츠 좌표 시스템 원점으로 사용합니다.

    기기의 초기 위치는 AR세션이 시작되는 순간의 실제 공간에서의 장차의 위치이고,

    가상 콘텐츠 좌표 시스템 Y축은 중력에 평행하기 때문에 항상 실제 공간에서 위쪽을 향하게 됩니다.

     

    2. gravityAndHeading

    The coordinate system's y-axis is parallel to gravity, its x- and z-axes are oriented to compass heading, and its origin is the initial position of the device.

    가상 콘텐츠 좌표 시스템의 Y축은 지구 중력에 평행합니다.

    X축과 Z축은 나침반의 방향을 가리키고 있습니다.

    그리고 기기의 초기 위치를 가상 콘텐츠 좌표 시스템 원점으로 사용합니다.

    X축이 서쪽에서 동쪽으로, Z축이 북쪽에서 남쪽으로 진행되도록 방향을 지정합니다.

     

    3. camera

    The scene coordinate system is locked to match the orientation of the camera.

    화면 좌표계 시스템은 카메라의 방향과 일치하도록 설정되어 있습니다.

    이는 카메라의 방향과 위치를 3D 공간에서 사용하게 됩니다.

     

    - ARSession 실행

    이어서 initARSession()에 다음의 코드를 작성합니다.

    sceneView.session.run(config)

    이 코드는 ARSCNView의 ARSession을 call 하게 되고, 앞에서 설정한 ARWorldTrackingConfiguration을 전달하게 됩니다.

    그리고 AR Session이 실행되면서 6DOF 데이터를 가져옵니다.

     

    AR Session은 일시중지(Pausing), 다시시작(Resuming), 업데이트(Updating), 재설정(Resetting)을 할 수도 있습니다.

     

    반응형

    'iOS > AR' 카테고리의 다른 글

    Create iOS AR Category  (0) 2019.07.26

    댓글

Designed by Tistory.