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

Next revision
Previous revision
doc:lps:tdoa3:protocol [2018-05-02 13:44]
kristoffer created
doc:lps:tdoa3:protocol [2020-05-12 14:08] (current)
kimberly
Line 1: Line 1:
-====== TDoA Anchor protocol V3 (experimental) ====== 
- 
-<WRAP center round tip 80%> 
-**NOTE** 
- 
-This is work in progress. The specifications on this page may change at any time without backwards compatibility.  
  
 +<WRAP center round important 60%>
 +This page has deprecated and moved to the new documentation framework of the main Bitcraze website. Please go to [[https://www.bitcraze.io/documentation/system/]]
 </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 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 16:
 ===== 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.
  
-===== Packets 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.1525261483.txt.gz · Last modified: 2018-05-02 13:44 by kristoffer