Infrastructure-less Peer-to-peer networks


I am trying to find the best way to implement a ranging scheme where each node (4 in total) wants to find its distance to every other peer node as part of solving its relative position.

Exactly as described in the DW1000 user manual

However, the user manual does not reveal any details about what might be the best way in order to accomplish such a task.

Decawave, can you please provide more details about these different schemes and the derivation of the associated formulas?

Or has another person already implemented such a scheme and is willing to share their code or concept?

I’m not from Decawave, but I can say that they have very good documentation, here are pdf names I assume you know where to find them otherwise you can ask

  • DWM1001 System Overview and Performance.pdf : 4.6 Operation of a Tag
  • DWM1001-API-Guide.pdf
  • APS013_The-Implementation-of-Two-Way-Ranging-with-the-DW1000_v2.3.pdf
  • APS010_DW1000-and-Wireless-Sensor-Networks_v1.1.pdf
  • APS003_DW1000-RTLS-Introduction_v1.1.pdf

Decawave offers a ready to use PANS but not the source code. And they offer a simple example for pair ranging.
The only thing Decawave do not provide is a TDMA for positioning a node within many anchors.

I have developed an open source code to do that, I’ve been posting it all around in this forum, you can just google “uwb meshposition” if you don’t find it, or if you have any question let me know.


I looked at your project.

It looks like we are talking about two different things.

I am searching for the smartest way of measuring the distance of EACH device to EVERY other device.

Can you tell me which of your projects you think performs such an operation ?

Best regards

You’re probably right, what I’m suggesting is simply the multiple double sided TWR that results in high air traffic.

You’d have to adapt the twr code to make it asymmetric, some refer to it as elliptical ranging.

What is your main motivation is it reducing air traffic or minimising battery consumption ?

I’m intersted to adapt my code in the future to minimise battery consumption of the tag.

In the meanwhile using the “asymmetric” keyword yields a number of similar topics


The picture below shows what I am interested in:

If I would use the most simple approach which is single sided two way ranging then this would result in 6 ranging exchanges which is equal to 12 UWB frames ( 2 uwb frames for each ranging exchange).

I am only asking because I thought someone here in this forum has done something similar in a smarter way.

By using the same message as multi purpose, respond one transaction and initiate another, you can drop the TWR from 12 packets to 6 as follows

  1. A - bcast → B, C, D
  2. B -bcast → response A + initiate B-D
  3. C -bcast → response A + initiate C-D
  4. D → response A
  5. D → response B
  6. D → response C

but now good luck with collecting the ranges as you still might need them in one place.

You could knock out the last messages by doing:

  1. A - bcast → B, C, D
  2. B -bcast → response A + initiate B to C&D
  3. C -bcast → response A & B + initiate C-D
  4. D → response A, B & C

But this only gives you a single sided range for each device. To get two way ranges for each device you need more messages.
A TWR requires 3 or 4 messages (1) a->b, 2) b->a, 3) a->b 4) b->a data packet with results) so to combine this we do:

  1. A transmit acts as AB1, AC1, AD1
  2. B transmit acts as BC1, BD1, AB2
  3. C transmit acts as CD1, AC2, BC2
  4. D transmit acta as AD2, BD2, CD2
  5. A transmit acts as AB3, AC3, AD3 and results data from unit A to others.
  6. B transmit acts as BC3, BD3 and results data from unit B to others.
  7. C transmit acts as CD3 and results data from unit C to others.
  8. D transmits results to others.

At this point all units have all of the information to calculate all of the ranges.

Personally I didn’t need this type of functionality very frequently and had optimised the 4 packet point to point two way range system so that it takes 1.25 ms so rather than implement a second completely different measurement method I opted for the simple but slow method of doing lots of point to point ranges. It keeps the radio side of things constant no matter how many devices are involved, all the extra complexity is done outside of the radio logic.

@AndyA I am not quite sure what you mean.

Single Sided Two Way Ranging only requires 2 Frames.

Double Sided Two Way Ranging requires more frames but because of the increased air traffic this is not an option for me.

I was simply going by the decawave app note that the number of packets for TWR using point to point is ranges order n^2 but for a highly asymmetric system you can do it in 2n packets.
If you don’t mind it being single sided then it only requires n packets.

It depends on the accuracy you want however given the inaccuracies in single sided ranging, especially with the levels of delay involved in such a system, I would have thought that a double sided system would be worth the extra time. Unless you don’t mind massive errors the performance benefits will normally more than compensate for the longer time and higher power requirements.