0,00 €

V košarici ni izdelkov.

0,00 €

V košarici ni izdelkov.

More
    DomovRevijaPredstavljamoZaznavanje razdalje s časom preleta in predhodno vgrajeno rešitvijo

    Zaznavanje razdalje s časom preleta in predhodno vgrajeno rešitvijo

    Digi-Key Electronics
    Avtor: Rich Miron
    2020_285_24

    Slikovna obdelava s časom preleta 3D (ToF) omogoča učinkovito alternativo video slikovni obdelavi za široko paleto vrst uporabe, vključno z industrijsko varnostjo, robotsko navigacijo, vmesniki za nadziranje kretenj in še veliko več. Ta pristop pa vendarle zahteva natančno mešanico optične zasnove, natančnih vezij za merjenje časa in zmogljivosti za obdelavo signalov, kar lahko razvijalcem pogosto predstavlja težave pri uvajanju učinkovite 3D ToF platforme.

    Kaj je ToF tehnologija?
    ToF tehnologija se zanaša na znano načelo, da je mogoče določiti razdaljo med predmetom in določeno izhodiščno točko na ta način, da se izmeri razlika med časom, ko se energija odda iz vira, in časom, ko vir prejme njen odboj (slika 1).

    Čeprav osnovno načelo ostaja enako, se rešitve ToF precej razlikujejo ter nosijo zmogljivosti in omejitve, ki so značilne za njihove temeljne tehnologije, vključno z ultrazvokom, svetlobnim zaznavanjem in merjenjem (LiDAR), kamerami in signali RF v milimetrskih valovih (mmWave):

    • Ultrazvočne ToF rešitve ponujajo cenovno ugodno rešitev, ki pa ima omejen doseg in omejeno prostorsko ločljivost predmetov
    • Optične ToF rešitve lahko ponudijo večji doseg in prostorsko ločljivost kot ultrazvočni sistemi, vendar nanje negativno vplivajo gosta megla ali dim
    • Rešitve, ki temeljijo na mmWave tehnologiji, so običajno bolj zapletene in drage, vendar lahko delujejo z znatnim dosegom, hkrati pa zagotavljajo informacije o hitrosti in smeri gibanja ciljnega predmeta, ne glede na dim, meglo ali dež

    Proizvajalci izkoriščajo zmogljivosti vsake tehnologije, kot je potrebno za izpolnjevanje določenih zahtev. Primer: ultrazvočni senzorji so zelo primerni za zaznavanje ovir, ko se roboti pomikajo prek poti ali ko vozniki parkirajo svoja vozila. mmWave tehnologija pa nasprotno od tega vozilom omogoča zmogljivost zaznavanja na dolge razdalje, ki je potrebna za zaznavanje bližajočih se nevarnosti na cesti tudi, ko drugi senzorji ne morejo prodreti skozi težke vremenske pogoje.

    ToF zasnove so lahko zgrajene okoli enega para oddajnik/sprejemnik. Primer: preprosta optična ToF zasnova po svojem konceptu potrebuje le LEDico za osvetljevanje interesnega območja in fotodiodo za zaznavanje odbojev od predmetov v tem interesnem območju. Ta na videz preprosta zasnova pa vseeno zahteva natančna vezja za merjenje časa in sinhronizacijo, ki merijo zakasnitev. Poleg tega so morda potrebna vezja za modulacijo in demodulacijo za razlikovanje signala osvetlitve od virov v ozadju ali za podpiranje bolj zapletenih metod neprekinjenih valov.

    Zapletenost zasnove hitro narašča, medtem ko razvijalci delajo na izboljšavi razmerja med signalom in šumom (SNR) ter odstranjevanju artefaktov v ToF sistemih. Nadaljnje spajanje zapletenosti, naprednejše rešitve zaznavanja bodo uporabljale več oddajnikov in sprejemnikov za sledenje več objektom ali podpiranje naprednejših algoritmov za sledenje gibanja. Sistemi mmWave bodo na primer pogosto uporabljali več sprejemnikov za sledenje smeri gibanja in hitrosti več neodvisnih predmetov. (Glejte »Uporaba radarskih kompletov z milimetrskimi valovi za hiter razvoj zasnov za natančno zaznavanje predmetov«.)

    3D-optični ToF sistemi
    3D-optični ToF sistemi razširjajo zamisel uporabe več prejemnikov z uporabo senzorjev za slikovno obdelavo, ki običajno temeljijo na CCD matriki. Ko nabor leč izostri interesno območje na CCD matriko, se vsaka polnilna shranjevalna naprava v CCD matriki napolni s odbito osvetlitvijo, ki se odbije od ustrezne točke v tem interesnem območju. Odbita svetloba, sinhronizirana z impulzno ali neprekinjeno valovno osvetlitvijo, ki doseže CCD matriko, se pravzaprav zajame v zaporedju oken ali faz. Ti podatki se obdelajo še naprej, da se ustvari globinski 3D zemljevid, sestavljen iz vokselov (VOlume piXEL oz. volumska slikovna pika), katerih vrednost predstavlja razdaljo do ustrezne točke v interesnem območju.
    Podobno kot sličice v videoposnetku je mogoče posamezne globinske zemljevide zajeti v zaporedju, da se zagotovijo meritve s časovno ločljivostjo, ki jo omejuje le hitrost sličic sistema za zajem slik in prostorsko ločljivostjo, ki jo omejujeta le CCD matrika in optični sistem. Z razpoložljivostjo večjih CCD 320 x 240 naprav za snemanje je mogoče 3D-optične ToF sisteme z večjo ločljivostjo uporabljati v zelo različnih segmentih, vključno z industrijsko avtomatizacijo, zračnimi plovili brez posadke (UAV) in celo v vmesnikih za kretnje (slika 2).

    Za razliko od večine metod, ki temeljijo na kamerah, lahko 3D ToF sistemi zagotavljajo natančne rezultate navzlic sencam ali spremenljivim svetlobnim pogojem. Ti sistemi zagotavljajo svojo lastno osvetlitev, običajno z laserji ali visokozmogljivimi infrardečimi LEDicami, kot so Luxeon IR LED proizvajalca Lumileds, ki lahko delujejo pri hitrostih preklapljanja v višini enega megahertza (MHz), ki se uporabljajo v teh sistemih. Za razliko od metod, kot so stereoskopske kamere, 3D ToF sistemi zagotavljajo kompaktno rešitev za ustvarjanje podrobnih informacij o razdalji.

    Predhodno vgrajene rešitve
    Vendar se pri uveljavljanju 3D ToF sistemov razvijalci soočajo s številnimi razvojnimi izzivi. Poleg prej omenjenih vezij za merjenje časa so ti sistemi odvisni od natančno zasnovanega sistema za obdelavo signalov, optimiziranega za hitro branje rezultatov iz CCD matrike za vsako okno ali merjenje faze, nato pa za dokončanje obdelave, ki je potrebna za spreminjanje teh surovih podatkov v globinske zemljevide. V naprednih napravah za 3D ToF snemanje, kot je ToF naprava za snemanje EPC660-CSP68-007 proizvajalca ESPROS Photonics, je CCD matrika 320 x 240 združena s popolno paleto zmogljivosti za obdelavo merjenja časa in signalov, ki je potrebna za izvajanje 3D ToF meritev ter zagotavljanje 12-bitnih podatkov o razdalji na slikovno piko (slika 3).

    Nosilec vezja robnega priključka ESPROS Photonics EPC660-007 namešča napravo za snemanje EPC650 na tiskano vezje velikosti 37,25 x 36,00 milimetra s kondenzatorji za ločevanje in robnim priključkom. Čeprav ta nosilec vezja naslavlja osnovni vmesnik strojne opreme v zasnovi 3D ToF sistema, se morajo razvijalci še naprej ukvarjati z izzivi dokončanja ustreznega optičnega oblikovanja v ospredju in zagotavljanja virov za obdelavo v ozadju. Razvojni komplet EPC660 proizvajalca ESPROS Photonics odpravlja potrebo po teh opravilih tako, da zagotavlja popolno okolje za razvoj 3D ToF aplikacij, ki vključuje predhodno vgrajen sistem za 3D ToF slikovno obdelavo in povezano programsko opremo (slika 4).

    Komplet ESPROS, zasnovan za razvoj in hitro izdelavo prototipov, zagotavlja predhodno sestavljen sistem kamer, ki združuje nosilec vezja EPC660 CC, sestav optičnih leč in komplet osmih LEDic. Poleg sistema kamer procesorska plošča BeagleBone Black s 512 megabajti (Mb) RAM pomnilnika in 4 gigabajti (Gb) Flash pomnilnika služi kot gostiteljski krmilnik in vir za obdelavo aplikacij.

    ESPROS ponuja tudi programsko opremo za podporo razvojnega kompleta EPC660, ki jo lahko prenesete z njegovega spletnega mesta in odprete z geslom, ki ga lahko zahtevate pri lokalnem predstavniku tega podjetja. Ko razvijalci pridobijo dostop do programske opreme, preprosto zaženejo aplikacijo grafičnega uporabniškega vmesnika (GUI) z eno od več priloženih konfiguracijskih datotek, da začnejo upravljati sistem kamer. GUI aplikacija ponuja tudi okna za nadzor in prikaz za nastavitev dodatnih parametrov, vključno z nastavitvami prostorskega in časovnega filtra ter za ogled rezultatov na koncu. Z minimalno količino truda lahko razvijalci komplet uporabijo za začetek zajema globinskih zemljevidov v realnem času in njihovo uporabo kot vhodne podatke za lastno programsko opremo za aplikacije.

    3D ToF sistemi z izboljšano ločljivostjo
    Naprava za snemanje 320 x 240, kot je ESPROS epc660, se lahko uporablja za več aplikacij, vendar morda ne ponuja ločljivosti, potrebne za zaznavanje majhnih premikov v vmesnikih za kretnje ali za razlikovanje majhnih predmetov brez bistvenega omejevanja interesnega območja. Pri teh aplikacijah razpoložljivost že pripravljenih razvojnih kompletov, ki temeljijo na 640 x 480 ToF senzorjih, razvijalcem omogoča hitro izdelavo prototipov za visokoločljivostne aplikacije.

    Globinska kamera DepthEye Turbo proizvajalca Seeed Technology združuje 640 x 480 ToF senzor, štiri 850-nanometrske (nm) diode laserja s površinskim oddajanjem in vertikalno resonančno votlino (VCSEL), operativno vezje za osvetlitev in zaznavanje, napajanje in podporo za USB vmesnik v ločeni kocki z dimenzijami 57 x 57 x 51 mm. Podpora za programsko opremo se ponuja prek odprtokodnega repozitorija libPointCloud SDK github s podporo za platforme Linux, Windows, Mac OS in Android.

    Poleg C++ gonilnikov, knjižnic in vzorčne kode, distribucija libPointCloud SDK vključuje Python API za hitro izdelavo prototipov ter orodje za vizualizacijo. Po namestitvi distribucijskega paketa na gostiteljski razvijalni platformi lahko razvijalci kamero prek USB povezave povežejo s svojim računalnikom in takoj začnejo uporabljati orodje za vizualizacijo za prikaz faze, amplitude ali zemljevide oblakov točk, ki so pravzaprav izboljšani globinski zemljevidi, prikazani s teksturnimi površinami za omogočanje bolj gladke 3D slike (slika 5).

    Razvojni komplet AD-96TOF1-EBZ 3D ToF proizvajalca Analog Devices ponuja bolj odprto zasnovo strojne opreme, izdelane z dvema ploščama ter zasnovano za uporabo Raspberry Pi 3 Model B+ ali Raspberry Pi 4 proizvajalca Raspberry Pi kot gostiteljski krmilnik in lokalni vir za obdelavo (slika 6).

    Analogna sprednja plošča (AFE) kompleta vsebuje optični sestav, CCD matriko in medpomnilnike, pomnilnik ugnezdene programske opreme in procesor, ki upravlja celotno delovanje kamere, vključno z merjenjem časa osvetlitve, sinhronizacijo senzorjev in ustvarjanjem globinskih zemljevidov. Druga plošča hrani štiri laserske diode 850 nm VCSEL in gonilnike ter je zasnovana za povezovanje z AFE ploščo, tako da laserske diode obkrožajo optični sestav, kot je prikazano na sliki 6.

    Podjetje Analog Devices podpira komplet AD-96TOF1-EBZ z lastnim kompletom odprtokodne 3D ToF programske opreme, ki vključuje 3D ToF SDK ter vzorčno kodo in primeri kode za C/C++, Python in Matlab. Za podpiranje gostiteljskih aplikacij in nizkostopenjskih interakcij strojne opreme v omrežnem okolju je podjetje Analog Devices razdelilo SDK na gostiteljsko particijo, optimizirano za USB in omrežno povezljivost, ter nizkostopenjsko particijo, ki deluje na možnosti Embedded Linux in je zgrajena na podlagi Video4Linux2 gonilnika (V4L2) (slika 7).

    Ta SDK z možnostjo povezovanja z omrežjnimi aplikacijami, ki tečejo na gostiteljih, povezanih v omrežje, omogoča delo na daljavo s ToF sistemom strojne opreme za dostop do kamere in zajem globinskih podatkov. Tudi uporabniški programi lahko delujejo v Embedded Linux particiji in v popolnosti izkoriščajo napredne možnosti, ki so na voljo na tej ravni.

    Podjetje Analog Devices kot del distribucije programske opreme zagotavlja vzorčno kodo, ki prikazuje ključne nizkostopenjske delovne zmogljivosti, kot je inicializacija kamere, osnovno zajemanje sličic, oddaljen dostop ter zajem med platformami na gostiteljskem računalniku in lokalno z Embedded Linux možnostjo. Dodatne vzorčne aplikacije temeljijo na teh osnovnih operacijah, da bi prikazovale uporabo zajetih podatkov v aplikacijah višje ravni, na primer ustvarjanju oblaka točk. Vzorčna aplikacija pravzaprav prikazuje, kako lahko uporabljate model sklepanja globokih nevronskih mrež (DNN) za razvrščanje podatkov, ki jih ustvarja sistem kamer, v razrede. Ta vzorčna aplikacija DNN, napisana v programskem jeziku Python (dnn.py), prikazuje vsak korak v procesu, potreben za pridobivanje podatkov in pripravo njihovega razvrščanja v razrede s strani modela sklepanja (seznam 1).

    Tukaj se proces začne z uporabo metod OpenCV DNN (cv.dnn.readNetFromCaffe) za branje omrežja in povezanih uteži za obstoječi model sklepanja. V tem primeru gre pri modelu za implementacijo Caffe omrežja za zaznavanje Google MobileNet Single Shot Detector (SSD), znanega po doseganju visoke stopnje natančnosti z relativno majhnimi velikostmi modelov. Po nalaganju imen razredov s podprtimi identifikatorji in oznakami razredov vzorčna aplikacija prepozna razpoložljive kamere in izvede niz postopkov za inicializacijo (ni prikazano na seznamu 1).

    Glavnina vzorčne kode obravnava pripravo globinskega zemljevida (depth_map) in zemljevida IR (ir_map) pred njunim združevanjem (cv.addWeighted) v eno samo matriko za izboljšanje natančnosti. Na koncu koda prikliče še eno metodo OpenCV DNN (cv.dnn.blobFromImage), ki pretvori združeno sliko v štiridimenzionalno vrsto podatkov blob, ki je potrebna za sklepanje. Naslednja vrstica kode pridobljene podatke blob nastavi kot vhodne podatke za model sklepanja (net.setInput(blob)). Klic net.forward() prikliče model sklepanja, ki vrne rezultate razvrščanja v razrede. Preostali del vzorčne aplikacije prepoznava rezultate razvrščanja v razrede, ki presegajo predhodno nastavljen prag ter zanje ustvari oznako in vezni okvir, ki prikazuje zajete slikovne podatke, oznako, ki jo prepozna model sklepanja, in njeno razdaljo od kamere (slika 8).

    Kot prikazuje vzorčna DNN aplikacija proizvajalca Analog Devices, lahko razvijalci globinske zemljevide 3D ToF uporabljajo skupaj z metodami strojnega učenja, da bi ustvarjali bolj prefinjene funkcije aplikacij. Čeprav bodo aplikacije, ki zahtevajo odzive z nizko stopnjo latence, te funkcije bolj verjetno gradile s programskim jezikom C/C++, osnovni koraki ostajajo enaki.

    Industrijski robotski sistemi lahko z uporabo 3D ToF podatkov in visokozmogljivih modelov sklepanja varneje sinhronizirajo svoja gibanja z drugo opremo ali celo z ljudmi v okoljih »cobot«, kjer ljudje in roboti sodelujejo na majhni razdalji. Z drugačnimi modeli sklepanja lahko druga aplikacija uporablja 3D ToF kamero visoke ločljivosti za razvrščanje finih premikov v razrede za vmesnik za kretnje. Pri avtomobilskih aplikacijah lahko ta pristop pomaga pri izboljšanju natančnosti sodobnih sistemov za pomoč voznikom (ADAS), pri čemer v popolnosti izkorišča prednosti visoke časovne in prostorske ločljivosti, ki je na voljo v 3D ToF sistemih.

    Zaključek
    ToF tehnologije igrajo ključno vlogo v skoraj vseh sistemih, ki so kritično odvisni od natančnega merjenja razdalje med sistemom in drugimi predmeti. ToF optična tehnologija lahko zagotavlja tako visoko prostorsko ločljivost kot visoko časovno ločljivost, s čimer omogoča natančnejše razlikovanje med manjšimi predmeti in natančnejši nadzor njihove relativne razdalje.

    Vendar so se morali razvijalci soočiti s številnimi izzivi v povezavi z optično zasnovo, natančnim merjenjem časa in sinhroniziranim pridobivanjem signalov teh sistemov, da so lahko izkoristili to tehnologijo. Kot je prikazano, razpoložljivost predhodno ugnezdenih 3D ToF sistemov, kot je razvojna platforma AD-96TOF1-EBZ proizvajalca Analog Devices in razvojni komplet EPC660 proizvajalca ESPROS Photonics, odstranjuje te ovire v tej tehnologiji v industrijskih sistemih, vmesnikih za kretnje, avtomobilskih varnostnih sistemih in še kje drugje.

    www.digikey.com

    Seznam 1: Ta odlomek vzorčne aplikacije iz distribucije Analog Devices 3D ToF SDK prikazuje nekaj korakov, potrebnih za pridobivanje globine iz IR slik ter za njihovo razvrstitev v razrede z modelom sklepanja. (Vir kode: Analog Devices)

    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)