Démarrer rapidement avec les applications de temps de vol 3D
Avec la contribution de Rédacteurs nord-américains de DigiKey
2020-03-25
L'imagerie de temps de vol (ToF) 3D fournit une alternative efficace à l'imagerie vidéo pour de nombreuses applications, notamment la sécurité industrielle, la navigation robotique, les interfaces de contrôle de mouvements, etc. Cette approche nécessite cependant une combinaison minutieuse de conception optique, de circuits de temporisation précis et de capacités de traitement des signaux, ce qui peut souvent poser des problèmes aux développeurs lors de l'implémentation d'une plateforme ToF 3D efficace.
Cet article décrit les nuances de la technologie ToF avant d'expliquer comment deux kits ToF 3D prêts à l'emploi (la plateforme de développement AD-96TOF1-EBZ d'Analog Devices et le kit d'évaluation epc660 d'ESPROS Photonics) peuvent aider les développeurs à prototyper rapidement des applications ToF 3D et à acquérir l'expérience nécessaire pour implémenter des conceptions ToF 3D qui répondent à leurs besoins uniques.
Qu'est-ce que la technologie ToF ?
La technologie ToF se base sur le principe familier selon lequel la distance entre un objet et un point source donné peut être calculée en mesurant la différence entre le temps de transmission de l'énergie par la source et le temps de réception de sa réflexion par la source (Figure 1).
Figure 1 : Les systèmes ToF calculent la distance entre le système et des objets externes en mesurant le délai entre la transmission de l'énergie et la réception de l'énergie réfléchie par un objet. (Source de l'image : Analog Devices)
Même si le principe de base reste le même, les solutions ToF sont très variées et offrent des capacités et des limites inhérentes aux technologies sous-jacentes, notamment les ultrasons, la télédétection par laser (LiDAR), les caméras ou encore les signaux RF à onde millimétrique :
- Les solutions ToF à ultrasons sont économiques, mais offrent une portée et une résolution spatiale des objets limitées.
- Les solutions ToF optiques présentent une portée et une résolution spatiale supérieures aux systèmes à ultrasons, mais sont limitées en cas de brouillard dense ou de fumée.
- Les solutions basées sur la technologie à onde millimétrique sont typiquement plus complexes et plus chères, mais peuvent fonctionner à une portée considérable, tout en fournissant des informations sur la vitesse et le cap de l'objet cible, malgré la fumée, le brouillard ou la pluie.
Les fabricants exploitent les capacités de chaque technologie selon les besoins pour répondre à des exigences spécifiques. Par exemple, les capteurs à ultrasons conviennent parfaitement à la détection d'obstacles lors du déplacement de robots sur une trajectoire ou lorsqu'un conducteur gare son véhicule. Quant à la technologie à onde millimétrique, elle fournit aux véhicules une capacité de détection longue distance qui permet de détecter des dangers en approche sur la route, même lorsque d'autres capteurs ne peuvent pas fonctionner correctement dans de mauvaises conditions météorologiques.
Les conceptions ToF peuvent se baser sur une seule paire émetteur-récepteur. Par exemple, une conception ToF optique simple nécessite seulement une LED pour éclairer la région d'intérêt et une photodiode pour détecter les réflexions provenant des objets qui se trouvent dans cette région. Cette conception en apparence simple nécessite toutefois des circuits de temporisation et de synchronisation précis pour mesurer le délai. De plus, des circuits de modulation et de démodulation peuvent être nécessaires pour faire la différence entre le signal lumineux et d'éventuelles sources en arrière-plan ou pour prendre en charge des méthodes à onde entretenue plus complexes.
La complexité de la conception augmente rapidement à mesure que les développeurs s'efforcent d'améliorer le rapport signal/bruit et d'éliminer les artefacts dans les systèmes ToF. Pour compliquer les choses, les solutions de détection plus avancées utilisent plusieurs émetteurs et récepteurs pour suivre plusieurs objets ou prendre en charge des algorithmes de suivi de mouvement plus sophistiqués. Par exemple, les systèmes à onde millimétrique utilisent souvent plusieurs récepteurs pour suivre le cap et la vitesse de plusieurs objets indépendants. (Voir l'article « Utilisation de kits radars à ondes millimétriques pour développer rapidement des conceptions de détection d'objet de précision ».)
Systèmes ToF optiques 3D
Les systèmes ToF optiques 3D renforcent le principe d'utilisation de plusieurs récepteurs en utilisant des capteurs d'imagerie typiquement basés sur un réseau de dispositifs à couplage de charges (CCD). Lorsqu'un ensemble de lentilles cible une région d'intérêt du réseau CCD, chaque dispositif de stockage de charges du réseau CCD est chargé grâce à la lumière réfléchie par un point correspondant dans cette région d'intérêt. Synchronisée avec un éclairage à onde entretenue ou pulsée, la lumière réfléchie atteignant le réseau CCD est essentiellement capturée dans une séquence de fenêtres ou de phases, respectivement. Ces données sont ensuite traitées pour créer une carte de profondeur 3D incluant des voxels (VOlume piXELs, pixels de volume) dont la valeur représente la distance jusqu'au point correspondant dans la région d'intérêt.
À l'instar des images dans une vidéo, les cartes de profondeur individuelles peuvent être capturées en séquence pour fournir des mesures dont la résolution temporelle n'est limitée que par la fréquence d'images du système de capture d'images et dont la résolution spatiale n'est limitée que par le réseau CCD et le système optique. Grâce à la disponibilité de plus grands imageurs CCD 320 x 240, des systèmes ToF optiques 3D à résolution supérieure sont utilisés des segments très variés, notamment l'automatisation industrielle, les véhicules aériens sans pilotes (UAV) et même les interfaces gestuelles (Figure 2).
Figure 2 : Grâce à sa fréquence d'images et à sa résolution spatiale élevées, un système ToF optique 3D peut fournir aux systèmes d'interface gestuelle des données détaillées, comme quelqu'un qui lève la main vers la caméra ToF (illustré ici). (Source de l'image : ESPROS Photonics)
Contrairement à la plupart des méthodes basées sur une caméra, les systèmes ToF 3D peuvent fournir des résultats précis malgré les ombres ou les conditions d'éclairage changeantes. Ces systèmes fournissent leur propre éclairage, typiquement à l'aide de lasers ou de LED infrarouges haute puissance, comme les LED IR Luxeon de Lumileds compatibles avec les vitesses de commutation en mégahertz (MHz) utilisées dans ces systèmes. Contrairement aux méthodes comme les caméras stéréoscopiques, les systèmes ToF 3D constituent une solution compacte capable de générer des informations détaillées sur la distance.
Solutions pré-conçues
Cependant, les développeurs rencontrent de nombreux défis de conception lors de l'implémentation des systèmes ToF 3D. Outre les circuits de temporisation cités plus haut, ces systèmes dépendent d'un pipeline de traitement des signaux minutieusement conçu et optimisé pour la lecture rapide des résultats provenant du réseau CCD pour chaque mesure de fenêtre ou de phase afin d'effectuer le traitement nécessaire à la conversion de ces données brutes en cartes de profondeur. Les imageurs ToF 3D avancés comme le modèle EPC660-CSP68-007 d'ESPROS Photonics combinent un réseau CCD 320 x 240 avec toutes les capacités de temporisation et de traitement des signaux nécessaires pour réaliser des mesures ToF 3D et fournir des données de distance 12 bits par pixel (Figure 3).
Figure 3 : L'epc660 d'ESPROS Photonics intègre un imageur 320 x 240 pixels avec un ensemble complet de circuits de temporisation et de contrôleurs, nécessaires convertir les données brutes de l'imageur en cartes de profondeur. (Source de l'image : ESPROS Photonics)
Le porte-puce à connecteur de carte enfichable EPC660-007 d'ESPROS Photonics permet de monter l'imageur epc660 sur une carte à circuit imprimé de 37,25 mm x 36,00 mm, avec des condensateurs de découplage et un connecteur de carte enfichable. Même si ce porte-puce fait office d'interface matérielle de base dans la conception d'un système ToF 3D, les développeurs doivent toujours réaliser une conception optique adaptée au niveau de l'entrée et fournir les ressources de traitement nécessaires au niveau de la sortie. Le kit d'évaluation epc660 d'ESPROS Photonics élimine ces tâches en fournissant un environnement de développement d'application ToF 3D complet composé d'un système d'imagerie ToF 3D pré-conçu et d'un logiciel associé (Figure 4).
Figure 4 : Le kit d'évaluation epc660 d'ESPROS Photonics fournit un système caméra ToF 3D pré-conçu et un logiciel associé pour utiliser des informations de profondeur dans les applications. (Source de l'image : ESPROS Photonics)
Conçu pour l'évaluation et le prototypage rapide, le kit d'ESPROS fournit un système caméra pré-assemblé combinant le porte-puce epc660 CC, un assemblage de lentilles optiques et un ensemble de huit LED. Outre le système caméra, une carte processeur BeagleBone Black avec 512 méga-octets (Mo) de RAM et 4 giga-octets (Go) de Flash sert de contrôleur hôte et de ressource de traitement d'application.
ESPROS propose également un logiciel de prise en charge du kit d'évaluation epc660 disponible en téléchargement sur son site Web et accessible avec un mot de passe disponible à la demande auprès du bureau de vente local de l'entreprise. Une fois qu'ils ont accès au logiciel, les développeurs lancent tout simplement une application d'interface utilisateur graphique (GUI) avec l'un des fichiers de configuration fournis pour commencer à utiliser le système de caméra. L'application GUI fournit également des fenêtres de contrôle et d'affichage pour configurer d'autres paramètres, notamment les paramètres de filtre spatial et temporel, et pour afficher les résultats. Les développeurs peuvent facilement utiliser le kit pour capturer des cartes de profondeur en temps réel et les utiliser comme entrée pour leur propre logiciel d'application.
Systèmes ToF 3D à résolution améliorée
Les imageurs 320 x 240 comme l'epc660 d'ESPROS sont adaptés à de nombreuses applications, mais leur résolution peut être insuffisante pour détecter d'infimes mouvements dans les interfaces gestuelles ou pour distinguer de petits objets sans restreindre fortement la plage d'intérêt. Pour ces applications, la disponibilité de kits de développement prêts à l'emploi basés sur des capteurs ToF 640 x 480 permet aux développeurs de réaliser rapidement le prototypage de leurs applications haute résolution.
La caméra de profondeur DepthEye Turbo de Seeed Technology intègre un capteur ToF 640 x 480, quatre diodes laser à cavité verticale et à émission par la surface (VCSEL) de 850 nanomètres (nm), des circuits d'éclairage et de détection, une alimentation et une prise en charge d'interface USB dans un cube autonome de 57 mm x 57 mm x 51 mm. La prise en charge logicielle est fournie via un référentiel GitHub pour SDK libPointCloud open-source, compatible avec les plateformes Linux, Windows, Mac OS et Android.
Outre les pilotes C++, les bibliothèques et le code d'exemple, le pack de distribution pour SDK (kit de développement logiciel) libPointCloud inclut une API Python pour le prototypage rapide, ainsi qu'un outil de visualisation. Après l'installation du pack de distribution sur leur plateforme de développement hôte, les développeurs peuvent connecter la caméra à leur ordinateur via USB et utiliser immédiatement l'outil de visualisation pour afficher les cartes de phase, d'amplitude ou de nuage de points, qui sont essentiellement des cartes de profondeur améliorées avec des surfaces texturées pour fournir une image 3D plus fluide (Figure 5).
Figure 5 : Utilisé avec la caméra de profondeur DepthEye Turbo de Seeed Technology, le pack logiciel associé permet aux développeurs de visualiser facilement les données ToF 3D sous différentes formes, notamment des nuages de points, comme illustré ici dans le volet principal. (Source de l'image : Seeed Technology/PointCloud.AI)
Le kit d'évaluation ToF 3D AD-96TOF1-EBZ d'Analog Devices fournit une conception matérielle plus ouverte basée sur deux cartes et conçue pour utiliser les systèmes Raspberry Pi 3 modèle B+ ou Raspberry Pi 4 de Raspberry Pi comme contrôleur hôte et ressource de traitement local (Figure 6).
Figure 6 : Le kit d'évaluation ToF 3D AD-96TOF1-EBZ d'Analog Devices combine deux cartes pour l'éclairage et l'acquisition de données avec une carte Raspberry Pi pour le traitement local. (Source de l'image : Analog Devices)
La carte de circuit d'entrée analogique du kit contient l'assemblage optique, le réseau CCD et les tampons, le stockage micrologiciel et un processeur qui gère le fonctionnement global de la caméra, notamment la temporisation de l'éclairage, la synchronisation du capteur et la génération de la carte de profondeur. La deuxième carte contient quatre diodes VCSEL de 850 nm et les pilotes. Elle est conçue pour se connecter à la carte de circuit d'entrée analogique de manière à ce que les diodes laser entourent l'assemblage optique, comme illustré à la figure ci-dessus.
Analog Devices prend en charge le kit AD-96TOF1-EBZ avec sa suite logicielle ToF 3D open-source qui inclut le SDK ToF 3D ainsi que du code d'exemple et des wrappers pour C/C++, Python et Matlab. Pour prendre en charge les applications hôtes et les interactions matérielles de bas niveau d'un environnement en réseau, Analog Devices divise le SDK en une partition hôte optimisée pour la connectivité USB et réseau, et une partition de bas niveau fonctionnant sous Linux embarqué et conçue sur un pilote Video4Linux2 (V4L2) (Figure 7).
Figure 7 : L'API du SDK ToF 3D d'Analog Devices prend en charge les applications exécutées sur l'hôte local sous Linux embarqué et les applications exécutées à distance sur des hôtes en réseau. (Source de l'image : Analog Devices)
Ce SDK compatible réseau permet aux applications exécutées sur des hôtes connectés au réseau de fonctionner à distance avec un système matériel ToF pour accéder à la caméra et capturer des données de profondeur. Les programmes utilisateur peuvent également être exécutés dans la partition sous Linux embarqué et exploiter pleinement les options avancées disponibles à ce niveau.
Dans le cadre de la distribution logicielle, Analog Devices fournit du code d'exemple qui démontre les principales capacités opérationnelles de bas niveau, comme l'initialisation de la caméra, la capture d'images de base, l'accès à distance et la capture interplateforme sur un ordinateur hôte et à l'échelle locale avec Linux embarqué. D'autres applications d'exemple se fondent sur ces opérations de base pour illustrer l'utilisation des données capturées dans les applications de plus haut niveau comme la génération de nuage de points. En fait, une application d'exemple démontre l'utilisation d'un modèle d'inférence de réseau neuronal profond (DNN) pour classifier les données générées par le système caméra. Écrite avec Python, cette application d'exemple DNN (dnn.py) présente chaque étape du processus nécessaire pour acquérir les données et préparer leur classification par le modèle d'inférence (Liste 1).
Copier 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)
Liste 1 : Cet extrait d'une application d'exemple du pack de distribution du SDK ToF 3D d'Analog Devices démontre les quelques étapes nécessaires pour acquérir les images infrarouges et de profondeur, et les classifier grâce à un modèle d'inférence. (Source du code : Analog Devices)
Ici, le processus commence par l'utilisation des méthodes DNN d'OpenCV (cv.dnn.readNetFromCaffe) pour lire le réseau et les pondérations associées pour un modèle d'inférence existant. Dans le cas présent, le modèle est une implémentation Caffe du réseau de détection MobileNet Single Shot Detector (SSD) de Google, reconnu pour sa haute précision avec des tailles de modèle relativement petites. Après le chargement des noms de catégorie avec les identifiants et les étiquettes pris en charge, l'application d'exemple identifie les caméras disponibles et exécute une série de routines d'initialisation (non illustrées dans la Liste 1).
La majeur partie du code d'exemple gère la préparation de la carte de profondeur (depth_map) et de la carte infrarouge (ir_map) avant de les combiner (cv.addWeighted) en un seul et même réseau pour améliorer la précision. Enfin, le code fait appel à une autre méthode DNN d'OpenCV (cv.dnn.blobFromImage), qui convertit l'image combinée en un type de données blob à quatre dimensions nécessaire pour l'inférence. La ligne de code suivante définit les données blob résultantes comme entrée du modèle d'inférence (net.setInput(blob)). La commande net.forward() fait appel au modèle d'inférence qui renvoie les résultats de classification. Le reste de l'application d'exemple identifie les résultats de classification qui dépassent un seuil prédéfini, puis génère une étiquette associée et un rectangle englobant qui affiche les données de l'image capturée, l'étiquette identifiée par le modèle d'inférence et la distance par rapport à la caméra (Figure 8).
Figure 8 : À l'aide de quelques lignes de code Python et de la bibliothèque OpenCV, l'application d'exemple DNN du pack de distribution du SDK ToF 3D d'Analog Devices peut capturer des images de profondeur, les classifier et afficher l'étiquette et la distance de l'objet identifié. (Source de l'image : Analog Devices)
Comme le démontre l'application d'exemple DNN d'Analog Devices, les développeurs peuvent utiliser des cartes de profondeur ToF 3D avec des méthodes d'apprentissage automatique pour créer des fonctionnalités d'application plus sophistiquées. Même si ces fonctionnalités reposent certainement sur le langage C/C++ pour les applications nécessitant des réponses à faible latence, les étapes de base restent les mêmes.
À l'aide de données ToF 3D et de modèles d'inférence hautes performances, les systèmes robotiques industriels peuvent synchroniser de manière plus sécurisée leurs mouvements avec d'autres équipements, voire avec des humains dans les environnements « cobotiques » où les humains et les robots collaborent étroitement. Avec des modèles d'inférence différents, une autre application peut utiliser une caméra ToF 3D haute résolution pour classifier d'infimes mouvements pour une interface gestuelle. Dans les applications automobiles, cette même approche permet d'améliorer la précision des systèmes d'aide à la conduite (ADAS), en exploitant pleinement la haute résolution temporelle et spatiale disponible avec les systèmes ToF 3D.
Conclusion
Les technologies ToF jouent un rôle majeur dans la quasi-totalité des systèmes qui dépendent essentiellement de la mesure précise de la distance qui les sépare d'autres objets. Parmi les technologies ToF, le système ToF 3D optique peut fournir à la fois une haute résolution spatiale et une haute résolution temporelle, ce qui permet une meilleure distinction des petits objets et une surveillance plus précise de leur distance relative.
Cependant, pour profiter pleinement de cette technologie, les développeurs doivent faire face à de nombreux défis liés à la conception optique, à la temporisation de précision et à l'acquisition de signaux synchronisés de ces systèmes. Comme indiqué ici, la disponibilité de systèmes ToF 3D pré-conçus, comme la plateforme de développement AD-96TOF1-EBZ d'Analog Devices et le kit d'évaluation epc660 d'ESPROS Photonics, élimine les obstacles et permet d'utiliser cette technologie dans les systèmes industriels, les interfaces gestuelles, les systèmes de sécurité automobile, et bien d'autres applications.
Avertissement : les opinions, convictions et points de vue exprimés par les divers auteurs et/ou participants au forum sur ce site Web ne reflètent pas nécessairement ceux de DigiKey ni les politiques officielles de la société.




