AoX Positioning User Guide

This user guide will guide the reader on how to install, configure and run the Positioning IoT Service.

Readers of this document should be familiar with the AoXPC, because the position estimation service is based on the angle data provided by the AoXPC instances.

Operation

The positioning service starts automatically as a systemd service. For more information on installation and systemd services, see Unify Framework User guide.

The service detects the locators connected to the system automatically. Locators need to be configured as described in the AoXPC User Guide. The locator configuration is considered valid if the PositionAndOrientationValid attribute is set to true.

Once a locator is configured, there is no way to exclude it from the position estimation. Only one positioning service is supported per MQTT broker.

Asset tags are presented as individual nodes on the MQTT network by the positioning service. The estimated position of the asset tag is presented as an AoXPositionEstimation cluster attribute, as follows.

ucl/by-unid/<TAG_UNID>/ep0/AoXPositionEstimation/Attributes/Position/Reported - {
  "value": {
    "ApplicationId": "positioning_4154",
    "DeviationX": 3.1297969818115234,
    "DeviationY": 0.6999226212501526,
    "DeviationZ": 3.8446271419525146,
    "Sequence": 47021,
    "X": 0.8519021272659302,
    "Y": 0.000349800189724192,
    "Z": 0.8335742950439453
  }
}

Position Estimation with One Locator

The positioning service allows to estimate position even with one locator. To achieve this, RSSI based distance estimation is used. If the received signal strength of the incoming signal is altered for any other reason than the distance between the TX and RX itself, it will lead to incorrect distance measurement and it will lead to incorrect position estimates.

Therefore, using multiple locators is advised for accurate position estimation.

Configuration

The positioning service can be configured with the same JSON config file as the AoXPC. The path of the config file can be specified with the --positioning.config CLI option.

These are the configuration parameters that are relevant for the positioning service, with their default values:

{
  "id":"positioning_<PID>",
  "estimationModeLocation":"SL_RTL_LOC_ESTIMATION_MODE_THREE_DIM_HIGH_ACCURACY",
  "validationModeLocation":"SL_RTL_LOC_MEASUREMENT_VALIDATION_MEDIUM",
  "estimationIntervalSec":0.02,
  "locationFiltering":true,
  "locationFilteringWeight":0.1,
  "numberOfSequenceIds":6,
  "maximumSequenceIdDiffs":20,
}

Let’s see these parameters in detail.

id

This parameter controls the ApplicationId field of the Position attribute. The default value is derived from the process ID. It can be replaced with any string.

estimationModeLocation

Estimation mode used by the position estimation algorithm.

For more details, see sl_rtl_loc_set_mode.

validationModeLocation

The positioning service implements an angle correction mechanism for a deviating locator whose angle reports are far off the expected one, and thus is not pointing to the same direction where all other locators see the tag. The correction feedback provides the locator with the information in which direction it is supposed to see the tag. This helps locators that locked up on a reflection signal which is stronger than the one coming in the line-of sight direction.

The validationModeLocation parameter determines the sensitivity of the angle correction mechanism.

For more details, see sl_rtl_loc_set_measurement_validation.

estimationIntervalSec

Estimation interval in seconds. This value should approximate the time interval between two consecutive CTEs received from an asset tag.

For more details, see sl_rtl_loc_process.

locationFiltering, locationFilteringWeight

An optional filter can be applied on the position coordinates, X, Y and Z to reduce noise. Filter weight ranges from 0 to 1.

For more details, see sl_rtl_util_filter.

numberOfSequenceIds, maximumSequenceIdDiffs

The CTE signals can be identified by their sequence ID which is a monotonic increasing number. When the positioning service receives an angle report estimated from that CTE, it knows

  • the transmitter of the CTE (asset tag)

  • the receiver of the CTE (locator)

  • the sequence ID of the CTE.

Ideally, a CTE signal is processed by all of the locators in the AoA system, so the positioning service simply has to wait for all angle reports from all locators with a given sequence ID. Once all angle reports have arrived, the positioning can start the position estimation. But what happens if a CTE is missed by a locator, or a locator is temporarily unavailable?

The angle_queue component is responsible for collecting the angle reports that belong to the same CTE (i.e., have the same sequence ID) and go on with position estimation even under suboptimal conditions. numberOfSequenceIds and maximumSequenceIdDiffs can be used to tweak the behavior of the angle_queue component.

The numberOfSequenceIds tells how many sequence IDs shall be tracked maximum for a given asset tag. If numberOfSequenceIds is exceeded, the angle reports with the oldest sequence ID are deleted. This parameter also determines the number of angle reports the positioning has to wait for before starting the position estimation. The expected angle count depends on the “age” of the sequence ID in a linear way. This means, Only 2 angle reports are expected for the oldest sequence ID, for the newest sequence ID all locators are expected to send an angle report. In the following example, we have 7 locators, numberOfSequenceIds is 6.

Slot 0 1 2 3 4 5
Sequence ID 101 102 103 104 105 106
Angles expected 2 3 4 5 6 7

maximumSequenceIdDiffs sets another limit on the sequence IDs. If the sequence ID difference between the oldest and the newest angle report exceeds this limit, then the angle reports with the oldest sequence ID are deleted.