SEK | EUR | USD

Kom igång med 3D ToF-applikationer

Av Stephen Evanczuk

Bidraget med av Digi-Keys nordamerikanska redaktörer

3D TOF-bildbehandling är ett effektivt alternativ till videobehandling för flera olika tillämpningar, inklusive arbetarskydd, robotnavigering, gränssnitt för geststyrning och mycket annat. För detta krävs emellertid en väl avvägd blandning av egenskaper inom optisk design, precisionstidsstyrningskretsar och signalbehandling som ofta kan orsaka stora problem för utvecklare vid implementering av en effektiv 3D ToF-plattform.

I denna artikel tittar vi lite övergripande på ToF-teknik innan vi undersöker hur färdigköpta 3D ToF-satser (Analog Devices utvecklingsplattform AD-96TOF1-EBZ och ESPROS Photonics utvärderingssats EPC660) kan hjälpa utvecklare att snabbt ta fram prototyper för 3D ToF-applikationer och skaffa sig nödvändig erfarenhet för att kunna implementera 3D ToF-konstruktioner som uppfyller deras unika krav.

Vad är ToF-teknik?

ToF-teknik bygger på den välkända principen att avståndet mellan ett föremål och en källpunkt kan fastställas genom mätning av skillnaden mellan den tid energi överförs av källan och den tid dess reflektion tas emot av källan (figur 1).

Diagram över ToF-system som beräknar avståndet mellan systemet och externa föremålFigur 1: ToF-system som beräknar avståndet mellan systemet och externa föremål genom mätning av tidsfördröjningen mellan energiöverföring och att systemet tar emot energi som reflekteras av ett föremål. (Bildkälla: Analog Devices)

Även om de grundläggande principerna är desamma, varierar ToF-lösningar mycket. De har också både samma egenskaper och begränsningar som deras underliggande tekniker, inklusive ultraljud, LiDAR (light detection and ranging), kameror och RF-signaler med millimetervågteknik (mmWave):

  • ToF-lösningar med ultraljud är en billig lösning, men med begränsad räckvidd och rumslig upplösning för föremål
  • Optiska ToF-lösningar kan uppnå bättre räckvidd och rumslig upplösning än ultraljudssystem, men påverkas däremot negativt av tät dimma eller rök
  • Lösningar baserade på mmWave-teknik är typiskt både komplexare och dyrare, men de fungerar på stora avstånd samtidigt som de ger information om målföremålets hastighet och kurs – även vid rök, dimma eller regn

Tillverkare kan använda sig av egenskaperna för varje teknik för att uppfylla specifika krav. Ultraljudssensorer är till exempel mycket lämpliga för detektering av hinder när cobotar förflyttar sig eller när förare parkerar sina fordon. Med mmWave-teknik får fordon den typ av detekteringskapacitet för långa avstånd som behövs för att kunna detektera faror som närmar sig, även när andra sensorer inte fungerar på grund av tuffa väderförhållanden.

ToF-konstruktioner kan byggas kring ett enda sändar-/mottagarpar. Exempelvis kräver en enkel optisk ToF-design i princip endast en lysdiod för att lysa upp en intressant region (ROI) och en fotodiod för att detektera reflektioner från föremål inom den regionen. Denna, som det kan verka, enkla konstruktion kräver emellertid precisa tidsstyrnings- och synkroniseringskretsar för mätning av fördröjningen. Dessutom kan det behövas modulerings- och demoduleringskretsar för att urskilja belysningssignalen från bakgrundskällor eller som stöd för mer komplexa metoder med kontinuerlig våg.

Komplexiteten i konstruktionen ökar snabbt när utvecklare arbetar med att förbättra signal-brusförhållandet (SNR) och eliminera artefakter i ToF-system. Vad som ytterligare ökar komplexiteten är att mer avancerade detekteringslösningar behöver många sändare och mottagare för att spåra flera objekt eller stödja sofistikerade algoritmer för rörelsespårning. I mmWave-system används till exempel ofta flera mottagare för att spåra kurs och hastighet för flera oberoende objekt. (Se Använd millimetervågbaserade radarsatser för snabb utveckling av objektavkänningskonstruktioner med hög precision.)

ToF-system för 3D-optik

I 3D ToF-system för optik används fler mottagare, nämligen bildsensorer som normalt bygger på en matris med CCD-enheter (charge-coupled devices). När en uppsättning linser fokuserar en viss intresseregion (ROI) på CCD-matrisen laddas varje laddningslagringsenhet i CCD-matrisen av den returbelysning som reflekteras från en motsvarande punkt i samma intresseregion. Det reflekterade ljuset synkroniseras med belysning av pulsad eller kontinuerlig våg och når CCD-matrisen och registreras i en sekvens av fönster eller faser. Denna data bearbetas ytterligare för att generera en 3D-djupkarta med voxlar (VOlympiXLAR) vilkas värde representerar avståndet till motsvarande punkt i intresseregionen.

Precis som de enskilda bildrutorna i en video kan individuella djupkartor registreras i en sekvens för att få mätningar med tidsupplösning, vilken begränsas endast av bildrutehastigheten i bildtagningssystemet och med rumslig upplösning begränsad endast av CCD-matrisen och det optiska systemet. Med större CCD-bildgeneratorer (320 x 240 pixlar) finns det tillämpningar för ToF-system inom 3D-optik i många olika segment, inklusive industriautomation, obemannade luftfarkoster (UAV) och även gestgränssnitt (figur 2).

Bild på 3D ToF-system för optik som kan tillhandahålla gestgrässnittssystem med detaljerad dataFigur 2: Med hög bildrutehastighet och rumslig upplösning ger 3D ToF-system för optiska gestgränssnittssystem med detaljerad data, såsom en persons hand som höjs mot en ToF-kamera (se bilden). (Bildkälla: ESPROS Photonics)

Till skillnad mot de flesta kamerabaserade metoder kan 3D ToF-system leverera korrekta resultat, trots sämre eller föränderliga belysningsförhållanden. Dessa system har sin egen belysning, normalt genom laser eller högeffekts-IR-LED (till exempel Lumileds Luxeon IR-LED) vilka kan drivas vid de höga switchningshastigheter (MHz) som används i dessa system. Till skillnad mot metoder som stereoskopkameror är 3D ToF-system en kompakt lösning för generering av detaljerad avståndsinformation.

Färdiga lösningar

Vid implementering av 3D ToF-system kan utvecklare emellertid stöta på många designutmaningar. Förutom tidsstyrningskretsar som vi tittade på tidigare är dessa system beroende av en noggrant designad signalbehandling som är optimerad att snabbt läsa av resultatet från CCD-matrisen för varje fönster eller fasmätning och därefter göra den processning som krävs för att omvandla inhämtad rådata till djupkartor. Avancerade 3D ToF-bildgeneratorer som ESPROS Photonics ToF-bildgenerator EPC660-CSP68-007 med CCD-matris (320 x 240 pixlar) med de funktioner för tidsstyrning och signalbehandling som krävs för att utföra 3D ToF-mätningar och leverera 12-bitars avståndsdata per pixel (figur 3).

Diagram över ESPROS Photonics epc660 (klicka för att förstora)Figur 3: ESPROS Photonics epc660 integrerar en bildgenerator (320 x 240 pixlar) med de tidsstyrningskretsar och styrenheter som behövs för att omvandla rådata från bildgenerator till djupkartor. (Bildkälla: ESPROS Photonics)

ESPROS Photonics chiphållare EPC660-007 för kortkantskontakter monterar bildgeneratorn epc650 på ett kretskort (37,25 x 36,00 mm), komplett med avkopplingskondensatorer och kortkantskontakt. Även om denna chiphållare är avsedd för det grundläggande maskinvarugränssnittet i en 3D ToF-systemdesign, måste utvecklarna utföra lämplig optisk design i klientdelen och säkerställa processningsresurser i serverdelen. Med ESPROS Photonics utvärderingssats epc660 elimineras detta behov, tack vare dess kompletta applikationsutvecklingsmiljö för 3D ToF (inklusive ett färdigt 3D ToF-bildbehandlingssystem och tillhörande programvara) (figur 4).

Diagram över ESPROS Photonics utvärderingssats epc660 (klicka för att förstora)Figur 4: ESPROS Photonics utvärderingssats epc660 är ett färdigt 3D ToF-kamerasystem och tillhörande programvara för användning av djupdata i applikationer. (Bildkälla: ESPROS Photonics)

ESPROS-satsen är utformad för utvärdering och snabb prototypkonstruktion med hjälp av ett färdigt kamerasystem som kombinerar chiphållare epc660, optisk linsenhet och åtta lysdioder. Tillsammans med kamerasystemet fungerar ett BeagleBone Black-processorkort (512 MB RAM och 4 GB flash) som värdstyrenhet och processningskälla för applikationen.

ESPROS har också supportprogramvara för utvärderingssats epc660 som kan hämtas från webbplatsen (lösenord för denna kan beställas från företagets lokala säljkontor). När utvecklare har åtkomst till programvaran kan de enkelt köra en applikation i användargränssnittet (GUI) med en av flera tillgängliga konfigurationsfiler, för att börja använda kamerasystemet. I GUI-applikationen finns också fönster för kontroll och visning för inställning av ytterligare parametrar, bland annat för rumsliga och tillfälliga filterinställningar samt för visning av resultat. Utvecklare kan med minimal ansträngning använda satsen för att börja registrera djupkartor i realtid och använda dessa som indata i egen applikationsmjukvara.

3D ToF-system för förbättrad upplösning

En bildgenerator som ESPROS epc660 (320 x 240 pixlar) kan användas i många olika applikationer, men den kan sakna den upplösning som krävs för att detektera små rörelser i gestgränssnitt eller för urskiljning av små föremål utan att intresseintervallet begränsas för mycket. För dessa tillämpningar betyder färdiga utvecklarpaket baserade på ToF-sensorer (640 x 480 pixlar) att utvecklare snabbt kan bygga prototyper av högupplösta tillämpningar.

Seeed Technologys djupkamera DepthEye Turbo har en integrerad ToF-sensor (640 x 480 pixlar), fyra VCSEL-dioder (vertical-cavity surface-emitting laser) (850 nm), belysnings- och detekteringskretsar, strömförsörjning och USB-gränssnitt i en självständig enhet med måtten 57 x 57 x 51 mm. Programvarusupport tillhandahålls genom en libPointCloud SDK github-databas som stöder plattformar med Linux, Windows, Mac OS och Android.

Tillsammans med drivkretsar, bibliotek och exempelkod i C++, omfattar libPointCloud SDK-distributionen en Python API för snabb prototypkonstruktion och som visualiseringsverktyg. Efter installation av distributionspaketet på värdutvecklingsplattformen kan utvecklare ansluta kameran via USB till sin dator och omedelbart börja använda visualiseringsverktyget för att visa fas-, amplitud- eller punktmolnskartor, vilka kan beskrivas som förbättrade djupkartor som återges med texturytor för att ge en jämnare 3D-bild (figur 5).

Bild på Seeed Technologys DepthEye Turbo-programvara för djupkameraFigur 5: När det tillhörande programvarupaketet används tillsammans med djupkameran Seeed Technology DepthEye Turbo, kan utvecklare på ett enkelt sätt visualisera 3D ToF-data i olika renderingar inklusive punktmoln (se bild här över huvudfönster). (Bildkälla: Seeed Technology/PointCloud.AI)

Analog Devices 3D ToF-utvärderingssats AD-96TOF1-EBZ ger en öppnare hårdvarudesign med ett par kretskort. Den är utformad för användning av Raspberry Pis Raspberry Pi 3 Model B+ eller Raspberry Pi 4 som värdstyrenhet och lokal processningsresurs (figur 6).

Bild på Analog Devices ToF-utvärderingssats AD-96TOF1-EBZ 3DFigur 6: Analog Devices 3D ToF-utvärderingssats AD-96TOF1-EBZ kombinerar en tvåkortsenhet för belysning och dataregistrering med ett Raspberry Pi-kort för lokal processning. (Bildkälla: Analog Devices)

På satsens AFE-kort (analog front-end) finns den optiska enheten, CCD-matris och buffertar, den fasta programvaran samt en processor som hanterar den övergripande kameradriften inklusive tidsstyrning, sensorsynkronisering och generering av djupkartor. På det andra kortet finns fyra VCSEL-laserdioder (850 nm) och drivkretsar. Detta kort är avsett att anslutas till AFE-kortet så att laserdioderna omger den optiska enheten, som på figuren ovan.

Analog Devices stöder satsen AD-96TOF1-EBZ och dess 3D ToF-programsvit med öppen källkod och 3D ToF SDK samt exempelkod och wrappers för C/C++, Python och Matlab. Som stöd för både värdapplikationer och maskinvaruinteraktioner på låg nivå i nätverksmiljö delar Analog Devices in sin SDK i en värdpartition optimerad för USB och nätverksanslutning samt en låg-nivå-partition som körs på Embedded Linux och är byggd på en Video4Linux2-drivkrets (V4L2) (figur 7).

Diagram över Analog Devices 3D ToF SDK APIFigur 7: Analog Devices 3D ToF SDK API stöder applikationer som körs på lokal Embedded Linux-värd och applikationer som fjärrkörs på nätverksuppkopplade värdar. (Bildkälla: Analog Devices)

Tack vare denna nätverksaktiverade SDK kan applikationer som körs på nätverksanslutna värdar fjärrköras med ToF-maskinvarusystem för åtkomst till kamera och för registrering av djupdata. Användarprogram kan också köras i Embedded Linux-partitionen och utnyttja alla fördelar av avancerade tillval som finns tillgängliga på den nivån.

Som en del av programvarudistributionen tillhandahåller Analog Devices exempelkod som demonstrerar viktiga driftegenskaper på låg nivå, som kamerainitiering, registrering av grundläggande ramar, fjärråtkomst och registrering mellan plattformar på en värddator och lokalt med Embedded Linux. Ytterligare exempelprogram bygger på dessa grundläggande operationer för att illustrera användning av registrerad data i applikationer på högre nivå, som generering av punktmoln. Ett exempelprogram demonstrerar faktiskt hur en slutledningsmodell för ett djupt neuralt nätverk (DNN) kan användas för att klassificera data genererad av kamerasystemet. Detta DNN-exempelprogram (dnn.py) – skrivet i Python – visar varje steg i processen som krävs för att hämta data och förbereda klassificering av denna med hjälp av slutledningsmodellen (lista 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) 

Lista 1: Detta kodutdrag från ett exempelprogram i Analog Devices 3D ToF SDK-distribution demonstrerar de få steg som krävs för att hämta djup- och IR-bilder och klassificera dem med en slutledningsmodell. (Kodkälla: Analog Devices)

Här börjar processen genom användning av OpenCV:s DNN-metoder (cv.dnn.readNetFromCaffe) för läsning av nätverket och associerade vikter för en befintlig slutledningsmodell. I detta fall är modellen en Caffe-implementering av Googles MobileNet SSD-detekteringsnätverk (Single Shot Detector), vilket är känt för att uppnå hög noggrannhet med relativt liten modellstorlek. Efter laddning av klassnamn med stödda klassidentifierare och klassetiketter identifierar exempelprogrammet tillgängliga kameror och utför en serie initieringsrutiner (visas inte i lista 1).

Merparten av exempelkoden förbereder djupkartan (depth_map) och IR-kartan (ir_map) innan dessa kombineras (cv.addWeighted) till en enda matris för att förbättra noggrannheten. Slutligen anropar koden en annan OpenCV DNN-metod (cv.dnn.blobFromImage) vilken omvandlar den kombinerade bilden till den fyrdimensionella blob-datatyp som krävs för att göra slutledningar. Nästa kodrad sätter den resulterande blobben som indata för slutledningsmodellen (net.setInput(blob)). Anropet av net.forward() använder slutledningsmodellen, vilken returnerar klassificeringsresultaten. Resten av exempelprogrammet identifierar klassificeringsresultaten som överstiger en förinställd tröskel och genererar för dessa en etikett och avgränsningsruta som visar registrerad bilddata, den etikett som identifieras med slutledningsmodellen samt dess avstånd från kameran (figur 8).

Bild på DNN-exempelprogram i Analog Devices 3D ToF SDK-distributionFigur 8: Med hjälp av några få rader Python-kod och OpenCV-biblioteket registrerar DNN-exempelprogrammet i Analog Devices 3D ToF SDK-distributionen djupbilder, klassificerar dem och visar identifierade objekts etikett och avstånd. (Bildkälla: Analog Devices)

Precis som Analog Devices DNN-exempelprogram visar, kan utvecklare använda 3D ToF-djupkartor tillsammans med maskininlärningsmetoder för att skapa mer sofistikerade applikationsfunktioner. Även om applikationer som kräver liten fördröjning av svarstiden troligtvis kommer att bygga dessa funktioner med C/C++, förblir de grundläggande stegen desamma.

Genom att använda 3D ToF-data och slutledningsmodell med hög prestanda kan industriella robotsystem säkrare synkronisera sina rörelser med annan utrustning eller till och med tillsammans med människor i miljöer där samarbetande robotar (cobotar) arbetar tillsammans med människor. Med andra slutledningsmodeller kan en annan applikation använda en 3D ToF-kamera med hög upplösning för klassificering av små rörelser för gestgränssnitt. I fordonstillämpningar kan detta förhållningssätt bidra till att förbättra noggrannheten för avancerade förarassistanssystem (ADAS), genom att till fullo utnyttja den höga tidsupplösning och rumsliga upplösning som man har tillgång till med 3D ToF-system.

Slutsats

ToF-tekniker spelar en mycket viktig roll i nästan alla system som är kritiskt beroende av korrekt mätning av avstånd mellan systemet och andra föremål. Bland ToF-teknikerna kan optisk 3D ToF ge både hög rumslig upplösning och hög tidsupplösning, vilket i sin tur ger finare urskiljning mellan små föremål och mer precis övervakning av deras relativa avstånd.

För att kunna dra nytta av denna teknik har utvecklare stött på många hinder vid optisk design, precisionstidmätning och synkroniserad signalmottagning för dessa system. Som vi har sett kan man tack vare färdiga 3D ToF-system – som till exempel Analog Devices utvecklingsplattform AD-96TOF1-EBZ och ESPROS Photonics utvärderingssats EPC660 – ta sig förbi dessa hinder genom att tillämpa denna teknik i industrisystem, gestgränssnitt, säkerhetssystem inom fordonsindustrin och mycket annat.

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 Digi-Key Electronics or official policies of Digi-Key Electronics.

Om skribenten

Stephen Evanczuk

Stephen Evanczuk har arbetat i mer än 20 år med att skriva för och om elektronikbranschen inom många olika områden som maskinvara, programvara, system och applikationer – inklusive sakernas internet. Han har en kandidatexameni neurovetenskap om artificiella neuronnät och har arbetat inom rymdfartsindustrin med mycket distribuerade säkra system och metoder för acceleration av algoritmer. När han inte skriver artiklar om teknik och konstruktion arbetar han med applikationer för djupinlärning för igenkänningssystem och rekommendationssystem.

Om utgivaren

Digi-Keys nordamerikanska redaktörer