Et ceci, bien sûr, est une victoire hors compétition! Mais nous avons également eu une expérience intéressante de débogage d'un robot situé à 2000 km de chez nous dans un garage à bateaux sur la côte norvégienne. Sous la coupe, une histoire sur la façon dont nous avons fait de la vision et dirigé des «cerveaux de nuage» pour les robots pendant la quarantaine à distance:
Au printemps, nous avons réalisé un prototype de l'ensemble du système de télécommande pour le streaming 3D et l' entraînement par un robot sur un YuMi à deux mains et rencontré une société norvégienne dont la solution nous est très utile pour diffuser un flux 3D de caméras Realsense - Aivero. Donc, après une période de travail difficile, les plans semblaient sans nuages: voler en Italie pour un mois d'hiver avec ma famille, de là pour voyager à des expositions de robotique en Europe et terminer le tout par un arrêt de quelques semaines dans une ville avec de beaux fjords à proximité - Stavanger, où discuter de l'intégration 3D codecs dans notre système et essayez de convaincre Aivero de rassembler quelques robots.
Qu'est-ce qui aurait pu mal tourner dans ce merveilleux plan ...
Assis en quarantaine pendant 2 semaines après mon retour (non sans incident) du lock-out italien, j'ai dû souffler la poussière de mon anglais parlé et écrit et exécuter la deuxième partie du plan déjà en Zoom, et non dans l'entourage des fjords.
Bien, voici comment regarder. La quarantaine a forcé beaucoup de gens à commencer sérieusement à travailler sur des moyens d'automatiser là où il n'est pas difficile de remplacer une personne. Surtout pour les pays occidentaux, où le salaire minimum est supérieur à 1500 euros, où la robotisation du travail manuel simple est pertinente même sans la situation épidémiologique actuelle.
Nous connectons différents robots
Permettez-moi de vous rappeler que nous avons formé des robots en utilisant des enregistrements de contrôle à distance. Ceux. le robot se connecte à Internet, à notre cloud et commence à envoyer des images 3D et des lectures de capteurs. Reçoit les commandes et les exécute. Dans cette logique, notre tâche est d'apprendre au processeur ML à se comporter comme un opérateur. La 3D est nécessaire pour rendre la scène en réalité virtuelle pour l'opérateur. C'est pratique et le ML devient beaucoup plus précis lors de la saisie d'objets lorsqu'il existe une carte de profondeur.
Comme prévu, nous pouvons connecter une variété de robots à notre cloud, mais en créer nous-mêmes toute la variété est un chemin très épineux. Nous nous concentrons sur leur cerveau, sur l'apprentissage.
En conséquence, nous avons convenu avec Aivero de créer un robot universel à un bras avec des yeux 3D par leurs pouvoirs, appelons-le "Unité", et nous devons faire toute la robotique cloud.
La priorité était la simplicité et le coût de la solution pour le client final. Et, bien sûr, la polyvalence. Nous voulons minimiser le seuil d'entrée pour automatiser le travail manuel simple. Idéalement, même un propriétaire de petite entreprise sans compétences particulières pourrait acheter ou louer notre «unité», l'installer sur le lieu de travail et la gérer.
Nous avons réfléchi pendant quelques semaines, testé les hypothèses pendant quelques mois et c'est ce qui s'est passé (version avec Jetson AGX à la base et une caméra de vue différente de celle du titre):
Et un projecteur de plus près:
Composition:
- Jetson NX
- 2 caméras 3D Realsense (une vue d'ensemble, l'autre pour la zone de travail)
- projecteur
- pompe à vide si nécessaire
- bras robotisé (Eva / UR / ABB YuMi) avec dépression ou prise mécanique
- Internet WiFi ou filaire
Un tel support télescopique avec une calculatrice et une pompe à vide à la base est placé à côté de la zone de travail du robot, se connecte à Internet (par exemple, via un code QR au WiFi) et commence immédiatement à résoudre la tâche avec peu ou pas de configuration.
Ici, vous pouvez estimer immédiatement le coût. Le bras robotique Eva le plus abordable est de 8000 euros (non fourni en Russie), et l'UR10 coûtera déjà près de 50000 euros, mais ici il faut noter que l'UR revendique une fiabilité beaucoup plus grande, donc il ne sera peut-être pas beaucoup plus cher sur le long terme. Et ils sont de moins en moins chers ces derniers temps. Le reste du kit coûte environ 2000 euros.
ABB YuMi IRB 14050
Nous avons déjà eu affaire à un YuMi à deux mains , mais ici nous avons essayé une nouvelle version de l'IRB14050, qui n'est essentiellement qu'une main coupée.
En bref ce que j'ai aimé:
- précision et exécution mécanique
- haute sensibilité aux collisions et amortisseurs sur les articulations
et je n'ai pas aimé:
- difficile à résoudre à distance les collisions et les situations d'urgence
- le petit mouvement angulaire de certaines articulations rend les trajectoires assez difficiles pour des mouvements apparemment simples, qui ne sont pas difficiles pour la cinématique d'autres bras à 6 coordonnées
- faible capacité de charge par rapport aux analogues
- nécessite en outre le téléchargement (et parfois le débogage) d'un programme dans son propre langage de programmation depuis ABB, qui traite les commandes TCP à partir d'un ordinateur
Et pas brièvement.
C'est là que nous avons passé le plus de temps. La recette du lancement n'est pas du tout simple:
- Prenez une machine Windows car sinon vous ne pourrez pas installer RobotStudio d'ABB.
- https://github.com/BerkeleyAutomation/yumipy RAPID ( ABB) ( , ), python API YuMi IRB 14050 IRB 14000.
- , IRB14000 urdf ROS moveit. IRB14000, IRB14050.
- ROS moveit Python API .
- FlexPendant for OmniCore, .
Mais, bien sûr, ce n'est qu'une trajectoire possible de la façon dont vous pouvez faire obéir YuMi, et toutes les petites choses sur lesquelles vous pouvez trébucher ne sont pas à mentionner ici, bien sûr.
Eva
En bref ce que nous avons aimé:
- Bien sûr le prix
- API simple et concise
Et les inconvénients:
- pas de détection de collision (annoncé dans le communiqué d'automne)
- précision de positionnement - le fabricant doit encore y travailler, mais nous en avons assez
Bien sûr, la facilité de gestion captive:
pip install evasdk
et
import evasdk
eva = evasdk.Eva(host_ip, token)
with eva.lock():
eva.control_wait_for_ready()
eva.control_go_to([0, 0, 0, 0, 0, 0])
Et le bras robotique est sorti! et exécute.
Non, bien sûr, nous avons pu déborder les journaux dans la télécommande, après quoi il a cessé d'écouter. Mais nous devons rendre hommage au fabricant - la création d'un problème dans sa gita a suffi à lui en comprendre les raisons (et a conduit à quelques appels avec tout un conseil sur nos problèmes).
Et en général, Automata (producteur d'Eva) est génial! J'espère qu'ils pourront se développer et se développer davantage sur le marché de la robotique, rendant les robots beaucoup plus abordables et plus faciles qu'ils ne le sont actuellement.
UR
Aimé:
- excellente mécanique et haute précision
- grandes plages d'angles d'articulation, ce qui facilite la planification de trajectoire
- les collisions peuvent être résolues dans VNC Viewer en se connectant à l'ordinateur du robot
- bien débogué dans l'infrastructure ROS
Moins:
- OS obsolète sur le contrôleur UR, il n'y a pas eu de mises à jour de sécurité depuis environ un an et demi
- ce n'est toujours pas le moyen de communication le plus moderne, bien qu'il soit bien couvert par les bibliothèques ouvertes disponibles
Depuis python, le bras robotique est disponible dans deux scénarios principaux:
- Installez https://github.com/SintefManufacturing/python-urx et profitez-en. La liste est légèrement plus longue que dans le cas d'evasdk, donc je ne la donnerai pas. Il existe également des problèmes de compatibilité connus avec les nouveaux bras robotiques, à en juger par le suivi des problèmes. Quelque chose qui devait également être corrigé pour vous-même, tk. tous les modes de mouvement n'ont pas été mis en œuvre dans la bibliothèque, mais ce sont des subtilités.
- “ROS-” (https://github.com/ros-industrial/universal_robot). , ROS , : UR moveit ( ROS, , , ).
Nous essayons d'éviter les ROS car une partie de ses fonctions (courtier de messages) est assurée par rabbitmq dans notre système, et il y a une complication sérieuse de la pile technologique utilisée. Donc, pour le cas où vous devez contourner des obstacles, nous encapsulons ROS dans un microservice côté serveur.
Maintenant le truc!
Pour que vous compreniez, UR est:
Ie. tout éternuement est autorisé sur l'écran tactile du robot. Et pour torturer notre collègue d'Aivero pas 5 fois par jour, en vous rendant au garage à bateaux, vous devez en quelque sorte y entrer à distance.
Il s'est avéré que le contrôleur UR avait linux installé (et d'ailleurs, pas le processeur x86 le plus faible).
Nous tapons ssh IP ... utilisateur: root, mot de passe: easybot.
Et vous êtes sur Debian Wheezy.
Nous prenons donc et installons le serveur VNC et nous nous trouvons le maître complet du robot! (Ici, il suffit de noter que Wheezy n'a pas été mis à jour depuis 2 ans déjà et que vous ne pourrez pas simplement prendre et installer un serveur vnc en raison de registres obsolètes. Mais il existe un lien vers le «fichier magique» qui vous permet de le faire).
En passant, Universal Robots, lorsque nous leur avons montré notre démo, a déclaré qu'une telle télécommande nécessitait une nouvelle procédure de certification de sécurité. C'est suffisant. Il est très curieux de savoir comment Smart Robotics fait avec cela en général. Je ne peux pas imaginer que les variables de ciblage de la vision par ordinateur puissent être sûres à 100% pour les autres.
Il est temps d'apprendre au robot à saisir les boîtes
Permettez-moi de vous rappeler que nous montrons ce qu'un robot devrait faire en VR:
Ceux. pour chaque mouvement, nous avons enregistré l'apparence de la scène et le type de commande, par exemple:
{“op": "pickup_putdown_box",
"pos1": [441.1884, -112.833069, 151.29303],
"pos2": [388.1267, 91.0179138, 114.847595],
"rot1": [[0.9954941, 0.06585537, -0.06822499], [0.0917332, -0.851038456, 0.517028868], [-0.0240128487, -0.52095747, -0.85324496]],
"rot2": [[0.992139041, 0.102700718, -0.07150351], [0.100485876, -0.99436, -0.0339238755], [-0.0745842, 0.026472155, -0.996863365]],
"calibration": [[-0.01462146, 0.9814359, -0.191232175, 551.115051], [0.9987302, 0.0051134224, -0.0501191653, -6.613386], [-0.0482108966, -0.191722155, -0.9802644, 771.933167]],
"box": [[474.331482, -180.079529, 114.765076], [471.436157, -48.88102, 188.729553], [411.868164, -180.27713, 112.670532], [476.105164, -148.54512, 58.89856]],
"source": "operator"}
En général, cela nous suffit pour entraîner les grilles pour déterminer la boîte englobante d'un objet dans l'espace et où le saisir.
Nous nous asseyons donc pendant une demi-heure et montrons au robot comment jongler avec 4 types de boîtes, nous obtenons environ 100 exemples. On appuie sur le bouton magique ... enfin, plus précisément sudo docker run -e INPUT_S3_FOLDER = ... OUTPUT_S3_FOLDER = ... rembrain / train_all_stages: dev . Et allons dormir. Dans la matinée, le docker envoie un message au processeur ML pour mettre à jour les poids, et en haletant (bien que les robots aient été testés gratuitement par les fabricants, ils coûtent beaucoup d'argent), nous lançons et ...
OOPS ... Je
dois dire qu'aucun robot n'a été blessé lors du débogage. Je pense uniquement à cause d'une chance incroyable.
Un jour, mon fils de 2 ans est venu et a décidé de jouer avec le tracker VR. Il monta sur une chaise, la prit du rebord de la fenêtre ... Et envoya l'UR10 dans un voyage inimaginable, poussant la barre de caméra de côté et mettant le bras robotique dans une position plutôt délicate. J'ai donc dû ajouter des fusibles aux commandes. Et la deuxième caméra d'observation, tk. sinon, parfois, il n'est tout simplement pas visible où la main est allée et s'il est possible de la déplacer.
Et si ce n'est pas une blague, la précision de détection de ces boîtes simples dans nos tests a dépassé 99,5% même avec un petit échantillon de formation de plusieurs centaines d'exemples. La principale source de problèmes ici n'est plus la vision par ordinateur, mais les complications associées: par exemple, certaines anomalies dans la disposition initiale des objets ou des interférences involontaires dans le cadre. Mais ensuite, nous créons un système d'apprentissage avec des opérateurs en boucle pour être prêts à tout, résoudre les problèmes sans impliquer des personnes en direct sur place.
Un autre algorithme, sur mon être dans le backend et un échec dans l'interface de l'interface utilisateur
bin-picking «bin-stuffing», .. . — . , .
, , . . .. , , . , .
, . , ( , ). - :
, .. , :
Backend
, websocket-, :
, Coordinator . , Rabbit mongoDB, , ( ). , .
, , backend- , ML .
UI
. , UI , . .
AWS console, Yandex console, , , , . .
, .
, -> -> , , , -> , .
, “”. , UX . — . UI robot Console .
bin-picking «bin-stuffing», .. . — . , .
, , . . .. , , . , .
, . , ( , ). - :
, .. , :
Backend
, websocket-, :
, Coordinator . , Rabbit mongoDB, , ( ). , .
, , backend- , ML .
UI
. , UI , . .
AWS console, Yandex console, , , , . .
, .
, -> -> , , , -> , .
, “”. , UX . — . UI robot Console .
Et après
Nous tournons une vidéo de l'installation et de la configuration du robot en 2 minutes, préparons du matériel pour la promotion sur plusieurs types de tâches.
En même temps, nous recherchons de nouvelles applications pratiques en plus de la cueillette de bacs compréhensible et populaire (personnellement, je rêve d'utiliser des robots sur un chantier de construction).
Je pense que dans quelques mois nous
Donc la quarantaine était bonne!