LoginSignup
0
0

ARKitで現実のオブジェクトとインタラクトする【ARObjectAnchor】

Posted at

現実のものとARオブジェクトを関係を持たせて配置したい
箱の上にARオブジェクトを置くとか。
そのためには、3次元の物の位置と大きさをつかむ必要がある。
ARKitの平面検出や、FeaturePointでは、詳細に物体の形状を認識できない!
LiDARならポリゴンメッシュが取れるけれど、搭載端末は少ない。
機械学習で2次元の位置形状はとれるが、3次元への変換がむずかしい。

スキャンして物体を登録しておいて検出してみよう。
妥協策として、物体をあらかじめスキャンすることで、ARアンカーとして位置検出する方法がある。

May-15-2021 10-08-22.gif

#スキャン済みのオブジェクトを検出する

###スキャン済みオブジェクトの登録

Assets.xcassetsの+ボタンからAR Resorsesのフォルダを作って、.arobjectファイルをドロップします。

スキャンしたオブジェクトをARReferenceObjectとして登録し、detectionObjectsとしてまとめてARWorldTrackingConfigurationに設定してセッションを実行します。


let configuration = ARWorldTrackingConfiguration()
guard let referenceObjects = ARReferenceObject.referenceObjects(inGroupNamed: "gallery", bundle: nil) else {
    fatalError("Missing expected asset catalog resources.")
}
configuration.detectionObjects = referenceObjects
sceneView.session.run(configuration)

ARObjectファイルは、urlからも読み込めます。

let configuration = ARWorldTrackingConfiguration()
var referenceObjects = [ARReferenceObject]()

do {
    guard let referenceObject = try? ARReferenceObject.referenceObjects(archiveURL url: URL) else {
        fatalError("Missing expected referenceObject.")
    }
    referenceObjects.append(referenceObject)
} catch let error {
    fatalError("Couldn't initialized ARReferenceObject from URL.")
}
configuration.detectionObjects = referenceObjects
sceneView.session.run(configuration)

###検出したオブジェクト・アンカーの取得

sceneViewのrenderer内で検出したスキャン済みのオブジェクトを、オブジェクト・アンカーとして取得できる。

func renderer(_ renderer: SCNSceneRenderer, didAdd node: SCNNode, for anchor: ARAnchor) {
    if let objectAnchor = anchor as? ARObjectAnchor {
        print(objectAnchor)
    }
}

取得できる情報
オブジェクトアンカーの情報:
ID
transform(translation:位置、rotation:座標)
スキャンしたオブジェクトの情報:
name
center
extent

位置だけでなく、元のオブジェクトの大きさやスキャン時に設定した中心も取れる。

ARObjectAnchor: 0x282cc3540
identifier="6238D5ED-9245-C2A5-F6A6-8B283A4748F6"
transform=
translation=(0.110339 -0.191025 -0.283564)
rotation=(-0.97° -109.75° -5.06°)]

referenceObject=ARReferenceObject: 0x2828c2d00
name="Scan_09-11-54"
center=(-0.001493 -0.019628 -0.001815)
extent=(0.085925 0.106859 0.084746)

🐣


フリーランスエンジニアです。
AIについて色々記事を書いていますのでよかったらプロフィールを見てみてください。

もし以下のようなご要望をお持ちでしたらお気軽にご相談ください。
AIサービスを開発したい、ビジネスにAIを組み込んで効率化したい、AIを使ったスマホアプリを開発したい、
ARを使ったアプリケーションを作りたい、スマホアプリを作りたいけどどこに相談したらいいかわからない…

いずれも中間コストを省いたリーズナブルな価格でお請けできます。

お仕事のご相談はこちらまで
rockyshikoku@gmail.com

機械学習やAR技術を使ったアプリケーションを作っています。
機械学習/AR関連の情報を発信しています。

Twitter
Medium
GitHub

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0