Lot of interruption and breaks in RTLS

Hi ,

I am trying to do locate tags with Decwave MDEK 1001, Following is the video of the tracking as viewed on the application .

Video with 200 ms update rate for tag-

Video with 100 ms update rate for tag -

Accuracy of the location is really impressive , however for many seconds , tag position is not displayed and several seconds there is break .

Can you please help to resolve this issue .

Following are the details -

  1. Location is work place , where the desks are 1.2 mts high and the walls are made of glass with supporting pillars .Couple of pillars in middle within the area of anchors .
  2. Anchor positions in terms of (x,y,z)
    Initiator - (0,0,1.9)
    anchor1 - (20,3.75,1.9)
    anchor 2 - (12.75, 35.5,1.3)
    anchor 3 - (2.0 , 26.5,1.22)

All anchors are UWB active and are in LOS.

tag settings -
UWB active , responsive mode ENABLED , location engine ENABLED , stationary detection DISABLED
Update rate 100ms and 200 ms changed .

Some questions -

  1. what could be the problem as I am getting interrupt in location tracking .
  2. Does the location tracking works only if the tag can detect signal from 3 different anchors ?
  3. Interaction between tags and anchors is with UWB , which as per documentation has range of 60 mts , With the setup I am having distance between anchors / anchors and tag is much lesser . Could this be a problem ?
  4. I believe the calculation of location is done on the mobile application , Is there any option of sending the data to cloud for later analysis.

For my experiment , I got very good accuracy , kudos to decawave team for the great product. Hope the issues are resolved so that I can move forward.

Thanks in advance

Regards,
cshivash

Hi [color=#333333]cshivash,[/color]

Some answers to your questions :

  1. I’d say the problem is the BLE connection between the tag and the phone. In order to verify that you can either connect the tag to a computer and observe coordinates over UART interface. You should have many more samples than the phone is showing. You can also use a passive tag (“listener”) in your network. It may have a better BLE connection with the phone, will receive location data from the tag over UWB and send it to the phone over BLE. (The listener and the phone should always be fairly close to respect BLE range. )

  2. In order to get a location, the tag has to range to at least 3 anchors. Otherwise, it has only 2 range and does not send location to the listener or to the android device (as trilateration is not possible with only two ranges)

  3. The range of 60m is a maximum range. Using the kit with a much smaller range should not be an issue at all, as long as it is still reasonable relatively to the accuracy (10cm)

  4. The calculation of location is actually done on the tag itself.

Let me know how it goes,
Thanks
Best regards
Yves

Hi Yves,

Thanks for your reply.

  1. Generally I keep the tag along with mobile , so when moving tag and mobile are literally 30-60 cms away from each other .
    I will explore cordinates observation over UART interface and update .
  2. ok
  3. One more observation is , when I put one of the anchor bit higher , towards the ceiling , I got better results . There were less breaks and location was being showed much more frequently .
    Is it a mandatory requirement for tag to have line of sight with at least 3 anchors to get the location ?
    How does the real time location tracking work in places where line of sight is not easy to get , example - library where the racks are very tall and closely placed .
  4. ok

Hi civash,

Ok, if moving the anchors improve the result indeed it may be a LOS issue.

The tag needs to range to at least 3 anchors to be able to calculate a position. If it can’t due to line of sight disruption, then the system will not report the position. So yes, it is mandatory to have LOS to at least 3 anchors.

In order to make sure you have the best LOS conditions, we would recommend to keep the anchors high up. Depending on the physical setup of the building, you may need to add more anchors to improve the coverage. Typically the case if you have very tall racks for example.

Thank you,
Best rgeards
Yves

Hi Vyes,

As suggested I moved the anchors bit high up to increase the LOS and I could observe better results .

I also started exploring UART to capture data and put it to DB to do analyze data and derive heat maps .
Initially I was getting the results and I was observing more readings .

  1. What is the minimum quality factor which I should get to consider reading good enough .

  2. I am getting issues in UART now , I followed the document as mentioned in the user manual “https://www.decawave.com/sites/default/files/mdek1001_system_user_manual.pdf
    Changed the baud rate to 115200 , Pressed return twice , command “nmt” then return twice and command “les” .
    Earlier I was getting constant reading but now there is no output from les , other commands lec , lep is also not giving anything .
    Am I missing something here .
    Where is the csv file stored for command lec .
    I have attached screen shot for reference .

[color=#333333][size=small]Hi [/size][/color][color=#333333][size=small]cshivash,[/size][/color]

[color=#333333][size=small]Good to see your results got improved. [/size][/color]

[color=#333333][size=small]1. I would say than any quality factor below 51 is not great. In good LOS conditions, I’d expect to have quality factor above 50 for most of the exchange. If not, you can assume the tag is not really in LOS condition. In order to improve it you could maybe increase the anchor density with one more anchor. [/size][/color]

[color=#333333][size=small]2. Regarding the UART and the fact les is not working, can you try the command “la” to see if the tag can see the anchors ? Also, if it still doesn’t work, can you please send the log for the command “si.”[/size][/color]

[color=#333333][size=small]3. The “lec” command outputs data in the csv format but does not save it to a file. You have to record the output of the uart to a file by yourself. It can be done with putty or with a python program for example.[/size][/color]

[color=#333333][size=small]Thank you,[/size][/color]
Regards
Yves

Hi Yves,

It was issue with anchor visibility , I was under the impression that “les” command waits indefinitely till signals from anchor is received .
Once I was at a place to receive signals from anchors , I started getting output.

I have attached the output of lec command .
One thing I noticed is , I was standing at same place with a tag and moving the tag a few cms , there is wide variation in terms of receiving signal. Quality factor varied from 0 to 100 and sometimes there was no signal received from one or two anchors even when tag was stationary .
I am wondering how this will work in ware house or library where the racks or made from metal / wood , are there any work around or solutions other than adding anchors .

If I want to do RTLS for some 100 tags in a big area of 100,000 sqmts having huge metal or wood racks , can this system support it ?
a. in terms of handling large numbers of anchors and tags simultaneously
b. signal quality

Thanks again for your assistance , will update more with results.

Regards,
Chetan

Hi Chetan,

Ok good to see there is improvement.

When you have moved the tag by a few centimeters and lost connection to the anchors, are you sure the tag was in LOS conditions with the tags ? Was someone in the way ?

The quality factor is also impacted by the accuracy of the anchors coordinates so makes sure they are as accurate as possible.

The scalability of the network is explained in the document below, section 7:

The system capacity depends on the network topology. If you have clusters of anchors which don’t share the same physical location, you can have 15 tags per cluster with the highest update rate. If you reduce the update rate, the number of tags can be increased to 150 per cluster, and even more with lower update rate. So it’s a tradeoff.

In order to improve signal quality and to cover a large area, the best solution is to increase the the number of anchors.

I guess you should take incremental steps to see if MDEK is suitable for your setup. In a medium sized network works in the same physical environment, then we can assume it should scale and works for a larger area if the environment is similar. Is it difficult to give a final answer as it really depends on the environment and results will never be exactly the same.

Thank you,
Regards
Yves

I’m having similar issues, but currently working in a cluttered area so it could be causing LOS. The weird thing is the positions of the anchors are being reported, as are the distances from the tag but I get no report of tag final tag position. Occasionally I’ll see le_us=X est[x,y,z,q] reported but not all the time. This seems to lead to the appearing/disappearing of the tag position in the app, and not Bluetooth signal loss?

Hi Yves,

When I moved the tag was in LOS , however couple of us were monitoring the app for movement . I do not know if anyone of us have come in between tag and anchor .
Next question is , how practical is it to implement the locating system in warehouse or a place where lot of people move around and there will be several factors for attenuating the signal.
Quality factor depends on the site , number of tags but can we do any tweakings to mae this more reliable .
I went through DW1000 documentation and it is claimed that range is 290 mts , so will that give better results ?

Network scalability document is excellent , I will go through in detail and come back .

As mentioned earlier , I am trying to read data from UART .
In tera term , readings are coming well.
I am trying to read the data in python program and dump it to a DB and getting issues .

Program -

import serial

ser = serial.Serial(
port=‘COM3’,
baudrate=115200,
parity=serial.PARITY_NONE,
stopbits=serial.STOPBITS_ONE,
bytesize=serial.EIGHTBITS,
timeout=0.5
)
output=ser.write(‘lec’.encode(‘utf-8’))
while True:
command = ser.readline()
print(command)

Output I am getting is -
b’@\x01\x01’
b’’
b’’
b’’
b’’
b’’
b’’

I am not familiar with serial data handling , I tried to remove lec command execution and decode command output but all of them giving similar results .
Can you please help as I am unable to find developer doc .

Intention is to read the data from serial port and push the data to a DB like mongo DB or mysql.
If there is an existing program which does the same ,i would love to have it .
Next plan after getting the data to DB is to derive heatmaps and run anlaytics tools.

Hi Chetan,

We have the same problem on how to log the data on the database. I have my own plan, and I want it to share to you and let me hear your opinion. I am using Tera Term also and my plan to store the locations in the database are the following:

  1. Set the Tera Term to automatically log the location to a specific .txt file (Notepad file).
  2. Write a php code that will retrieve the data from the .txt file then explode the coordinates and store the data on the database.
  3. For every 5 minutes (our preferred time interval), our cron job will run on the background that executes the php code.
  4. From that, we will create a grid that will serve as the GUI that has search function to identify the location for a specific time.

This is our whole game plan for the RTLS to retrieve the data. We are currently using php as our standard programming language.

Let me here your opinion about our plan Chetan and Yves. Hope this will help you too.

Thank you in advance. :slight_smile:

Hi ymca,

Tats a good idea as well , but I am pretty sure lot of people would have been looking for something which puts data to DB or atleast read it programmatically.

Have requested Yves to share the programs which will benefit everyone . Meanwhile I can use your idea.

Regards,
Chetan

Hi,

Tried few things and figured that there were couple of issues

  1. Have to put delay of atleast 1-2 secs after carriage return
  2. nmt command sometimes doesnt complete or return even after waiting for a minute , so direct lec or les command should do .

Snippet

import serial
import time

ser = serial.Serial(
port=‘COM3’,
baudrate=115200,
timeout=0.5
)
ser.write("\r\r".encode(“utf-8”))
time.sleep(4)
#ser.write(“nmt”.encode(“utf-8”))
#ser.write("\r\r".encode(“utf-8”))
#time.sleep(10)
output=ser.write(“lec”.encode(“utf-8”))
ser.write("\r\r".encode(“utf-8”))
time.sleep(2)

while True:
command = ser.readline()
print(command)