DWM 1000 vs DWM 3000 (or other options)

I am trying to create a project which can actively track GoKarts running around in indoor track. I have Arduino/Teensy MCU’s which I can pair with the DWM 1000 or DWM 3000. In theory I would like to get accurate positioning every 100ms, or faster, from the sensors most likely mounted on the ceiling. The idea is to make a model of each kart actively updating in a Unity program

Do y’all forsee any future issues trying to get this to run? From what I am reading the DWM 3000 overall seems like an improved 1000 so I’m leaning towards that unit but are there any other techniques I should consider?

Thank you all for your time!

In terms of the two the DW1000 is more accessible (more open source drivers and better documentation). There are only two reasons to avoid it - 1) it doesn’t meet the regulatory requirements for some countries, the big one being Japan. 2) It only supports 4 GHz and 6.5 GHz, in some regions 5G phones are overlapping the 4 GHz band. Wifi 6E overlaps the 6.5 GHz band. The DW3000 drops 4 GHz and adds 8 GHz which is shorter range but has less interference issues.

While the DW3000 is probably a better choice for a new design it’s not an automatically better device. The lack of official open source drivers or the documentation required to write them is a big minus for the DW3000.

In terms of the basic idea have you worked out how you will do it?

How many carts at a time?

I’m going to assume minimal starting knowledge so apologies if a lot of this seems obvious:
There are two possible ways to calculate position - Two way Range (TWR) and Time Difference of Arrival (TDoA). Both require moving devices you want to measure (tags) and fixed devices in the building (anchors).

TWR - The tag sends a message to one or more anchors. The anchors each send a reply a known amount of time after receiving the tags message. The tag measures the time between it sending the signal and it receiving the anchors reply. That time minus the known delay added by the anchor gives you the time taken for the signal to travel. If you know the time you know the distance between the tag and the anchor.
Pros - Relatively simple. This is the method most open source (and arduino/teensy) libraries will use. Anchors are simple and only require power.
Cons - Slow (n+1 messages minimum per position when n is the number of anchors used). Each range is measured at a slightly different time which can be an issue when moving quickly. Position data is known at the tag (can be a pro but for you application is more of a con), you would need some means to get this data off the cart.

TDoA - The anchors are networked and time synchronised. The tag sends a single message. All the anchors timestamp the message and send this value to a central computer. By looking at the difference in the times you can work out how much closer the tag is from one anchor to the other. With sufficient anchors (4 or more) you can solve this to calculate the tag location.
Pros - Fast, a single message per tag. All ranges are measured at the same time so no issues with moving objects. Position calculation is done on a central server (good your your application but not all use cases)
Cons - That “time synchronised” anchors requirement. Either this requires syncing the DW devices clock to a common reference (I’m not talking NTP, I mean a sub-nanosecond accurate, phase locked clock), generally this means custom hardware, or you do this in software and constantly track the clock differences and rate of clock rate drift between each anchor. Position calculation is more complex (the intersection of hyperbolic splines rather than circles)

So with your application TDoA is technically a far better solution but unless there is an off the shelf TDoA library you can use (I’m not aware of one) then it will be a lot more complex to implement.
Using TWR to do this is certainly possible. You will probably need to play some tricks to get the update rate good enough, off the shelf code may not give you a good enough rate for faster moving carts. Most of the example code also doesn’t cope well with multiple tags, there is no fundamental issues using multiple tags you just need to make sure they don’t transmit at the same time. This adds a level of complexity that single tag examples don’t worry about.
You may want to look at ESP32 rather than Teensy so that you have the wifi for sending the position data back.

1 Like