Relocalización generalCoarse relocalization

La relocalización general es una característica que proporciona una respuesta inicial a la pregunta: ¿Dónde está mi dispositivo ahora/qué contenido debo observar?Coarse relocalization is a feature that provides an initial answer to the question: Where is my device now / What content should I be observing? La respuesta no es precisa, pero tiene el formato: Está cerca de estos delimitadores, intente localizar uno de ellos.The response isn't precise, but instead is in the form: You're close to these anchors; try locating one of them.

La relocalización general funciona al asociar varias lecturas de sensores en el dispositivo con la creación y la consulta de los delimitadores.Coarse relocalization works by associating various on-device sensor readings with both the creation and the querying of anchors. En el caso de los escenarios exteriores, los datos del sensor suelen ser la posición GPS (sistema de posición global) del dispositivo.For outdoor scenarios, the sensor data is typically the GPS (Global Positioning System) position of the device. Cuando el GPS no está disponible o no es confiable (por ejemplo, en interiores), los datos del sensor están formados por los puntos de acceso Wi-Fi y las balizas Bluetooth al alcance.When GPS is not available or unreliable (such as indoors), the sensor data consists of the WiFi access points and Bluetooth beacons in range. Todos los datos recopilados del sensor contribuyen al mantenimiento de un índice espacial que Azure Spatial Anchors usa para determinar rápidamente los delimitadores que se encuentran a una distancia máxima de unos 100 metros del dispositivo.All collected sensor data contributes to maintaining a spatial index this is used by the Azure Spatial Anchors to quickly determine the anchors that are within approximately 100 meters of your device.

La búsqueda rápida de los delimitadores habilitados por la relocalización general simplifica el desarrollo de aplicaciones respaldadas por colecciones a escala mundial de, por ejemplo, millones de delimitadores distribuidos geográficamente.The fast look-up of anchors enabled by coarse relocalization simplifies the development of applications backed by world-scale collections of (say, millions of geo-distributed) anchors. La complejidad de la administración de delimitadores está oculta, lo que le permite concentrarse más en la increíble lógica de su aplicación.The complexity of anchor management is all hidden away, allowing you to focus more on your awesome application logic. Azure Spatial Anchors se encarga de que todo el trabajo pesado de delimitador se realice en segundo plano.All the anchor heavy-lifting is done for you behind the scenes by Azure Spatial Anchors.

Datos del sensor recopiladosCollected sensor data

Los datos de sensor que puede enviar al servicio de delimitador es uno de los siguientes:The sensor data you can send to the anchor service is one of the following:

  • Posición del GPS: latitud, longitud, altitud.GPS position: latitude, longitude, altitude.
  • Intensidad de la señal de puntos de acceso WiFi en el rango.Signal strength of WiFi access points in range.
  • Intensidad de la señal de las balizas Bluetooth en el rango.Signal strength of Bluetooth beacons in range.

En general, su aplicación tendrá que adquirir permisos específicos del dispositivo para acceder a los datos de GPS, WiFi o BLE.In general, your application will need to acquire device-specific permissions to access GPS, WiFi, or BLE data. Además, algunos de los datos de sensor anteriores no están disponibles por diseño en determinadas plataformas.Additionally, some of the sensor data above isn't available by design on certain platforms. Para tener en cuenta estas situaciones, la recopilación de datos del sensor es opcional y está desactivada de forma predeterminada.To account for these situations, the collection of sensor data is optional and is turned off by default.

Configurar la recopilación de datos del sensorSet up the sensor data collection

Comencemos por crear un proveedor de huellas digitales de sensor y hacer que la sesión sea consciente de ello:Let's start by creating a sensor fingerprint provider and making the session aware of it:

// Create the sensor fingerprint provider
sensorProvider = new PlatformLocationProvider();

// Create and configure the session
cloudSpatialAnchorSession = new CloudSpatialAnchorSession();

// Inform the session it can access sensor data from your provider
cloudSpatialAnchorSession.LocationProvider = sensorProvider;

A continuación, deberá decidir qué sensores desea usar para la relocalización general.Next, you'll need to decide which sensors you'd like to use for coarse relocalization. Esta decisión es específica de la aplicación que está desarrollando, pero las recomendaciones de la tabla siguiente deben proporcionarle un buen punto de partida:This decision is specific to the application you're developing, but the recommendations in the following table should give you a good starting point:

InterioresIndoors ExterioresOutdoors
GPSGPS OffOff PorOn
Wi-FiWiFi PorOn Activado (opcional)On (optional)
Las balizas de BLEBLE beacons Activado (opcional con advertencias, consulte a continuación)On (optional with caveats, see below) OffOff

Habilitar GPSEnabling GPS

Supongamos que la aplicación ya tiene permiso para acceder a la posición GPS del dispositivo, usted puede configurar los Spatial Anchors de Azure para usarlos:Assuming your application already has permission to access the device's GPS position, you can configure Azure Spatial Anchors to use it:

sensorProvider.Sensors.GeoLocationEnabled = true;

Al usar el GPS en la aplicación, tenga en cuenta que las lecturas proporcionadas por el hardware suelen ser:When using GPS in your application, keep in mind that the readings provided by the hardware are typically:

  • frecuencia asincrónica y baja (menos de 1 Hz).asynchronous and low frequency (less than 1 Hz).
  • no confiable/ruidoso (en promedio de la desviación estándar de 7-m).unreliable / noisy (on average 7-m standard deviation).

En general, tanto el sistema operativo del dispositivo como los Spatial Anchors de Azure realizarán algún filtrado y extrapolación en la señal GPS sin procesar en un intento de mitigar estos problemas.In general, both the device OS and Azure Spatial Anchors will do some filtering and extrapolation on the raw GPS signal in an attempt to mitigate these issues. Este procesamiento adicional requiere un tiempo adicional para la convergencia, por lo que para obtener mejores resultados debe intentar:This extra-processing requires additional time for convergence, so for best results you should try to:

  • Crear el proveedor de huellas digitales del sensor lo antes posible en su aplicación.create one sensor fingerprint provider as early as possible in your application
  • Mantener el proveedor de huellas digitales del sensor activo entre varias sesiones.keep the sensor fingerprint provider alive between multiple sessions
  • Compartir el proveedor de huellas digitales del sensor entre varias sesiones.share the sensor fingerprint provider between multiple sessions

Si tiene previsto usar el proveedor de huellas digitales del sensor fuera de una sesión de delimitador, asegúrese de iniciarlo antes de solicitar las estimaciones del sensor.If you plan to use the sensor fingerprint provider outside an anchor session, make sure you start it before requesting sensor estimates. Por ejemplo, el código siguiente se encargará de actualizar la posición del dispositivo en el mapa en tiempo real:For instance, the following code will take care of updating your device's position on the map in real time:

// Game about to start, start tracking the sensors
sensorProvider.Start();

// Game loop
while (m_isRunning)
{
    // Get the GPS estimate
    GeoLocation geoPose = sensorProvider.GetLocationEstimate();

    // Paint it on the map
    drawCircle(
        x: geoPose.Longitude,
        y: geoPose.Latitude,
        radius: geoPose.HorizontalError);
}

// Game ended, no need to track the sensors anymore
sensorProvider.Stop();

Habilitar WiFiEnabling WiFi

Supongamos que la aplicación ya tiene permiso para acceder al estado de WiFi del dispositivo, usted puede configurar los Spatial Anchors de Azure para usarlos:Assuming your application already has permission to access the device's WiFi state, you can configure Azure Spatial Anchors to use it:

sensorProvider.Sensors.WifiEnabled = true;

Al usar el WiFi en la aplicación, tenga en cuenta que las lecturas proporcionadas por el hardware suelen ser:When using WiFi in your application, keep in mind that the readings provided by the hardware are typically:

  • frecuencia asincrónica y baja (menos de 0.1 Hz).asynchronous and low frequency (less than 0.1 Hz).
  • posible limitación al nivel de sistema operativo.potentially throttled at the OS level.
  • no confiable/ruidoso (en promedio de la desviación estándar de 3-m).unreliable / noisy (on average 3-dBm standard deviation).

Los Spatial Anchors de Azure intentarán crear un mapa de intensidad de señal WiFi filtrado durante una sesión para intentar mitigar estos problemas.Azure Spatial Anchors will attempt to build a filtered WiFi signal strength map during a session in an attempt to mitigate these issues. Para obtener mejores resultados, debe intentar:For best results you should try to:

  • crear la sesión antes de colocar el primer delimitador.create the session well before placing the first anchor.
  • mantener la sesión activa lo máximo posible (es decir, cree todos los delimitadores y la consulta en una sesión).keep the session alive for as long as possible (that is, create all anchors and query in one session).

Habilite las balizas BluetoothEnabling Bluetooth beacons

Supongamos que la aplicación ya tiene permiso para acceder al estado de Bluetooth del dispositivo, usted puede configurar los Spatial Anchors de Azure para usarlos:Assuming your application already has permission to access the device's Bluetooth state, you can configure Azure Spatial Anchors to use it:

sensorProvider.Sensors.BluetoothEnabled = true;

Las balizas suelen ser dispositivos versátiles en los que se puede configurar todo, incluidos los UUID y las direcciones MAC.Beacons are typically versatile devices, where everything - including UUIDs and MAC addresses - can be configured. Esta flexibilidad puede ser problemática para Azure Spatial Anchors, que considera que las balizas se identifican de forma única por sus UUID.This flexibility can be problematic for Azure Spatial Anchors as it considers beacons to be uniquely identified by their UUIDs. Si no se garantiza esta singularidad, lo más probable es que se produzcan agujeros de gusano espaciales.Failing to ensure this uniqueness will most likely cause spatial wormholes. Para obtener mejores resultados, debe intentar:For best results you should:

  • Asignar UUID únicos a las balizas.assign unique UUIDs to your beacons.
  • implementarlos, normalmente en un patrón normal, como una cuadrícula.deploy them - typically in a regular pattern, such as a grid.
  • Pasar la lista de UUID de baliza única al proveedor de huellas digitales del sensor:pass the list of unique beacon UUIDs to the sensor fingerprint provider:
sensorProvider.Sensors.KnownBeaconProximityUuids = new[]
{
    "22e38f1a-c1b3-452b-b5ce-fdb0f39535c1",
    "a63819b9-8b7b-436d-88ec-ea5d8db2acb0",
    . . .
};

Azure Spatial Anchors solo realizará un seguimiento de las balizas Bluetooth que se encuentran en la lista de UUID conocidos de proximidad de las balizas.Azure Spatial Anchors will only track Bluetooth beacons that are in the known beacon proximity UUIDs list. Las balizas maliciosas programadas para tener UUID en la lista de permitidos aún pueden afectar negativamente a la calidad del servicio.Malicious beacons programmed to have allow-listed UUIDs can still negatively impact the quality of the service though. Por ese motivo, solo debe usar balizas en espacios seleccionados en los que pueda controlar su implementación.For that reason, you should use beacons only in curated spaces where you can control their deployment.

Consulta con datos de sensorQuerying with sensor data

Una vez que haya creado los delimitadores con los datos del sensor asociados, puede empezar a recuperarlos con las lecturas del sensor que el dispositivo ha proporcionado.Once you have created anchors with associated sensor data, you can start retrieving them using the sensor readings reported by your device. Ya no es necesario proporcionar el servicio con una lista de los anclajes conocidos que espera encontrar; en su lugar, simplemente deje que el servicio conozca la ubicación del dispositivo, tal y como lo notifican los sensores incorporados.You're no longer required to provide the service with a list of known anchors you're expecting to find - instead you just let the service know the location of your device as reported by its onboard sensors. Después, Azure Spatial Anchors descifrará el conjunto de delimitadores cerca del dispositivo e intentará relacionarlos visualmente.Azure Spatial Anchors will then figure out the set of anchors close to your device and attempt to visually match them.

Para que las consultas utilicen los datos del sensor, empiece por crear un criterio de proximidad de dispositivo:To have queries use the sensor data, start by creating "near device" criteria:

NearDeviceCriteria nearDeviceCriteria = new NearDeviceCriteria();

// Choose a maximum exploration distance between your device and the returned anchors
nearDeviceCriteria.DistanceInMeters = 5;

// Cap the number of anchors returned
nearDeviceCriteria.MaxResultCount = 25;

anchorLocateCriteria = new AnchorLocateCriteria();
anchorLocateCriteria.NearDevice = nearDeviceCriteria;

El parámetro DistanceInMeters controla hasta qué punto exploraremos el gráfico delimitador para recuperar el contenido.The DistanceInMeters parameter controls how far we'll explore the anchor graph to retrieve content. Supongamos, por ejemplo, que ha rellenado algún espacio con delimitadores a una densidad constante de 2 cada medidor.Assume for instance that you have populated some space with anchors at a constant density of 2 every meter. Además, la cámara del dispositivo está observando un solo delimitador y el servicio lo ha encontrado correctamente.Furthermore, the camera on your device is observing a single anchor and the service has successfully located it. Lo más probable es que esté interesado en recuperar todos los anclajes que haya colocado cerca en lugar del único delimitador que está observando actualmente.You're most likely interested in retrieving all the anchors you've placed nearby rather than the single anchor you're currently observing. Suponiendo que los delimitadores que ha colocado están conectados en un gráfico, el servicio puede recuperar todos los delimitadores cercanos automáticamente siguiendo los bordes del gráfico.Assuming the anchors you've placed are connected in a graph, the service can retrieve all the nearby anchors for you by following the edges in the graph. DistanceInMeters controla la cantidad de recorrido del gráfico realizado, se le darán todos los delimitadores conectados al que ha localizado, que están más cerca de DistanceInMeters.The amount of graph traversal done is controlled by DistanceInMeters; you'll be given all the anchors connected to the one you've located, that are closer than DistanceInMeters.

Tenga en cuenta que los valores grandes de MaxResultCount pueden afectar de manera negativa al rendimiento.Keep in mind that large values for MaxResultCount may negatively affect performance. Establézcalo en un valor razonable para su aplicación.Set it to a sensible value for your application.

Por último, debe indicar a la sesión que use la búsqueda basada en sensor:Finally, you'll need to tell the session to use the sensor-based look up:

cloudSpatialAnchorSession.CreateWatcher(anchorLocateCriteria);

Resultados esperadosExpected results

Los dispositivos GPS de nivel de consumidor suelen ser bastante imprecisos.Consumer-grade GPS devices are typically quite imprecise. Un estudio de Zandenbergen y Barbeau (2011) informa que la precisión media de los teléfonos móviles con GPS asistido (A-GPS) es de alrededor de 7 metros, ¡un valor bastante grande para ser ignorado!A study by Zandenbergen and Barbeau (2011) reports the median accuracy of mobile phones with assisted GPS (A-GPS) to be around 7 meters - quite a large value to be ignored! Para tener en cuenta estos errores de medición, el servicio trata los delimitadores como distribuciones de probabilidad en el espacio GPS.To account for these measurement errors, the service treats the anchors as probability distributions in GPS space. Como tal, un delimitador es ahora la región del espacio que más probablemente (es decir, con más del 95% de confianza) contiene su posición GPS verdadera y desconocida.As such, an anchor is now the region of space that most likely (that is, with more than 95% confidence) contains its true, unknown GPS position.

La misma razón se aplica cuando se consulta con GPS.The same reasoning is applied when querying with GPS. El dispositivo se representa como otra región de confianza espacial en torno a su verdadera posición GPS desconocida.The device is represented as another spatial confidence region around its true, unknown GPS position. Descubrir los delimitadores cercanos se traduce en simplemente encontrar los delimitadores con regiones de confianza lo suficientemente cercanas a la región de confianza del dispositivo, como se ilustra en la imagen siguiente:Discovering nearby anchors translates into simply finding the anchors with confidence regions close enough to the device's confidence region, as illustrated in the image below:

Selección de candidatos de delimitador con GPS

La precisión de la señal del GPS, tanto en la creación del delimitador como en las consultas, tiene una gran influencia sobre el conjunto de delimitadores devueltos.The accuracy of the GPS signal, both on anchor creation as well as during queries, has a large influence over the set of returned anchors. Por el contrario, las consultas basadas en WiFi o balizas considerarán todos los delimitadores que tienen al menos un punto de acceso o señalización en común con la consulta.In contrast, queries based on WiFi / beacons will consider all anchors that have at least one access point / beacon in common with the query. En ese sentido, el resultado de una consulta basada en WiFi o balizas está determinada principalmente por el intervalo físico de los puntos de acceso, las señalizaciones y los obstáculos ambientales.In that sense, the result of a query based on WiFi / beacons is mostly determined by the physical range of the access points / beacons, and environmental obstructions.

En la siguiente tabla se calcula el espacio de búsqueda esperado para cada tipo de sensor:The table below estimates the expected search space for each sensor type:

SensorSensor Radio del espacio de búsqueda (aproximado)Search space radius (approx.) DetallesDetails
GPSGPS 20 m - 30 m20 m - 30 m Determinado por la incertidumbre del GPS entre otros factores.Determined by the GPS uncertainty among other factors. Los números informados se estiman para la precisión media de GPS de los teléfonos móviles con A-GPS, que es de 7 metros.The reported numbers are estimated for the median GPS accuracy of mobile phones with A-GPS, that is 7 meters.
Wi-FiWiFi 50 m - 100 m50 m - 100 m Determinado por el intervalo de puntos de acceso inalámbrico.Determined by the range of the wireless access points. Depende de la frecuencia, la intensidad del transmisor, los obstáculos físicos, las interferencias, etc.Depends on the frequency, transmitter strength, physical obstructions, interference, and so on.
Las balizas de BLEBLE beacons 70 m70 m Determinado por el intervalo de la señalización.Determined by the range of the beacon. Depende de la frecuencia, la intensidad de transmisión, los obstáculos físicos, las interferencias, etc.Depends on the frequency, transmission strength, physical obstructions, interference, and so on.

Soporte por plataformaPer-platform support

En la tabla siguiente se resumen los datos de sensor recopilados en cada una de las plataformas admitidas, junto con las advertencias específicas de la plataforma:The following table summarizes the sensor data collected on each of the supported platforms, along with any platform-specific caveats:

HoloLensHoloLens AndroidAndroid iOSiOS
GPSGPS N/DN/A Compatible con las API LocationManager (tanto GPS como NETWORK)Supported through LocationManager APIs (both GPS and NETWORK) Compatible con las API CLLocationManagerSupported through CLLocationManager APIs
Wi-FiWiFi Compatible con una frecuencia de aproximadamente un escaneo cada 3 segundosSupported at a rate of approximately one scan every 3 seconds Compatible.Supported. Comenzando con el nivel 28 de API, los escaneos WiFi se aceleran a 4 llamadas cada 2 minutos.Starting with API level 28, WiFi scans are throttled to 4 calls every 2 minutes. Desde Android 10, la limitación se puede deshabilitar desde el menú de configuración del Desarrollador.From Android 10, the throttling can be disabled from the Developer settings menu. Para más información, consulte la documentación de Android.For more information, see the Android documentation. N/A: sin API públicaN/A - no public API
Las balizas de BLEBLE beacons Limitado a Eddystone y iBeaconLimited to Eddystone and iBeacon Limitado a Eddystone y iBeaconLimited to Eddystone and iBeacon Limitado a Eddystone y iBeaconLimited to Eddystone and iBeacon

Pasos siguientesNext steps

Use la relocalización general en una aplicación.Use coarse relocalization in an app.