Compreendendo o distanciamento ibeacon

113

Tentar compreender um conceito básico de como o distanciamento com ibeacon (beacon / Bluetooth-lowenergy / BLE) pode funcionar. Existe alguma documentação verdadeira sobre até que ponto exatamente um ibeacon pode medir. Digamos que estou a 300 pés de distância ... é possível para um ibeacon detectar isso?

Especificamente para v4 e. v5 e com iOS, mas geralmente qualquer dispositivo BLE.

Como a frequência e a taxa de transferência do Bluetooth afetam isso? Os dispositivos de beacon podem aumentar ou restringir a distância / melhorar a BLE subjacente?

ie

               | Range       | Freq       | T/sec      | Topo       |      
               |–—–––––––––––|–—––––––––––|–—––––––––––|–—––––––––––|
Bluetooth v2.1 | Up to 100 m | < 2.481ghz | < 2.1mbit  | scatternet |
               |-------------|------------|------------|------------|
Bluetooth v4   |     ?       | < 2.481ghz | < 305kbit  | mesh       |
               |-------------|------------|------------|------------|
Bluetooth v5   |     ?       | < 2.481ghz | < 1306kbit | mesh       |
Rambossa
fonte

Respostas:

223

A estimativa de distância fornecida pelo iOS é baseada na proporção da força do sinal do farol (rssi) sobre a potência do transmissor calibrado (txPower). O txPower é a força do sinal medida conhecida em rssi a 1 metro de distância. Cada beacon deve ser calibrado com este valor txPower para permitir estimativas de distâncias precisas.

Embora as estimativas de distância sejam úteis, elas não são perfeitas e exigem que você controle outras variáveis. Certifique-se de ler sobre as complexidades e limitações antes de fazer mau uso disso.

Quando estávamos construindo a biblioteca iBeacon do Android, tivemos que criar nosso próprio algoritmo independente porque o código-fonte CoreLocation do iOS não está disponível. Medimos várias medições rssi em distâncias conhecidas e, em seguida, fizemos uma curva de melhor ajuste para corresponder aos nossos pontos de dados. O algoritmo que criamos é mostrado abaixo como código Java.

Observe que o termo "precisão" aqui é a linguagem iOS para distância em metros. Esta fórmula não é perfeita, mas se aproxima aproximadamente do que o iOS faz.

protected static double calculateAccuracy(int txPower, double rssi) {
  if (rssi == 0) {
    return -1.0; // if we cannot determine accuracy, return -1.
  }

  double ratio = rssi*1.0/txPower;
  if (ratio < 1.0) {
    return Math.pow(ratio,10);
  }
  else {
    double accuracy =  (0.89976)*Math.pow(ratio,7.7095) + 0.111;    
    return accuracy;
  }
}   

Nota: Os valores 0,89976, 7,7095 e 0,111 são as três constantes calculadas ao resolver para uma curva de melhor ajuste para nossos pontos de dados medidos. YMMV

davidgyoung
fonte
4
Ótima resposta e código David. De onde vem o valor txPower? É um valor de calibração feito no lado do cliente (recebedor)? Ou é uma métrica que você pode obter de um farol?
rmooney
14
para que servem os valores de 0,89976, 7,7095 e 0,111?
malhal
4
Com essa equação, acabo com 84457991114.574738 quando o beacon está em 1/4 do meu telefone.
jdog de
1
Eddystone é um ponto de referência de 0 m, anos. A divisão vs. subtração ocorre porque não estamos usando uma função logarítmica neste caso. A subtração não funcionou para o ajuste de curva que usamos.
davidgyoung
1
@davidgyoung, você pode compartilhar a melhor fórmula de ajuste de curva ou qualquer coisa através da qual possamos encontrar esses 3 valores para o nosso dispositivo?
Paresh Mayani
77

Estou investigando a fundo a questão de precisão / rssi / proximidade com iBeacons e realmente acho que todos os recursos na Internet (blogs, posts no StackOverflow) estão errados.

davidgyoung (resposta aceita,> 100 votos positivos) diz:

Observe que o termo "precisão" aqui é a linguagem iOS para distância em metros.

Na verdade, a maioria das pessoas diz isso, mas eu não tenho ideia do porquê! A documentação deixa muito claro que CLBeacon.proximity:

Indica a precisão horizontal de um sigma em metros. Use esta propriedade para diferenciar entre beacons com o mesmo valor de proximidade. Não o use para identificar um local preciso para o farol. Os valores de precisão podem flutuar devido à interferência de RF.

Deixe-me repetir: precisão de um sigma em metros . Todas as 10 principais páginas do google sobre o assunto têm o termo "um sigma" apenas na citação de documentos, mas nenhuma delas analisa o termo, que é fundamental para entender isso.

Muito importante é explicar o que é realmente a precisão de um sigma . Seguintes URLs para começar: http://en.wikipedia.org/wiki/Standard_error , http://en.wikipedia.org/wiki/Uncertainty

No mundo físico, quando você faz alguma medição, você sempre obtém resultados diferentes (por causa de ruído, distorção, etc) e muitas vezes resultados da distribuição gaussiana. Existem dois parâmetros principais que descrevem a curva gaussiana:

  1. média (que é fácil de entender, é o valor para o qual ocorre o pico da curva).
  2. desvio padrão, que indica o quão larga ou estreita é a curva. Quanto mais estreita a curva, melhor é a precisão, porque todos os resultados são próximos uns dos outros. Se a curva for ampla e não íngreme, isso significa que as medições do mesmo fenômeno diferem muito umas das outras, então a medição tem uma qualidade ruim.

um sigma é outra maneira de descrever quão estreita / larga é a curva gaussiana.
Ele simplesmente diz que se a média da medição for X e um sigma for σ, então 68% de todas as medições estarão entre X - σe X + σ.

Exemplo. Medimos a distância e obtemos uma distribuição gaussiana como resultado. A média é 10m. Se σ é 4m, significa que 68% das medições ocorreram entre 6m e 14m.

Quando medimos a distância com beacons, obtemos RSSI e o valor de calibração de 1 metro, que nos permite medir a distância em metros. Mas cada medição fornece valores diferentes, que formam a curva gaussiana. E um sigma (e precisão) é a precisão da medição, não a distância!

Pode ser enganoso, porque quando movemos o farol para mais longe, um sigma na verdade aumenta porque o sinal é pior. Mas com diferentes níveis de potência do farol, podemos obter valores de precisão totalmente diferentes sem realmente alterar a distância. Quanto maior a potência, menos erros.

Há uma postagem de blog que analisa completamente o assunto: http://blog.shinetech.com/2014/02/17/the-beacon-experiments-low-energy-bluetooth-devices-in-action/

O autor tem a hipótese de que precisão é realmente distância. Ele afirma que os beacons do Kontakt.io estão com defeito porque quando ele aumentou a potência para o valor máximo, o valor de precisão era muito pequeno para 1, 5 e até 15 metros. Antes de aumentar a potência, a precisão estava bem próxima dos valores de distância. Eu pessoalmente acho que está correto, pois quanto maior o nível de potência, menor o impacto da interferência. E é estranho porque os faróis Estimote não se comportam dessa forma.

Não estou dizendo que estou 100% certo, mas além de ser desenvolvedor iOS, tenho graduação em eletrônica sem fio e acho que não devemos ignorar o termo "um sigma" dos documentos e gostaria de começar uma discussão sobre isso.

Pode ser possível que o algoritmo de precisão da Apple apenas colete medições recentes e analise a distribuição gaussiana delas. E é assim que define a precisão. Eu não excluiria a possibilidade de que eles usem o acelerômetro do formulário de informações para detectar se o usuário está se movendo (e com que rapidez) para redefinir os valores de distância de distribuição anteriores porque eles certamente mudaram.

Andrzej Dąbrowski
fonte
Excelente introdução à correlação "sigma". Também seria estranho para um geek (até mesmo um geek da Apple) usar o nome de variável "precisão" quando eles significam "distância". Cada determinação de "distância" ou "localização" RSSI vem com uma "margem de erro" (por exemplo, você está aqui +/- isso). Portanto, faz sentido que sua biblioteca tenha uma função para "distância" e uma função para "precisão".
Jesse Chisholm
@ r00dY uma explicação brilhante, devo dizer. Agora, só uma pergunta se você pode ajudar. Tenho dados de calibração para o farol medidos a 1m, 2m ... 15m, ... 20m e assim por diante. Tenho os valores médios de distância para cada distância. Agora, do delegado do gerente de localização, quando obtemos dados de beacon como beacon maior, menor, rssi, etc., é aconselhável usar a distância obtida na calibração acima que expliquei? Por favor, sugira, qualquer ajuda seria apreciada. Desde já, obrigado.
Alkesh Fudani
O da Apple accuracyé uma função de ambos rssie tx power. Não é totalmente impossível que Estimote decidiu fazer a engenharia reversa da accuracyfunção e começou a fornecer tx powervalores tais que a leitura accuracyestima a distância. Isso fornece uma experiência de desenvolvedor mais simples para estimar a distância, mas quebra a definição da Apple de accuracy. Outras marcas podem permanecer mais fiéis à definição da Apple de accuracye realmente fornecer uma "estimativa de 1 metro" em vez de um valor de engenharia reversa que faz a accuracyestimativa da distância.
Senseful
63

A potência de saída do iBeacon é medida (calibrada) a uma distância de 1 metro. Vamos supor que seja -59 dBm (apenas um exemplo). O iBeacon incluirá este número como parte de seu anúncio LE.

O dispositivo de escuta (iPhone, etc) medirá o RSSI do dispositivo. Suponhamos, por exemplo, que isso seja, digamos, -72 dBm.

Como esses números estão em dBm, a proporção da potência é na verdade a diferença em dB. Assim:

ratio_dB = txCalibratedPower - RSSI

Para converter isso em uma proporção linear, usamos a fórmula padrão para dB:

ratio_linear = 10 ^ (ratio_dB / 10)

Se assumirmos a conservação de energia, a intensidade do sinal deve cair para 1 / r ^ 2. Assim:

power = power_at_1_meter / r^2. Resolvendo para r, obtemos:

r = sqrt(ratio_linear)

Em Javascript, o código ficaria assim:

function getRange(txCalibratedPower, rssi) {
    var ratio_db = txCalibratedPower - rssi;
    var ratio_linear = Math.pow(10, ratio_db / 10);

    var r = Math.sqrt(ratio_linear);
    return r;
}

Observe que, se você estiver dentro de um edifício de aço, talvez haja reflexos internos que fazem o sinal decair mais lentamente do que 1 / r ^ 2. Se o sinal passar por um corpo humano (água), o sinal será atenuado. É muito provável que a antena não tenha ganho igual em todas as direções. Objetos de metal na sala podem criar padrões de interferência estranhos. Etc, etc ... YMMV.

Mark Fassler
fonte
por curiosidade: como ratio_dB = txCalibratedPower - RSSIfunciona? Como ambas as medidas estão em dBm, eu presumiria que o resultado também estivesse em dBm.
BlackWolf
3

As distâncias até a fonte de pacotes de anúncios formatados por iBeacon são estimadas partir da atenuação do caminho do sinal calculada comparando a intensidade do sinal recebido medida com a potência de transmissão reivindicada que o transmissor deve codificar nos dados de publicidade.

Um esquema baseado em perda de caminho como este é apenas aproximado e está sujeito a variações com coisas como ângulos da antena, objetos intermediários e, presumivelmente, um ambiente de RF ruidoso. Em comparação, os sistemas realmente projetados para medição de distância (GPS, Radar, etc) contam com medidas precisas do tempo de propagação, em alguns casos até examinando a fase do sinal.

Como Jiaru aponta, 160 pés provavelmente está além do alcance pretendido, mas isso não significa necessariamente que um pacote nunca passará , apenas que não se deve esperar que funcione a essa distância.

Chris Stratton
fonte
1

É possível, mas depende da potência de saída do farol que você está recebendo, outras fontes de RF próximas, obstáculos e outros fatores ambientais. A melhor coisa a fazer é experimentar no ambiente de seu interesse.

danh
fonte
1

Com vários telefones e beacons no mesmo local, será difícil medir a proximidade com qualquer alto grau de precisão. Tente usar o aplicativo Android "le bluetooth le scanner" para visualizar as variações de intensidade do sinal (distância) para vários beacons e você descobrirá rapidamente que algoritmos complexos e adaptáveis ​​podem ser necessários para fornecer qualquer forma de medição de proximidade consistente .

Você verá muitas soluções simplesmente instruindo o usuário "por favor, segure seu telefone aqui", para reduzir a frustração do cliente.

BlueSpectrumz
fonte