Jste zde

Určování polohy v reálném čase s přesností na 10 cm

Radiolokační systémy se staly všudypřítomnou funkcí téměř v každém typu mobilního zařízení. Sem patří také lokalizační systémy v reálném čase (RTLS) založené na ultra-širokopásmové (UWB) radiofrekvenční komunikaci. Pokud GPS nemůže poskytnout informaci o poloze hrají tyto systémy klíčovou roli.

S rostoucí poptávkou po přesnějších technologiích RTLS se vývojáři ocitli ve složitosti metod, jakou je metoda nesoucí název „Two Way Ranging“, která slouží k měření vzdálenosti dvou bodů na základě známé doby šíření signálu (TOF) nebo metody „Time Difference Of Arrival“(TDOA). Jedná se o časoměrný systém, který dokáže určit polohu objektu na základě rozdílu času, za který vyslaný signál z objektu urazí k jednotlivým stanicím.

Integrovaný modul a software společnosti Decawave poskytuje vývojářům jednodušší řešení RTLS, který dokáže poskytnout přesnější lokalizační výsledky s minimálním úsilím. Tento článek hodnotí RTLS aplikace a algoritmy, včetně obou zmíňěných metod a informuje o kompromisech při implementaci různých metod RTLS. Představíme si Decawave UWB transceiver a zdůrazníme specifické požadavky při návrhu. Na konci článku si povíme něco o architektuře softwaru Decawave a doprovodném firmware, ilustrující specifické techniky pro vývoj uživatelských aplikací na platformě Decawave.

Úloha systémů RTLS

Precizní systémy RTLS se ukázaly jako efektivní metoda pro určování polohy, sledování lidí nebo produktů v kancelářských komplexech, skladech, výrobních závodech či montážních linkách. Sledovaný object (tag) si vyměňuje informace s pevnými zařízeními (bránami) pomocí technologie UWB specifikované ve standardu IEEE 802.15.4-2011, která určená pro low-rate wireless personal area networks (LR-WPAN). Pomocí síly signálu mezi tagy a jednotlivými bránami lze určit vzdálenost od jednotlivých bran a pak pomocí triangulace vypočítat přesnou polohu daného tagu. Klíčem úspěchu je správné rozložení jednotlivých bran.

Metody RTLS

Aplikace RTLS používají řadu technik pro určování vzdálenosti. Nejjednodušší technika je použití parametru indikátor intenzity přijatého signálu (RSSI), který je k dispozici u většiny transceiverů. Vzhledem k mnoha rušivým faktorům, které mohou mít vliv na sílu signálu, poskytuje pouze hrubý odhad pozice daného zařízení. Aplikace založené na technologii RTLS vyžadují určení absolutní polohy v rozmezí několika centimetrů. RTLS s vysokou přesností využívá metody typu "time-of-flight", které jsou do značné míry imunní vůči významným změnám v síle vysokofrekvenčního signálu.

V tomto případě, se určení polohy provádí měřením doby potřebné pro to, aby RF signál prošel z tagu do několika bran. Známá konstanta zpoždění RF signálu ve vzduchu, pomáhá určit čas, kdy se daný signál má dostavit k dané bráně.

Například, pokud “time of flight” mezi zařízením a každou ze tří bran je přesně stejný. Tato situace nastává tehdy, pokud je dané zařízení umístěno ve stejné vzdálenosti od všech tří kotev. Vzhledem k tomu, že aplikace zná přesné umístění každé brány, může určit absolutní umístění značky. K měření doby šíření signálu z vysílače zařízení, musí přijímač brány používat stejnou časovou základnu jako dané zařízení, aby správně vyhodnotila informaci o času obsažené ve zprávě. Pokud se časová základna brány posune vpřed či vzad, vypočtená vzdálenost bude kratší nebo delší než skutečná vzdálenost.

Jedna metoda RTLS využívá časovou synchronizaci vysílače v zařízeních a přijímačů bran. Přičemž se musí zajistit, že každá brána přijme zprávu se stejnou časovou základnou jako zařízení.  Implementace synchronizace času je náročná a nepraktická v aplikacích RTLS, kde se bezdrátové zařízení (tagy) pohybují,což je ve většině případů.

Metoda TDOA synchronizuje pouze brány, čímž eliminuje potíže se synchronizací pohyblivých zařízení. Pro určení polohy používá rozdíly mezi časem příjmu měřeným na více branách.  Máme tři brány (A1, A2 a A3), které jsou uspořádány rovnoměrně kolem detekovaného zařízení. Jakmile se zařízení přesune dojde k časovému zpoždění signálu a v našem příkladu to je 0,1 ns. To znamená, že zařízení se pohybovalo v přímém směru od kotvy A2 asi 30 cm (za předpokladu šíření RF při rychlosti světla). Přesnost detekce polohy závisí na velmi přesné synchronizaci. Dokonce i nanosekundový rozdíl v synchronizaci se může přeměnit na centimetrový rozdíl v měření polohy.

Metoda Two way ranging

Metoda nesoucí název „Two Way Ranging“ používá k měření vzdálenosti dvou bodů na základě známé doby šíření signálu (TOF). Proces měření vzdálenosti lze popsat v několika následujících bodech:

  • 1. Iniciátor měření vzdálenosti posílá tzv. „poll“ zprávu, přičemž si do paměti uloží dobu jejího odeslání SP T . Poté iniciátor čeká na příchod odpovědi od protistrany (označována jako „responder“ – čili odpovídač).
  • 2. Odpovídač si zaznamená dobu příchodu „poll“ zprávy – TRP a poté odesílá zpět iniciátorovi „response message“ a zaznamená si dobu jejího odeslání SR T .
  • 3. Ve chvíli, kdy iniciátor přijme „response message“, zaznamená si opět čas jejího přijetí TRR . V čase TSF odesílá iniciátor tzv. „final response message“.
  • 4. Odpovídač přijímající „final response message“ má nyní dostatek informací k tomu, aby mohla být určena vzdálenost mezi ním a iniciátorem.

 

Během zjišťování “tag” pravidelně vysílá krátký identifikační signál a čeká na odpověď od brány. Po spárování tagu a brány probíhá obousměrná výměna zpráv obsahující informace potřebné k výpočtu dosahu.

Obrázek 1: Schéma obousměrného protokolu Decawave. (Zdroj obrázku: Decawave)

Pro vývojáře může být tato implementace náročná. Použitím modulu Decawave DWM1001 se implementace usnadní a získáte detekci přesné polohy ve svých aplikacích.

Integrovaný modul RTLS

Modul Decawave DWM1001 poskytuje kompletní RTLS implementaci, integrovaný transceiver Decawave DW1000 UWB s bezdrátovým mikrokontrolérem NRF52832 od Nordic Semiconductor a 3-osý snímač pohybu LIS2DH12 od STMicroelectronics.

Zatímco DW1000 poskytuje standard IEEE 802.15.4-2011, mikrokontrolér NRF52832 MCU vykonává RTLS instrukce. Snímač LIS2DH12 hraje důležitou roli v řízení spotřeby. V aplikacích, které mají málo prostoru na desce plošných spojů a jsou náročné na spotřebu energie jako například mobilní aplikace je vhodné použít modul DWM1001 (obr.2

Obrázek 2: Transciever Decawave DW1000 integruje zpracování rádiového signálu a logiku digitálního řízení za účelem poskytnutí kompletního systému kompatibilního s IEEE802.15.4-2011. (Zdroj obrázku: Decawave)

DW1000 poskytuje kompletní transceiver UWB, který podporuje šest kanálů IEEE802.15.4-2011 od 3,5 GHz do 6.5 GHz při standardních přenosových rychlostech 110 Kbit / s, 850 Kbit / s a ​​6,81 Mbit / s. Integrovaný digitální řídící subsystém řídí transceiver a podporuje obousměrnou komunikaci a systém TDOA RTLS poskytuje přesnost určení polohy 10 cm. Integrovaná jednou programovatelná paměť (one-time programmable memory -OTP) umožňuje uložit data používaná pro kalibraci a opravu chyb. Zatímco standardně programovatelná paměť (always-on memory - AON) uchovává konfigurační data během různých režimů spánku.

Během provozu přístroj přenáší a přijímá standardní formát IEEE802.15.4. Který obsahuje hlavičku synchronizace (SHR), hlavičku fyzické vrstvy (PHR) a až 127 bajtů dat tvořící celkovou jednotku datových služeb (PSDU) fyzické vrstvy PHY. Kromě standardního formátu poskytuje vlastní formát rámce, který umožňuje vložit až 1023 datových bajtů pro aplikací, která potřebují odeslat větší objem dat a nevyžadují shodu s IEEE802.15.4-2011.

Lze si vybrat z řady provozních režimů s přednastavenými kombinacemi datové rychlosti, velikosti zatížení datové linky a délky preambule tak, aby splňovala specifické požadavky pro operace TDOA.

Například režimy určené pro aplikace s dlouhým dosahem kombinují nízkou datovou rychlost s dlouhou preambulí, která usnadňují nalezení zařízení a pohyb mezi interferenčními nebo slabými signály. Naopak, režimy s vysokými datovými rychlostmi a krátkou preambulí poskytují komunikaci na krátkou vzdálenost. Ostatní režimy jsou nastaveny tak, aby kombinovali různá nastavení, tím lze dosáhnout tíženého cíle.

Minimalizace spotřeby

V praxi se často volí provozní režim s nejkratší možnou velikostí paketu, aby se minimalizovala celková spotřeba energie a zařízení se rychle vrátilo do stavu nízké spotřeby. DW1000 nabízí řadu režimů s nízkou spotřebou. Během doby, kdy neprobíhá žádná komunikace může být zařízení v pohotovostním režimu s odběrem pouhých 19 mA.V době, kdy zařízení je nečinné delší dobu lze zvolit úsporný režim, který spotřebovává pouze asi 1 μA nebo režim hlubokého spánku, který spotřebuje maximálně 100 nA, typicky  50 nA. Stejně jako u jakéhokoli RF designu se však spotřeba energie významně zvyšuje během provozu transceiveru. Chcete-li například přenášet paket kompatibilní s IEEE802.15.4-2011, delší frame jako je hlavička synchronizace a datový paket, pak se spotřeba ještě zvýší (obrázek 3).

Obrázek 3: Přenos rámce RTLS s dekawave DW1000 vede ke značnému zvýšení spotřeby energie pro každou jednotlivou část paketu. (Zdroj obrázku: Decawave)

Další výzvou pro v oblasti spotřeby je vyšší spotřeba energie spojená s provozem přijímače (obrázek 4). Vývojáři mohou naprogramovat DW1000, aby se vrátil k jednomu ze stavů úsporného napájení ihned po vysílání nebo příjmu. I tak format standardního protokolu ponechává málo možností pro snížení výkonu během přenosu dat.

Obrázek 4: Přijímání dat vyžaduje ještě vyšší požadavky na výkon než přenos, což je z velké části způsobeno delší dobou fáze preambule. (Zdroj obrázku: Decawave)

Modul DW1000 poskytuje jedinečnou funkci pro úsporu energie, která snižuje spotřebu energie během příjmu preambule. Než držet přijímač stále v provozu, lze zařízení uvést do zvláštního režimu tzv. preamble sniff. Zde DW1000 pravidelně napájí přijímač, hledá preambuli a vrátí se do klidového stavu, pokud preambule není nalezena. (obr. 5).

Obrázek 5: Snížení spotřeby energie pomocí funkce sniffingu DW1000 (Zdroj obrázku: Decawave)

Část paketu jako je preambule, je zvláště důležitá pro zařízení s bateriemi.  Pro snížení spotřeby lze použít různé metody. Jedna metoda využívá výhod známých zpoždění signálu, které se vyskytují v radiovém přenosu v “two-way ranging ” protokolu. Například odpověď z brány  “Ranging Init” do tagu během fáze objevování (discovering) je k dispozici až po nějaké prodlevě.

Lze vypočítat nebo změřit toto zpoždění na základě parametrů kmitočtu, amplitudy a fáze. Pak můžeme bezpečně udržovat přijímač v tagu vypnutý na očekávaný čas zpoždění a zapnout jej až při příjmu důležitých dat a vypnout jej ihned pokud “Ranging Init” selže v daném časovém okně.

Podobně lze podniknout kroky k omezení doby, po kterou musí být rádio zapnuto během procesu zpracování dat. Například můžeme předem načíst všechny data z tagu do paměti a používat přímý přístup do paměti pro přenos dat mezi DW1000 a hostitelskou pamětí. Toto zpracování běží spotřebuje daleko méně energie než zpracování během přenosu. Další úspora energie spočívá v tom, že se dynamicky mění četnost aktualizace polohy. Pokud se tag přestane pohybovat uvede se do hlubokého spánku. Jakmile se pohybovat začne, okamžitě se probudí a začne probíhat komunikace pro aktualizaci polohy.

Modul DWM1001 podporuje dynamické nastavení četnosti aktualizace polohy pomocí integrovaného snímače pohybu LIS2DH12 a nabízí dva provozní režimy související s pohybem: Režim nízká spotřeba a citlivý režim. DW1000 pracuje v režimu nízké spotřeby, když LIS2DH12 zjistí, že modul se nepohybuje. Jakmile LIS2DH12 detekuje pohyb, transceiver se vrátí do citlivého režimu, kde transceiver DW1000 obnoví normální četnost aktualizace. Četnost aktualizace polohy se může měnit na základě rychlosti a zrychlení objektu.  Například, pomalu se pohybující tag může vyžadovat pouze méně časté aktualizace, aby byla zachována požadovaná polohová přesnost. Jakmile tag zrychlí, aplikace může reagovat zvýšením četnosti aktualizace polohy.

Vývoj RTLS

Kromě schopnosti podporovat funkce RTLS, jako jsou dynamické aktualizace, poskytuje modul zásadní výhodu pro vývoj RTLS. Transciever DW1000 nabízí řadu specifických funkcí pro rozhraní jako je odpojení napájení, přizpůsobení síťové antény, referenční oscilátor a další (obr. 6).

Obrázek 6: Transceiver Decawave DW1000 má přísné požadavky na rozhraní pro zajištění spolehlivého přenosu dat pro napájení, RF a časování. (Zdroj obrázku: Decawave)

Přestože použitím transcieberu DW1000 se značně zjednodušil návrh, můžeme čelit problémům při její integraci do systémů, které vyžadují maximální výkon při minimálním příkonu. Modul DWM1001 snižuje integrační požadavky. Vyžaduje jen několik připojení pro napájení, zem a digitální rozhraní (obr. 7).

Obrázek 7: Modul Decawave DWM1001 zjednodušuje vývoj RTLS tím, že poskytuje plně integrovaný design, který integruje transceiver DW1000 s bezdrátovým MCU a snímačem pohybu. (Zdroj obrázku: Decawave)

Modul dramaticky zjednodušuje vývoj a integraci softwaru díky předinstalovanému firmware a knihovny Decawave pro lokalizaci a také díky síťovým zásobníkům (PANS). Je postavený na zásobníku BLE s nízkou spotřebou. Knihovna PANS obsahuje operační systém s otevřeným zdrojovým kódem eCos (RTOS), síťovou vrstvu, a aplikační vrstvy, které podporují služby BLE, služby správy RTLS a lokalizační engine (TWR) (obrázek 8).

Obrázek 8: Knihovna pro určování polohy a síťové zásobníky (PANS) poskytují bohatou platformu pro aplikace RTLS s kombinací zásobníku Bluetooth, RTOS, síťových vrstev a aplikačních vrstev. (Zdroj obrázku: Decawave)

Při stavbě firmwarových aplikací, které běží na MCU DWM1001, vývojáři přistupují do knihovny PANS pomocí komplexního aplikačního programovacího rozhraní (API), které poskytuje vhodné vstupní body pro konfiguraci a řízení modulu. PANS API obsahuje řadu sad rozhraní API pro samostatné moduly včetně kódu C, knihoven sériových rozhraní (CPI a UART), a knihovnu BLE (obrázek 9). Aplikace pracují přímo s těmito čtyřmi rozhraními API vyšší úrovně, které na oplátku přistupují k knihovně PANS pomocí generického analyzátoru API, který tyto volání převede na volání(calls) API do knihovny PANS. V této roli generická vrstva poskytuje společné rozhraní k knihovně PANS.

Obrázek 9: Decawave nabízí knihovnu PANS. Pomocí API poskytuje jednoduchý přístup k Thread architektury. (Zdroj obrázku: Decawave)

  1. Architektura Thread

  2. Firmware DWM1001 používá architekturu Thread. Poskytuje v podstatě samostatné vlákno pro každý modul a knihovnu v zásobníku. Vlákno pro každý ze čtyř modulů v horní části zásobníku procházejí požadavky na analyzátor API, který ověřuje každý požadavek a volá knihovnu PANS, aby generoval odpovídající odpověď. Generický podproces API naopak používá funkci zpětného volání(callbacks), která je obsažena v původním volání, aby vrátila výsledek zpět do volajícího modulu v horní části zásobníku. Navzdory zjevné složitosti tohoto vícevrstvého systému je vývojářův pohled na programovací model poměrně jednoduchý. Použití volání API s voláními na nezávislé podprocesy pomáhá optimalizovat využití zdrojů a celkový výkon aplikace. Zároveň je složitá základna maskována řadou rozhraní API, které překládají požadavky na konkrétní optimalizované vlákna, která spolupracují s hardwarem DWM1001.

    Programovací model DWM1001 dále zjednodušuje interakci vývojáře s tímto systémem. Vývojáři používají v systému zabudované vlákno uživatelské aplikace. Jak je znázorněno ve Výpisu 1, vývojáři vyvolávají podprocesy uživatelské aplikace jednoduchým voláním API (dwm_thread_create), který odpovídá danému vláknu (app_thread_entry).

     /* Create thread */
    rv = dwm_thread_create(THREAD_APP_PRIO, app_thread_entry, (void*)NULL, "app", THREAD_APP_STACK_SIZE, &hndl);
    APP_ERR_CHECK(rv);
    /* Start the thread */
    dwm_thread_resume(hndl);

     

    Výpis 1: Pomocí vláken v architektuře Thread od Decawave, vývojáři registrují a spouštějí své podprocesy uživatelské aplikace pomocí jednoduchého páru volání do rozhraní API. (Zdroj kódu: Decawave)

  3. Decawave poskytuje vzorový kód pro podprocesy uživatelské aplikace a zpětné volání. Ukázkový kód je součástí virtuálního stroje Oracle Virtual Box, který obsahuje kompletní nástrojový řetězec, knihovny a jednoduchou ukázkovou aplikaci. Je navržen pro práci s vývojovou deskou Decawave DWM1001-DEV připojenou k počítači se systémem Windows. Softwarový balíček nabízí framework pro vytváření vlastního aplikačního softwaru RTLS.

    Součástí softwarového balíku je ukázkový kód, který demonstruje klíčové vzory pro funkce podprocesu uživatele (výpis 2). Tento příklad nastavuje uživatelské Thread funkce (app_thread_entry) konfigurační parametry specifické pro aplikaci, jako je četnost aktualizace polohy a registruje zpětné volání(callback) pomocí funkce API dwm_evt_cb_register s názvem callbacku (on_dwm_evt). Po zaregistrování callbacku, vzorové vlákno vstoupí do hlavní smyčky - v tomto případě řada požadavků k funkci zpoždění, která se používá ke snížení využití zdrojů.

    void app_thread_entry(uint32_t data)
    .
    .
    .
    /* Update rate set to 1 second, stationary update rate set to 5 seconds */
    APP_ERR_CHECK(dwm_upd_rate_set(10, 50));
    /* Register event callback */
     dwm_evt_cb_register(on_dwm_evt, 0);
    .
    .
    .
    while (1) {
    /* Thread loop */
     
     dwm_thread_delay(100);
     }
    }
  4.  

     

    Výpis 2: Ukázkový kód znázorňuje základní postupy pro registraci zpětného volání a provádění hlavní smyčky v rutině podprocesu uživatelské aplikace. (Zdroj kódu: Decawave)

Funkce callbacku (on_dwm_evt) demonstruje základní obslužnou rutinu, která je vyvolána při události (Výpis 3). V tomto vzorku kódu je jedinou platnou událostí nová informace o poloze (DWM_EVT_NEW_LOC_DATA). V rámci obslužného programu pro tuto událost kód má jednoduchou sadu funkcí potřebných k načtení dat o poloze vygenerovaných dostupnými bránami. Po dokončení úloh zpracování události , callback provede přechod do spánku.


/**
 * Event callback
 *
 * @param[in] p_evt  Pointer to event structure
 * @param[in] p_data Pointer to user data
 */
void on_dwm_evt(dwm_evt_t *p_evt, void *p_data)
{
 int i;
 switch (p_evt->header.id) {
 /* New location data */
 case DWM_EVT_NEW_LOC_DATA:
 /* Process the data */
  printf("\nT:%lu ", dwm_systime_us_get());
 
  if (p_evt->data.loc.p_pos == 0) {
    /* Location engine is disabled */
   } else {
   printf("POS:[%ld,%ld,%ld,%u] ", p_evt->data.loc.p_pos->x,
   p_evt->data.loc.p_pos->y, p_evt->data.loc.p_pos->z,
   p_evt->data.loc.p_pos->qf);
  }
  for (i = 0; i < p_evt->data.loc.anchors.dist.cnt; ++i) {
  printf("DIST%d:", i);
 printf("0x%04X", (unsigned int)(p_evt->data.loc.anchors.dist.addr[i] & 0xffff));
if (i < p_evt->data.loc.anchors.an_pos.cnt) {
   printf("[%ld,%ld,%ld]",
  p_evt->data.loc.anchors.an_pos.pos[i].x,
  p_evt->data.loc.anchors.an_pos.pos[i].y,
  p_evt->data.loc.anchors.an_pos.pos[i].z);
}
printf("=[%lu,%u] ", p_evt->data.loc.anchors.dist.dist[i],
p_evt->data.loc.anchors.dist.qf[i]);
}
printf("\n");
break;
default:
  break;
}
/* Indicate the application has finished the tasks and can now */
dwm_sleep();
}
 

Výpis 3: Tento úryvek z ukázkové aplikace Decawave ukazuje callback, který poskytuje základní obslužnou rutinu událostí pro přístup k novým údajům o poloze. (Zdroj kódu: Decawave)

V aplikaci RTLS pro Internet věcí (IoT) tagy a brány budou komunikovat prostřednictvím směrovacích bran propojených s bránou připojenou na internet. Decawave připravuje druhé vydání svého firmwaru, který bude obsahovat podporu brány prostřednictvím softwarového balíku založeného na Linuxu s použitím známých protokolů IoT včetně zasílání zpráv pomocí HTTP, WebSockets, MQTT a AMQP.

Závěr

RTLS hraje stále důležitější roli v široké škále aplikací. Přestože metody RTLS jsou založeny na poměrně jednoduchých principech, implementace těchto metod vyžaduje sofistikovaný RF / analogový design, návrh systému a vývoj softwaru, aby byla zajištěna maximální přesnost s minimální spotřebou energie. Modul Decawave DWM1001 poskytuje kompletní RTLS systém, který kombinuje integrovaný transceiver DW1000 UWB společnosti Decawave mikrokontrolér a snímač pohybu. Pomocí tohoto modulu a doprovodného softwarového balíčku mohou vývojáři rychle implementovat vysoce přesné RTLS systémy do svých aplikacích.

 

 

Hodnocení článku: