I have an application I need help to develop a solution for either an Arduino or STM32 platform for DMW1000 module (Or better still, the DWM1001 module)
The requirement is as follows:
There can be 0 to up to 8 nodes an area at any given time
No Anchors will be used
All of the 8 nodes must determine range between themselves and other 7 nodes within 300ms
Low power is not required
The number of transactions can be reduced if 2-way ranging is used instead of SSR so in the 300ms period the nodes need to only range with other nodes that have not yet been communicated with in that time frame.
If it’s one node at a time it seems like a fairly simple process:
A new node powers up. It sends a broadcast asking who is out there.
All active nodes send a reply after a delay. The delay used is based on the unit ID so that no two units talk on top of each other.
The new node then performs two way ranging to each ID that sent a reply.
Doing that with up to 8 other active notes in under 300 ms shouldn’t be an issue at all, that gives you plenty of time.
If it’s all nodes wake up at the same time then it gets a bit more interesting.
I’ll ignore the issue of how you make them all start at the same time.
8 nodes = 28 ranges to measure if you want everyone to everyone.
So if you already know which nodes to use (or there are only 8 possible nodes so you can try to range to all of them) then that gives 10 ms per range, again plenty of time.
Each unit would have to know roughly when it was it’s turn to start measuring ranges and who was before it in the list, that way even allowing for small clock differences you can avoid multiple active nodes at the same time but still cope with missing ones.
If you have up to 8 nodes from a larger pool then you would need to do a scan to find out who was out there which could eat up a lot of your time budget. It should still be possible but you’ll have to be a little more careful on how you time things.
The nodes are not coordinated so there is no control over when they attempt to range.
Seems the Decawave modules are very limited in the applications you can use them. They only seem to be useful in a fixed network with known ID and a coordinator (your location apps) and even then there are limitations on the distance, number of nodes and reliability issues. I have seen posts where many people are getting short range form the DWM1001 and issues with drop outs, and they appear to need line of sight to perform well. The documentation for SWM1001 states you can do ranging between a Tag and single anchor but when I asked how you get the range only (no location info) between DWM1001 nodes, no-one could tell me. Except Deca technical support said you have to have at least 3 anchors (even though I do not need location, I just want distance).
Basically, I have several projects where one requires many to many nodes without preset ID, another can use pre-set ID for a small ad-hoc network and another is for a couple of Tags to single anchors for distance measurement only.
I did buy the DWM1001 eval kit and set up 4 anchors in open space, 2m off ground and 7m apart. Even with a single Tag I had spots inside the perimeter where the Tag detection dropped out for long periods of time. As I could not get it reliable over 7m in this environment, I am anxious to look at applications needing 35m between anchors.
It really is a shame because based on the documentation, the technology looks like it could solve several problems but I cannot get any of them going properly.
If the hardware has the capabilities you want but the Decawave software doesn’t work for what you are trying to do then the solution is obvious. Don’t use their software.
I’ve used DWM1000 modules connected to ARM processors to do a point to point ranging system. There isn’t a single line of Decawave supplied software anywhere in the system. It didn’t do what I wanted so I didn’t use it.
I took the DW1000.cpp from here: https://os.mbed.com/users/manumaet/code/DecaWave/ and modified it to meet my needs based on the information in the DM1000 user manual.
But the two way ranging code in that library didn’t do what I wanted so I then wrote my own two way ranging system using packet structures that I defined to contain the information I needed.
And then I wrote an application that used the ranging system to display the measurements I wanted.
If you are having range issues look at the radio configuration you are using, e.g. channel, preamble length, PRF, data rate etc…
And also look at your antennas, the orientation and what is close to them can have huge impacts on usable ranges.