NOS SERVICES
LA SOCIÉTÉ
INFORMATION
LOGICIELS | MATÉRIELS | SERVICES |
|
|||||||
|
NOTRE ACCOMPAGNEMENT ET NOTRE EXPERTISE | NOS VALEURS AJOUTEES |
NOS SOLUTIONS ET REALISATIONS |
|
|||||||
|
|
Il existe différentes options de capteurs 3D pour développer des systèmes de perception de la profondeur, notamment la vision stéréoscopique avec des caméras, un système lidar et des capteurs de temps de vol. Chaque option a ses forces et ses faiblesses. Un système stéréo est généralement peu coûteux, suffisamment robuste pour une utilisation en extérieur et peut fournir un nuage de points de couleur haute résolution.
Il existe aujourd’hui divers systèmes stéréo prêts à l’emploi sur le marché. En fonction de facteurs tels que la précision, la référence, le champ de vision et la résolution, il arrive que les ingénieurs système aient besoin de construire un système personnalisé pour répondre aux exigences spécifiques des applications.
Dans cet article, nous décrivons d’abord les principales parties d’un système de vision stéréoscopique, puis nous fournissons des instructions sur la fabrication de votre propre caméra stéréo personnalisée à l’aide de composants matériels prêts à l’emploi et de logiciels open source. Cette configuration étant axée sur l’intégration, elle calcule une carte de profondeur de n’importe quelle scène en temps réel, sans avoir besoin d’un ordinateur hôte.
La vision stéréoscopique est l’extraction d’informations 3D à partir d’images numériques en comparant les informations d’une scène de deux points de vue. Les positions relatives d’un objet dans deux plans d’image fournissent des informations sur la profondeur de l’objet à partir de la caméra.
Un aperçu d’un système de vision stéréoscopique est présenté à la Figure 1 et comprend les étapes clés suivantes :
Figure 1 : Présentation d’un système de vision stéréoscopique
Passons en revue un exemple de conception de système stéréo. Voici les exigences pour une application robotisée mobile dans un environnement dynamique avec des objets en mouvement rapide. La scène d’intérêt mesure 2 m, la distance entre les caméras et la scène est de 3 m et la précision souhaitée est de 1 cm à une distance de 3 m.
L’erreur de profondeur est donnée par : ΔZ=Z²/Bf * Δd qui dépend des facteurs suivants :
Il existe différentes options de conception qui peuvent répondre à ces exigences. En fonction de la taille de la scène et des exigences de distance ci-dessus, nous pouvons déterminer la distance focale de l’objectif pour un capteur spécifique. Avec la référence, nous pouvons utiliser la formule ci-dessus pour calculer l’erreur de profondeur attendue à 3 m, afin de vérifier qu’elle répond aux exigences de précision.
Deux options sont présentées à la Figure 2, en utilisant des caméras à résolution inférieure avec une référence plus longue ou des caméras à résolution supérieure avec une référence moins longue. La première option est une caméra plus grande, mais qui a un besoin de calcul plus faible, tandis que la deuxième option est une caméra plus compacte, mais qui a un besoin de calcul plus élevé. Pour cette application, nous avons choisi la deuxième option, car une taille compacte est plus souhaitable pour le robot mobile et nous pouvons utiliser la solution intégrée Quartet pour TX2 qui dispose d’un GPU puissant intégré pour répondre aux besoins de traitement.
Figure 2 : Options de conception de système stéréo pour un exemple d’application
Pour cet exemple, nous montons deux caméras de 1,6 MP version carte Blackfly S à l’aide du capteur à obturateur global Sony Pregius IMX273 sur une barre imprimée en 3D à une référence de 12 cm. Les deux caméras ont des objectifs similaires à monture en S de 6 mm. Les caméras se connectent à la solution intégrée Quartet pour carte de support personnalisée TX2 à l’aide de deux câbles FPC. Pour synchroniser les caméras gauche et droite afin de capturer des images en même temps, un câble de synchronisation est fabriqué pour connecter les deux caméras. La figure 3 montre les vues avant et arrière de notre système stéréo intégré personnalisé.
Figure 3 : Vues avant et arrière de notre système stéréo intégré personnalisé
Le tableau suivant répertorie tous les composants matériels :
Composant |
Description |
Quantité |
Support Quartet avec module TX2 8 Go |
1 |
|
1,6 MP, 226 images par seconde, Sony IMX273, couleur |
2 |
|
Monture en S et filtre IR pour caméras niveau de carte couleur BFS |
2 |
|
Objectif à monture en S de 6 mm |
||
Câble FPC de 15 cm pour niveau carte Blackfly S |
2 |
|
Dissipateur thermique actif NVIDIA® Jetson™ TX2/TX2 4 Go/TX2i |
1 |
|
1 |
||
Barre de montage (fabriquez la vôtre) |
1 |
TOUS CES PRODUITS SONT DISPONIBLES CHEZ ES, CONSULTEZ-NOUS
Les deux objectifs doivent être ajustés pour que les caméras soient mises au point sur la plage de distances requise par votre application. Serrez la vis (encerclée en rouge sur la Figure 4) située sur chaque objectif pour maintenir la mise au point.
Figure 4 : Vue latérale de notre système stéréo montrant la vis de l’objectif
La bibliothèque SDK Spinnaker de Teledyne FLIR est préinstallée sur vos solutions intégrées Quartet pour TX2. Spinnaker est requis pour communiquer avec les caméras.
L’OpenCV version 4.5.1 ou une version plus récente est requise pour SGM, l’algorithme de correspondance stéréo que nous utilisons. Téléchargez le fichier zip contenant le code de cet article et décompressez-le dans le dossier StereoDepth. Le script pour installer OpenCV est OpenCVInstaller.sh. Saisissez les commandes suivantes dans un terminal :
Le programme d’installation vous demandera de saisir votre mot de passe administrateur. Le programme d’installation commencera à installer OpenCV 4.5.2. Le téléchargement et la création d’OpenCV peuvent prendre quelques heures.
Le code permettant de capturer des images stéréo et de les calibrer se trouve dans le dossier « Étalonnage ». Utilisez l’interface utilisateur graphique SpinView pour identifier les numéros de série des caméras gauche et droite. Pour nos paramètres, la caméra de droite est la caméra maître et la caméra de gauche est l’esclave. Copiez les numéros de série des caméras maître et esclave dans le fichier grabStereoImages.cpp aux lignes 60 et 61. Créez l’exécutable à l’aide des commandes suivantes dans un terminal :
Imprimez le motif à damier à partir de ce lien et fixez-le à une surface plane pour l’utiliser comme cible d’étalonnage. Pour de meilleurs résultats lors de l’étalonnage, dans SpinView, réglez Exposition Auto (Exposition automatique) sur Off (Désactivé) et réglez l’exposition de sorte que le motif à damier soit net et que les carrés blancs ne soient pas surexposés, comme illustré à la Figure 5. Une fois les images d’étalonnage collectées, le gain et l’exposition peuvent être réglés sur auto dans SpinView.
Figure 5 : Paramètres de l’interface utilisateur graphique SpinView
Pour commencer à collecter les images, saisissez
Le code doit commencer à collecter des images à une fréquence d’environ 1 image/seconde. Les images de gauche sont stockées dans le dossier images/left (images/gauche) et les images de droite sont stockées dans le dossier images/right (images/droite). Déplacez la cible de manière à ce qu’elle apparaisse dans chaque coin de l’image. Vous pouvez faire pivoter la cible, prendre des images de près et de loin. Par défaut, le programme capture 100 paires d’images, mais peut être modifié avec un argument de ligne de commande :
Cela ne collectera que 20 paires d’images. Veuillez noter que cela remplacera toutes les images précédemment enregistrées dans les dossiers. Certains exemples d’images d’étalonnage sont illustrées à la Figure 6.
Figure 6 : Exemples d’images d’étalonnage
Après avoir collecté les images, exécutez le code Python d’étalonnage en saisissant :
Cela générera deux fichiers appelés « intrinsics.yml » et « extrinsics.yml » qui contiennent les paramètres intrinsèque et extrinsèque du système stéréo. Le code suppose un damier carré de 30 mm par défaut, mais peut être modifié si nécessaire. À la fin de l’étalonnage, l’erreur moyenne quadratique RMS s’affiche, indiquant la qualité de l’étalonnage. L’erreur RMS typique pour un bon étalonnage doit être inférieure à 0,5 pixel.
Le code permettant de calculer la disparité en temps réel se trouve dans le dossier « Profondeur ». Copiez les numéros de série des caméras dans les fichiers live_disparity.cpp lignes 230 et 231. Créez l’exécutable à l’aide des commandes suivantes dans un terminal :
Copiez les fichiers « intrinsics.yml » et « extrinsics.yml » obtenus lors de l’étape de calibrage dans ce dossier. Pour exécuter la démonstration de la carte de profondeur en temps réel, saisissez
Cela affiche l’image de la caméra de gauche (image brute non corrigée) et la carte de profondeur (notre sortie finale). Certains exemples de sorties sont illustrés à la Figure 7. La distance de la caméra est codée par couleur selon la légende à droite de la carte de profondeur. La région noire dans la carte de profondeur signifie qu’aucune donnée de disparité n’a été trouvée dans cette région. Grâce au GPU NVIDIA Jetson TX2, il est possible d’exécuter jusqu’à 5 images/seconde à une résolution de 1 440 × 1 080 et jusqu’à 13 images/seconde à une résolution de 720 × 540.
Pour voir la profondeur à un point particulier, cliquez sur ce point dans la carte de profondeur et la profondeur sera affichée, comme illustré dans le dernier exemple de la Figure 7.
Figure 7 : Exemples d’images de la caméra de gauche et carte de profondeur correspondante. La carte de profondeur inférieure montre également la profondeur à un point particulier.
L’utilisation de la vision stéréoscopique pour développer une perception de la profondeur présente les avantages suivants : un bon fonctionnement en extérieur, capacité à fournir une carte de profondeur haute résolution et un accès très facile avec des composants prêts à l’emploi à faible coût. Selon les exigences, il existe un certain nombre de systèmes stéréo prêts à l’emploi sur le marché. S’il est nécessaire de développer un système stéréo intégré personnalisé, il s’agit d’une tâche relativement simple avec les instructions fournies ici.
Tous ces produits sont disponibles chez ES, consultez-nous