2017-12-14 34 views
2

문제 상황 : AR- 시각화를 언제나 같은 장소 (테이블 위)에 편안하게 만듭니다. 우리는 수많은 ARCore/ARKit 예제에서와 같이 객체를 직접 배치하지 않기를 원합니다.ARCore/ARKit으로 마커 기반 초기 위치 지정?

  1. 테이블
  2. 사용하여 AR-시각화의 초기 위치로 마커의 위치에 마커를 검색 및 계속 : 이러한 단계를 구현하는 방법이 있는지

    궁금하네요 SLAM 추적 기능이 있습니다.

최신 TangoSDK 빌드에 Marker-Detection API가 포함되어 있습니다. 그러나이 기술은 소량의 장치 (정확히 2 개)로 제한됩니다.

어떤 아이디어로든 미리 감사 드리며

+0

무료로 마커 감지에 aruco를 사용할 수 있습니다. 초기화 단계 만 사용하려는 마커 추적이 필요하지 않습니다. – ibrahim

+0

할 수있는 한 가지 방법은 3 점 마커를 사용하는 것입니다. 그것들을 가볍게 두드리면 모델이 놓일 위치와 방향을 계산할 수 있습니다. 마커가 수평면에 있으면 작동합니다. –

+0

질문은 탐지 된 마커의 방향/위치를 ARKit/ARCore에 개체를 배치하는 워크 플로로 전송하는 방법입니다. 이러한 솔루션은 "탐지 된 비행기에서 clickevent를 감지하고 객체를 연결하는"이벤트를 찾고 있다고 생각합니다. 제 경우에는 "마커 위치를 잡고 그것을 탐지 된 비행기에 적용"합니다. 그러나이 단계는 이러한 프레임 워크에 대한 사소한 사례가 아닙니다 (?) – user2463728

답변

1

나는이 주제에 대해서도 관심이 있습니다. AR의 진정한 힘은 환경에 대한 이해와 조화를 이루어야 만 풀릴 수 있다고 생각합니다. 새로운 Vuforia 7

  1. 대기가 해제하고 가정이 ARCore 및 ARKit 시각적 마커를 지원하는 것입니다 :

    나는 당신이 두 가지 옵션이 있습니다 생각합니다.

  2. Engage CoreML/Computer Vision - 이론 상으로는 가능하지만 많은 예를 보지 못했습니다. 시작하기가 다소 어려울 수 있습니다 (예 : 모델 작성 및 교정).

그러나 애플은 분류 가지고있다 : https://youtu.be/E2fd8igVQcU?t=2m58s

1

구글 탱고를 사용하여, 당신은 지역 설명 파일에 내장 (ADF)를 사용하는 시스템을 구현 할 수 있습니다. 시스템에 대기 화면이 있으며 "걸어 다녀라"고 말합니다. 몇 초 내에 장치가 이전에 있었던 영역으로 다시 이동할 수 있습니다. (또는 서버 등에서 정보를 가져 오십시오.)

Googles VPS (Visual Positioning Service)는 ARCore와 유사한 아이디어입니다 (닫힌 베타). 필자가 이해하는 한, 모든 스캔 한 위치의 글로벌 공유 맵에서 카메라 피드를 사용하여 특정 위치를 지역화 할 수 있습니다. 나는 공개 할 때 AR Cloud 타입 시스템의 틈새를 채우려고 노력할 것이라고 생각한다.이 시스템은 일반 개발자에게 이러한 문제를 해결할 것이다.

는 hololens 등이 ... 마커/태그이 필요하지 않은 https://developers.google.com/tango/overview/concepts#visual_positioning_service_overview

에만 학계 및 기타 AR 제품에 해결하는 공간과 카메라 피드의 사전 지식을 사용하여 공간 relocalising의 일반적인 문제를 참조하십시오 . 그러나이 기능을 제공하는 다른 상용 시스템은 확실하지 않습니다.

1

이것은 ARKit에 대해 지금까지 얻은 것입니다.

@objc func tap(_ sender: UITapGestureRecognizer){ 
    let touchLocation = sender.location(in: sceneView) 
    let hitTestResult = sceneView.hitTest(touchLocation, types: .featurePoint) 

    if let hitResult = hitTestResult.first{ 
     if first == nil{ 
      first = SCNVector3Make(hitResult.worldTransform.columns.3.x, hitResult.worldTransform.columns.3.y, hitResult.worldTransform.columns.3.z) 
     }else if second == nil{ 
      second = SCNVector3Make(hitResult.worldTransform.columns.3.x, hitResult.worldTransform.columns.3.y, hitResult.worldTransform.columns.3.z) 
     }else{ 
      third = SCNVector3Make(hitResult.worldTransform.columns.3.x, hitResult.worldTransform.columns.3.y, hitResult.worldTransform.columns.3.z) 

      let x2 = first!.x 
      let z2 = -first!.z 
      let x1 = second!.x 
      let z1 = -second!.z 
      let z3 = -third!.z 

      let m = (z1-z2)/(x1-x2) 
      var a = atan(m) 

      if (x1 < 0 && z1 < 0){ 
       a = a + (Float.pi*2) 
      }else if(x1 > 0 && z1 < 0){ 
       a = a - (Float.pi*2) 
      } 

      sceneView.scene.rootNode.addChildNode(yourNode) 
      let rotate = SCNAction.rotateBy(x: 0, y: CGFloat(a), z: 0, duration: 0.1) 
      yourNode.runAction(rotate) 
      yourNode.position = first! 

      if z3 - z1 < 0{ 
       let rotate = SCNAction.rotateBy(x: 0, y: CGFloat.pi, z: 0, duration: 0.1) 
       yourNode.runAction(rotate) 
      } 
     } 
    } 
} 

이론이다
만드는 세 개의 점 A, B, C는 AB AC 직교하도록. 도트를 A-B-C 순서로 누릅니다.
노드에 필요한 회전을 제공하는 ARSceneView의 x = 0에서 AB 각도를 찾습니다.
포인트 중 하나를 다시 배치하여 위치 대 배치 노드를 계산할 수 있습니다.
C 발견 노드를 뒤집을 필요가 있는지 찾습니다.

저는 아직 만족해야 할 몇 가지 예외에 대해 작업하고 있습니다.