5

Utilizzando Kontakt SDK, ho implementato una semplice applicazione per monitorare ed estendere i beacon Kontakt nella mia area. Ho notato che la distanza segnalata dei beacon rilevati fluttua pesantemente (ad esempio, il beacon è veramente a 10m ma torna indietro di 2m e potrebbe saltare in distanza in modo abbastanza significativo), anche se il segnale non è così lontano. Ho esaminato la documentazione e ho giocato con tutte le diverse variabili sul lato hardware del beacon (potenza/frequenza tx), sul lato SDK (modalità di scansione e relativo) e provato più dispositivi - nulla sembra migliorare la precisione. Mi chiedo solo se qualcuno potrebbe essere in grado di indicarmi la giusta direzione su quale potrebbe essere il problema.Kontakt Beacons: risultati incoerenti e inattendibili quando si determina la distanza del beacon

So che un segnale di segnale può variare in modo significativo in base a molti fattori dell'ambiente e dell'hardware del dispositivo ricevente stesso; ma, ho perso la possibilità di creare un'esperienza utente basata su un'accurata prossimità ai beacon, quando non sembra essere un modo per ottenere informazioni sulla distanza coerenti?

Qualsiasi tipo di guida, input o suggerimento sarebbe molto apprezzato. Grazie.

risposta

1

Alcuni consigli:

  • impostare le vostre aspettative correttamente. Le stime delle distanze con i beacon sono solo stime. Sono altamente suscettibili a riflessi, ostruzioni, disturbi radio e antenne ricevitore diverse su diversi modelli di telefono. Quest'ultimo è un problema particolare sui dispositivi Android.

  • Impostare la potenza del trasmettitore più alta possibile per massimizzare il rapporto segnale/rumore.

  • Calibrare il beacon per il nuovo livello di potenza del trasmettitore.

  • Impostare la frequenza di annuncio più alta possibile (10 Hz o più è la migliore) per fornire quanti più campioni statistici di RSSI possibile. Questo dà stime di distanza meno variabili.

  • Assicurarsi che il beacon non sia in modalità collegabile. Quando è possibile connettersi, alcuni dispositivi Android possono solo leggere un campione per ciclo di scansione, in genere una volta al secondo.

  • Provate un'app scanner per scaffali come Locate per verificare se fornisce stime migliori. Se lo fa, puoi provare a utilizzare l'open source Android Beacon Library su cui è basato.

Potrai ancora vedere la variazione e le inesattezze dopo aver fatto tutte queste cose, ma sarà massimizzare i risultati che sono possibili. Le stime delle distanze sono molto utili per determinare quale faro è il più vicino quando più sono visibili. Sono meno utili per misurare la distanza assoluta.

2

In aggiunta a ciò che davidgyoung ha già detto: BLE non è attualmente un modo promettente per misurare le distanze. Anche solo saltando frequentemente la distanza calcolata salta circa 2-3 volte la distanza reale quando si usano dati grezzi. Vedere il mio Q & A qui: Bluetooth-Low-Energy RSSI changes periodically on Android devices

Dipende dalle vostre esigenze: volete che l'utente si fermi senza spostare o ruotare il dispositivo fino a un minuto?Inoltre, l'utente può evitare ostacoli in movimento, fonti Wi-Fi nelle vicinanze o altre interferenze? Anche la temperatura del dispositivo ha un ruolo. Quindi puoi ottenere valori abbastanza stabili prendendo la mediana o la media. Un'altra buona opzione sarebbe un filtro di Kalman. Da quel utilizzando il modello log-normale-shadowing è possibile calcolare la distanza:

d=d0*10^((RSSI0-RSSI)/10n) 

La distanza D è in metri, n è 2 nello spazio libero e più grande 2 in condizioni reali. Deve essere calibrato per ogni ambiente. RSSI0 è ​​il valore RSSI misurato alla distanza d0.

Se l'utente deve spostarsi, dimenticarsi della distanza. Questa è almeno la mia conclusione dopo aver trascorso settimane su quell'argomento.

5

Se si sta implementando in Android si affronta questo pesante problema di fluttuazione a causa dell'assenza dell'algoritmo di riduzione del rumore in Android. Ma lo stesso si può controllare in IOS ed i risultati sono molto migliori perché IOS supporta la riduzione del rumore. Ora ci sono 3 cose che puoi fare in base al valore RSSI/Distanza ricevuto dal beacon -

a) Implementare l'algoritmo di riduzione del rumore da solo per la tua app. (Suggerisco che sia difficile.)

b) Implementare il filtro gaussiano per i valori che si ricevono. Quello che voglio dire è memorizzare tutti i valori RSSI/distanza che ricevi dal beacon in un array e ogni 10 valori, ordinarlo in ordine crescente, escludere 3 valori minimi e 3 valori massimi e per i restanti 4 valori calcolare la media e il valore medio sarebbe il tuo valore finale (Questa è una soluzione semplice e affidabile.)

c) Implementare il filtro Kalman per i valori che si ricevono. Questo è il miglior filtro disponibile fino alla data. Tuttavia è molto difficile da attuare rispetto al filtro gaussiano, ma i risultati di questo filtro sono i migliori.

È possibile scegliere qualsiasi soluzione dall'alto :)

Problemi correlati