Como criar e localizar âncoras com a relocalização grosseira em C++/NDK

O Azure Spatial Anchors pode associar dados do sensor no dispositivo e posicionar as âncoras que criar. Estes dados também podem ser utilizados para determinar rapidamente se existem âncoras nas proximidades do seu dispositivo. Para obter mais informações, veja Relocalização conjunta.

Pré-requisitos

Para concluir este guia, certifique-se de que tem:

Configurar o fornecedor de impressões digitais do sensor

Vamos começar por criar e configurar um fornecedor de impressões digitais do sensor. O fornecedor de impressões digitais do sensor tratará da leitura dos sensores específicos da plataforma no seu dispositivo e da conversão das respetivas leituras numa representação comum consumida pela sessão de âncora espacial na cloud.

Importante

Certifique-se de que verifica aqui se os sensores que está a ativar estão disponíveis na sua plataforma.

// 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);

Configurar a sessão de âncora espacial na cloud

Em seguida, vamos tratar da configuração da sessão de âncora espacial na cloud. Na primeira linha, definimos o fornecedor do sensor na sessão. A partir de agora, qualquer âncora que criarmos durante a sessão será associada a um conjunto de leituras de sensores. Em seguida, instanciamos um critério de localização quase do dispositivo e inicializamo-lo para corresponder aos requisitos da aplicação. Por fim, instruímos a sessão a utilizar dados de sensores ao localizar âncoras ao criar um observador a partir dos nossos critérios de quase dispositivo.

// 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);

Após a criação do observador, o AnchorLocated evento será acionado para cada âncora pedida. Este evento é acionado quando uma âncora está localizada ou se não é possível localizar a âncora. Se esta situação acontecer, o motivo será indicado no estado. Depois de todas as âncoras de um observador serem processadas, encontradas ou não encontradas, o LocateAnchorsCompleted evento será acionado. Existe um limite de 35 identificadores por observador.

Passos seguintes

Neste guia, aprendeu a criar e localizar âncoras com sensores no dispositivo. Para saber mais sobre a relocalização grosseira, avance para o guia seguinte.