The zone 3 by 3 meters. within this area you need to track the location of the tag. The tag is made in the form of a puck. The puck moves on the floor with a hockey stick. In the first photo, a system without a person inside the zone.
In the second photo, a man is between the tag and one of the anchors. In this case, the location is not determined correctly. The problem is the obstruction between the tag and the anchor. Will this problem be solved if I use larger antennas?
Using larger antennas probably won’t help. The direct line of sight is blocked and one of your anchors is picking up a far longer reflection path, treating it is a direct signal and as a result you get an incorrect location.
Nothing is a perfect block, a small amount of the direct signal will be getting through. If you had larger / higher gain antennas then there is a chance that the signal would be boosted enough to detect the direct path signal. But people are basically big sacks of water and water is very good at blocking radio signals, the chances are that you’re not going to be able to get enough extra gain this way to get around the problem. And higher gain antennas are by their very nature more directional which introduces other problems.
The simple solution is to raise the anchors so that they can see over the person. This may or may not be practical.
Other options are:
- Directly detect when a signal path is blocked (either by a quality metric such as signal strength or direct signal power Vs total signal power) and don’t use that measurement in position calculation.
- Indirectly detect a blockage by looking for a sudden jump in range/position or by using more than the minimum number of anchors and looking for ranges that don’t fit the data well. Errors will (almost) always result in longer ranges not shorter ones being measured.
- Over-determine the solution and so minimize the effect of a single range measurement error (e.g. use 6 or more anchors and a least squares position calculation)
Each solution has its pros and cons. It is of course possible to use a combination of all 3 of these methods.
You have 3 unknowns you need to find, the tag X,Y and Z values. So you should only need 3 range measurements in order to calculate them.
Any 3 range measurements will result in exactly two possible tag positions (one above the anchors, one below). Normally you can work out which of these it correct with some common sense.
In an ideal world if you added a 4th measurement (and assuming you don’t have all 4 anchors in a single plane) it would exactly match one of those two positions and so remove any ambiguity as to the position.
But this is the real world where all of the measurements will have some error in them and so this won’t be the case. There will be no perfect solution, any position you come up with won’t match at least one of your range measurements.
The decawave positioning software gets around this problem by simply ignoring the 4th measurement and only using 3. This is simple to understand and fast to calculate but prone to errors like you are seeing.
A far better but more complex approach is to try and find a solution that best matches all of the measurements. One of the standard ways of doing this is a least squares regression, a mathematical technique to find the solution that best fits noisy data. It finds the position where the sum of the squares of the range errors is at a minimum. This is the way GPS receivers have traditionally calculated their locations.
This has several big advantages, firstly it allows you to effectively average the range errors across multiple anchors. Secondly it allows you to use as many range measurements as you like in your position calculation, the more the better. And finally it gives you a quality measurement as to how self consistent the measurements were so you have an estimate of your position error.
There are standard libraries out there for calculating a least squares solution, numpy has one as standard and there are versions in c and most other languages available if you google.
Most of the examples out there will be for line fitting, finding a line of best fit to some data points is the most common use of this method, but it can always be adapted for position calculation.
The other technique that you can use is a Kalman Filter. This is a more complex technique requiring more processing time that gives an optimal output based on noisy inputs. GPS systems are moving to this technique. It will give a smoother result but requires knowledge of the errors in each input, if you don’t know when an anchor is being blocked you may not be able to supply that information. It also takes history into account and so when something goes wrong it can stay wrong for a while.