Locating a user around a pool table


I am a student working on a project where one of the goals is to locate a user’s position navigating around a pool table within a provided coordinate system. So far, my attempt was to use BLE and three iBeacons that I purchased and read RSSI values from an ESP32, transmit them via WiFi to a computer and then compute the distance from the computer itself. However, for the following possible reasons the results are quite off:

  • Either the RSSI values vary way too much to be any way accurate even though I’m doing a bit of smoothing on them
  • I don’t have the right value for n (the path loss value I believe)
  • My trilateration algorithm is completely wrong. The distances to beacon I’m getting are fairly consistent, but I’m getting negative values for instance even while being positioned between the three beacons

I can dive deeper into my attempt if needed. My big question would be if there would be any recommendations or alternative to this. I’m not sure I can use the Estimote Indoor Location aid for the project, but if possible, would it work within the 7foot by 3.5foot dimensions of a table (or slightly more than that considering human distance to table), and is there a way to read and use the computed x,y locations on a computer for follow up applications? (referring to this video: Estimote Indoor Location - YouTube)

If not any other solution/recommendation? Thank you!

Hi there! This is Jess from Team Estimote.

Because of the relatively small size of a pool table, the only way to do what you’re describing is to use hundreds of of BLE beacons and RSSI measurement which would be really complex OR to use UWB beacons. (Learn more about our UWB beacons here!)

Let me know if you have any further questions!

Hey Jess,

Thank you for the reply. I was looking into getting the UWB Development Kit. My only concern is that I need a way to send the localization to a computer via wifi for instance from the phone. Would I be able to modify the ios SDK or use the API to do that? How flexible is Estimote UWB app to modifications for the sake of a class project? Or is there a way to only get the barebones of it and get the localization easily?

Hi there,

You could not modify the UWB app because it is not open source, but would absolutely be able to do that by building your own app using our SDK.



I’m currently trying to work around the UWB SDK. Is there any more documentation on how to use the classes. It seems like a lot of the initialization features for those are hidden, and I can only open EstimoteUWB and not the Swift or Private files for that.

Is there anyone I can reach out to. All my email attempts have not been answered in the last 2 weeks.

there is not a lot of useful doc that matches the sdk… but there are only 4 methods.

  • CloudCredentials() – connect to estimote cloud (using appid and token from cloud app def)
  • InitObserver() – create an instance of an observer on those credentials
  • initProximityZone() – define the zones you want to monitor (tags and range)
  • startObserving() – enable the engine to process beacons against the zones you defined.

I haven’t found a stopObserving() yet
an example is listed in the readme.md for the sdk on github , see

the example only examines the attachments of the zone detected beacons (for enter and exit), but the zonecontext object also has the tag(s) associated… wish we could assign an arbitrary identifier,
so I could stream all the events to a common handler.

you can create multiple zones, and then pass them all into the startObserving(), which takes an array of zone (I call them handles) , consider setting up the same tags at different distances (range) , so u could know your distance transition… not useful for pool table exercise, but other cases…

i created an interface for my app runtime (Ionic/Vue) in less than a week, working part time. (and using two new tools at once)

have a couple sdk issues (opened on github) …

I use visual Studio as my editor and it sees the SDK methods and types.


Thank you for the reply. However, I’m working with the UWB beacons instead of the Proximity Beacons. Do you by any chance know how to use those ones ?

I am using the UWB beacons too. this is the sdk I was told to use.

That’s odd. I was given a completely different link to a google drive that contained the SDK or part of it and a sample app.

Is this the kit you have: Estimote UWB Beacons

yes, the three beacons.

the indoor SDK is archived, last updated in 2017…

so that’s not it

the kit says clone the estimote UWB SDK, but that doesn’t exist

and the sample code on the box cover doesn’t match anything.

maybe it’s private and I havent been given access?

oh that thing… gotta go find that again…

Were you given access to something like this

I’m going to try the steps from your link as well, the SDK from the one I just uploaded just felt very incomplete and impossible to use.

i see that I didn’t pay attention to the sdk email, my fault…

just about got the correct one working with my runtime… one build problem to go…

but its a lot more primitive

you have three different callbacks

discovery (really enter/exit type )
ranging (bluetooth) distance
positioning (vector I’m hoping)

the ‘details’ aren’t clear, as these last two callbacks only get one object, the UWBDevice, so hopefully there should be info in there

I haven’t been able to build anything with it yet… getting linkage errors…

Would you mind sharing what you have so far. The best I’ve been able to do is use their sample UWB Class that scans the beacons and prints out the addresses and RSSI. Haven’t been able to use any other part of the code from the image I sent out if that’s what you were referring to.

i can’t even get that far… the app project file is no good for xcode 13 and 14. (invalid format)

if I build my own project and copy the files in add the xcframework, then the app builds, but crashes on load on the phone…

if I split the xcframework and use just the arm64 framework (iphone 12) then I get no such module EstimoteUWB.

ok, finally have the runtime and my app working, but I don’t see any positioning or ranging events.

I get discover and connect for the two devices in range

Discovered Device: 15e5f049b621351ede966b7c0f12cc29 rssi: -60
- "disover device= <EstimoteUWB.PeripheralAdapter: 0x2835d0d80>"
Discovered Device: 8ff093967378b3839d6298212516b53e rssi: -63
- "disover device= <EstimoteUWB.PeripheralAdapter: 0x2835c8f00>"
Successfully Connected to: 15e5f049b621351ede966b7c0f12cc29
- "connect device= <EstimoteUWB.PeripheralAdapter: 0x2835d0d80>"
Successfully Connected to: 8ff093967378b3839d6298212516b53e
- "connect device= <EstimoteUWB.PeripheralAdapter: 0x2835c8f00>"
Discovered Device: 8ff093967378b3839d6298212516b53e rssi: -72
- "disover device= <EstimoteUWB.PeripheralAdapter: 0x2835c9680>"
Discovered Device: 18d0039c6d8cbf4b5feddc4b652db228 rssi: -96
- "disover device= <EstimoteUWB.PeripheralAdapter: 0x2835ccb00>"
Discovered Device: 15e5f049b621351ede966b7c0f12cc29 rssi: -61
- "disover device= <EstimoteUWB.PeripheralAdapter: 0x2835cd400>"
Successfully Connected to: 15e5f049b621351ede966b7c0f12cc29
- "connect device= <EstimoteUWB.PeripheralAdapter: 0x2835cd400>"
Successfully Connected to: 8ff093967378b3839d6298212516b53e
- "connect device= <EstimoteUWB.PeripheralAdapter: 0x2835c9680>"
Discovered Device: 15e5f049b621351ede966b7c0f12cc29 rssi: -58
- "disover device= <EstimoteUWB.PeripheralAdapter: 0x2835cc880>"

do I have to do some beacon config somewhere?

yes, all I am seeing is discover and connect

have the events streaming up to my app now… how to get vector and distance. rssi is worthless.
can start/stop scanning… don’t see anything else in the sdk

but I fixed that… the app needs the nearby permissions added to the Info.plist.
having NO Info.plist the app will prompt for ALL permissions needed,
but having AN Info.plist you will only get what it asked for, nothing more

Privacy - Nearby Interaction Usage Description