Skip to main content

Method for Determining Positioning Validity

You can comprehensively determine whether current UWB positioning is reliable based on the following data, and filter or switch to other positioning methods as needed:

  • pos: Current tag coordinates
  • pos_noise: Current tag coordinate noise, which roughly reflects the relationship between the tag and the beacon area involved in positioning. The farther from the center of the area, the greater the value.
  • anchor_info:
    • addr: Beacon ID
    • rx_rssi: Received signal strength of the beacon
    • rx_rate: Packet reception rate of the beacon signal

For convenience, 'internal' below refers to areas covered by beacons, and 'external' refers to areas not covered by beacons.

pos

With correct deployment, when actually inside, the positioning result will never be outside. If the result is outside, the actual position is either outside or in a poorly covered 'internal' area, and can be filtered out.

pos_noise

For most scenarios without 3D positioning areas, only the x and y components of pos_noise need to be considered. Typically, within the area, you can use the following criteria to determine if positioning is valid:

pos_noise_x > 2 && pos_noise_y > 2

You can adjust the threshold as needed in practice, but note that too small a value may filter out normal positioning results.

anchor_info

When inside, the tag can stably receive signals from surrounding beacons (note: signals arrive in batches; if there are multiple positioning areas around the tag, each positioning data may be from one area), and both signal strength and packet reception rate should be high. The opposite is true when outside.

Signal strength is related to distance, and algorithms may not be universally applicable, but in some scenarios, using signal strength can more stably determine inside/outside—consider using as appropriate.

Packet reception rate has some delay, which may affect switching real-time performance, but it does not depend on distance or device and is generally applicable. You can use the following method:

Store the last n (e.g., 8) positioning results in a sliding window, calculate the median of anchor_info.rx_rate for these n results, and the median should be greater than a threshold (e.g., 60%).