Jste zde

3D snímání prostoru pomocí metody ToF

Měření vzdálenosti pomocí metody ToF v trojrozměrném rozlišení hraje zásadní roli v ovládání pomocí gest. Své uplatnění najde také v průmyslových snímacích aplikacích. Jak rychle postavit prototyp, abychom zjistili vlastnosti optické metody ToF a na co si při návrhu musíme dávat pozor? 

 

Vývoj multipixelového optického snímacího subsystému je díky složitosti zdlouhavý proces. Tento článek nám přiblíží základní principy ToF a poté představí optickou vývojovou sadu od společnosti Broadcom, která nám usnadní vytvoření prototypu pro přesné měření vzdálenosti v 1D a 3D.

Základy optické metody ToF

Optická metoda ToF, která se používá k získání přesné vzdálenosti, umožňuje měření na základě doby potřebné pro průchod světla vzduchem. Existují dvě metody ToF - přímá a nepřímá. V přímé metodě ToF se měří čas mezi vysíláním a příjmem konkrétního světelného pulsu senzorem ToF pomocí rovnice 1:

                                            

Kde:

0 = rychlost světla ve vakuu

∆T = doba uplynulá mezi vysíláním a příjmem

Přímá metoda vyžaduje dostatečný výkon vysílače i přijímače, vysoký poměr signál / šum a přesnou detekci hrany pulzu.

Naproti tomu nepřímá metoda ToF využívá modulovanou spojitou vlnu a měří fázový rozdíl mezi vysílanými a přijímanými signály podle rovnice 2:

        

Kde:

0 = rychlost světla ve vakuu

fmod = frekvence laserové modulace

∆φ = stanovený fázový rozdíl

Nepřímá metoda nemá takové nároky na výkon vysílače/přijímače a neklade důraz na tvar pulsu. Díky tomu může být obvod jednodušší.

Přímá i nepřímá metoda vyžaduje přesné řízení signálů vysílače a přijímače. Pro návrh optického snímání pomocí metody ToF lze využít integrované senzory, které mají jak vysílač tak i přijímač v jedné součástce. Při výběru integrovaného senzoru se vždy volí kompromis mezi spotřebou energie, dosahem, přesností a rychlostí.

Nepřímý ToF modul AFBR-S50MV85G od Broadcomu je navržen speciálně pro střední vzdálenost při zachování minimální velikosti a minimální spotřeby energie. K dispozici je vývojová sada AFBR-S50MV85G-EK, která zjednoduší implementaci 3D snímání pomocí ToF.

Jak integrovaný modul zjednodušuje měření vzdálenosti pomocí ToF

Modul AFBR-S50MV85G byl vyvinutý pro průmyslové aplikace a poskytuje kompletní optické řešení snímání ToF v jediném pouzdře. Uvnitř pouzdra se nachází 850 nm infračervený laser s vertikální dutinou (VCSEL), šestihranná 32 pixelová snímací matrice, čočka pro VCSEL a integrovaný obvod ASIC.

Vysílač osvětluje cílový objekt, a to způsobí, že určitý počet pixelů ve snímací matrici detekuje odražený IR signál. V základním provozu to umožňuje modulu přesné měření vzdálenosti od bílých, černých, barevných, kovových a reflexních povrchů – a to i na přímém slunci – díky integrovaným filtrům pro potlačení okolního světla. Automatická kompenzace chyb umožňuje měření prakticky bez spodní hranice vzdálenosti. Kombinace IR přísvitu a snímací matrice umožňuje zjistit následující informace o objektu – pohyb a jeho směr, rychlost a úhel náklonu (obrázek 1).

Obrázek 1: Pomocí dat získaných ze snímací matice 8 x 4 pixelů modulu AFBR-S50MV85G lze měřit charakteristiky pohybu objektů. (Zdroj obrázku: Broadcom)

Vestavěný ASIC modul poskytuje všechny obvody potřebné pro řízení světelného zdroje VCSEL, zachycení analogového signálu ze snímací matice a úpravu digitálního signálu (obrázek 2).

Obrázek 2: ASIC integrovaný v modulu AFBR-S50MV85G obsahuje všechny obvody potřebné k řízení světelného zdroje VCSEL, pro zpracování přijatých signálů ze snímací matrice a přenos dat přes sběrnici SPI. (Zdroj obrázku: Broadcom)

Obvod ASIC je napájen 5V a jeho integrovaný kalibrovaný a teplotně kompenzovaný RC oscilátor a fázový závěs PLL poskytují všechny požadované hodinové signály. Díky tomu lze modul připojit k mikrokontroleru a je k tomu potřeba jen několik externích komponent. Rozhraní pro propojení s mikrokontrolerem je jednoduché. Skládá se z univerzálního GPIO pinu pro signál přerušení a signálů pro SPI (obrázek 3).

Obrázek 3: Modul AFBR-S50MV85G vyžaduje pouze MCU a několik dalších komponent pro implementaci kompletního systému snímání ToF. (Zdroj obrázku: Broadcom)

Tento hardware doplňuje softwarový driver ToF od společnosti Broadcom. Zatímco modul zpracovává sběr optických dat pro aplikace měření vzdálenosti, software ovladače Broadcom ToF, který je součástí sady AFBR-S50 SDK, provádí všechny kroky hardwarové konfigurace, kalibrace a měření. Během měření software vypočítává hodnoty vzdálenosti i amplitudy jednotlivých pixelů.

Jak rychle vyvinout aplikaci pro měření vzdálenosti

AFBR-S50 SDK v kombinaci s vývojovou sadou AFBR-S50MV85G-EK nabízí komplexní platformu pro ryclé vytvoření prototypu. Sada se dodává s deskou obsahující modul AFBR-S50MV85G, vývojovou desku FRDM-KL46Z NXP založenou na Arm Cortex-M0+ a mini-USB kabel pro připojení sestavy k notebooku (obrázek 4).

Obrázek 4: Vývojová sada AFBR-S50MV85G-EK a související software poskytuje kompletní platformu pro vytvoření prototypu s měřením vzdálenosti pomocí ToF. (Zdroj obrázku: Broadcom)

Měření vzdálenosti pomocí vývojové sady vyžaduje pouze několik kroků. Po stažení AFBR-S50 SDK se spustí průvodce, který nás provede nastavením a rychlou instalací. Pak je nutné spustit softwarovou aplikaci Broadcom AFBR-S50 Explorer, která je součástí balíčku SDK. Software se připojí k vývojové desce AFBR-S50 přes rozhraní USB, přijme naměřená data prostřednictvím driveru běžícího na MCU desky NXP a umožní zobrazit výsledky v 1D nebo 3D grafu (obrázek 5).

Obrázek 5: Software AFBR-S50 Explorer zjednodušuje vyhodnocování měření prostřednictvím 3D grafů zobrazujících amplitudu přijatého osvětlení pro každý pixel v matici snímače ToF. (Zdroj obrázku: Broadcom)

Jak je znázorněno na obrázku 5, 3D graf zobrazuje hodnoty z každého pixelu, ale software poskytuje alternativní pohled, který umožňuje vidět pouze pixely považované za platné. V tomto alternativním zobrazení jsou pixely, které nesplňují definovaná kritéria, odstraněny z grafu (obrázek 6).

Obrázek 6: Se softwarem Broadcom AFBR-S50 Explorer lze prohlížet optimalizované 3D grafy. Pixely, které nesplňují předem definovaná kritéria jsou odstraněny. (Zdroj obrázku: Broadcom)

Vývojová deska slouží pro ověření metody ToF v konkrétních aplikacích. K tomu lze využít vzorový software obsažený v sadě Broadcom AFBR-S50 SDK a rychle implementovat vlastní aplikační kód.

Vytváření vlastních softwarových aplikací

Broadcom staví na efektivní architektuře založené na základní knihovně AFBR-S50 obsahující hardwarově specifický kód snímače, API rozhraní a vrstvy pro obsluhu hardware (HAL) (obrázek 7).

Obrázek 7: V operačním prostředí ToF poskytuje rozhraní API přístup ke kalibračním, měřicím a vyhodnocovacím funkcím v předkompilované knihovně. (Zdroj obrázku: Broadcom)

Jako součást balíčku AFBR-S50 SDK poskytuje Broadcom základní knihovnu, která vkládá všechna data a algoritmy potřebné ke spuštění hardware AFBR-S50MV85G. Základní knihovna poskytuje funkce pro kalibraci, měření a vyhodnocování, a to vše s minimální spotřebou energie. Základní funkce knihovny zpracovávají všechny detaily, a tak je cyklus měření přímočarý (obrázek 8).

Obrázek 8: Software AFBR-S50 SDK ToF minimalizuje zátěž procesoru pomocí přerušení a zpětných volání. (Zdroj obrázku: Broadcom)

Na začátku každého měřicího cyklu (iniciovaného periodickým přerušením časovače nebo IRQ) mikrokontroler zahájí měření a okamžitě se vrátí do klidového stavu (nebo pokračuje ve zpracování nějakého aplikačního kódu). Po dokončení měření modul AFBR-S50MV85G používá jeden pin GPIO k signalizaci přerušení, čímž probudí MCU, aby zahájil čtení dat na sběrnici SPI, než se vrátí do předchozího stavu. Po dokončení čtení dat (signalizováno IRQ pomocí SPI), MCU spustí kód pro vyhodnocení dat získaných z ToF senzoru.

Aby se zabránilo ztrátě dat měření, základní knihovna zabraňuje spuštění nového cyklu měření blokováním datové vyrovnávací paměti, dokud není zavolána vyhodnocovací rutina. Balíček AFBR-S50 SDK kombinuje předkompilované moduly základní knihovny s několika příklady software. Výsledkem je, že vývojáři mohou rychle vytvářet své vlastní aplikace pro snímání ToF na základě vzorových aplikací poskytovaných v sadě SDK. 

K hardware AFBR-S50MV85G a funkcím základní knihovny AFBR-S50 lze přistupovat ve svém softwarovém kódu voláním funkcí v AFBR-S50 SDK API a specifikováním vlastních funkcí pro různá zpětná volání podporovaná základní knihovnou (viz znovu obrázek 7 ).

Broadcom poskytuje rozsáhlou dokumentaci k API a ukázkový software. Díky tomu lze rychle přizpůsobit softwarové příklady zákaznickým potřebám. Ve skutečnosti je základní cyklus měření přímočarý, jednoduše přizpůsobuje uživatelské funkce a volání API cyklu měření (viz znovu obrázek 8). Například cyklus měření, jak bylo uvedeno výše, zahrnuje tři fáze: integraci zařízení ToF, odečítání dat a vyhodnocení naměřených dat.

  • Argus_TriggerMeasurement(), která asynchronně spouští jeden rámec měření
  • Argus_GetStatus(), která po úspěšném dokončení měření vrátí STATUS_OK
  • Argus_EvaluateData(), která vyhodnocuje užitečné informace z nezpracovaných dat měření

Broadcom demonstruje tuto základní měřicí smyčku na ukázkové aplikaci zahrnuté v knihovně SDK, která je uvedena ve výpisu 1.

int main(void)
{
   status_t status = STATUS_OK;
  
   /* Initialize the platform hardware including the required peripherals
   * for the API. */
   hardware_init();
  
   /* The API module handle that contains all data definitions that is
   * required within the API module for the corresponding hardware device.
   * Every call to an API function requires the passing of a pointer to this
   * data structure. */
   argus_hnd_t * hnd = Argus_CreateHandle();
   handle_error(hnd ? STATUS_OK : ERROR_FAIL, "Argus_CreateHandle failed!");
  
   /* Initialize the API with default values.
   * This implicitly calls the initialization functions
   * of the underlying API modules.
   *
   * The second parameter is stored and passed to all function calls
   * to the S2PI module. This piece of information can be utilized in
   * order to determine the addressed SPI slave and enabled the usage
   * of multiple devices on a single SPI peripheral. */
  
   status = Argus_Init(hnd, SPI_SLAVE);
   handle_error(status, "Argus_Init failed!");
  
   /* Print some information about current API and connected device. */
   uint32_t value = Argus_GetAPIVersion();
   uint8_t a = (value >> 24) & 0xFFU;
   uint8_t b = (value >> 16) & 0xFFU;
   uint8_t c = value & 0xFFFFU;
   uint32_t id = Argus_GetChipID(hnd);
   argus_module_version_t mv = Argus_GetModuleVersion(hnd);
   print("\n##### AFBR-S50 API - Simple Example ##############\n"
   " API Version: v%d.%d.%d\n"
   " Chip ID: %d\n"
   " Module: %s\n"
   "##################################################\n",
   a, b, c, id,
   mv == AFBR_S50MV85G_V1 ? "AFBR-S50MV85G (v1)" :
   mv == AFBR_S50MV85G_V2 ? "AFBR-S50MV85G (v2)" :
   mv == AFBR_S50MV85G_V3 ? "AFBR-S50MV85G (v3)" :
   mv == AFBR_S50LV85D_V1 ? "AFBR-S50LV85D (v1)" :
   mv == AFBR_S50MV68B_V1 ? "AFBR-S50MV68B (v1)" :
   mv == AFBR_S50MV85I_V1 ? "AFBR-S50MV85I (v1)" :
   mv == AFBR_S50SV85K_V1 ? "AFBR-S50SV85K (v1)" :
   "unknown");
      
/* Adjust some configuration parameters by invoking the dedicated API methods. */
   status = Argus_SetConfigurationFrameTime( hnd, 100000 ); // 0.1 second = 10 Hz
   handle_error(status, "Argus_SetConfigurationFrameTime failed!");
  
   /* The program loop ... */
   for (;;)
   {
      myData = 0;
      /* Triggers a single measurement.
      * Note that due to the laser safety algorithms, the method might refuse
      * to restart a measurement when the appropriate time has not been elapsed
      * right now. The function returns with status #STATUS_ARGUS_POWERLIMIT and
      * the function must be called again later. Use the frame time configuration
      * in order to adjust the timing between two measurement frames. */
      Argus_TriggerMeasurement(hnd, measurement_ready_callback);
      handle_error(status, "Argus_StartMeasurementTimer failed!");
      STATUS_ARGUS_POWERLIMIT)
      {
         /* Not ready (due to laser safety) to restart the measurement yet.
         * Come back later. */
         continue;
      }
      else
      {
         /* Wait until measurement data is ready. */
      do
         {
            status = Argus_GetStatus(hnd);
         }
         while (status == STATUS_BUSY);
         handle_error(status, "Waiting for measurement data ready (Argus_GetStatus) failed!");
         /* The measurement data structure. */
         argus_results_t res;
        
         /* Evaluate the raw measurement results. */
         status = Argus_EvaluateData(hnd, &res, (void*) myData);
         handle_error(status, "Argus_EvaluateData failed!");
        
         /* Use the obtain results, e.g. print via UART. */
         print_results(&res);
         }
      }
}

Výpis 1: Ukázkový kód v AFBR-S50 SDK demonstruje základní vzor pro získávání a vyhodnocování dat ToF z modulu AFBR-S50MV85G. (Zdroj kódu: Broadcom)

Jak je uvedeno v seznamu, tři dříve zmíněná volání funkcí API tvoří páteř provádění cyklu měření. Prostudováním dokumentace API a dalších ukázkových aplikací v SDK mohou vývojáři rychle implementovat složité 3D aplikace. Díky tomu lze rychle určit rychlost, směr a úhel náklonu cílového objektu.

Závěr

Optická snímací zařízení ToF nabízí přesné měření vzdálenosti i v systémech, které vyžadují nízkou spotřebu. Pomocí vývojové sady mohou vývojáři rychle implementovat systémy pro přesné měření v aplikacích 1D určování vzdálenosti a pro komplexní sledování pohybu objektů ve 3D aplikacích.

 

Článek vyšel v originále na webu DigiKey.com, autorem je Stephen Evanczuk.

Hodnocení článku: