2016-04-04 28 views
9

Wiem, że istnieje wiele pytań na temat stackoverflow związanych z moim pytaniem, ale chciałbym wiedzieć, czy jest jakiś sposób, aby uzyskać dokładną odległość od RSSI.Obliczanie odległości z RSSI BLE android

Śledziłem this link i niektóre inne git library methods for distance calculation, a także ten tutorial. Ale nie mogę uzyskać poprawnego rozwiązania.

To co używam do pomiaru odległości:

protected double calculateDistance(float txPower, double rssi) { 

    if (rssi == 0) { 
     return -1.0; // if we cannot determine distance, 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; 
    } 
} 

Kiedy wywołanie tej metody Mijam standard i RSSI co mam dostać od mojego mLeScanCallBack()

private BluetoothAdapter.LeScanCallback mLeScanCallback = 
     new BluetoothAdapter.LeScanCallback() { 

      @Override 
      public void onLeScan(final BluetoothDevice device, final int rssi, final byte[] scanRecord) { 
       runOnUiThread(new Runnable() { 

        @Override 
        public void run() { 

         BluetoothDeviceModel bluetoothDeviceModel = new BluetoothDeviceModel(device, rssi); 

         mLeDeviceListAdapter.addDevice(bluetoothDeviceModel, rssi, bluetoothDeviceModel.device.getAddress()); 
         mLeDeviceListAdapter.notifyDataSetChanged(); 

         if (mapBluetooth != null) { 
          mapBluetooth.put(bluetoothDeviceModel.getDevice().getAddress(), bluetoothDeviceModel); 
          mLeDeviceListAdapter.refresh(mapBluetooth); 
         } 
        } 
       }); 
      } 
     }; 

Z jakim problemem mam do czynienia?

Nie ma nic złego w powyższym kodzie. Daje mi odległość, ale nie jestem z tego zadowolony, ponieważ nie jest to właściwa odległość. Czy ktoś może mi powiedzieć, czy możliwe jest uzyskanie dokładnej odległości za pomocą powyższej metody lub w inny sposób?

+1

Jestem w takiej samej sytuacji jak ty, sygnały RSSI nie są idealne, ponieważ na środowisko istnieje wiele czynników, zniekształcają one sygnały jako magnetyzm i inne czynniki wpływające na sygnały. Istnieje kilka filtrów, które usuwają sygnały szumu jako "Filtr Kalmana" lub "Filtr Cząstek", ale nie znalazłem sposobu na zastosowanie go, gdy masz szereg sygnałów RSSI, jeśli znajdziesz sposób, proszę mi powiedzieć! –

+0

czy otrzymałeś jakieś rozwiązanie? – Araf

+0

Nikt nie przeprasza, dopóki nie otrzymałem dokładnego rozwiązania dla tego obliczenia. –

Odpowiedz

1

Pracuję również nad tym samym. Dzięki tej metodzie możesz obliczyć odległość, ale odległość zmienia się często. Dzieje się tak, ponieważ wartość RSSI również często się zmienia.

Co trzeba zrobić, aby wygładzić swój wynik i za to trzeba zastosować filtr Kalmana lub (liniową estymację kwadratowego). Jeśli chcesz trzymać się filtra kalmana, zacznij od tego miejsca. Beacon Tracking

Nadal szukam lepszej implementacji Filtra Kalmana dla mojego projektu. Alternatywnie, można wygładzić się swoją wartość RSSI

h = * + (1 -) * -1

jest ostatnia wartość i -1 jest wartością średnią aż poprzednia.

waha się od 0 do 1 [rozważyć = 0,75]

Źródło: - RSSI Smoothing