#概要
ARKitアドベントカレンダー2018 17日目です。
ARの知識が0の状態で仕事でARKitを使う事になった際に調べた事をまとめます。
#はじめに
ARKitでどんな技術が利用されているかを知りたかった。
取り敢えずApple公式の資料を探っていくと、AppleのWWDC2018のARKitの技術解説動画が参考になる感じでした。
https://developer.apple.com/videos/play/wwdc2018/610/
この資料を見たところARKitで重要になるキーワードは
- 「画像の特徴点」
- 「ポジショントラッキング」
- 「3D空間の把握」
になるかなと感じました。
#画像の特徴点とは
ARKitは、カメラの画像から計算される特徴点を利用する事で「ポジショントラッキング」を行ったり「平面検知」を行ったり、画像マーカーを検知しているようです。
特徴点について非常にわかりやすい記事が下記にあります
https://qiita.com/icoxfog417/items/adbbf445d357c924b8fc
要するに特徴点とは画像に対してどんな操作を行っても(回転、拡大)変化しない点で、例としてこれを利用するとある画像の中からとある画像に一致するものを探したりできます。
#ポジショントラッキング
ARkitはVIO(Visual Inertial Odometry)を用いてiPhoneのカメラの位置、角度を計算しています。
-
一般的なVIO全体の処理の流れは下記資料が分かりやすい。
-
http://web.mit.edu/sze/www/navion/2017_rss_navion_slides.pdf
-
特徴点ベースのポジショントラッキングについてはこちらの資料が参考になります
-
また、6D.aiのCEOが書いたVIOに関するブログも凄く参考になりました。
-
https://medium.com/6d-ai/why-is-arkit-better-than-the-alternatives-af8871889d6a
VIOはカメラ画像の特徴点の前後フレームの差分を用いた計算値(STEM)と、iPhoneの中にあるIMU(慣性計測装置)で得られる加速度、角速度の値を利用して特徴点に対するカメラの位置を計算しています。
STEMとIMUを組み合わせるとお互いにできない事を補完しあって堅牢なポジショントラッキングが可能になります。
- 白い壁のような特徴点の少ない場所であってもIMUの計算結果を用いることが出来る
- iPhoneが静止に近い状態(完全に静止じゃなくて若干の手ブレがある状態)でも画像の特徴点を利用することが出来る
#3D空間の把握
iOS12に標準搭載されてるメジャーアプリが結構正確に距離を測れるのを見てわかるように、ARKitではカメラに対する特徴点の位置を結構正確に測定してくれます。
特徴点の位置の計算のイメージとしてはステレオカメラによる三角測量が近くて、前後フレームを利用する事によってiPhoneのカメラをステレオに配置した事と同じ意味を持って、その前後フレームでのカメラの位置をIMUで計算してます。
- ステレオマッチングの理解については以下の記事を参考にしました。
- https://qiita.com/ykoga/items/14300e8cdf5aa7bd8d31
この特徴点の位置が最低3点あればARKitの平面検知ができるという事になります。