In android how to improve stability of multipe beacon detection?.i am using the Gimbal beacons for indoor positioning.Is the BLE is suitable for Indoor location data access?
How to improve stability and accuracy of data using Gimbal beacon device for indoor positioning?
1.2k views Asked by JellyBean At
2
There are 2 answers
0
On
In my opinion, the answer is: Yes, BLE is suitable for indoor localization.
I would recommend using a low pass filter to smooth out the distance/signal strength readings. I can think of 2 ways to do this:
- Simple: running average. Just average the last 3/10/30 readings. See what works best.
Or:
More complex but more configurable: RC filter. The algorithm hoes like this:
// FOR EACH new reading from the BLE do this: // fc = cutoff frequency [Hz]; i.e.: // how frequent do you want to detect the BLE coming and parting from the receptor // this depends on the range and speed of people (see table below) var real fc := 0.21 // <-- configure this! // a constant [-], also pi = 3.1415 var real RC := 1 / (2*pi + fc) // <-- OR configure this from the table below! // dt = time between two consecutive readings [s] var real dt := 1 // <-- might need updating at each reading ! // a constant var real α := dt / (RC + dt) //the current estimate of the distance that is based on: // the current reading x[i] and the previous estimate y[i-1] y[i] := α * x[i] + (1-α) * y[i-1] // <-- result !!!!
I have computed a table for the RC
(constant); in my opinion it depends on the range of the BLE because if a man walks in that range in and out, the frequency of going in and out is higher if the distance is smaller. Try these 5 values and see what/if it works for you:
Max distance we look at [m], RC (constant)
:RC
1: 0.212212849
,
3: 0.636638548
,
10: 2.122128495
,
30: 6.366385485
,
60: 12.73277097
Good luck
I have worked on this extensively as I've placed beacons in a hallway full of conference rooms, all within close proximity.
First, I recommend placing the beacons on the ceiling. The signal should be broadcasting at a downward angle. This reduces interference quite a bit. Keep in mind this may not be the solution for every room but in my situation with rooms close to each other this helped significantly.
Next, be sure to use a good option for signal smoothing. The Gimbal SDK works on the concept of arrivals and departures. These events will only be fired if the signal is within a certain threshold. The signal smoothing will prevent situations where one beacon has a reported signal of -56 and then jumps the next second to -75. It uses an averaging algorithm which smooths the signals to prevent such a huge reported gap. This prevents false arrivals and departures due to huge spikes in reported signals.
Finally, tweak your arrival and departure signals, signal smoothing options, and beacon placement to find what works. There unfortunately isn't a one-sized fits all solution and you'll have to perform continuous site surveys to ensure your tweaks worked the way intended.
If you want to know more about the Gimbal SDK with Proximity for Android I have written a deep dive on the subject. You can view that article here. However, if you are using the latest SDK from Gimbal they have updated their API and dropped the VisitManager. Thus my article is only relevant for their SDK up to v1.33. I'll be writing a new article on their updated SDK in the future, which I'm actively working with now.