This shows you the differences between two versions of the page.
Both sides previous revision Previous revision Next revision | Previous revision | ||
doc:lps:tdoa:protocol [2017-08-31 16:45] arnaud |
doc:lps:tdoa:protocol [2020-05-12 14:02] kimberly |
||
---|---|---|---|
Line 1: | Line 1: | ||
+ | <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:// | ||
+ | </ | ||
+ | |||
+ | |||
+ | |||
====== TDoA Anchor protocol V2 ====== | ====== TDoA Anchor protocol V2 ====== | ||
Line 17: | Line 23: | ||
===== Packets format ===== | ===== Packets format ===== | ||
+ | There is only one packet format. This packet is sent at the begining of each time-slot by the anchor allowed to transmit in the timeslot. | ||
+ | |||
+ | <code c> | ||
+ | typedef struct rangePacket_s { | ||
+ | uint8_t type; | ||
+ | uint8_t seqs[8]; | ||
+ | uint32_t timestamps[8]; | ||
+ | uint16_t distances[8]; | ||
+ | } __attribute__((packed)) rangePacket_t; | ||
+ | </ | ||
+ | |||
+ | Assuming the current anchors is of ID **anchor_id** | ||
+ | * **type** is 0x22 | ||
+ | * **seqs[i]** | ||
+ | * **If i == anchor_id** Sequence number of the current packet | ||
+ | * **If i != anchor_id** Sequence number of the latest receive packet from anchor **i** | ||
+ | * **timestamps[i]** | ||
+ | * **If i == anchor_id** Transmit time of the current packet expressed in current anchor clock | ||
+ | * **If i != anchor_id** Receive time of the latest receive packet from anchor **i** expressed in current anchor clock | ||
+ | * **distances[i]** | ||
+ | * **If i == anchor_id** Reserved for future use | ||
+ | * **If i != anchor_id** Time of flight between current anchor and anchor **i** in radio timer tick expressed in current anchor clock | ||
+ | |||
+ | ===== 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. | ||
+ | |||
+ | In order to save some electric power, a tag implementation can choose to track the TDMA timeslots and only listen when packets are transmitted. Though this is not a requirement. | ||
+ | ===== Calculating TDoA ===== | ||
+ | [[doc: | ||