This shows you the differences between two versions of the page.
Next revision | Previous revision Next revision Both sides next revision | ||
doc:lps:tdoa3:protocol [2018-05-02 13:44] kristoffer created |
doc:lps:tdoa3:protocol [2018-06-13 09:22] kristoffer |
||
---|---|---|---|
Line 7: | Line 7: | ||
</ | </ | ||
- | |||
- | This page describes the [[doc: | ||
===== System architecture ===== | ===== System architecture ===== | ||
- | 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 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. |
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 22: | Line 20: | ||
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 system. | ||
- | ===== Packets | + | ===== Packet |
There is only one packet format. | There is only one packet format. | ||
- | <code c> | + | <ditaa> |
- | typedef struct { | + | |
- | | + | Packet |
- | | + | |
- | uint16_t distance; | + | |
- | uint32_t rxTimeStamp; | + | |
- | } __attribute__((packed)) remoteAnchorData_t; | + | |
- | typedef struct { | + | 7 bytes |
- | | + | < |
- | uint8_t seq; // The sequence number of this packet | + | 8 bits 8 bits 32 bits 8 bits |
- | uint32_t | + | < |
+ | +--------+--------+-------------+-------------+ | ||
+ | Header | ||
+ | +--------+--------+-------------+-------------+ | ||
- | uint8_t remoteCount; | + | |
- | | + | 6 or 8 bytes |
- | } __attribute__((packed)) rangePacket3_t; | + | < |
- | </ | + | 8 bits 1 bit 7 bits |
+ | < | ||
+ | +--------+-------------+--------+-------------+--------------+ | ||
+ | Remote anchor data: | | ||
+ | +--------+-------------+--------+-------------+--------------+ | ||
+ | </ditaa> | ||
+ | |||
+ | * **Header** | ||
+ | * **type:** 0x30 | ||
+ | * **seq:** the sequence number of this packet 0 - 127 | ||
+ | * **txTimeStamp: | ||
+ | * **remoteCount: | ||
+ | | ||
+ | * **id:** the id of the remote anchor | ||
+ | * **hasDistance: | ||
+ | * **seq:** sequence number of latest packet received from the remote anchor 0 - 127 | ||
+ | * **rxTimeStamp: | ||
+ | * **distance: | ||
+ | * **LPP data:** See [[doc: | ||
===== Tag implementation ===== | ===== Tag implementation ===== | ||
Line 48: | Line 64: | ||
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 packet receive timestamps to calculate its position. | ||
+ | ===== Trying it out ===== | ||
+ | |||
+ | See [[doc: |