User Tools

Site Tools


doc:lps:tdoa3:protocol

Differences

This shows you the differences between two versions of the page.

Link to this comparison view

Both sides previous revision Previous revision
Next revision
Previous revision
Last revision Both sides next revision
doc:lps:tdoa3:protocol [2018-05-02 13:45]
kristoffer
doc:lps:tdoa3:protocol [2019-09-05 14:45]
kimberly
Line 1: Line 1:
-====== TDoA Anchor protocol V3 (experimental) ====== 
  
-<WRAP center round tip 80%> +<WRAP center round important 60%> 
-**NOTE**+This page is deprecated and is moved to the main Bitcraze website. Please go to:
  
-This is work in progressThe specifications on this page may change at any time without backwards compatibility+ [[ 
 +https://www.bitcraze.io/docs/lps-node-firmware/master/tdoa3_protocol/ 
 +]]
  
 </WRAP> </WRAP>
  
-This page describes the [[doc:lps:tdoa3|TDoA]] anchor protocol V3.+====== TDoA Anchor protocol V3 ======
  
-===== System architecture =====+===== Design goals =====
  
-The protocol is designed to be used with a large number of anchors covering a big area. Each anchor has a limited reach and covers only a small area, but by adding more anchors the system will be able to cover an (virtually) unlimited area. At any point in the covered area, 5-10 anchors should be within range of a Tag. +The protocol is designed to be used with a large number of anchors covering a big area. Each anchor has a limited reach and covers only a small area, but by adding more anchors the system can cover an (virtually) unlimited area. At any point in the covered area, 5-10 anchors should be within range of a Tag. 
  
 Each anchor knows its own position in a global coordinate system and broadcasts this information in time stamped packets that are used by one or more Tags to estimate their position. Each anchor knows its own position in a global coordinate system and broadcasts this information in time stamped packets that are used by one or more Tags to estimate their position.
Line 20: Line 21:
 ===== Packet scheduling ===== ===== Packet scheduling =====
  
-Packets are transmitted at random times and collisions are handled by the system.+Packets are transmitted at random times and collisions are handled by the receiving party.
  
 ===== Packet format ===== ===== Packet format =====
  
-There is only one packet format. +<ditaa> 
 +                    +--------+--------------------+----------+ 
 +Packet    :         | Header | Remote anchor data | LPP data | 
 +                    +--------+--------------------+----------+
  
-<code c+                                  7 bytes 
-typedef struct { +                     <-------------------------------------------
-    uint8_t id;            // The id of the remote anchor +                      8 bits   8 bits     32 bits       8 bits 
-    uint8_t seq;           // Sequence number of latest packet received from the remote anchor +                     <------> <------> <-----------> <-----------> 
-    uint16_t distance;     // Time of flight between the current anchor and the remote anchor in radio timer ticks +                    +--------+--------+-------------+-------------+ 
-    uint32_t rxTimeStamp;  // Receive time stamp of latest packet from the remote anchor +Header    :          type  |  seq   | txTimeStamp | remoteCount | 
-} __attribute__((packed)) remoteAnchorData_t;+                    +--------+--------+-------------+-------------+
  
-typedef struct { +  
-  uint8_t type;            // 0x30 +                                            6 or 8 bytes 
-  uint8_t seq;             // The sequence number of this packet +                     <----------------------------------------------------------> 
-  uint32_t txTimeStamp;    /Transmission time of this packet+                      8 bits      1 bit      7 bits     32 bits     0 or 16 bits 
 +                     <------> <-----------> <------> <-----------> <------------> 
 +                    +--------+-------------+--------+-------------+--------------+ 
 +Remote anchor data: |   id   | hasDistance |  seq   | rxTimeStamp |   distance   | 
 +                    +--------+-------------+--------+-------------+--------------+                                                             
 +</ditaa>
  
-  uint8_t remoteCount;     // The number of slots in the following section that are populated with data +  * **Header** 
-  remoteAnchorData_t remoteData[LOCODECK_NR_OF_TDOA3_ANCHORS]; +    * **type:** 0x30 
-} __attribute__((packed)) rangePacket3_t; +    * **seq:** the sequence number of this packet 0 - 127 
-</code>+    * **txTimeStamp:** transmission time of this packet 
 +    * **remoteCount:** the number of slots in the Remote Anchor Data section that are populated with data, max 8 
 +  * **Remote anchor data** 
 +    * **id:** the id of the remote anchor 
 +    * **hasDistance:** 1 = distance data is included in the remote anchor data, total length is 8 bytes, otherwise it is 6 bytes. 
 +    * **seq:** sequence number of latest packet received from the remote anchor 0 - 127 
 +    * **rxTimeStamp:** receive time stamp of latest packet from the remote anchor 
 +    * **distance:** time of flight between the current anchor and the remote anchor in radio timer ticks 
 +  * **LPP data:** See [[doc:lps:lpp#lpp_short_packets|LPP short packet description]]
  
 ===== Tag implementation ===== ===== Tag implementation =====
  
-A TDoA tag is simply an UWB sniffer. A sniffer can use the data in the packets together with the packet receive timestamps to calculate its position.+A TDoA tag is simply an UWB sniffer. A sniffer can use the data in the packets together with the timestamps when packets are received to calculate its position. 
 + 
 +===== Calculating TDoA ===== 
 + 
 +[[doc:lps:tdoa:principles|Please see TDoA positioning principles]]
  
doc/lps/tdoa3/protocol.txt · Last modified: 2020-05-12 14:08 by kimberly