2017-12-14 14 views
2

問題の状況:いつでもARビジュアライゼーションを快適な方法で(テーブル上の)同じ場所に作成する。私たちは、無数のARCore/ARKitの例のように、オブジェクト自体を置くことを顧客に望んでいません。ARCore/ARKitによるマーカーベースの初期位置決め?

これらの手順を実装する方法がある場合、私は思ったんだけど:

  1. はAR-可視化の初期位置として、マーカーの位置を使用し、上に行くテーブル
  2. 上のマーカーを検出SLAM追跡機能付き

私は、TangoSDKの最新ビルドに含まれるMarker-Detection APIのようなものがあることを知っています。しかし、この技術は少量のデバイス(厳密には2つ)に限られています。

おかげさまで、ありがとうございました。

+0

無料でマーカーを検出するためにarucoを使用できます。初期化フェーズのみを使用したいと思っているマーカートラッカーが必要ありません。 – ibrahim

+0

あなたができることの1つは、3点マーカーを使用することです。それらをタップして配置するモデルの位置と向きを計算します。マーカーが水平面に置かれている場合に機能します。 –

+0

質問は、検出されたマーカーの方向/位置をARKit/ARCoreにオブジェクトを配置するワークフローにどのように転送するかです。私はそれらの解決策が "検出された飛行機の上のclickeventを検出し、オブジェクトを接続する"のようなイベントを探していると思います。私の場合、それは「私のマーカ位置をとり、それを検出された平面に適用する」でしょう。しかし、このステップは、これらのフレームワークにとって些細なケースではないようです(?) – user2463728

答えて

1

私はこのトピックにも興味があります。 ARの本当の力は、環境理解と対になって初めて解き放たれます。

私は次の2つのオプションがあると思う:新しいVuforia 7がリリースされると、おそらくArcoreのとARKitとの視覚的なマーカーをサポートするために起こっているのを待つ

  1. を。
  2. CoreML/Computer Visionを取り入れる - 理論的には可能ですが、私は多くの例を見ていません。私は始めるのが少し難しいかもしれないと思います(モデルの作成や校正など)。

Appleはそれが並べ替えられてしまっているしかし: https://youtu.be/E2fd8igVQcU?t=2m58s

1

Googleのタンゴを使用している場合、あなたが構築されたエリアの説明でファイル(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) 
      } 
     } 
    } 
} 

理論である:
にする3つの点A、B、C ABはACに垂直であるように。ドットをA-B-Cの順にタップします。
ノードに必要な回転を与えるARSceneViewのx = 0におけるABの角度を求めます。
ポイントのいずれかを再配置して、配置先ノードを計算することができます。
Cノードから、ノードを反転する必要があるかどうかを確認します。

私はまだ満足する必要があるいくつかの例外に取り組んでいます。