Jste zde

Aplikace s technologií 3D Time of Fly (ToF) snadno a rychle

Technologie 3D Time of Fly (ToF) se používá v bezpečnostních systémech, robotické navigaci, rozhraní pro ovládání gest a dalších. Tato metoda klade vysoké nároky na optiku, přesnost časovacích obvodů a na rychlost zpracování signálů, a tak je lepší použít předem připravené systémy.

Tento článek popisuje vlastnosti technologie ToF a představí dvojici vývojových kitů AD-96TOF1-EBZ od Analog Devices a PC660 evaluation kit od ESPROS Photonics. Oba vývojové kity pomohou objasnit princip technologie ToF a způsob implementace do zákaznické aplikace.

Co je to ToF technologie?

Technologie ToF je založena na známém principu, že vzdálenost mezi objektem a zdrojovým bodem odpovídá časovému rozdílu mezi vyslaným signálem a jeho odrazem od překážky (obrázek 1).

 

Obrázek 1: ToF systémy vypočítávají vzdálenost mezi senzorem a objektem pomocí časového zpoždění mezi vysílaným signálem a odraženým signálem od objektu. (Zdroj obrázku: Analog Devices)

Principem ToF je výpočet vzdálenosti objektu pomocí vysílané a odražené vlny. Tyto vlny mohou být různého charakteru. Nejčastěji se používá ultrazvuk, radiové milimetrové vlny (mmWave) nebo světelný paprsek (LiDAR)

  • Ultrazvuk nabízí levné řešení, ale s omezeným dosahem a omezeným prostorovým rozlišením objektů.
  • Optické řešení ToF může mít větší dosah a prostorové rozlišení než ultrazvukové systémy, ale nelze je použít například v mlze či zakouřeném prostředí.
  • Řešení založená na technologii mmWave jsou obvykle složitější a dražší, ale jejich dosah je největší. Dokáží informovat o rychlosti a směru cílového objektu navzdory kouři, mlze nebo dešti

Proto se typ technologie vybírá podle dané aplikace. Například ultrazvukové senzory jsou vhodné pro detekci překážek v robotice nebo při parkování vozidla. Technologie mmWave poskytuje vozidlům schopnost snímání na velkou vzdálenost, která je nezbytná pro detekci blížících se silničních rizik i při nepříznivých povětrnostních podmínek. Proto obě technologie nalezneme jako součást asistenčního systému ADAS.

ToF systém se může skládat z jediného páru vysílač / přijímač. Například pouze LED dioda jako vysílač a fotodioda k detekci odrazů od objektu. Tato zdánlivě jednoduchá konstrukce přesto vyžaduje přesné časovací a synchronizační obvody pro měření zpoždění. Kromě toho je nutné použít modulační a demodulační obvody pro rozlišení světelného signálu od pozadí nebo pro podporu složitějších metod kontinuální vlny.

Složitost návrhu roste s počtem použitých přijímačů a s funkcemi pro zlepšení poměru signál / šum(SNR). Například systémy mmWave často používají větší počet přijímačů ke sledování směru a rychlosti více objektů najednou. Detaily se dozvíte v článku Use Millimeter Wave Radar Kits for Fast Development of Precision Object Detection Designs.

3D optické systémy ToF

3D optické systémy ToF používají více přijímačů obvykle CCD senzory (Charge-Coupled devices). Sada čoček zaostří určitou oblast (pozorovaný objekt) na pole CCD. Každý element v poli CCD se nabije světlem odráženým od odpovídajícího bodu v pozorovací oblasti. Odražené světlo dopadající na pole CCD je v podstatě zachyceno na sérii po sobě jdoucí oken. Tato data jsou dále zpracována a vytvoří se 3D hloubková mapa obsahující voxely (VOlume piXEL), jejichž hodnota představuje vzdálenost k odpovídajícímu bodu.

Stejně jako snímky ve videu mohou být jednotlivé hloubkové mapy zachyceny v sekvenci, aby bylo možné provádět měření s časovým rozlišením dané snímkovou rychlostí a rozlišením pole CCD. CCD senzory s rozlišením 320 x 240 CCD se nacházejí v průmyslové automatizaci, bezpilotních vzdušných letadlech (UAV) a dokonce i v zařízeních s rozpoznáváním gest (obrázek 2).

 

Obrázek 2: 3D optický ToF může díky své vysoké obnovovací frekvenci a prostorovému rozlišení rozpoznat gesta jako je například ruka osoby zvednutá směrem k ToF kameře, jak je znázorněno na obrázku. (Zdroj obrázku: ESPROS Photonics)

3D ToF systémy jsou schopny zhotovit hloubkovou mapu na základě snímání stínů při měnícím se osvětlení. Tyto systémy generují své vlastní osvětlení, obvykle využívají lasery nebo vysokovýkonné infračervené LED diody, jako například Luxeon IR LED od Lumileds, schopné pracovat s rychlostí v řádu MHz.

Předem vytvořená řešení

Implementace systému 3D ToF je složitá. Je nutné řešit obvody, které jsou náročné na časování a je nutné zajistit hladký přenos signálů, které jsou náchylné na rušení. Proto existují hotová řešení jako je například 3D ToF systém EPC660-CSP68-007 od ESPROS Photonics. Tento systém obsahuje CCD senzor s rozlišením 320 x 240 s plnou podporou časování a obvody pro zpracování signálu potřebných pro provádění 3D ToF měření s rozlišením vzdálenosti 12-bitů na pixel (obrázek) 3).

Obrázek 3: ESPROS Photonics epc660 obsahuje senzor s rozlišením 320 x 240 pixelů s plnou podporou časovacích obvodů a ovladačů potřebných k převodu dat snímače do hloubkových map. (Zdroj obrázku: ESPROS Photonics)

ESPROS Photonics EPC660-007 se připojuje jako čipová karta. Jedná se o čip epc650 na desce s plošnými spoji o velikosti 37,25 x 36,00 mm s oddělovacími kondenzátory a příslušným konektorem. Vývojová sada epc660 ESPROS Photonics poskytuje kompletní vývojové prostředí, které zahrnuje předem vytvořený zobrazovací systém 3D ToF a příslušný software (obrázek 4).

Obrázek 4: Vývojová sada epc660 ESPROS Photonics poskytuje předinstalovaný 3D kamerový systém ToF a příslušný software. (Zdroj obrázku: ESPROS Photonics)

Sada ESPROS je kompletně navržena pro rychlý vývoj prototypu. Poskytuje předem smontovaný kamerový systém, který obsahuje čip epc660 CC, sestavu optických čoček a sadu osmi LED. Pro zpracování signálů je zde použita procesorová deska BeagleBone Black s 512 Mbyte RAM pamětí a 4 Gbytes flash pamětí.

ESPROS také poskytuje podpůrný software epc660 eval, který lze stáhnout z webových stránek a otevřít pomocí hesla, které si vyžádáte v místní prodejní kanceláři společnosti ESPROS. Po získání hesla k softwaru se jednoduše aplikace spustí s jedním z několika poskytnutých konfiguračních souborů, abyste mohli začít pracovat s kamerovým systémem. GUI aplikace poskytuje ovládací a zobrazovací okna pro nastavení prostorového a časového filtru a prohlížení výsledků (obrázků). Díky tomuto software lze s minimálním úsilím zaznamenávat hloubkové mapy v reálném čase a používat je jako vstup do vlastního aplikačního software.

3D ToF systémy s vyšším rozlišením

ESPROS epc660 s rozlišením 320 x 240 má dostatečné rozlišení pro mnoho aplikací, ale postrádá rozlišení pro detekci malých pohybů v gestech. Pro tyto aplikace je dostupná sada DepthEye Turbo od Seeed Technology. Tato sada obsahuje čtyři laserové diody s vertikálním dutinovým povrchem (VCSEL), příslušné obvody pro osvětlení a snímání, napájení a rozhraní USB. Vše je umístěno v pouzdře o rozměrech 57 x 57 x 51 mm. K dispozici je softwarová knihovna libPointCloud SDK github repository s podporou platforem Linux, Windows, Mac OS a Android.

Knihovna libPointCloud SDK obsahuje C++ drivery, knihovny a ukázkové kódy API Python pro rychlý vývoj prototypu a vizualizačního nástroje. Po implementaci knihovny do hostitelské vývojové platformy lze připojit kameru přes USB k počítači a okamžitě začít používat vizualizační nástroj k zobrazení fázových, amplitudových nebo bodových map. Jedná se o vylepšené hloubkové mapy vykreslené s povrchy textury, které poskytují plynulejší 3D obraz (obrázek 5).

Obrázek 5: Kamera Seeed Technology DepthEye Turbo společně s příslušným software nabízí vylepšenou vizualizaci 3D včetně tzv. bodových mračen, jak je znázorněno na obrázku. (Zdroj obrázku: Seeed Technology / PointCloud.AI)

Analog Devices nabízí vývojový kit AD-96TOF1-EBZ 3D ToF, který je určen k použití s Raspberry Pi, Raspberry Pi 3 Model B + nebo Raspberry Pi 4 jako hostitelský systém, ve kterém probíhají příslušné výpočty.( Obrázek 6).

Obrázek 6: Vývojový kit AD-96TOF1-EBZ 3D ToF obsahuje sestavu dvou desek. Jednu s příslušným osvětlením a druhou pro zpracování dat. Například Raspberry Pi. (Zdroj obrázku: Analog Devices)

Přední deska (AFE) obsahuje optickou sestavu - senzorové pole CCD, vyrovnávací paměť, úložiště firmware a procesor, který řídí celkový provoz „fotoaparátu“ včetně časování osvětlení, synchronizace senzoru a generování hloubkové mapy. Druhá deska obsahuje čtyři 850 nm VCSEL laserové diody a ovladače. Připojuje se k desce AFE, takže laserové diody obklopují optickou desku, jak je znázorněno na obrázku výše.

AD-96TOF1-EBZ obsahuje otevřený zdrojový software 3D ToF a sadu 3D ToF SDK spolu s ukázkovým kódem a knihovnami pro C / C ++, Python a Matlab. Analog Devices rozděluje sadu SDK pro aplikační část a pro nízko-úrovňovou část. Aplikační část je určena pro USB a síťové připojení. Nízko-úrovňová část běží na systému Linux s driverem Video4Linux2 (V4L2). To umožňuje podporu hardwarové interakce na nízké úrovni. (obrázek 7).

Obrázek 7: 3D ToF SDK API od Analog Devices podporuje aplikace spuštěné na platformě Embedded Linux a aplikace spuštěné vzdáleně na síti. (Zdroj obrázku: Analog Devices)

Součástí SDK knihovny je také ukázkový kód inicializace kamery, základního pořizování snímků, vzdáleného přístupu a snímáním napříč platformami. Tyto příklady ve skutečnosti ukazují, jak lze model hloubkové neuronové sítě (DNN) použít ke klasifikaci dat generovaných kamerovým systémem. DNN aplikace je napsána v Pythonu dnn.py a ukazuje každý krok procesu pro získání dat a přípravu jeho klasifikace inferenčním modelem (Výpis 1).

 
import aditofpython as tof
import numpy as np
import cv2 as cv
. . .
    try:
        net = cv.dnn.readNetFromCaffe(args.prototxt, args.weights)
    except:
        print("Error: Please give the correct location of the prototxt and caffemodel")
        sys.exit(1)
    swapRB = False
    classNames = {0: 'background',
                  1: 'aeroplane', 2: 'bicycle', 3: 'bird', 4: 'boat',
                  5: 'bottle', 6: 'bus', 7: 'car', 8: 'cat', 9: 'chair',
                  10: 'cow', 11: 'diningtable', 12: 'dog', 13: 'horse',
                  14: 'motorbike', 15: 'person', 16: 'pottedplant',
                  17: 'sheep', 18: 'sofa', 19: 'train', 20: 'tvmonitor'}
 
    system = tof.System()
    status = system.initialize()
    if not status:
        print("system.initialize() failed with status: ", status)
 
    cameras = []
    status = system.getCameraList(cameras)
. . .
    while True:
        # Capture frame-by-frame
        status = cameras[0].requestFrame(frame)
        if not status:
            print("cameras[0].requestFrame() failed with status: ", status)
 
        depth_map = np.array(frame.getData(tof.FrameDataType.Depth), dtype="uint16", copy=False)
        ir_map = np.array(frame.getData(tof.FrameDataType.IR), dtype="uint16", copy=False)
 
        # Creation of the IR image
        ir_map = ir_map[0: int(ir_map.shape[0] / 2), :]
        ir_map = np.float32(ir_map)
        distance_scale_ir = 255.0 / camera_range
        ir_map = distance_scale_ir * ir_map
        ir_map = np.uint8(ir_map)
        ir_map = cv.cvtColor(ir_map, cv.COLOR_GRAY2RGB)
 
        # Creation of the Depth image
        new_shape = (int(depth_map.shape[0] / 2), depth_map.shape[1])
        depth_map = np.resize(depth_map, new_shape)
        distance_map = depth_map
        depth_map = np.float32(depth_map)
        distance_scale = 255.0 / camera_range
        depth_map = distance_scale * depth_map
        depth_map = np.uint8(depth_map)
        depth_map = cv.applyColorMap(depth_map, cv.COLORMAP_RAINBOW)
 
        # Combine depth and IR for more accurate results
        result = cv.addWeighted(ir_map, 0.4, depth_map, 0.6, 0)
 
        # Start the computations for object detection using DNN
        blob = cv.dnn.blobFromImage(result, inScaleFactor, (inWidth, inHeight), (meanVal, meanVal, meanVal), swapRB)
        net.setInput(blob)
        detections = net.forward()
. . .
        for i in range(detections.shape[2]):
            confidence = detections[0, 0, i, 2]
            if confidence > thr:
                class_id = int(detections[0, 0, i, 1])
. . .
                if class_id in classNames:
                    value_x = int(center[0])
                    value_y = int(center[1])
                    label = classNames[class_id] + ": " + \
                            "{0:.3f}".format(distance_map[value_x, value_y] / 1000.0 * 0.3) + " " + "meters"
. . .
        # Show image with object detection
        cv.namedWindow(WINDOW_NAME, cv.WINDOW_AUTOSIZE)
        cv.imshow(WINDOW_NAME, result)
 
        # Show Depth map
        cv.namedWindow(WINDOW_NAME_DEPTH, cv.WINDOW_AUTOSIZE)
        cv.imshow(WINDOW_NAME_DEPTH, depth_map)

 

Výpis 1: Část z ukázkové aplikace v 3D ToF SDK zobrazuje několik kroků potřebných k získání hloubky a IR snímků a jejich klasifikaci inferenčním modelem. (Zdroj kódu: Analog Devices)

Proces začíná OpenCV metodou DNN ( cv.dnn.readNetFromCaffe), která slouží pro čtení sítě a získání jednotlivých vah existujícího inferenčního modelu. V tomto případě se jedná o model Cafee, který se používá v Google MobileNet Single Shot Detector (SSD). Po načtení názvů tříd s podporovanými identifikátory a popisky tříd ukázkové aplikace se identifikují dostupné kamery a provede se řada inicializačních rutin (toto není zobrazeno ve Výpisu 1).

Většina vzorového kódu se zabývá zvýšení přesnosti hloubkové mapy ( depth_map) a IR mapy ( ir_map) před jejich sloučením ( cv.addWeighted) do jednoho pole. Nakonec kód volá jinou metodu OpenCV DNN ( cv.dnn.blobFromImage ), která převádí kombinovaný obraz na čtyřrozměrný blob - datový typ požadovaný pro inferenční model. Následující řádek kódu nastaví výsledek blob jako vstup do inferenčního modelu ( net.setInput(blob)). Volání net.forward()vyvolá inferenční model, který vrací výsledky klasifikace. Zbytek vzorového kódu zpracovává dané výsledky klasifikace a generuje jednotlivé vzdálenosti bodů od kamery (obrázek 8).

Obrázek 8: Pomocí několika řádků kódu Python a knihovny OpenCV v 3D ToF SDK od Analog Devices dochází k zachycení hloubkového obrazu, klasifikuje je a zobrazuje popis a vzdálenost daného objektu. (Zdroj obrázku: Analog Devices)

Pomocí ukázkového kódu DNN od Analog Devices lze kombinovat 3D hloubkovou mapu ToF s metodami strojového učení a vytvořit tak sofistikovanější aplikační funkci. Přestože tyto aplikace vyžadují odezvy s nízkou latencí, jsou tyto funkce vytvářeny v jazyce C / C ++.

S využitím 3D ToF dat a vysoce výkonných inferenčních modelů mohou průmyslové robotické systémy bezpečněji synchronizovat své pohyby s jiným zařízením nebo dokonce s lidmi v „cobot“ prostředí, kde lidé a roboti spolupracují v těsné blízkosti. Uživatelská aplikace může použít 3D ToF kameru s vysokým rozlišením pro detekci jemných pohybů určitých gest. V automobilových aplikacích může tato metoda pomoci zlepšit přesnost asistenčních systémů řidiče (ADAS).

Závěr

Technologie ToF hrají klíčovou roli téměř v každém systému, který závisí na přesném měření vzdálenosti jednotlivých objektů. ToF technologie založená na optice poskytují jak vysoké prostorové rozlišení, tak vysokou rychlost odezvy. To umožňuje jemnější rozlišení a detekci i miniaturních objektů, a tím rozpoznat i ty nejjemnější gesta. Návrh celého ToF systému je složitý časově náročný proces, a proto existují předinstalované 3D ToF systémy, jako je vývojová platforma AD-96TOF1-EBZ od Analog Devices a vývojová sada ESPROS Photonics EPC660. Díky tomu je implementace ToF technologie rychlá a jednoduchá.

 

Článek vyšel v originále „Get Started Quickly With 3D Time-of-Flight Applications"  na webu DigiKey.com, autorem je Stephen Evanczuk

Hodnocení článku: 

Komentáře

Toto je jedna z technologii ktere jsou z meho pohledu budoucnost rozpoznavani objektu a vseho pocitacoveho videni ale ta cena za devkit je mimo. Realsense on Intelu ma mnohem smysluplnejsi ceny a rekl bych ze i ta kvalita je trochu jinde.