ARCore Geospatial APIハンズオン by AR Fukuoka

232.3K Views

June 04, 22

スライド概要

2022/06/04開催のGeospatial APIハンズオンの資料

profile-image

可視化技術や人間計測/空間計測技術を活用した問題解決に関する研究開発。 ARコンテンツ作成勉強会(AR_Fukuoka)を主催。

シェア

埋め込む »CMSなどでJSが使えない場合

各ページのテキスト
1.

ARCore Geospatial APIハンズオン

2.

⾃⼰紹介 ⽒名︓吉永崇(Takashi Yoshinaga) 専⾨︓ARを⽤いた医療⽀援や運動計測 Volumetric Video (3Dビデオ) コミュニティ︓ARコンテンツ作成勉強会 主催 [Twitter] @Taka_Yoshinaga

3.

ARコンテンツ作成勉強会の紹介 p 2013年5⽉に勉強会をスタート。 p ARコンテンツの作り⽅をハンズオン形式で学ぶ p ⼈数は5~10名程度の少⼈数で実施 p 参加条件はAR/VRに興味がある⼈(知識不要) p 各地で開催 (福岡、熊本、宮崎、⻑崎、⼤分、 ⿅児島、⼭⼝、広島、札幌、関東)

4.

北海道サテライト じゅん さん @jun_mh4g 13LABO さん @13LABO_cafe

5.

Twitterと勉強会ページで情報を発信しています @AR_Fukuoka Googleで「AR勉強会」で検索

6.

ハッシュタグ #AR_Fukuoka

7.

今⽇の内容 ARCore Geospatial APIによるVPSを⽤いた AR開発の基本⼿順を体験しよう

8.

今⽇の内容 ところでVPSって︖

9.

ARのスケールと関連技術 テーブルトップスケール マーカー認識など ルームスケール SLAMなど タウンスケール GPS・電⼦コンパスなど AR機器(スマートフォン・タブレット等)に各種センサを搭載しているおかげで上記のARを体験可能

10.

ARのスケールと関連技術 テーブルトップスケール マーカー認識など ルームスケール SLAMなど タウンスケール GPS・電⼦コンパスなど GPSや電⼦コンパスでの位置・⽅位計測は周辺環境の影響を⼤き受けるため体験としてはイマイチ

11.

GoogleによるVisual Positioning System/Service GPSを⽤いたエリアの特定とストリートビューや航空写真を融合した3D点群を⽤いた⾼精度位置合わせを実現

12.

今⽇のゴール 低精度 トラッキング結果の表⽰ トラッキング精度のチェック ⾼精度 指定の緯度・経度にCG表⽰

13.

演習⽤素材のダウンロード https://github.com/TakashiYoshinaga/ARFukuoka/raw/main/GeospatialAPI_20220604/Smples.zip

14.

ハンズオンスタート

15.

ハンズオン⼿順 p Unityプロジェクトの作成 p AR FoundationとARCore Extensionsのインストール p Geospatial APIとARCore/ARKitを使うシーンの設定 p Geospatial APIによるトラッキング情報の取得と表⽰ p 実機へのインストール p 指定した緯度・経度にオブジェクトを表⽰

16.

ハンズオン⼿順 p Unityプロジェクトの作成 p AR FoundationとARCore Extensionsのインストール p Geospatial APIとARCore/ARKitを使うシーンの設定 p Geospatial APIによるトラッキング情報の取得と表⽰ p 実機へのインストール p 指定した緯度・経度にオブジェクトを表⽰

17.

Unity Hub起動 Unity Hub

18.

プロジェクトの作成 (1/6) ①Projects ②New Project

19.

プロジェクトの作成 (2/6) Editor Versionを開く

20.

プロジェクトの作成 (3/6) 2020.3.xxf1 この資料は2020.3.xを前提に解説をしています

21.

プロジェクトの作成 (4/6) ①3D ②Project name ③保存場所

22.

プロジェクトの作成 (5/6) Create project

23.

プロジェクトの作成 (6/6) Unity Editorが起動すればOK

24.

ビルド設定 for Android/iOS (1/4) File

25.

ビルド設定 for Android/iOS (2/4) Build Settings

26.

ビルド設定 for Android/iOS (3/4) ①AndroidまたはiOS ②Switch Platform

27.

ビルド設定 for Android/iOS (4/4) Player Settings

28.

ビルド設定 for Android Androidの場合

29.

ビルド設定 for Android (1/3) ①Other Settings ②Vulkanをクリック ③ ­で削除

30.

ビルド設定 for Android (2/3) ①Identification ②Minimum API Level ③ Android 7.0 ʻNougatʼ API Level 24を選択

31.

ビルド設定 for Android (3/3) ①Configuration ②Scripting Backend ③IL2CPPを選択 ④ARM64を選択

32.

ビルド設定 for iOS iOSの場合

33.

ビルド設定 for iOS ①Configuraton ②各Usage DescriptionにRequired for ARと⼊⼒

34.

ハンズオン⼿順 p Unityプロジェクトの作成 p AR FoundationとARCore Extensionsのインストール p Geospatial APIとARCore/ARKitを使うシーンの設定 p Geospatial APIによるトラッキング情報の取得と表⽰ p 実機へのインストール p 指定した緯度・経度にオブジェクトを表⽰

35.

パッケージ取得の準備 (1/3) Window

36.

パッケージ取得の準備 (2/3) Package Manager

37.

パッケージ取得の準備 (3/3) PackagesからUnity Registryを選択

38.

AR Foundationのインストール (1/2) ARで検索

39.

AR Foundationのインストール (2/2) ①ARFoundation ② Install

40.

ARCoreまたはARKitのインストール ①Androidの場合: ARCore XR Plugin iOSの場合: ARKit XR Plugin ② Install

41.

ARCore Extensionsのインストール (1/3) +をクリック [補⾜] 前⾴までのARFoundationやARCore/ARKitはあくまでARを実現するためのツール。 次のARCore Extensionsが今回の本題であるGeospatial APIの使⽤に必要。

42.

ARCore Extensionsのインストール (2/3) Add package from git URL

43.

ARCore Extensionsのインストール (3/3) 下記で検索 https://github.com/google-ar/arcore-unity-extensions.git

44.

補⾜ 使用しているPCのGitHub接続の設定がされていない場合エラーになります

45.

ARCore Extensionsのインストール (補⾜) ARCOre Extensionsのリポジトリにアクセス https://github.com/google-ar/arcore-unity-extensions.git Releasesをクリック

46.

ARCore Extensionsのインストール (補⾜) v.1.31.0 少し下にスクロール

47.

ARCore Extensionsのインストール (補⾜) Assets arcore-unity-extensions-1.31.0.tgzをダウンロード

48.

ARCore Extensionsのインストール (補⾜) arcore-unity-extensions-1.31.0.tgzを 今回作成したプロジェクトのフォルダ内のPackagesフォルダに移す

49.

ARCore Extensionsのインストール (補⾜) Add package from git tarball

50.

ARCore Extensionsのインストール (補⾜) arcore-unity-extentionsを開く

51.

補⾜ 補足おわり

52.

確認 PackagesからIn Projectを選択

53.

確認 ARCore ExtensionsがあればOK

54.

GeospatialAPIのサンプル取得 (Optional) ①ARCore Extensions ②Samples ③Geospatial SampleをImport

55.

補⾜ iOSビルドのオプションをインストールしていない環境でエラーが出るかもしれない

56.

iOS関連のエラー (補⾜) ⾚⽂字のエラーが出るかもしれない

57.

iOS関連のエラー (補⾜) Samples -> ARCore Extensions ->1.31.0 ->GeospatialSample ->Scripts

58.

iOS関連のエラー (補⾜) Editorフォルダを削除

59.

iOS関連のエラー (補⾜) Consoleタブ Clearでエラーが消えればOK

60.

iOS関連のエラー (補⾜) Projectタブに戻しておく

61.

補⾜ 補足おわり

62.

ARCore Extensionsのインストール完了 閉じる

63.

続いて、ここまででインストールしたツール類を このプロジェクトで使うための設定を行う

64.

ARCore or ARKit利⽤設定 (1/4) ① Edit ② Project Settings

65.

ARCore or ARKit利⽤設定 (2/4) XR Plug-in Management

66.

ARCore or ARKit利⽤設定 (3/4) Androidの場合 ARCoreをチェック

67.

ARCore or ARKit利⽤設定 (4/4) iOSの場合 ARKitをチェック

68.

ARCore Extensions利⽤設定 (1/6) ARCore Extensions

69.

ARCore Extensions利⽤設定 (2/6) [iOSの場合] iOS Support Enabledチェックをオン

70.

ARCore Extensions利⽤設定 (3/6) AndroidまたはiOS⽤の項⽬のドロップダウンに注⽬

71.

ARCore Extensions利⽤設定 (4/6) ドロップダウンメニューからAPIKeyを選択

72.

ARCore Extensions利⽤設定 (5/6) Google Cloudで事前に作ったAPI Key⼊⼒ ※API Keyの作り方は事前準備資料[Link]の GoogleCloudPlatformの項目を参照

73.

ARCore Extensions利⽤設定 (6/6) Geospatialをオン

74.

ARCore Extensions利⽤設定完了 閉じる

75.

ハンズオン⼿順 p Unityプロジェクトの作成 p AR FoundationとARCore Extensionsのインストール p Geospatial APIとARCore/ARKitを使うシーンの設定 p Geospatial APIによるトラッキング情報の取得と表⽰ p 実機へのインストール p 指定した緯度・経度にオブジェクトを表⽰

76.

シーンの作成 (1/4) File

77.

シーンの作成 (2/4) Save As...

78.

シーンの作成 (3/4) Sample Save

79.

シーンの作成 (4/4) Assets Sampleが追加されていればOK

80.

まずは本シーンでARそのものを 実現するためにARFoundationを設定 (※GeospatialAPIはもうちょいあとに登場)

81.

AR Foundationのセットアップ (1/7) MainCameraを削除

82.

AR Foundationのセットアップ (2/7) 何も選択されていない状態で Hierarchyの空⽩を右クリック

83.

AR Foundationのセットアップ (3/7) ①XR ②AR Session Origin

84.

AR Foundationのセットアップ (4/7) AR Session Originが追加される

85.

AR Foundationのセットアップ (5/7) 何も選択されていない状態で Hierarchyの空⽩を右クリック

86.

AR Foundationのセットアップ (6/7) ①XR ②AR Session

87.

AR Foundationのセットアップ (7/7) AR Sessionが追加される

88.

ARで表示するオブジェクトと特定の位置を 紐付けるAnchorを利用する準備を済ませる トラッキングがロストしても再度そこを見ると位置合わせする機能。 指定した緯度・経度に置いたCGがどこかにすっ飛んでも復帰!

89.

AR Anchor Managerのセットアップ (1/3) ①AR SessionOrigin ②Add Component

90.

AR Anchor Managerのセットアップ (2/3) ①ARで検索 ②AR Anchor Manager

91.

AR Anchor Managerのセットアップ (3/3) ARAnchorManagerが追加される

92.

Geospatial APIによる位置・姿勢推定の 結果を本シーンで使用できるようにする

93.

AR Earth Managerのセットアップ (1/3) ①AR SessionOrigin ②Add Component

94.

AR Earth Managerのセットアップ (2/3) ①AR Earthで検索 ②AR Earth Manager

95.

AR Earth Managerのセットアップ (3/3) AREarthManagerが追加される

96.

各コンポーネントの概要 AR Anchor Manager 表⽰するオブジェクトを指定した座標に 固定するために使⽤。 オブジェクトの表⽰位置がずれても、 Anchorに紐付た場所を認識したら 表⽰オブジェクトの位置を補正してくれる。 AR Earth Manager 端末の対応状況や、Geospatial API利⽤ の初期化の成否、位置・姿勢の推定結果を 取得するために使⽤。

97.

Geospatial APIを利用するには 位置情報へのアクセス許可なども必要 Permission関連のこまごました処理を書きたくないよね?

98.

楽に設定できる公式スクリプトを活用しよう

99.

Permission関連オブジェクトの追加 (1/2) 何も選択されていない状態で Hierarchyの空⽩を右クリック

100.

Permission関連オブジェクトの追加 (2/2) ②AR Extensions ①XR

101.

Permission関連スクリプトの設定 (1/9) ARCore Extensions このエリアでこのシーン内で動作している下記 スクリプトを渡してあげればPermission関連 の設定をやってくれる。 ・ARSession ・ARSessionOrigin ・ARCameraManager ・ARCoreExtensionConfiguration

102.

Permission関連スクリプトの設定 (2/9) Sessoinの横の

103.

Permission関連スクリプトの設定 (3/9) Scene AR Session [解説] ARSessionスクリプトはこのシーン内 (Hierarchy内) のAR Session オブジェクトにアタッチされている

104.

Permission関連スクリプトの設定 (4/9) SessoinOriginの横の

105.

Permission関連スクリプトの設定 (5/9) Scene AR Session Origin

106.

Permission関連スクリプトの設定 (6/9) CameraManagerの横の

107.

Permission関連スクリプトの設定 (7/9) Scene AR Camera

108.

Permission関連スクリプトの設定 (8/9) ARCoreExtensionsConfigの横の

109.

Permission関連スクリプトの設定 (9/9) Scene GeospatialConfig

110.

Permission関連スクリプトの設定完了 ⼀通り割り当て完了 (CameraConfigFilterは不要)

111.

現状確認 AR Earth Manager 端末の対応状況や、 Geospatial API初期化 の成否、位置・姿勢の推 定結果を取得できる。 ただしGeospatialAPI によるトラッキングが開始 していれば。 Permission設定は Extensionsがやってくれる スクリプトから初期化する

112.

余談︓公式サンプル 公式サンプルに初期化からGeospatial API 活用までの手順を学べるシーンがある

113.

余談︓公式サンプル Samples ->ARCore Extensions ->1.31.0 ->Geospatial Sample

114.

余談︓公式サンプル Scripts GeospatialController

115.

余談︓公式サンプル GeospatialControllerスクリプトには、 初期化や位置取得、オブジェクト配置の 保存・再現に関するコードが書かれている ただし、初期化もデータ活用も一緒に記述 されているので他の用途のために再利用しづらい

116.

本ハンズオンでは トラッキング開始のための初期化コードだけ 分離したスクリプトを用意しました。 詳細はさておき、今回はこちらを利用します。

117.

ハンズオン⽤サンプルの取り込み (1/3) ①Samplesフォルダ ②AR_Fukuoka.unitypackageをダブルクリック

118.

ハンズオン⽤サンプルの取り込み (2/3) Import

119.

ハンズオン⽤サンプルの取り込み (3/3) AR_Fukuokaフォルダが追加されればOK

120.

トラッキング開始⽤オブジェクトの作成 (1/3) 何も選択されていない状態で Hierarchyの空⽩を右クリック

121.

トラッキング開始⽤オブジェクトの作成 (2/3) CreateEmpty

122.

トラッキング開始⽤オブジェクトの作成 (3/3) ①GameObject ②VPS_Demoに名前を変更

123.

トラッキング開始スクリプトの追加 (1/7) ①Assets -> AR_Fukuoka ->Scriptsを開く ②VpsInitializerを⾒つけておく(クリックはしない)

124.

トラッキング開始スクリプトの追加 (2/7) VPS Demo VpsInitializerをVPS_Demoの Inspectorにドラッグ&ドロップ

125.

トラッキング開始スクリプトの追加 (3/7) VPS Visualizerが追加される

126.

トラッキング開始スクリプトの追加 (4/7) EarthManagerの横の

127.

トラッキング開始スクリプトの追加 (5/7) Scene AR Session Origin

128.

トラッキング開始スクリプトの追加 (6/7) ARCoreExtensionsの横の

129.

トラッキング開始スクリプトの追加 (7/7) Scene AR Core Extensions

130.

ハンズオン⼿順 p Unityプロジェクトの作成 p AR FoundationとARCore Extensionsのインストール p Geospatial APIとARCore/ARKitを使うシーンの設定 p Geospatial APIによるトラッキング情報の取得と表⽰ p 実機へのインストール p 指定した緯度・経度にオブジェクトを表⽰

131.

トラッキング結果表⽰スクリプトの追加 (1/4) ①Assets -> AR_Fukuoka ->Scriptsを開く ②SampleScriptを⾒つけておく(クリックはしない)

132.

トラッキング結果表⽰スクリプトの追加 (2/4) VPS_Demoをクリック

133.

トラッキング結果表⽰スクリプトの追加 (3/4) SampleScriptをVPS_Demoの Inspectorにドラッグ&ドロップ

134.

トラッキング結果表⽰スクリプトの追加 (4/4) SampleScriptが追加される ダブルクリックしてファイルを開く

135.

トラッキング結果表⽰スクリプト (1/5) Unityが⽣成する空のスクリプトに、下記の 機能を利⽤するための記述を予め追加 ・ ARCoreExtensions ・ ARFoundation

136.

トラッキング結果表⽰スクリプト (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

137.
[beta]
トラッキング結果表⽰スクリプト (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

138.

トラッキング結果表⽰スクリプト (4/5) EarthManager.CameraGeospatialPose パラメータ 意味 Latitude 緯度 [°] Longitude 経度 [°] Altitude ⾼度 [m] Heading ⽅位 [°] CameraGeospatialPose: 北が0° HorizontalAccuracy ⽔平⽅向の精度 [m] VerticalAccuracy ⾼度の精度 [m] HeadingAccuracy ⽅位の精度 [°] Latitude/緯度 ※ARGeospatialAnchorでは南が0° (WGS84仕様)なの で要注意 Longitude/経度

139.
[beta]
トラッキング結果表⽰スクリプト (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.Heading.ToString("F1"), //{5}
pose.HeadingAccuracy.ToString("F1"), //{6}
03.txt
status //{7}
);
}

140.

Ctrl/Command + Sで保存

141.

変数とスクリプトの対応づけ (1/4) VPS Demo ARCoreExtensionsの横の

142.

変数とスクリプトの対応づけ (2/4) Scene AR Session Origin

143.

変数とスクリプトの対応づけ (3/4) Initializerの横の

144.

変数とスクリプトの対応づけ (4/4) Scene VPS_Demo

145.

表⽰⽤UIの追加 (1/3) ①Assets -> AR_Fukuoka ②Canvasを⾒つけておく

146.

表⽰⽤UIの追加 (2/3) CanvasをHierarchy にドラッグ&ドロップ

147.

表⽰⽤UIの追加 (3/3) Canvasを開く TrackingMonitorTextがある事を確認

148.

表⽰⽤UIとSampleScriptとの対応づけ (1/2) VPS Demoをクリック OutputTextの横の

149.

表⽰⽤UIとSampleScriptとの対応づけ (2/2) Scene TrackingMonitorText

150.

ハンズオン⼿順 p Unityプロジェクトの作成 p AR FoundationとARCore Extensionsのインストール p Geospatial APIとARCore/ARKitを使うシーンの設定 p Geospatial APIによるトラッキング情報の取得と表⽰ p 実機へのインストール p 指定した緯度・経度にオブジェクトを表⽰

151.

Androidの場合

152.

実機インストール for Android ARCore端末とPCをUSBケーブルで接続

153.

実機インストール for Android File

154.

実機インストール for Android Build And Run

155.

実機インストール for Android 名前をつける(例: test) Save

156.

iOSの場合

157.

実機インストール for iOS File

158.

実機インストール for iOS Build Settings...

159.

実機インストール for iOS Build

160.

実機インストール for iOS 新しいフォルダを作る (場所の変更は不要)

161.

実機インストール for iOS フォルダ名を設定 (例:build) Create

162.

実機インストール for iOS Choose

163.

実機インストール for iOS Buildフォルダを開く

164.

実機インストール for iOS Unity-iPhone.xcworkspaceを開く

165.

実機インストール for iOS Unity-iPhone Setting & Capabilities

166.

実機インストール for iOS Automatically manage signing 適宜Teamを選ぶ

167.

実機インストール for iOS iOS端末とMacをUSBケーブルで接続

168.

実機インストール for iOS デバイスを選択

169.

実機インストール for iOS クリック

170.

Android/iOS共通

171.

動作の様⼦

172.

ハンズオン⼿順 p Unityプロジェクトの作成 p AR FoundationとARCore Extensionsのインストール p Geospatial APIとARCore/ARKitを使うシーンの設定 p Geospatial APIによるトラッキング情報の取得と表⽰ p 実機へのインストール p 指定した緯度・経度にオブジェクトを表⽰

173.

開発の⽅針 p 緯度・経度・⾼さを事前に指定して、その位置にオブジェクト表⽰ • 精度が低いと間違った位置に表⽰されて体験の質が低下 • 位置や向きの精度を毎フレームチェックする • 位置と向きの精度が⾼くなった時にオブジェクトを登場させる 緯度・経度 ⾼精度マッチング AR

174.

開発の⽅針 p 緯度・経度・⾼さを事前に指定して、その位置にオブジェクト表⽰ • 精度が低いと間違った位置に表⽰されて体験の質が低下 • 位置や向きの精度を毎フレームチェックする • 位置と向きの精度が⾼くなった時にオブジェクトを登場させる 緯度・経度 ⾼精度マッチング AR

175.

位置と向きの精度に応じた分岐 (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

176.
[beta]
位置と向きの精度に応じた分岐 (2/3)
void Update()
{
string status = "";
//初期化失敗またはトラッキングができたいない場合は何もしないで戻る
if ( ! Initializer.IsReady ||
EarthManager.EarthTrackingState != TrackingState.Tracking)
{
return;
}
//トラッキング結果を取得
GeospatialPose pose = EarthManager.CameraGeospatialPose;
//トラッキング精度に応じた挙動をここに記述

}

//結果を表⽰(statusはのちほど使う)
ShowTrackingInfo(status, pose);

177.
[beta]
位置と向きの精度に応じた分岐 (3/3)
//トラッキング結果を取得
GeospatialPose pose = EarthManager.CameraGeospatialPose;
//トラッキング精度がthresholdより悪い(値が⼤きい)場合
if (pose.HeadingAccuracy > HeadingThreshold ||
pose.HorizontalAccuracy > HorizontalThreshold)
{
status = "低精度︓周辺を⾒回してください";
}
else //許容誤差いないの場合
{
status = "⾼精度︓High Tracking Accuracy ";
}
//結果を表⽰
ShowTrackingInfo(status, pose);

05.txt

178.

動作確認 精度の良し悪しが表⽰される

179.

開発の⽅針 p 緯度・経度・⾼さを事前に指定して、その位置にオブジェクト表⽰ • 精度が低いと間違った位置に表⽰されて体験の質が低下 • 位置や向きの精度を毎フレームチェックする • 位置と向きの精度が⾼くなった時にオブジェクトを登場させる 緯度・経度 ⾼精度マッチング AR

180.

指定した位置にオブジェクトを出現 (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

181.
[beta]
指定した位置にオブジェクトを出現 (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

182.
[beta]
指定した位置にオブジェクトを出現 (3/3)
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);
}

08.txt

183.

開発の⽅針 p 緯度・経度・⾼さを事前に指定して、その位置にオブジェクト表⽰ • 精度が低いと間違った位置に表⽰されて体験の質が低下 • 位置や向きの精度を毎フレームチェックする • 位置と向きの精度が⾼くなった時にオブジェクトを登場させる 緯度・経度 ⾼精度マッチング AR

184.

緯度・経度の指定 VPS Demo 緯度と経度を指定

185.

Google Mapを表示

186.

緯度・経度の指定 (1/5) オブジェクトを置きたい位置を右クリック

187.

緯度・経度の指定 (2/5) 緯度・経度をクリックすると クリップボードにコピーされる

188.

緯度・経度の指定 (3/5) 緯度と経度をそれぞれ貼り付ける

189.

緯度・経度の指定 (4/5) ⾼度は今回スクリプトで記述しているので不要

190.

緯度・経度の指定 (5/5) Headingを0に指定 (=北向き)

191.

表⽰オブジェクトの登録 (1/2) ①Assets -> AR_Fukuoka ->Contentを開く ②ARPrefabを⾒つけておく(クリックはしない)

192.

表⽰オブジェクトの登録 (2/2) VPS Demo AR PrefabをContentPrefab にドラッグ&ドロップ

193.

AnchorManagerとSampleScriptとの対応づけ (1/2) AnchorManagerの横の

194.

AnchorManagerとSampleScriptとの対応づけ (2/2) Scene AR Session Origin

195.

動作確認 指定した位置にオブジェクトが登場

196.

延⻑戦 ひとまず完成︕

197.

⾼度もInspectorから指定しよう

198.
[beta]
⾼度をInspectorから指定する準備
//トラッキング結果を取得
GeospatialPose pose = EarthManager.CameraGeospatialPose;
if (pose.HeadingAccuracy > HeadingThreshold ||
pose.HorizontalAccuracy > HorizontalThreshold)
{
status = "低精度︓周辺を⾒回してください";
}
else
{
status = "⾼精度︓High Tracking Accuracy ";
if (displayObject == null)
{
//ここを編集
}
}
//結果を表⽰
ShowTrackingInfo(status, pose);

199.
[beta]
⾼度を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);
}

200.

⾼度の設定 VPS Demo Altitudeに⾼度[m]を⼊⼒

201.

⾼度の考え⽅ [引用] https://www.gsi.go.jp/buturisokuchi/grageo_geoid.html ⾼度(楕円体⾼) ≒ ジオイド⾼+標⾼

202.

ジオイド⾼の取得⽅法①︓API URL https://vldb.gsi.go.jp/sokuchi/surveycalc/api_help.html

203.

ジオイド⾼の取得⽅法②︓Webサイト URL https://geographiclib.sourceforge.io/cgi-bin/GeoidEval 緯度 経度を⼊⼒するだけでOK

204.

標⾼の取得⽅法①︓API URL https://maps.gsi.go.jp/development/elevation_s.html

205.

標⾼の取得⽅法②︓アプリ [iOS] 標⾼測定機 [Android] 住所と標⾼ いずれも地図をタップやスワイプするだけで標⾼を取得できる

206.

お試しあれ

207.

ARCore Geospatial API公式ページ ARCore Geospatial APIの詳細は公式ページをチェック︕ https://developers.google.com/ar/develop/geospatial

208.

サンプルコード公開中 https://github.com/TakashiYoshinaga/GeospatialAPI-UnityStarterKit