C++ と NDK で粗い再局在化を使用してアンカーを作成して配置する方法
Azure Spatial Anchors では、デバイス上の配置センサー データを、作成したアンカーに関連付けることができます。 このデータを使用して、デバイスの近くにアンカーがあるかどうかをすばやく判断することもできます。 詳細については、「粗い再局在化」を参照してください。
前提条件
このガイドを完了するには、次のことが必要です。
- C++ と Android ネイティブ開発キットについての基本的な知識。
- 「Azure Spatial Anchors の概要」を読んでいる。
- 5 分間のクイック スタートのいずれかを完了している。
- アンカーを作成して配置する方法に関するページを読んでいる。
センサーのフィンガープリント プロバイダーを構成する
まず、センサーのフィンガープリント プロバイダーを作成して構成します。 センサーのフィンガープリント プロバイダーは、デバイス上にあるプラットフォーム固有のセンサーの読み取りを処理し、それらの測定値を、クラウド空間アンカー セッションによって使用される共通表現へと変換します。
重要
有効にしているセンサーがお使いのプラットフォームで使用可能かどうか、こちらを確認してください。
// Create the sensor fingerprint provider
std::shared_ptr<PlatformLocationProvider> sensorProvider;
sensorProvider = std::make_shared<PlatformLocationProvider>();
// Allow GPS
const std::shared_ptr<SensorCapabilities>& sensors = sensorProvider->Sensors();
sensors->GeoLocationEnabled(true);
// Allow WiFi scanning
sensors->WifiEnabled(true);
// Populate the set of known BLE beacons' UUIDs
std::vector<std::string> uuids;
uuids.push_back("22e38f1a-c1b3-452b-b5ce-fdb0f39535c1");
uuids.push_back("a63819b9-8b7b-436d-88ec-ea5d8db2acb0");
// Allow the set of known BLE beacons
sensors->BluetoothEnabled(true);
sensors->KnownBeaconProximityUuids(uuids);
クラウド空間アンカー セッションを構成する
次に、クラウド空間アンカー セッションの構成について記述してゆきます。 最初の行では、セッションに対してセンサー プロバイダーを設定します。 この時点からは、セッション中に作成したアンカーはすべて、センサーの一連の読み取り値に関連付けられます。 次に、近接デバイスの検索条件をインスタンス化し、アプリケーションの要件に合うようにそれを初期化します。 最後に、近接デバイスの条件からウォッチャーを作成することで、アンカー検索時にセンサー データを使用するようセッションに指示します。
// Set the session's sensor fingerprint provider
cloudSpatialAnchorSession->LocationProvider(sensorProvider);
// Configure the near-device criteria
auto nearDeviceCriteria = std::make_shared<NearDeviceCriteria>();
nearDeviceCriteria->DistanceInMeters(5.0f);
nearDeviceCriteria->MaxResultCount(25);
// Set the session's locate criteria
auto anchorLocateCriteria = std::make_shared<AnchorLocateCriteria>();
anchorLocateCriteria->NearDevice(nearDeviceCriteria);
cloudSpatialAnchorSession->CreateWatcher(anchorLocateCriteria);
監視が作成された後、要求されたすべてのアンカーに対して AnchorLocated
イベントが発生します。 このイベントは、アンカーが探知されたとき、またはアンカーを探知できなかった場合に発生します。 このような状況が発生した場合は、その理由が状態に示されます。 監視のすべてのアンカーが (探知されたかどうかを問わず) 処理された後、LocateAnchorsCompleted
イベントが発生します。 識別子の上限は、Watcher 1 つあたり 35 個です。
次のステップ
このガイドでは、デバイス上のセンサーを使用してアンカーを作成して配置する方法について学習しました。 荒い再局在化の詳細については、次のガイドに進んでください。