Repository for decawave related code
Decawave is a low-power Ultra-wideband (UWB) IC chip which enables both accurate measurement of time and data communications to occur simultaneously.
The 3D position estimation is based on Time-Difference of Arrival (TDOA) algorithms. In it, a set of Decawave chips placed at known static locations, which we will call Anchors, send messages at known time intervals. Each object that wants to be located has a Decawave chip continuously listening for messages from the anchors. We will refer the chips on the tracked objects as Tags.
Since we compute the time-difference between two anchor messages, we theoretically need a minimum of 4 anchors to track an object in 3D space. However, it is recommended to add extras to increase redundancy and minimize errors. In our lab setup we run the code on 8 anchors.
Since each robots is passively listening to the anchors, we can add infinitely many tags to the system without affecting the position rate.
As mentioned above, to run the system one needs at least 4 Decawave chips acting as anchors, and 1 Decawave chip for each robot. The firmware code on this repository was written for the TREK1000 evaluation kit, but can be ported for almost any microprocessor.
Due to limitations on TDOA algorithms, the estimator only works reliably inside the convex hull generated by the anchor placement. For example, in a system with 8 anchors, the optimal position of each antenna is in the top and bottom corners of a room or building.
- ./ROS/cyphyhouse
Cyphyhouse ROS superproject. Includes the decaNode, used to track robots indoor.
- ./TREK_TAG
Includes the code that runs on each tag (i.e. on each robot).
Each tag sends a serial message containing the TDOA timestamp and the number of the two reference anchors.
- ./TREK_TDOA
Includes the code running on each anchor.
Supports up to 8 anchors sending messages every ~2ms. This can be easily changed to support additional anchors at a faster rate, but needs to be tested.