新型iPad Proの「LiDAR」スキャナの 仕組みと応用
はじめに
こにちは、次世代システム研究室のB.M.Kです。今年の3月18日にAppleは最も先進的なiPad Proを発表しました。個人的に最も惹かれたのは、LiDARスキャナ搭載というところでした。この技術の搭載により、AR技術がさらに進化することが期待されています。
LiDARとは
LiDAR(Light Detection and Ranging:光検出と測距)とは、対象物にレーザをパルス状に照射し、反射して戻ってくるまでの時間(光の飛行時間)を計測することで距離を測る技術です。光の飛行時間はToF(Time of Flight)と呼ばれます。また、これを用いて距離を計算する方法をToF法といいます。光は1ナノ秒あたり30センチ進む速度をもつが、これを光の周波数(波長)に応じた位相差を計測することで対象との距離を求めることができます。ToFには、レーザパルスを照射する「dToF(direct Time of Flight)」と、周期的なレーザ光を出して位相のずれから距離を計算する「iToF(indirect Time of Flight)」の2種類があり、iPad ProはdToFセンサーの導入が進み、より粒度の細かいリッチな3Dセンシング技術が実現できることになりました。
図1: dToF(direct Time of Flight)法 (出典:北陽電機)
ハードウェアの構成
以下は11インチiPad ProのLiDARモジュールの分解写真です。図2: 11インチiPad ProのLiDARモジュールの分解写真 (出典: SYSTEMPlus)
LiDARモジュールはVCSELとDOE及びSPAD NIR CMOSイメージセンサーを用いて測距を行います。VCSEL(Vertical Cavity Surface Emitting Laser)とは半導体レーザの一種である垂直共振面発光レーザの略称です。従来の半導体レーザが基板面と平行方向に光を共振させるのに対して、VCSELは基板面に垂直方向に光を共振させます。小型軽量化に適しており消費電力が小さい、二次元アレイ構造化が可能などのメリットが挙げられます。
DOE(Diffractive Optical Element:回折光学素子)とは、計算された微細形状によって光の回折現象を制御する光学素子です。光学センサーや照明などにおいて、光を狙ったところに効率よく照射したり、特殊なパターン状の光を照射したりすることが可能になります。
VCSELとDOE(回折光学素子)は9×64ドットのマトリックスを照射し、SPAD NIR CMOSイメージセンサーは、iPadと9×64ドット間の距離を測定し、プロセッサが周囲の環境のマッピングを作成します。
図3: VCSELとDOE(回折光学素子) – 9×64ドットのマトリックスの照射 (出典: SYSTEMPlus)
LiDARスキャナの応用
iPad ProのLiDARスキャナを使って、これまでにないほどリアルなAR体験を作り出せます。新しいシーンジオメトリAPIによって周囲の環境の3D表現をリアルタイムにキャプチャできるほか、仮想オブジェクトに対しオブジェクトオクルージョンを活用することができます。前回の記事でヒューマンオクルージョンについて紹介しました。ヒューマンオクルージョンとはAR空間で仮想コンテンツを人間の背後にレンダリング(表示)することを可能にすることを指します。従来のAR技術のデフォルトは仮想コンテンツがカメラ画像の上にレンダリングされるため、人間の背後にレンダリングできないことをAR技術にてオクルージョン問題と呼びます。
今回はLiDARスキャナの利用により周囲の環境の奥行き情報を把握できるようになったため、ヒューマンオクルージョンの問題だけではなく、AR技術分野ですっとチャレンジされた課題としたオブジェクトオクルージョンの問題も解決できるようになりました。言い換えると実環境での実オブジェクトの背後にバーチャルコンテンツ(ARコンテンツ)も自由にレンダリングすることを可能にしました。
デモ
以下はLiDARスキャナを用いてオブジェクトオクルージョンを実現したデモです。
開発環境
- MacBook Pro (Catalina 10.15.5)
- Xcode Version 11.5
- iPadOS Version 13.5.1
- iPad Pro 11インチ(第2世代)
- Swift 5.2.4
重要な処理
まず、操作端末はLiDARスキャナが搭載されたかどうかをAppDelegateでチェックする必要となります。guard ARWorldTrackingConfiguration.supportsSceneReconstruction(.meshWithClassification) else { fatalError(""" Scene reconstruction requires a device with a LiDAR Scanner, such as the 4th-Gen iPad Pro. """) }
LiDARを搭載している端末はデフォルトとして周りの環境の深度情報の取得を行います。
これらの情報を可視化するためにメッシュを使って可視化することができます(メッシュ化と呼びます)。 以下の処理でメッシュ化が有効になります。
arView.automaticallyConfigureSession = false let configuration = ARWorldTrackingConfiguration() configuration.sceneReconstruction = .meshWithClassificationARKitは深度情報を連続する頂点(vertex)に変換し、これらの頂点が相互に接続されてメッシュを形成します。arViewは自動的に周りの環境のメッシュを表示しないため、メッシュを表示するために以下の設定が必要となります。
arView.debugOptions.insert(.showSceneUnderstanding) arView.session.run(configuration)メッシュ表示は通常、デバック目的でのみ有効にされます。
次にオブジェクトオクルージョンの実現です。viewDidLoad() に以下のような設定でオクルージョンが有効になります。
// オクルージョンを有効化 arView.environment.sceneUnderstanding.options.insert(.occlusion)
ARKitの新たなAPIのお陰でオクルージョン有効の処理が表面で凄く簡単になりますが裏の処理はLiDARスキャナからの深度データそして二つのRGBカメラ、モーションセンサーからのデータを融合し、A12ZBionicチップに搭載している最先端のコンピュータービジョンアルゴリズムの活用で迅速かつ正確なオブジェクトオクルージョンが実現できるようになりました。
ARKit 3.5ではLiDARスキャナで取得した深度データへのアクセスがサポートされなかったのでこれ以上の操作、カスタマイズができませんでした。しかし、今年の6月23日にアップルの世界開発者向けの会議WWDC2020ではアップルが正式にDepthAPIを発表してLiDARスキャナで取得した深度データへのアクセスそしてデプスマップのピクセル単位までの操作ができるようになりました。 これらのサポートによってLiDARスキャナで取得した深度データがさらに活用され、別のアプリ、プラットフォーム上の利用として連携等が可能になります。新しいDepthAPIについての詳細は別のブログで紹介したいと思います。