iPhone(iPad) LiDARの裏で動いている技術
はじめに
近年iPad Pro(2020年モデル)を始め、iPhone 12 ProなどにLiDAR(Light detection and ranging)が搭載されて話題になりました。
メイン用途としてはAR(拡張現実)や暗所撮影ですが、LiDARは以前より測量やロボティクスの分野で使われていたこともあり、空間をスキャンする目的としても使用されています。
では、LiDARでスキャンする裏側ではどういった技術が使われているのでしょうか。本稿ではその一部を紹介します。
自己位置推定と環境マッピング
LiDARによる空間スキャンは、自己位置推定と環境マッピングを目的としています。
これらには一般的にSLAM(Simultaneous Localization and Mapping)と呼ばれる技術が使われています。
SLAMは画像と、場合によっては加速度センサを併用することで自己位置推定と環境マッピングを実現します。
SLAMには大きく分けて画像をベースとしたSLAMことV-SLAM(Visual SLAM)と、LiDARなどのレーザーセンサーを使ったLiDAR-SLAMがあります。
次の動画がV-SLAMです。
点(特徴点)が描画されて、左上にマップを生成しています。
特徴点は三角測量による算出がされており(厳密には三角測量だけではない)、カメラの対象物の位置関係が記録されています。
これを連続で繰り返すことでカメラの自己位置推定と環境マッピングを実現しています。
次はLiDAR-SLAMです。
画像ベースの特徴点ではなく、レーザーの反射時間(ToF)による特徴点を算出しています。
一般的に画像ベースより精度と速度面でV-SLAMに勝っています。
しかし、スマートデバイスに標準搭載されているカメラだけでよいV-SLAMと比べて、LiDARという専用センサが必要なLiDAR-SLAMの方がコスト面で劣ります。
ARKitにおける自己位置推定と環境マッピング
AppleのARフレームワークであるARKitは、iPhoneやiPadでARを実現するためのフレームワークです。
ARKitではSLAMではなくVIO(Visual Inertial Odometry)という技術が使われています。
VIOとは、基本的にはSLAMと同等の技術ですが、SLAMよりも狭い範囲をターゲットとした技術です。
ARKiは基本的に画像ベースによる処理を行っています。ただし、LiDAR搭載機ではLiDARも使えるようになっています。
AppleがSLAMではなくVIOを採用しているのは、恐らくスマホやタブレットでARを実現するにはSLAMが過剰機能であるからだと考えられます。
スマホやタブレットでSLAMを実行しようとすると、計算能力も課題ですが、バッテーリーが恐らくもちません。
したがって、SLAMよりもVIOを調整・発展させる方向にしていると考えられます。
最後に
以上がiPhoneでLiDARスキャンする際に後ろで動いている技術です。
正確にはこれだけではありませんが、SLAM(またはVIO)は主となる技術です。
ただ、iPhoneやiPadに搭載されているLiDARは、解像度が高いとは言えません。
AppleのLiDARとIntelのLiDARの解像度をそれぞれ以下に示します。
iPad ProのLiDAR照射パターン(左)とiPhone 12 ProのLiDAR照射パターン(右)https://xtech.nikkei.com/atcl/nxt/column/18/01459/102800001/
Intel Realsence L515 https://aicam.jp/tech/l515_logistics-control
画像を比べるとわかるように、点の密度が全く異なります。
解像度を上げるほど、空間の精緻な情報が手に入ります。一方で、多くの計算リソースと電力が必要になるため、スマートデバイスには適していないと言えるでしょう。
点の密度が低いと、スキャンして3Dモデルを作成する際に、小さな物体が対象だとテクスチャが破綻しやすくなります。これはカメラの解像度(ピクセルの数)とLiDARの解像度(点の数)が大きく異なり、対応付けの際に情報が欠損するからです。
小さな物体の3Dモデルを作成するには、Appleが提供しているObject Capture APIが適しています。こちらは画像ベースによる処理ですので、LiDARの密度はほぼ影響しません(恐らくLiDARの深度マップは使っている)。
iPhoneのLiDAR搭載により、今後ますます3D関連が盛り上がると思われますが、裏で動いている技術を理解することで、より幅広い応用を考えることができるかもしれません。
おまけ1
Object Capture APIの裏側では、SfM-MVS Photogrammetryが使われています。
これは一般的に写真測量と呼ばれるもので、ステレオ画像から3次元的な情報を復元しています。
基本的にSfM(Structure from Motion)とMVS(Multi-view Stereo)はセットで使われますが、SfMはSLAMでも一部使われています。
SfMは主に次のことを実現します。
MVSは主に次のことを実現します。
SfM-MVSはバッチ処理、SLAMはリアルタイム処理なため、正確性はSfM-MVSの方が圧倒的に高いと言えます。
したがって、Object Capture APIで作成された3Dモデルは精度の高いものが多くなります。
おまけ2
LiDARを理解するためのおすすめ動画です。
英語の動画ですが、英語がわからなくてもなんとなく分かる内容になっています。
参考
Understanding World Tracking
https://developer.apple.com/documentation/arkit/configuration_objects/understanding_world_tracking
SLAM(スラム)とは??~SLAMの基本技術と活用について~
https://www.macnica.co.jp/business/maas/columns/134751/
1.SfM写真測量の基礎
https://hdtopography.github.io/learning/SfM-MVS/GIS_uchiyama_2018/1.about_sfm/1.about_sfm.html
LiDARの概要説明と、フォトグラメトリーへの活用方法
https://www.pix4d.com/jp/blog/lidar-photogrammetry
SLAMチュートリアル大会資料(ORB-SLAM)
https://www.slideshare.net/MasayaKaneko/slamorbslam
ARKitはどうやって自己位置推定と環境マッピングを行なっているのか
https://qiita.com/kboy/items/1de8e9ed1260834d02af
よければTwitterフォローお願いします。