476.1K Views
June 04, 22
スライド概要
2022/06/04開催のGeospatial API x Unityハンズオンの資料
可視化技術や人間計測/空間計測技術を活用した問題解決に関する研究開発。 ARコンテンツ作成勉強会(tryAR)を主催。
ARCore Geospatial APIハンズオン
⾃⼰紹介 ⽒名︓吉永崇(Takashi Yoshinaga) 専⾨︓ARを⽤いた医療⽀援や運動計測 Volumetric Video (3Dビデオ) コミュニティ︓ARコンテンツ作成勉強会 主催 [Twitter] @Taka_Yoshinaga
ARコンテンツ作成勉強会の紹介 p 2013年5⽉に勉強会をスタート。 p ARコンテンツの作り⽅をハンズオン形式で学ぶ p ⼈数は5~10名程度の少⼈数で実施 p 参加条件はAR/VRに興味がある⼈(知識不要) p 各地で開催 (福岡、熊本、宮崎、⻑崎、⼤分、 ⿅児島、⼭⼝、広島、札幌、関東)
北海道サテライト じゅん さん @jun_mh4g 13LABO さん @13LABO_cafe
Twitterと勉強会ページで情報を発信しています @AR_Fukuoka Googleで「AR勉強会」で検索
ハッシュタグ #AR_Fukuoka
今⽇の内容 ARCore Geospatial APIによるVPSを⽤いた AR開発の基本⼿順を体験しよう
今⽇の内容 ところでVPSって︖
ARのスケールと関連技術 テーブルトップスケール マーカー認識など ルームスケール SLAMなど タウンスケール GPS・電⼦コンパスなど AR機器(スマートフォン・タブレット等)に各種センサを搭載しているおかげで上記のARを体験可能
ARのスケールと関連技術 テーブルトップスケール マーカー認識など ルームスケール SLAMなど タウンスケール GPS・電⼦コンパスなど GPSや電⼦コンパスでの位置・⽅位計測は周辺環境の影響を⼤き受けるため体験としてはイマイチ
GoogleによるVisual Positioning System/Service GPSを⽤いたエリアの特定とストリートビューや航空写真を融合した3D点群を⽤いた⾼精度位置合わせを実現
今⽇のゴール 低精度 トラッキング結果の表⽰ トラッキング精度のチェック ⾼精度 指定の緯度・経度にCG表⽰
演習⽤素材のダウンロード https://github.com/TakashiYoshinaga/ARFukuoka/raw/main/GeospatialAPI_20220604/Smples.zip
ハンズオンスタート
ハンズオン⼿順 p Unityプロジェクトの作成 p AR FoundationとARCore Extensionsのインストール p Geospatial APIとARCore/ARKitを使うシーンの設定 p Geospatial APIによるトラッキング情報の取得と表⽰ p 実機へのインストール p 指定した緯度・経度にオブジェクトを表⽰
ハンズオン⼿順 p Unityプロジェクトの作成 p AR FoundationとARCore Extensionsのインストール p Geospatial APIとARCore/ARKitを使うシーンの設定 p Geospatial APIによるトラッキング情報の取得と表⽰ p 実機へのインストール p 指定した緯度・経度にオブジェクトを表⽰
Unity Hub起動 Unity Hub
プロジェクトの作成 (1/6) ①Projects ②New Project
プロジェクトの作成 (2/6) Editor Versionを開く
プロジェクトの作成 (3/6) 2020.3.xxf1 この資料は2020.3.xを前提に解説をしています
プロジェクトの作成 (4/6) ①3D ②Project name ③保存場所
プロジェクトの作成 (5/6) Create project
プロジェクトの作成 (6/6) Unity Editorが起動すればOK
ビルド設定 for Android/iOS (1/4) File
ビルド設定 for Android/iOS (2/4) Build Settings
ビルド設定 for Android/iOS (3/4) ①AndroidまたはiOS ②Switch Platform
ビルド設定 for Android/iOS (4/4) Player Settings
ビルド設定 for Android Androidの場合
ビルド設定 for Android (1/3) ①Other Settings ②Vulkanをクリック ③ で削除
ビルド設定 for Android (2/3) ①Identification ②Minimum API Level ③ Android 7.0 ʻNougatʼ API Level 24を選択
ビルド設定 for Android (3/3) ①Configuration ②Scripting Backend ③IL2CPPを選択 ④ARM64を選択
ビルド設定 for iOS iOSの場合
ビルド設定 for iOS ①Configuraton ②各Usage DescriptionにRequired for ARと⼊⼒
ハンズオン⼿順 p Unityプロジェクトの作成 p AR FoundationとARCore Extensionsのインストール p Geospatial APIとARCore/ARKitを使うシーンの設定 p Geospatial APIによるトラッキング情報の取得と表⽰ p 実機へのインストール p 指定した緯度・経度にオブジェクトを表⽰
パッケージ取得の準備 (1/3) Window
パッケージ取得の準備 (2/3) Package Manager
パッケージ取得の準備 (3/3) PackagesからUnity Registryを選択
AR Foundationのインストール (1/2) ARで検索
AR Foundationのインストール (2/2) ①ARFoundation ② Install
ARCoreまたはARKitのインストール ①Androidの場合: ARCore XR Plugin iOSの場合: ARKit XR Plugin ② Install
ARCore Extensionsのインストール (1/3) +をクリック [補⾜] 前⾴までのARFoundationやARCore/ARKitはあくまでARを実現するためのツール。 次のARCore Extensionsが今回の本題であるGeospatial APIの使⽤に必要。
ARCore Extensionsのインストール (2/3) Add package from git URL
ARCore Extensionsのインストール (3/3) 下記で検索 https://github.com/google-ar/arcore-unity-extensions.git
補⾜ 使用しているPCのGitHub接続の設定がされていない場合エラーになります
ARCore Extensionsのインストール (補⾜) ARCOre Extensionsのリポジトリにアクセス https://github.com/google-ar/arcore-unity-extensions.git Releasesをクリック
ARCore Extensionsのインストール (補⾜) v.1.35.0 少し下にスクロール
ARCore Extensionsのインストール (補⾜) Assets arcore-unity-extensions-1.35.0.tgzをダウンロード
ARCore Extensionsのインストール (補⾜) arcore-unity-extensions-1.35.0.tgzを 今回作成したプロジェクトのフォルダ内のPackagesフォルダに移す
ARCore Extensionsのインストール (補⾜) Add package from git tarball
ARCore Extensionsのインストール (補⾜) arcore-unity-extentionsを開く
補⾜ 補足おわり
確認 PackagesからIn Projectを選択
確認 ARCore ExtensionsがあればOK
GeospatialAPIのサンプル取得 ①ARCore Extensions ②Samples ③Geospatial SampleをImport
補⾜ iOSビルドのオプションをインストールしていない環境でエラーが出るかもしれない
iOS関連のエラー (補⾜) ⾚⽂字のエラーが出るかもしれない
iOS関連のエラー (補⾜) Samples -> ARCore Extensions ->1.35.0 ->GeospatialSample ->Scripts
iOS関連のエラー (補⾜) Editorフォルダを削除
iOS関連のエラー (補⾜) Consoleタブ Clearでエラーが消えればOK
iOS関連のエラー (補⾜) Projectタブに戻しておく
補⾜ 補足おわり
ARCore Extensionsのインストール完了 閉じる
続いて、ここまででインストールしたツール類を このプロジェクトで使うための設定を行う
ARCore or ARKit利⽤設定 (1/4) ① Edit ② Project Settings
ARCore or ARKit利⽤設定 (2/4) XR Plug-in Management
ARCore or ARKit利⽤設定 (3/4) Androidの場合 ARCoreをチェック
ARCore or ARKit利⽤設定 (4/4) iOSの場合 ARKitをチェック
ARCore Extensions利⽤設定 (1/6) ARCore Extensions
ARCore Extensions利⽤設定 (2/6) [iOSの場合] iOS Support Enabledチェックをオン
ARCore Extensions利⽤設定 (3/6) AndroidまたはiOS⽤の項⽬のドロップダウンに注⽬
ARCore Extensions利⽤設定 (4/6) ドロップダウンメニューからAPIKeyを選択
ARCore Extensions利⽤設定 (5/6) Google Cloudで事前に作ったAPI Key⼊⼒ ※API Keyの作り方は事前準備資料[Link]の GoogleCloudPlatformの項目を参照
ARCore Extensions利⽤設定 (6/6) Geospatialをオン
ARCore Extensions利⽤設定完了 閉じる
ハンズオン⼿順 p Unityプロジェクトの作成 p AR FoundationとARCore Extensionsのインストール p Geospatial APIとARCore/ARKitを使うシーンの設定 p Geospatial APIによるトラッキング情報の取得と表⽰ p 実機へのインストール p 指定した緯度・経度にオブジェクトを表⽰
シーンの作成 (1/4) File
シーンの作成 (2/4) Save As...
シーンの作成 (3/4) Sample Save
シーンの作成 (4/4) Assets Sampleが追加されていればOK
まずは本シーンでARそのものを 実現するためにARFoundationを設定 (※GeospatialAPIはもうちょいあとに登場)
AR Foundationのセットアップ (1/7) MainCameraを削除
AR Foundationのセットアップ (2/7) 何も選択されていない状態で Hierarchyの空⽩を右クリック
AR Foundationのセットアップ (3/7) ①XR ②AR Session Origin
AR Foundationのセットアップ (4/7) AR Session Originが追加される
AR Foundationのセットアップ (5/7) 何も選択されていない状態で Hierarchyの空⽩を右クリック
AR Foundationのセットアップ (6/7) ①XR ②AR Session
AR Foundationのセットアップ (7/7) AR Sessionが追加される
ARで表示するオブジェクトと特定の位置を 紐付けるAnchorを利用する準備を済ませる トラッキングがロストしても再度そこを見ると位置合わせする機能。 指定した緯度・経度に置いたCGがどこかにすっ飛んでも復帰!
AR Anchor Managerのセットアップ (1/3) ①AR SessionOrigin ②Add Component
AR Anchor Managerのセットアップ (2/3) ①ARで検索 ②AR Anchor Manager
AR Anchor Managerのセットアップ (3/3) ARAnchorManagerが追加される
Geospatial APIによる位置・姿勢推定の 結果を本シーンで使用できるようにする
AR Earth Managerのセットアップ (1/3) ①AR SessionOrigin ②Add Component
AR Earth Managerのセットアップ (2/3) ①AR Earthで検索 ②AR Earth Manager
AR Earth Managerのセットアップ (3/3) AREarthManagerが追加される
各コンポーネントの概要 AR Anchor Manager 表⽰するオブジェクトを指定した座標に 固定するために使⽤。 オブジェクトの表⽰位置がずれても、 Anchorに紐付た場所を認識したら 表⽰オブジェクトの位置を補正してくれる。 AR Earth Manager 端末の対応状況や、Geospatial API利⽤ の初期化の成否、位置・姿勢の推定結果を 取得するために使⽤。
Geospatial APIを利用するには 位置情報へのアクセス許可なども必要 Permission関連のこまごました処理を書きたくないよね?
楽に設定できる公式スクリプトを活用しよう
Permission関連オブジェクトの追加 (1/2) 何も選択されていない状態で Hierarchyの空⽩を右クリック
Permission関連オブジェクトの追加 (2/2) ②AR Extensions ①XR
Permission関連スクリプトの設定 (1/9) ARCore Extensions このエリアでこのシーン内で動作している下記 スクリプトを渡してあげればPermission関連 の設定をやってくれる。 ・ARSession ・ARSessionOrigin ・ARCameraManager ・ARCoreExtensionConfiguration
Permission関連スクリプトの設定 (2/9) Sessoinの横の
Permission関連スクリプトの設定 (3/9) Scene AR Session [解説] ARSessionスクリプトはこのシーン内 (Hierarchy内) のAR Session オブジェクトにアタッチされている
Permission関連スクリプトの設定 (4/9) SessoinOriginの横の
Permission関連スクリプトの設定 (5/9) Scene AR Session Origin
Permission関連スクリプトの設定 (6/9) CameraManagerの横の
Permission関連スクリプトの設定 (7/9) Scene AR Camera
Permission関連スクリプトの設定 (8/9) ARCoreExtensionsConfigの横の
Permission関連スクリプトの設定 (9/9) Scene GeospatialConfig
Permission関連スクリプトの設定完了 ⼀通り割り当て完了 (CameraConfigFilterは不要)
現状確認 AR Earth Manager 端末の対応状況や、 Geospatial API初期化 の成否、位置・姿勢の 推定結果を取得できる。 ただしGeospatialAPI によるトラッキングが開始 していれば。 Permission設定は Extensionsがやってくれる スクリプトから初期化する 必要がある
余談︓公式サンプル 公式サンプルに初期化からGeospatial API 活用までの手順を学べるシーンがある
余談︓公式サンプル Samples ->ARCore Extensions ->1.35.0 ->Geospatial Sample
余談︓公式サンプル Scripts GeospatialController
余談︓公式サンプル GeospatialControllerスクリプトには、 初期化や位置取得、オブジェクト配置の 保存・再現に関するコードが書かれている ただし、初期化もデータ活用も一緒に記述 されているので他の用途のために再利用しづらい
本ハンズオンでは トラッキング開始のための初期化コードだけ 分離したスクリプトを用意しました。 詳細はさておき、今回はこちらを利用します。
ハンズオン⽤サンプルの取り込み (1/3) ①Samplesフォルダ ②AR_Fukuoka.unitypackageをダブルクリック
ハンズオン⽤サンプルの取り込み (2/3) Import
ハンズオン⽤サンプルの取り込み (3/3) AR_Fukuokaフォルダが追加されればOK
トラッキング開始⽤オブジェクトの作成 (1/3) 何も選択されていない状態で Hierarchyの空⽩を右クリック
トラッキング開始⽤オブジェクトの作成 (2/3) CreateEmpty
トラッキング開始⽤オブジェクトの作成 (3/3) ①GameObject ②VPS_Demoに名前を変更
トラッキング開始スクリプトの追加 (1/7) ①Assets -> AR_Fukuoka ->Scriptsを開く ②VpsInitializerを⾒つけておく(クリックはしない)
トラッキング開始スクリプトの追加 (2/7) VPS Demo VpsInitializerをVPS_Demoの Inspectorにドラッグ&ドロップ
トラッキング開始スクリプトの追加 (3/7) VPS Visualizerが追加される
トラッキング開始スクリプトの追加 (4/7) EarthManagerの横の
トラッキング開始スクリプトの追加 (5/7) Scene AR Session Origin
トラッキング開始スクリプトの追加 (6/7) ARCoreExtensionsの横の
トラッキング開始スクリプトの追加 (7/7) Scene AR Core Extensions
ハンズオン⼿順 p Unityプロジェクトの作成 p AR FoundationとARCore Extensionsのインストール p Geospatial APIとARCore/ARKitを使うシーンの設定 p Geospatial APIによるトラッキング情報の取得と表⽰ p 実機へのインストール p 指定した緯度・経度にオブジェクトを表⽰
トラッキング結果表⽰スクリプトの追加 (1/4) ①Assets -> AR_Fukuoka ->Scriptsを開く ②SampleScriptを⾒つけておく(クリックはしない)
トラッキング結果表⽰スクリプトの追加 (2/4) VPS_Demoをクリック
トラッキング結果表⽰スクリプトの追加 (3/4) SampleScriptをVPS_Demoの Inspectorにドラッグ&ドロップ
トラッキング結果表⽰スクリプトの追加 (4/4) SampleScriptが追加される ダブルクリックしてファイルを開く
トラッキング結果表⽰スクリプト (1/5) Unityが⽣成する空のスクリプトに、下記の 機能を利⽤するための記述を予め追加 ・ ARCoreExtensions ・ ARFoundation
トラッキング結果表⽰スクリプト (2/5) public class SampleScript : MonoBehaviour { //GeospatialAPIを⽤いたトラッキング情報 public AREarthManager EarthManager; //GeospatialAPIとARCoreの初期化と結果 public VpsInitializer Initializer; //結果表⽰⽤のUI public Text OutputText; void Start() { } void Update() { } } 01.txt
トラッキング結果表⽰スクリプト (3/5)
void Update()
{
string status = "";
//初期化失敗またはトラッキングができたいない場合は何もしないで戻る
if ( ! Initializer.IsReady ||
EarthManager.EarthTrackingState != TrackingState.Tracking)
{
return;
}
//トラッキング結果を取得
GeospatialPose pose = EarthManager.CameraGeospatialPose;
//結果を表⽰(statusはのちほど使う)
ShowTrackingInfo(status, pose);
}
void ShowTrackingInfo(string status, GeospatialPose pose)
{
//緯度・経度・⾼度やその精度、statusに代⼊された⽂字列を表⽰
}
02.txt
トラッキング結果表⽰スクリプト (4/5) EarthManager.CameraGeospatialPose パラメータ 意味 Latitude 緯度 [°] Longitude 経度 [°] Altitude ⾼度 [m] EunRotation 端末の傾き [クォータニオン] 下記の座標系で取得 東︓+X 鉛直︓+Y 北︓+Z HorizontalAccuracy ⽔平⽅向の精度 [m] VerticalAccuracy ⾼度の精度 [m] OrientationYawAccuracy ⽅位の精度 [°] Latitude/緯度 Longitude/経度
トラッキング結果表⽰スクリプト (5/5)
void ShowTrackingInfo(string status, GeospatialPose pose)
{
OutputText.text = string.Format(
"Latitude/Longitude: {0}°, {1}°¥n" + //緯度・経度
"Horizontal Accuracy: {2}m¥n" +
//⽔平⽅向の精度
"Altitude: {3}m¥n" +
//⾼度
"Vertical Accuracy: {4}m¥n" +
//⾼度の精度
"Heading: {5}°¥n" +
//⽅位
"Heading Accuracy: {6} °¥n" +
//⽅位の精度
"{7} ¥n"
//statusに代⼊された⽂字列
,
pose.Latitude.ToString("F6"), //{0}
pose.Longitude.ToString("F6"), //{1}
pose.HorizontalAccuracy.ToString("F6"), //{2}
pose.Altitude.ToString("F2"), //{3}
pose.VerticalAccuracy.ToString("F2"), //{4}
pose.EunRotation.ToString("F1"), //{5}
pose.OrientationYawAccuracy.ToString("F1"), //{6}
03.txt
status //{7}
);
}
Ctrl/Command + Sで保存
変数とスクリプトの対応づけ (1/4) VPS Demo ARCoreExtensionsの横の
変数とスクリプトの対応づけ (2/4) Scene AR Session Origin
変数とスクリプトの対応づけ (3/4) Initializerの横の
変数とスクリプトの対応づけ (4/4) Scene VPS_Demo
表⽰⽤UIの追加 (1/3) ①Assets -> AR_Fukuoka ②Canvasを⾒つけておく
表⽰⽤UIの追加 (2/3) CanvasをHierarchy にドラッグ&ドロップ
表⽰⽤UIの追加 (3/3) Canvasを開く TrackingMonitorTextがある事を確認
表⽰⽤UIとSampleScriptとの対応づけ (1/2) VPS Demoをクリック OutputTextの横の
表⽰⽤UIとSampleScriptとの対応づけ (2/2) Scene TrackingMonitorText
ハンズオン⼿順 p Unityプロジェクトの作成 p AR FoundationとARCore Extensionsのインストール p Geospatial APIとARCore/ARKitを使うシーンの設定 p Geospatial APIによるトラッキング情報の取得と表⽰ p 実機へのインストール p 指定した緯度・経度にオブジェクトを表⽰
Androidの場合
実機インストール for Android ARCore端末とPCをUSBケーブルで接続
実機インストール for Android File
実機インストール for Android Build And Run
実機インストール for Android 名前をつける(例: test) Save
iOSの場合
実機インストール for iOS File
実機インストール for iOS Build Settings...
実機インストール for iOS Build
実機インストール for iOS 新しいフォルダを作る (場所の変更は不要)
実機インストール for iOS フォルダ名を設定 (例:build) Create
実機インストール for iOS Choose
実機インストール for iOS Buildフォルダを開く
実機インストール for iOS Unity-iPhone.xcworkspaceを開く
実機インストール for iOS Unity-iPhone Setting & Capabilities
実機インストール for iOS Automatically manage signing 適宜Teamを選ぶ
実機インストール for iOS iOS端末とMacをUSBケーブルで接続
実機インストール for iOS デバイスを選択
実機インストール for iOS クリック
Android/iOS共通
動作の様⼦
ハンズオン⼿順 p Unityプロジェクトの作成 p AR FoundationとARCore Extensionsのインストール p Geospatial APIとARCore/ARKitを使うシーンの設定 p Geospatial APIによるトラッキング情報の取得と表⽰ p 実機へのインストール p 指定した緯度・経度にオブジェクトを表⽰
開発の⽅針 p 緯度・経度・⾼さを事前に指定して、その位置にオブジェクト表⽰ • 精度が低いと間違った位置に表⽰されて体験の質が低下 • 位置や向きの精度を毎フレームチェックする • 位置と向きの精度が⾼くなった時にオブジェクトを登場させる 緯度・経度 ⾼精度マッチング AR
開発の⽅針 p 緯度・経度・⾼さを事前に指定して、その位置にオブジェクト表⽰ • 精度が低いと間違った位置に表⽰されて体験の質が低下 • 位置や向きの精度を毎フレームチェックする • 位置と向きの精度が⾼くなった時にオブジェクトを登場させる 緯度・経度 ⾼精度マッチング AR
位置と向きの精度に応じた分岐 (1/3) public class SampleScript : MonoBehaviour { //GeospatialAPIを⽤いたトラッキング情報 public AREarthManager EarthManager; //GeospatialAPIとARCoreの初期化と結果 public VpsInitializer Initializer; //結果表⽰⽤のUI public Text OutputText; //⽅位の許容精度 public double HeadingThreshold = 25; //⽔平位置の許容精度 public double HorizontalThreshold = 20; } void Start(){ } void Update(){ /*略*/ } 04.txt
位置と向きの精度に応じた分岐 (2/3)
void Update()
{
string status = "";
//初期化失敗またはトラッキングができたいない場合は何もしないで戻る
if ( ! Initializer.IsReady ||
EarthManager.EarthTrackingState != TrackingState.Tracking)
{
return;
}
//トラッキング結果を取得
GeospatialPose pose = EarthManager.CameraGeospatialPose;
//トラッキング精度に応じた挙動をここに記述
}
//結果を表⽰(statusはのちほど使う)
ShowTrackingInfo(status, pose);
位置と向きの精度に応じた分岐 (3/3)
//トラッキング結果を取得
GeospatialPose pose = EarthManager.CameraGeospatialPose;
//トラッキング精度がthresholdより悪い(値が⼤きい)場合
if (pose.OrientationYawAccuracy > HeadingThreshold ||
pose.HorizontalAccuracy > HorizontalThreshold)
{
status = "低精度︓周辺を⾒回してください";
}
else //許容誤差いないの場合
{
status = "⾼精度︓High Tracking Accuracy ";
}
//結果を表⽰
ShowTrackingInfo(status, pose);
05.txt
動作確認 精度の良し悪しが表⽰される
開発の⽅針 p 緯度・経度・⾼さを事前に指定して、その位置にオブジェクト表⽰ • 精度が低いと間違った位置に表⽰されて体験の質が低下 • 位置や向きの精度を毎フレームチェックする • 位置と向きの精度が⾼くなった時にオブジェクトを登場させる 緯度・経度 ⾼精度マッチング AR
指定した位置にオブジェクトを出現 (1/3) public class SampleScript : MonoBehaviour { public AREarthManager EarthManager; //GeospatialAPIを⽤いたトラッキング情報 public VpsInitializer Initializer; //GeospatialAPIとARCoreの初期化と結果 public Text OutputText; //結果表⽰⽤のUI public double HeadingThreshold = 25; //位置・⽅位の許容精度 public double HorizontalThreshold = 20; public double Latitude; //オブジェクトを置く緯度 public double Longitude; //オブジェクトを置く緯度 public double Altitude; //オブジェクトを置く⾼さ public double Heading; //オブジェクトの⽅位 (北=0°) public GameObject ContentPrefab; //表⽰オブジェクトの元データ GameObject displayObject; //実際に表⽰するオブジェクト public ARAnchorManager AnchorManager; //アンカー作成に使⽤ } void Start(){ } void Update(){/*略*/ } 06.txt
指定した位置にオブジェクトを出現 (2/3)
//トラッキング結果を取得
GeospatialPose pose = EarthManager.CameraGeospatialPose;
if (pose.HeadingAccuracy > HeadingThreshold ||
pose.HorizontalAccuracy > HorizontalThreshold)
{
status = "低精度︓周辺を⾒回してください";
}
else
{
status = "⾼精度︓High Tracking Accuracy ";
if (displayObject == null)
{
//初めて⾼精度計測できたタイミングでオブジェクトを⽣成
}
}
//結果を表⽰
ShowTrackingInfo(status, pose);
07.txt
指定した位置にオブジェクトを出現 (3/3)
if (displayObject == null)
{
//スマホの⾼さ-1.5mでおよそ地⾯の⾼さとする (tentatively)
Altitude = pose.Altitude - 1.5f;
//⾓度の補正(このあと使うAnchor⽣成関数が、南=0を前提としているため)
Quaternion quaternion = Quaternion.AngleAxis(180f - (float)Heading, Vector3.up);
//指定した位置・向きのアンカーを作成 (緯度・経度・⾼度をx,y,zに、⽅位を姿勢に変換)
ARGeospatialAnchor anchor
= AnchorManager.AddAnchor(Latitude, Longitude, Altitude, quaternion);
//Altitudeの代わりにAPIが提供する地形(Terrain)の⾼さを使う場合は下記を代わりに使⽤
/*ARGeospatialAnchor anchor
= AnchorManager.ResolveAnchorOnTerrain(Latitude, Longitude, 0, quaternion);*/
}
//アンカーが正しく作られていればオブジェクトを実体化
if (anchor != null)
{
displayObject = Instantiate(ContentPrefab, anchor.transform);
}
08.txt
開発の⽅針 p 緯度・経度・⾼さを事前に指定して、その位置にオブジェクト表⽰ • 精度が低いと間違った位置に表⽰されて体験の質が低下 • 位置や向きの精度を毎フレームチェックする • 位置と向きの精度が⾼くなった時にオブジェクトを登場させる 緯度・経度 ⾼精度マッチング AR
緯度・経度の指定 VPS Demo 緯度と経度を指定
Google Mapを表示
緯度・経度の指定 (1/5) オブジェクトを置きたい位置を右クリック
緯度・経度の指定 (2/5) 緯度・経度をクリックすると クリップボードにコピーされる
緯度・経度の指定 (3/5) 緯度と経度をそれぞれ貼り付ける
緯度・経度の指定 (4/5) ⾼度は今回スクリプトで記述しているので不要
緯度・経度の指定 (5/5) Headingを0に指定 (=北向き)
表⽰オブジェクトの登録 (1/2) ①Assets -> AR_Fukuoka ->Contentを開く ②ARPrefabを⾒つけておく(クリックはしない)
表⽰オブジェクトの登録 (2/2) VPS Demo AR PrefabをContentPrefab にドラッグ&ドロップ
AnchorManagerとSampleScriptとの対応づけ (1/2) AnchorManagerの横の
AnchorManagerとSampleScriptとの対応づけ (2/2) Scene AR Session Origin
動作確認 指定した位置にオブジェクトが登場
延⻑戦 ひとまず完成︕
⾼度もInspectorから指定しよう
⾼度をInspectorから指定する準備
//トラッキング結果を取得
GeospatialPose pose = EarthManager.CameraGeospatialPose;
if (pose.HeadingAccuracy > HeadingThreshold ||
pose.HorizontalAccuracy > HorizontalThreshold)
{
status = "低精度︓周辺を⾒回してください";
}
else
{
status = "⾼精度︓High Tracking Accuracy ";
if (displayObject == null)
{
//ここを編集
}
}
//結果を表⽰
ShowTrackingInfo(status, pose);
⾼度をInspectorから指定する準備
status = "Tracking";
if (displayObject == null)
//を追加でコメント化
{
//スマホの⾼さ-1.5mでおよそ地⾯の⾼さとする (tentatively)
//Altitude = pose.Altitude - 1.5f;
//⾓度の補正(このあと使うAnchor⽣成関数が、南=0を前提としているため)
Quaternion quaternion = Quaternion.AngleAxis(180f - (float)Heading, Vector3.up);
//指定した位置・向きのアンカーを作成 (緯度・経度・⾼度をx,y,zに、⽅位を姿勢に変換)
ARGeospatialAnchor anchor
= AnchorManager.AddAnchor(Latitude, Longitude, Altitude, quaternion);
}
//アンカーが正しく作られていればオブジェクトを実体化
if (anchor != null)
{
displayObject = Instantiate(ContentPrefab, anchor.transform);
}
⾼度の設定 VPS Demo Altitudeに⾼度[m]を⼊⼒
⾼度の考え⽅ [引用] https://www.gsi.go.jp/buturisokuchi/grageo_geoid.html ⾼度(楕円体⾼) ≒ ジオイド⾼+標⾼
ジオイド⾼の取得⽅法①︓API URL https://vldb.gsi.go.jp/sokuchi/surveycalc/api_help.html
ジオイド⾼の取得⽅法②︓Webサイト URL https://geographiclib.sourceforge.io/cgi-bin/GeoidEval 緯度 経度を⼊⼒するだけでOK
標⾼の取得⽅法①︓API URL https://maps.gsi.go.jp/development/elevation_s.html
標⾼の取得⽅法②︓アプリ [iOS] 標⾼測定機 [Android] 住所と標⾼ いずれも地図をタップやスワイプするだけで標⾼を取得できる
お試しあれ
ARCore Geospatial API公式ページ ARCore Geospatial APIの詳細は公式ページをチェック︕ https://developers.google.com/ar/develop/geospatial
サンプルコード公開中 https://github.com/TakashiYoshinaga/GeospatialAPI-UnityStarterKit