DW1000 WRONG range when using 2 or above anchors and 1 tag

Hello everyone!

I start learning DW1000 chip, Arduino Uno and this lib https://github.com/thotro/arduino-dw1000 .

When using 1 Tag and 1 Anchor, measured range is quite correct, but when using 1 Tag and 2 Anchor, only first Anchor that Tag connected shows correct range, second Anchor shows very wrong range: measured range = real range - x (x is very huge). So sometimes, if second Anchor is near the Tag, measured range will be negative. If I shutdown 1 of 2 active anchor, the remaining anchor show correct range.

Arduino Code

I am using example tag code, anchor code of above lib (https://github.com/thotro/arduino-dw1000 )

  • DW1000Ranging_ANCHOR
  • DW1000Ranging_TAG

For each anchor, I set with different address.

Pin Connection

Arduino Uno DWM1000
5V VDDAON+VDD3V3
GND VSS
10 CS
11 MOSI
12 MISO
13 CLK
9 RST
2 IRQ

Processes that I log when using 2 anchor, 1 tag (no mention to BLINK, RANGING_INIT message)

  • Tag send POLL message (broadcast).
  • 2 Anchor receives POLL message and send POLL_ACK message back.
  • Tag receive 2 POLL_ACK message from 2 anchor and then send RANGE message (Broadcast)
  • 2 Anchor receives POLL_ACK and compute range then send RANGE_REPORT message back to the tag.

Each anchor have its own relay delay (anchor 1: 7000us, anchor 2: 21000us). This is process that i log in the tag

Send Poll: Broadcast
Set timePollSent
_networkDevicesNumber: 2
Recieve: 1300
Receive POLL_ACK
Set timePollAckReceived
Recieve: 1320
Receive POLL_ACK
Set timePollAckReceived
Send Range: Broadcast
Set timeRangeSent
_networkDevicesNumber: 2
Recieve: 1300
Recieve RANGE_REPORT
82-130: 0.24
Recieve: 1320
Recieve RANGE_REPORT
84-132: -0.92

Note
82 - 130 - 1300: Anchor 1 short address
84 - 132 - 1320: Anchor 2 short address

Maybe i need connect some more DW1000 pin, but i’m not sure because 1 anchor and 1 tag working fine.
Does anyone face this issue? Please help me, thanks all.

The DW1000 library does have some bugs in the ranging code that I have not been able to track down, as they are intermittent. I just ignore nonsensical values.

For localization and ranging with 3 or 4 anchors, try the MakerFabs modules: GitHub - jremington/UWB-Indoor-Localization_Arduino: Open source Indoor localization using Arduino and ESP32_UWB tags + anchors

I am using your lib but i have the same issue with thotro's lib that i describe above.

I found 1 problem:

  • Do you know what DEFAULT_REPLY_DELAY_TIME (in DW1000Ranging.h file) means in deeply ?
  • When i decrease DEFAULT_REPLY_DELAY_TIME, the range increases quite a lot (+50 -> +2m compare to real range), so i try increasing DEFAULT_REPLY_DELAY_TIME, the range, however decreases significantly (-50 -> -2m compare to real range).

DEFAULT_REPLY_DELAY_TIME is inversely proportional to range, isn't it?

Any assumed delays are cumulative, of course. The most important delay to calibrate is ANTENNA_DELAY, which I do empirically.

Since I get range values that are correct to +/- 10 cm most of the time, that works as well as one can expect.

This topic was automatically closed 180 days after the last reply. New replies are no longer allowed.