Kom raskt i gang med 3D-flyvetid (Time-of-Flight)-applikasjoner
Bidrag fra DigiKeys nordamerikanske redaktører
2020-03-25
Med 3D-flyvetid (Time-of-Flight – ToF)-avbildning får du et effektivt alternativ til videoavbildning for en rekke anvendelser, inkludert industriell sikkerhet, robotnavigasjon, grensesnitt med bevegelseskontroll og mye mer. Denne tilnærmingen krever imidlertid en nøyaktig blanding av optisk design, presisjonstidskretser og signalbehandlingsegenskaper som ofte fører til at utviklere strever med å implementere en effektiv 3D ToF-plattform.
I denne artikkelen blir først nyansene i ToF-teknologien beskrevet, og deretter blir det vist hvordan to 3D ToF-standardsett – Analog Devices’ AD-96TOF1-EBZ-utviklingsplattform og ESPROS Photonics’ EPC660-evalueringssett – kan hjelpe utviklere med raskt å lage en prototype for 3D ToF-applikasjoner og få nødvendig erfaring til å implementere 3D ToF-design som oppfyller deres unike behov.
Hva er ToF-teknologi?
ToF-teknologi er avhengig av det kjente prinsippet om at avstanden mellom et objekt og et kildepunkt blir funnet ved å måle forskjellen mellom tidspunktet når energien overføres av kilden, og tidspunktet når refleksjonen mottas av kilden (figur 1).
Figur 1: ToF-systemer beregner avstanden mellom systemet og eksterne objekter ved å måle tidsforsinkelsen mellom energioverføringen og systemets energimottak som reflekteres av et objekt. (Bildekilde: Analog Devices)
Selv om det grunnleggende prinsippet er det samme, varierer ToF-løsningene mye og har iboende egenskaper og begrensninger i de underliggende teknologiene, inkludert ultralyd, lysregistrering og avstandsmåling (LiDAR), kameraer og RF-signaler med millimeterbølge (mmWave):
- Med ToF-ultralydløsninger får du en rimelig løsning, men med begrenset rekkevidde og romlig oppløsning av objekter
- Med optiske ToF-løsninger kan du oppnå større rekkevidde og mer romlig oppløsning enn med ultralydsystemer, men de kan kompromitteres av tykk tåke eller røyk
- Løsninger som er basert på mmWave-teknologi, er vanligvis mer komplekse og dyrere, men de kan drives med betydelig rekkevidde samtidig som de gir informasjon om målobjektets hastighet og posisjon, til tross for røyk, tåke eller regn
Produsenter utnytter egenskapene til hver teknologi der det er nødvendig for å oppfylle de bestemte kravene. Utralydsensorer er for eksempel godt egnet til å oppdage hindringer når roboter beveger seg langs en bane eller når sjåfører parkerer kjøretøyene sine. Med mmWave-teknologien får kjøretøy en funksjon for langdistanseregistrering som er nødvendig for å oppdage farer som nærmer seg på veien, selv når andre sensorer ikke klarer å trenge gjennom dårlige værforhold.
ToF-design kan bygges rundt ett sender/mottaker-par. En enkel optisk ToF-utforming krever for eksempel kun én LED for å belyse et aktuelt område og en fotodiode for å oppdage refleksjoner fra objekter innen det aktuelle området. Denne tilsynelatende enkle utformingen krever likevel presise tids- og synkroniseringskretser for å måle forsinkelsen. I tillegg kan det bli nødvendig med modulering og demodulering for å skille mellom belysningssignaler fra bakgrunnskilder eller for å støtte mer komplekse og kontinuerlige bølgemetoder.
Designet blir mer komplekst ettersom utviklere arbeider med å styrke signal-til-støy-forholdet (SNR) og eliminere bildefeil i ToF-systemer. Ved ytterligere kompleksitet bruker mer avanserte registreringsløsninger flere transmittere og mottakere til å spore flere objekter eller støtte mer sofistikerte algoritmer for bevegelsessporing. mmWave-systemer kan for eksempel bruke flere mottakere til å spore posisjonen og hastigheten til flere uavhengige objekter. (Se, «Bruke mmWave-radarsett for rask utvikling av design for registrering av presisjonsobjekter».)
3D-optiske ToF-systemer
3D-optiske ToF-systemer fører ideen om å bruke flere mottakere videre ved å bruke avbildningssensorer basert på en matrise med ladningskoblede halvlederelementer (CCD-er). Når et sett med linser projiserer et aktuelt område på CCD-matrisen, lades hver ladelagringsenhet i CCD-matrisen av returbelysningen som reflekteres fra et tilsvarende punkt i det aktuelle området. Reflektert lys som når CCD-matrisen, registreres i hovedsak i flere etterfølgende vinduer eller faser og synkroniseres med pulserende eller kontinuerlig bølgebelysning. Disse dataene viderebehandles for å opprette et 3D-dybdekart som består av voxler (volumpiksler) der verdien representerer avstanden til det tilsvarende punktet i det aktuelle området.
I likhet med bilder i en video, kan individuelle dybdekart registreres etter hverandre for å gi målinger med tidsmessig oppløsning som kun er begrenset av bildefrekvensen for bilderegistreringssystemet, og med romlig oppløsning som kun begrenses av CCD-matrisen og det optiske systemet. Med større 320 x 240 CCD-bildegeneratorer tilgjengelig, kan 3D-optiske ToF-systemer med høyere oppløsning benyttes i mange ulike segmenter, inkludert industriell automatisering, ubemannede luftfartøy (UAV-er), og til og med bevegelsesgrensesnitt (figur 2).
Figur 2: Med høy bildefrekvens og romlig oppløsning kan 3D-optisk ToF gi detaljerte data til bevegelsesgrensesnittsystemer, for eksempel at en person løfter hånden sin mot ToF-kameraet, som vist her. (Bildekilde: ESPROS Photonics)
I motsetning til de fleste kamerabaserte metoder, kan 3D ToF-systemer gi nøyaktige resultater til tross for skygger eller skiftende lysforhold. Disse systemene har en egen belysning, vanligvis ved hjelp av lasere eller infrarøde LED-er med høy effekt, for eksempel Lumileds' Luxeon IR-lysdioder som kan drives ved megahertz (MHz)-omkoblingshastighetene som brukes i disse systemene. I motsetning til metoder som stereoskopiske kamera, gir 3D ToF-systemer en kompakt løsning for å generere detaljert avstandsinformasjon.
Forhåndsbygde løsninger
Det er imidlertid flere utformingsutfordringer for utviklere når de skal implementere 3D ToF-systemer. I tillegg til tidskretsene som ble nevnt tidligere, er disse systemene avhengige av et nøye utformet signalbehandlingsrør som er optimert til raskt å lese resultatene fra CCD-matrisen for hver vindu- eller fasemåling, og deretter fullføre behandlingen som er nødvendig for å gjøre om rådataene til dybdekart. Avanserte 3D ToF-bildegeneratorer, som ESPROS Phototonics' EPC660-CSP68-007 ToF-bildegeneratoren, kombinerer en 320 x 240 CCD-matrise med den maksimale tidsstyrings- og signalbehandlingskapasiteten som er nødvendig for å utføre 3D ToF-målinger og angi 12-bits avstandsdata per piksel (figur 3).
Figur 3: ESPROS Photonics epc660 integrerer en bildegenerator med 320 x 240 piksler og et komplett sett med tidskretser og styringer som er nødvendig for å konvertere rådata for bildegeneratoren til dybdekart. (Bildekilde: ESPROS Photonics)
ESPROS Photonics’ EPC660-007-brikkebærer for kortkantkontakter monterer epc650-bildegeneratoren på et 37,25 x 36,00 millimeter (mm) trykt kretskort (PC-kort) med avkoblingskondensatorer og kortkantkontakt. Selv om denne brikkebæreren er rettet mot det grunnleggende maskinvaregrensesnittet i et 3D-ToF-systemdesign, må utviklerne fullføre de nødvendige oppgavene for optisk design på front-end og levere behandlingsressurser på back-end. ESPROS Photonics' epc660-evalueringssett fjerner disse oppgavene ved å tilby et fullstendig 3D ToF-programutviklingsmiljø som inkluderer et forhåndsbygd 3D ToF-avbildningssystem og tilknyttet programvare (figur 4).
Figur 4: Med ESPROS Photonics' epc660-evalueringssett får du et forhåndsbygd 3D ToF-kamerasystem og tilknyttet programvare for bruk av dybdeinformasjon i applikasjoner. (Bildekilde: ESPROS Photonics)
Med ESPROS-settet, som er designet for evaluering og rask prototyping, får du et forhåndsmontert kamerasystem som kombinerer epc660 CC-brikkebæreren, optisk linse-enheten, og et sett med åtte LED-er. Et BeagleBone Black-prosessorkort på 512 megabyte (Mbytes) RAM og 4 gigabyte (Gbytes) flash fungerer, sammen med kamerasystemet, som vertskontroller og behandlingsressurs for applikasjonen.
Med ESPROS får du også en støtteprogramvare for epc660-evalueringssettet som kan lastes ned fra nettstedet og åpnes med et passord du kan få hos selskapets lokale salgskontor. Når de har fått tilgang til programvaren, kjører utviklere et grafisk brukergrensesnitt (GUI)-program med én av flere tilgjengelige konfigurasjonsfiler, slik at de kan begynne å betjene kamerasystemet. GUI-programmet har også styrings- og visningsvinduer for å angi flere parametere, inkludert romlige og tidsmessige filterinnstillinger, og for visning av resultatene. Utviklere kan enkelt bruke settet til å begynne å registrere dybdekart i sanntid og bruke dem som inndata i egen brukerprogramvare.
3D ToF-systemer med forbedret oppløsning
En 320 x 240 bildegenerator, for eksempel ESPROS epc660, har flere anvendelsesområder, men mangler kanskje oppløsningen som er nødvendig for å oppdage små bevegelser i bevegelsesgrensesnitt, eller for å skille små objekter fra hverandre uten å begrense det aktuelle området. Tilgjengeligheten av ferdige utviklingssett som er basert på 640 x 480 ToF-sensorer, gjør at utviklere raskt kan utvikle en prototype av applikasjoner med høy oppløsning.
Seeed Technologys DepthEye Turbo-dybdekamera integrerer en ToF-sensor på 640 x 480, fire 850 nanometer (nm) dioder med overflatelaser for vertikalt hulrom (VCSEL), driftskrets for belysning og registrering, strøm, og USB-grensesnittstøtte i en komplett blokk som måler 57 x 57 x 51 mm. Programvarestøtte leveres gjennom den åpne kildekoden libPointCloud SDK GitHub-, med støtte for Linux-, Windows-, Mac OS- og Android-plattformer.
I tillegg til C++-drivere, biblioteker og eksempelkode, inkluderer libPointCloud SDK-distribusjonen en Python-API for rask prototyping, samt et visualiseringsverktøy. Når de har installert distribusjonspakken på vertsutviklingsplattformen, kan utviklere koble kameraet til datamaskinen via USB og umiddelbart begynne å bruke visualiseringsverktøyet til å vise fase-, amplitude- eller punktskykart, som i hovedsak er forbedrede dybdekart gjengitt med teksturoverflater for å gi et jevnere 3D-bilde (figur 5).
Figur 5: Når den brukes i kombinasjon med Seeed Technologys DepthEye Turbo-dybdekamera, gjør den tilknyttede programvarepakken det mulig for utviklere enkelt å visualisere 3D ToF-data i en rekke gjengivelser, inkludert punktskyer, som vist her i hovedvindusruten. (Bildekilde: Seeed Technology/PointCloud.AI)
Analog Devices' AD-96TOF1-EBZ 3D ToF-evalueringssett gir en mer åpen maskinvaredesign som er bygget med et kortpar og utformet for å bruke Raspberry Pi 3 Model B+eller Raspberry Pi 3 Model B + eller Raspberry Pi 4 som vertsstyring og lokal behandlingsressurs (figur 6).
Figur 6: Analog Devices’ AD-96TOF1-EBZ 3D ToF-evalueringssett kombinerer en tokortsenhet for belysning og datainnsamling med et Raspberry Pi-kort for lokal behandling. (Bildekilde: Analog Devices)
Settets analoge front-end (AFE)-kort inneholder den optiske enheten, CCD-matrisen og bufferne, fastvarelagring og en prosessor som administrerer samlet kameradrift inkludert belysningstidsstyring, sensorsynkronisering og dybdekartgenerering. Det andre kortet inneholder fire 850 nm VCSEL-laserdioder og -drivere og er utformet for å bli koblet til AFE-kortet, slik at laserdiodene omgir den optiske monteringen som vist i figuren ovenfor.
Analog Devices støtter AD-96TOF1-EBZ-settet med den åpne kildekoden 3D ToF-programvarepakke med 3D ToF SDK og eksempelkode og wrappere for C/C++, Python og Matlab. Analog Devices deler SDK inn i en vertspartisjon som er optimert for USB- og nettverkstilkobling, og en lavnivåpartisjon som kjører med innebygd Linux og bygget på en Video4Linux2 (V4L2)-driver, for å støtte både vertsprogrammer og maskinvareinteraksjoner på lavt nivå i et nettverksmiljø (figur 7).
Figur 7: Analog Devices’ 3D ToF SDK API støtter programmer som kjører på den lokale innebygde Linux-verten, og programmer som kjører eksternt på nettverksbaserte verter. (Bildekilde: Analog Devices)
Med denne nettverksaktiverte SDK-en kan programmer som kjører på nettverkstilkoblede verter, arbeide eksternt med et ToF-maskinvaresystem for å få tilgang til kameraet og registrere dybdedata. Brukerprogrammer kan også kjøre i den innebygde Linux-partisjonen og dra full nytte av avanserte alternativer som er tilgjengelige på dette nivået.
Som en del av programvaredistribusjonen sørger Analog Devices for eksempelkoder som demonstrerer viktige driftsfunksjoner på lavt nivå, for eksempel kamerainitialisering, grunnleggende bildeopptak, ekstern tilgang og registrering på tvers av plattformer på en vertsdatamaskin og lokal registrering med innebygd Linux. Ytterligere eksempelapplikasjoner bygger på denne grunnleggende driften for å vise bruken av registrert data i applikasjoner på et høyere nivå, for eksempel punktskygenerering. En eksempelapplikasjon viser faktisk hvordan en interferensmodell for et dypt nevralt nettverk (DNN) kan brukes til å klassifisere data som er generert med kamerasystemet. Denne DNN-eksempelapplikasjonen (DNN.py) er skrevet i Python og viser hvert trinn som er nødvendig for å innhente data og forberede klassifiseringen av interferensmodellen (oppføring 1).
Copy
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)
Oppføring 1: Dette fragmentet fra en eksempelapplikasjon i Analog Devices’ 3D ToF SDK-distribusjonen viser de få trinnene som er nødvendige for å innhente dybde- og IR-bilder og klassifisere dem med en interferensmodell. (Kodekilde: Analog Devices)
Denne prosessen starter ved å bruke OpenCVs DNN-metoder (cv.dnn.readNetFromCaffe) til å lese nettverket og tilknyttede vekter for en eksisterende interferensmodell. I dette tilfellet er modellen en Caffe-implementering av registreringsnettverket Google MobileNet Single Shot Detector (SSD) som er kjent for å oppnå høy nøyaktighet med relativt små modellstørrelser. Når du har lastet inn klassenavnene med de støttede klasse-ID-ene og klasseetikettene, identifiserer eksempelapplikasjonen de tilgjengelige kameraene og utfører en rekke initialiseringsrutiner (ikke vist i oppføring 1).
Hoveddelen av eksempelkoden klargjør dybdekartet (depth_map) og IR-kartet (ir_map), før den kombinerer dem (cv.addWeighted) i en enkel matrise for å forbedre nøyaktigheten. Koden kaller til slutt opp en annen OpenCV DNN-metode (cv.dnn.blobFromImage) som konverterer det kombinerte bildet til den firedimensjonale blob-datatypen som er nødvendig for interferens. Den neste kodelinjen angir resulterende blob som inndata til interferensmodellen (net. setInput (blob)). Oppkallingen av net.forward() aktiverer interferensmodellen som returnerer klassifiseringsresultatene. Resten av eksempelapplikasjonen identifiserer klassifiseringsresultater som overskrider en forhåndsinnstilt terskel, og genererer en etikett for disse og en grenseboks som viser de registrerte bildedataene, etiketten som identifiseres av interferensmodellen, og avstanden fra kameraet (figur 8).
Figur 8: DNN-eksempelapplikasjonen i Analog Devices 3D ToF SDK-distribusjonen registrerer dybdebilder, klassifiserer dem og viser etiketten og avstanden til det identifiserte objektet ved hjelp av noen få linjer Python-kode samt OpenCV-biblioteket. (Bildekilde: Analog Devices)
Utviklere kan bruke 3D ToF-dybdekart sammen med maskinlæringsmetoder til å skape mer sofistikerte applikasjonsfunksjoner, slik DNN-eksempelapplikasjonen til Analog Devices viser. Selv om applikasjoner som krever respons med lav latens, sannsynligvis kommer til å bygge disse funksjonene med C/C++, er de grunnleggende trinnene de samme.
Med 3D ToF-data og interferensmodeller med høy ytelse kan industrielle robotsystemer synkronisere bevegelsene sine med annet utstyr eller til og med mennesker i «cobot»-miljøer der mennesker og roboter samarbeider tett, på en sikrere måte. Med ulike interferensmodeller kan et annet program bruke et 3D ToF-kamera med høy oppløsning til å klassifisere fine bevegelser for et bevegelsesgrensesnitt. I transportapplikasjoner kan denne tilnærmingen også bidra til å forbedre nøyaktigheten til avanserte førerassistentsystemer (ADAS) ved å dra nytte av den høye tidsmessige og romlige oppløsningen som er tilgjengelig med 3D ToF-systemer.
Konklusjon
ToF-teknologier spiller en viktig rolle i nesten hvilket som helst system som er avhengig av nøyaktig måling av avstand mellom systemet og andre objekter. Blant ToF-teknologiene kan optisk 3D ToF gi både høy romlig oppløsning og høy tidsmessig oppløsning, noe som gir et finere skille mellom mindre objekter og mer presis overvåking av den relative avstanden.
For å dra nytte av denne teknologien har utviklerne imidlertid måttet håndtere flere utfordringer knyttet til optisk design, presisjonstidsstyring og synkronisert signalinnsamling for disse systemene. Tilgjengeligheten av forhåndsbygde 3D ToF-systemer, som for eksempel Analog Devices' AD-96TOF1-EBZ-utviklingsplattform og ESPROS Photonics' EPC660-evalueringssett, fjerner disse hindringene for bruk av denne teknologien i industrielle systemer, bevegelsesgrensesnitt, sikkerhetssystemer for kjøretøy og mer.
Disclaimer: The opinions, beliefs, and viewpoints expressed by the various authors and/or forum participants on this website do not necessarily reflect the opinions, beliefs, and viewpoints of DigiKey or official policies of DigiKey.




