Sei sulla pagina 1di 3

Sistema di calibrazione per il Loco Positioning System

October 23, 2023

1 Introduzione
Il Loco Positioning System è un sistema di posizionamento indoor basato su tecnologia UWB, svilup-
pato dalla Bitcraze. Il sistema prevede due tipi di dispositivi: le ancore e i tag. L’ obbiettivo è quello
di ottenere una misura della posizione assoluta di uno o più tag. Per il posizionamento di un singolo
tag viene utilizzato il protocollo TWR (Two Way Ranging), mentre per il posizionamento di più tag
si utilizza il protocollo TDoA2, [Loc].

2 Il protocollo TWR
Il protocollo TWR prevede che il tag calcoli in sequenza la distanza da ciascuna ancora. Il tag e
l’ancora comunicano inviando una serie di pacchetti in una precisa sequenza, visibile in figura 1. Il
modulo UWB sui tag e sulle ancore dispone di un clock ad alta precisione che può essere utilizzato
per registrare i timestamp di trasmissione e ricezione dei pacchetti. I timestamp R1, T2 e R3 vengono
registrati dall’ancora e inviati nell’ultimo pacchetto (REPORT), mentre i timestamp T1, R2 e T3
vengono registrati internamente dal tag. Utilizzando le differenze tra i vari timestamp come visibile
nella formula (1) è possibile calcolare il tempo di volo tf . Tale formula viene utilizzata per compensare
la deviazione dei clock del tag e dell’ancora, che non sono sincronizzati. Il modello del drift dei clock
e una derivazione di tale equazione è presente in [RL22].
tround1 tround2 − treply1 treply2
tf = (1)
tround1 + tround2 + treply1 + treply2

3 Il protocollo TDoA2
Il protocollo TDoA permette la localizzazione di un numero arbitrario di ancore con un overhead di
comunicazione minimo. A differenza del protocollo TWR non è necessario che il tag inizi la comu-
nicazione con le ancore ma è sufficiente che riceva passivamente i messaggi scambiati tra le ancore.
Inoltre il tag non calcola le distanza dalle ancore ma la differenza delle distanze da una coppia di

Figure 1: Il protocollo TWR, un diagramma simile è presente in [Twr].

1
Figure 2: Il protocollo TDoA2, un diagramma simile è presente in [Tdob] e [RL22].

ancore; se ad esempio il tag è ad una distanza di 3 metri dall’ancora con id 0 e a una distanza di 2
metri dall’ancora con id 1, il sistema misura la differenza di 1 metro. Le ancore comunicano tra di
loro utilizzando un meccanismo di condivisione del canale di tipo TDMA; ogni ancora trasmette solo
nello slot temporale associato al proprio id, e riceve i pacchetti trasmessi dalle altre ancore negli slot
successivi. La durata del singolo slot nel caso del Loco Positioning System è di 2ms per una durata
del frame TDMA di 16ms, in un sistema con 8 ancore, [Tdob]. Le ancore implementano il protocollo
TWR calcolando il tempo di volo reciproco, che viene trasmesso nei pacchetti. Come visibile in figura
2 il tag riceve passivamente i pacchetti TWR ed è in grado di calcolare il TDoA ossia la differenza del
tempo di volo dall’ancora A al tag e il tempo di volo dall’ancora B al tag, mediante la formula (2). In
[RL22] è presente una derivazione di tale equazione.

MB (tround1 − tf AB ) − MA (treply2 + tf AB )
tdoa = (2)
tround1 + treply2
Il tempo di volo tra A e B tf AB viene trasmesso nei pacchetti, come pure i timestamp di ricezione
e trasmissione degli ultimi pacchetti nel clock locale delle ancore, dai quali è possibile ricavare nel
processore del tag tround1 e treply2 .

4 Sistema di calibrazione
Il tag riesce ad utilizzare le informazioni del tempo di volo ricavate dal protocollo TWR o dal protocollo
TDoA utilizzando le coordinate delle varie ancore. Tale informazione viene inviata nei pacchetti, e
viene impostata nel firmware delle ancore in una fase di setup iniziale dopo una misura manuale di
tutte le coordinate. L’approccio proposto prevede l’automatizzazione di tale procedura utilizzando le
informazioni calcolate dalle ancore durante il protocollo TDoA. Infatti le ancore sono a conoscenza
del tempo di volo reciproco e comunicano tale informazione al tag che la utilizza per calcolate il tdoa .
Tali informazioni vengono inviate ad un sistema di elaborazione centrale che risolve un problema di
ottimizzazione per ricavare le coordinate delle ancore. Seguendo l’approccio utilizzato in [HD18] si
risolve un problema di ottimizzazione minimizzando la funzione di costo riportata in (3), dove dij sono
le distanze reciproche tra le ancore calcolate a partire dai tempi di volo e le p sono le coordinate delle
ancore.
XX
J= (dij − ||pi − pj ||)2 (3)
i j̸=i

La risoluzione di tale problema senza ulteriori vincoli restituisce le coordinate delle ancore con

2
una traslazione ed una rotazione arbitraria nello spazio. Per questo motivo si decide di aggiungere al
problema di ottimizzazione i vincoli riportati in (4).

p0x = 0, p0y = 0, p0z = 0 (4a)


p5x = 0, p5z = 0 (4b)
p7z = 0 (4c)

Si impone dunque che l’ancora con id 0 sia nell’origine, che l’ancora con id 5 sia diretta lungo l’asse
y del sistema di riferimento e che l’ancora con id 7 sia nello stesso piano delle ancore 0 e 5. Tale scelta
e in accordo con il setup di riferimento per un sistema con 8 ancore riportato in [Set].

5 Modifica del firmware del tag


Il tag riceve le informazioni del tempo di volo nei pacchetti, come descritto in [Tdoa]. Nel caso in esame
il tag è un drone Crazyflie, che mette a disposizione un API python dalla quale è possibile ricevere da
un host delle informazioni di log che vengono memorizzate dal firmware. Per accedere all’informazione
dei tempi di volo è stato sufficiente dichiarare nel firmware una nuova variabile locale e aggiungerla
al resto delle variabili di log che vengono comunicate all’host. Tale variabile viene poi aggiornata al
momento della ricezione dei pacchetti dalle ancore.

References
[HD18] Michael Hamer and Raffaello D’Andrea. Self-calibrating ultra-wideband network supporting
multi-robot localization. IEEE Access, 6:22292–22304, 2018.

[Loc] Loco Positioning system, howpublished = https://www.bitcraze.io/documentation/


system/positioning/loco-positioning-system/ .
[RL22] Patrick Rathje and Olaf Landsiedel. Time difference on arrival extraction from two-way rang-
ing, 2022.

[Set] Reference Set-up , howpublished = https://www.bitcraze.io/documentation/


repository/lps-node-firmware/master/user-guides/twr-reference-setup/ .
[Tdoa] TDoA Anchor protocol V2 , howpublished = https://www.bitcraze.io/documentation/
repository/lps-node-firmware/master/protocols/tdoa2_protocol/ .

[Tdob] TDoA principles , howpublished = https://www.bitcraze.io/documentation/repository/


lps-node-firmware/master/functional-areas/tdoa_principles/ .
[Twr] Two Way Ranging Protocol , howpublished = https://www.bitcraze.io/documentation/
repository/lps-node-firmware/master/protocols/twr-protocol/ .

Potrebbero piacerti anche