Apprendre à voir aux robots avec Unity

Le monde de la robotique est plein d'inconnues ! Qu'il s'agisse du bruit des capteurs ou du positionnement exact d'objets importants, les robots ont un besoin crucial de comprendre le monde qui les entoure pour fonctionner avec précision et robustesse. Nous avons précédemment fait la démonstration d'une tâche de prise et de placement dans Unity en utilisant le robot Niryo One pour prendre un cube dont la position et l'orientation sont connues. Cette solution ne serait pas très robuste dans le monde réel, car les emplacements précis des objets sont rarement connus a priori. Dans notre nouvelle démo sur l'estimation de la pose d'un objet, nous vous montrons comment utiliser le package de perception de vision par ordinateur d'Unity pour collecter des données et entraîner un modèle d'apprentissage profond afin de prédire la pose d'un objet donné. Nous vous montrons ensuite comment intégrer le modèle entraîné à un bras robotique virtuel ARM3 dans Unity pour simuler le système complet de prise et de dépose sur des objets aux poses inconnues et arbitraires.
Dans le monde réel, les robots opèrent souvent dans des environnements dynamiques auxquels ils doivent s'adapter. Ces applications exigent souvent que les robots perçoivent les objets pertinents et interagissent avec eux. Un aspect important de la perception et de l'interaction avec les objets est la compréhension de leur position et de leur orientation par rapport à un système de coordonnées, également appelée "pose". Les premières approches d'estimation de la pose reposaient souvent sur des techniques classiques de vision par ordinateur et sur des marqueurs fiduciaires personnalisés. Ces solutions sont conçues pour fonctionner dans des environnements spécifiques, mais elles échouent souvent lorsque ces environnements changent ou s'écartent de ce qui était prévu. Les lacunes introduites par les limites de la vision par ordinateur traditionnelle sont en train d'être comblées par de nouvelles techniques d'apprentissage profond prometteuses. Ces nouvelles méthodes créent des modèles capables de prédire la sortie correcte pour une entrée donnée en apprenant à partir de nombreux exemples.
Ce projet utilise des images et des étiquettes de pose réelles pour former un modèle permettant de prédire la pose de l'objet. Au moment de l'exécution, le modèle entraîné peut prédire la pose d'un objet à partir d'une image qu'il n'a jamais vue auparavant. Généralement, des dizaines de milliers d'images ou plus doivent être collectées et étiquetées pour que les modèles d'apprentissage profond soient suffisamment performants. La collecte de ces données dans le monde réel est fastidieuse, coûteuse et, dans certains cas comme la localisation d'objets en 3D, intrinsèquement difficile. Même lorsque ces données peuvent être collectées et étiquetées, le processus peut s'avérer biaisé, sujet aux erreurs, fastidieux et coûteux. Comment appliquer à votre problème des approches d'apprentissage automatique puissantes lorsque les données que vous recherchez sont hors de portée ou n'existent pas encore pour votre application ?
Unity Computer Vision vous permet de générer des données synthétiques comme solution efficace et efficiente pour vos besoins en données d'apprentissage automatique. Cet exemple montre comment nous avons généré des données étiquetées automatiquement dans Unity pour entraîner un modèle d'apprentissage automatique. Ce modèle est ensuite déployé dans Unity sur un bras robotique UR3 simulé à l'aide du Robot Operating System (ROS) pour permettre le pick-and-place avec un cube dont la pose est inconnue.

Les simulateurs, comme Unity, sont un outil puissant pour relever les défis de la collecte de données en générant des données synthétiques. Grâce à Unity Computer Vision, de grandes quantités de données parfaitement étiquetées et variées peuvent être collectées avec un minimum d'effort, comme nous l'avons montré précédemment. Pour ce projet, nous collectons de nombreux exemples d'images du cube dans différentes poses et conditions d'éclairage. Cette méthode de randomisation des aspects de la scène est appelée randomisation du domaine1. Des données plus variées permettent généralement d'obtenir un modèle d'apprentissage profond plus robuste.
Pour collecter des données avec le cube dans différentes poses dans le monde réel, nous devrions déplacer manuellement le cube et prendre une photo. Notre modèle a utilisé plus de 30.000 images pour s'entraîner, donc si nous pouvions le faire en seulement 5 secondes par image, il nous aurait fallu plus de 40 heures pour collecter ces données ! Et ce temps n'inclut pas l'étiquetage qui doit être effectué. Grâce à Unity Computer Vision, nous pouvons générer 30 000 images d'entraînement et 3 000 images de validation avec les étiquettes correspondantes en quelques minutes seulement ! La caméra, la table et la position du robot sont fixes dans cet exemple, tandis que l'éclairage et la position du cube varient de manière aléatoire dans chaque image capturée. Les étiquettes sont enregistrées dans un fichier JSON correspondant où la pose est décrite par une position 3D (x,y,z) et une orientation en quaternion (qx,qy,qz,qw). Bien que cet exemple ne fasse varier que la pose du cube et l'éclairage de l'environnement, Unity Computer Vision vous permet d'ajouter facilement de la randomisation à divers aspects de la scène. Pour réaliser l'estimation de la pose, nous utilisons une technique d'apprentissage automatique supervisée pour analyser les données et générer un modèle entraîné.

Dans l'apprentissage supervisé, un modèle apprend à prédire un résultat spécifique sur la base de l'apprentissage d'un ensemble d'entrées et de sorties correspondantes, d'images et d'étiquettes de pose dans notre cas. Il y a quelques années, une équipe de chercheurs a présenté2un réseau neuronal convolutionnel (CNN) capable de prédire la position d'un objet. Puisque nous nous intéressons à une pose 3D pour notre cube, nous avons étendu ce travail pour inclure l'orientation du cube dans la sortie du réseau. Pour entraîner le modèle, nous minimisons l'erreur la moins élevée au carré, ou distance L2, entre la pose prédite et la pose de référence. Après l'entraînement, le modèle a prédit l'emplacement du cube à 1 cm près et son orientation à 2,8 degrés (0,05 radians) près. Voyons maintenant si cela est suffisamment précis pour que notre robot réussisse à effectuer la tâche de prise et de placement !

Le robot que nous utilisons dans ce projet est un bras robotique ARM3 équipé d'une pince Robotiq 2F-140, qui a été introduit dans notre scène Unity à l'aide du package Unity Robotics URDF Importer. Pour gérer la communication, le package ROS-TCP Connector d' Unity Robotics est utilisé tandis que le package ROS MoveIt s'occupe de la planification et du contrôle des mouvements.
Maintenant que nous pouvons prédire avec précision la pose du cube grâce à notre modèle d'apprentissage profond, nous pouvons utiliser cette pose prédite comme pose cible dans notre tâche de prise et de placement. Rappelons que dans notre précédente démo Pick-and-Place, nous nous sommes appuyés sur la pose de l'objet cible. La différence ici est que le robot exécute la tâche de prise et de placement sans connaissance préalable de la position du cube et qu'il obtient uniquement une prédiction de la position à partir du modèle d'apprentissage profond. Le processus se déroule en 4 étapes :
Une image avec le cube cible est capturée par Unity
L'image est transmise à un modèle d'apprentissage profond entraîné, qui produit une pose prédite.
La pose prédite est envoyée au planificateur de mouvement MoveIt.
ROS renvoie à Unity une trajectoire que le robot doit exécuter pour tenter de ramasser le cube
À chaque itération de la tâche, le cube est déplacé vers un endroit aléatoire. Bien que nous connaissions la pose du cube en simulation, nous ne bénéficierons pas de cette information dans le monde réel. Ainsi, pour jeter les bases d'un transfert de ce projet vers un robot réel, nous devons déterminer la pose du cube à partir des seules données sensorielles. Notre modèle d'estimation de la pose rend cela possible et, dans nos tests de simulation, nous pouvons ramasser le cube de manière fiable 89 % du temps dans Unity !

Notre démo sur l'estimation de la pose d'un objet montre comment Unity vous donne la possibilité de générer des données synthétiques, d'entraîner un modèle d'apprentissage profond et d'utiliser ROS pour contrôler un robot simulé afin de résoudre un problème. Nous avons utilisé les outils de vision par ordinateur d'Unity pour créer des données d'entraînement synthétiques et étiquetées, et nous avons entraîné un modèle d'apprentissage profond simple pour prédire la pose d'un cube. La démo fournit un tutoriel qui vous explique comment recréer ce projet, que vous pouvez développer en appliquant d'autres éléments aléatoires pour créer des scènes plus complexes. Nous avons utilisé les outils de Unity Robotics pour communiquer avec un nœud d'inférence ROS qui utilise le modèle entraîné pour prédire la pose d'un cube. Ces outils et d'autres vous permettent d'explorer, de tester, de développer et de déployer des solutions au niveau local. Lorsque vous êtes prêt à faire évoluer votre solution, Unity Simulation vous permet d'économiser du temps et de l'argent par rapport aux systèmes locaux.
Et saviez-vous que les outils Unity Computer Vision et Unity Robotics sont gratuits ? Rendez-vous sur la page de démonstration de l'estimation de la pose d'objet pour commencer à les utiliser dès aujourd'hui !
Maintenant que nous pouvons ramasser des objets dont la pose est inconnue, imaginez ce que vous pourriez faire d'autre ! Et si des obstacles se dressent sur le chemin ? Ou plusieurs objets dans la scène ? Réfléchissez à la manière dont vous pourriez gérer cette situation, et gardez un œil sur notre prochain article !
J'ai hâte de lire notre prochain article ! Inscrivez-vous pour recevoir des mises à jour par courriel sur nos travaux en robotique ou en vision par ordinateur.
Vous pouvez également trouver d'autres projets de robotique sur notre GitHub Unity Robotics.
Pour d'autres projets de vision par ordinateur, visitez notre page Unity Computer Vision.
Notre équipe serait ravie de recevoir vos questions, vos commentaires ou vos suggestions ! N'hésitez pas à contacter Unity à l'adresse suivante : unity-robotics@unity3d.com.
Citations
J. Tobin, R. Fong, A. Ray, J. Schneider, W. Zaremba, P. Abbeel, "Domain Randomization for Transferring Deep Neural Networks from Simulation to the Real World" arXiv:1703.06907, 2017
J. Tobin, W. Zaremba, et P. Abbeel, "Domain randomization and generative models for robotic grasping," arXiv preprint arXiv:1710.06425, 2017
