Und das ist natürlich ein Sieg außerhalb des Wettbewerbs! Wir hatten aber auch eine interessante Erfahrung mit dem Debuggen eines 2000 km von uns entfernten Roboters in einer Bootsgarage an der norwegischen Küste. Unter dem Schnitt eine Geschichte darüber, wie wir Robotern während der Quarantäne aus der Ferne Visionen verliehen und „Wolkenhirne“ beherrschten:
Im Frühjahr haben wir einen Prototyp des gesamten Fernbedienungssystems für 3D-Streaming und Robotertraining auf einem Zweihand-YuMi erstellt und ein norwegisches Unternehmen getroffen, dessen Lösung für die Übertragung eines 3D-Streams von Realsense-Kameras - Aivero - sehr nützlich ist. Nach einer schwierigen Arbeitszeit schienen die Pläne wolkenlos zu sein: für einen Wintermonat mit meiner Familie nach Italien zu fliegen, von dort aus zu Robotikausstellungen in Europa zu reisen und alles für ein paar Wochen in einer Stadt mit wunderschönen Fjorden in der Nähe zu beenden - Stavanger, wo über 3D-Integration gesprochen werden kann Codecs in unser System und versuchen, Aivero davon zu überzeugen, ein paar Roboter zusammenzubauen.
Was hätte in diesem wunderbaren Plan schief gehen können ...
Nachdem ich (nicht ohne Zwischenfälle) von der italienischen Sperre zurückgekehrt war, saß ich zwei Wochen lang in Quarantäne und musste den Staub von meinem gesprochenen und geschriebenen Englisch abblasen und den zweiten Teil des Plans bereits in Zoom ausführen, nicht im Gefolge von Fjorden.
Aber hier ist, wie man aussieht. Die Quarantäne zwang viele dazu, ernsthaft an möglichen Möglichkeiten zur Automatisierung zu arbeiten, bei denen es nicht schwierig ist, eine Person zu ersetzen. Insbesondere für westliche Länder, in denen der Mindestlohn höher als 1500 Euro ist und in denen die Robotisierung einfacher Handarbeit auch ohne die aktuelle epidemiologische Situation relevant ist.
Wir verbinden verschiedene Roboter
Ich möchte Sie daran erinnern, dass wir Roboter mithilfe von Fernbedienungsaufzeichnungen geschult haben. Jene. Der Roboter stellt eine Verbindung zum Internet und zu unserer Cloud her und sendet 3D-Bilder und Sensorwerte. Empfängt Befehle zurück und führt sie aus. In dieser Logik besteht unsere Aufgabe darin, dem ML-Prozessor beizubringen, sich wie ein Operator zu verhalten. 3D wird benötigt, um die Szene für den Bediener in virtueller Realität zu rendern. Dies ist praktisch und ML wird viel genauer, wenn Objekte erfasst werden, wenn eine Tiefenkarte vorhanden ist.
Wie geplant können wir eine Vielzahl von Robotern mit unserer Cloud verbinden, aber die gesamte Vielfalt selbst zu erstellen, ist ein sehr schwieriger Weg. Wir konzentrieren uns auf ihr Gehirn, auf das Lernen.
Aus diesem Grund haben wir uns mit Aivero darauf geeinigt, einen universellen einarmigen Roboter mit 3D-Augen zu entwickeln. Nennen wir ihn "Einheit", und wir müssen alle Cloud-Robotiken durchführen.
Die Priorität war die Einfachheit und die Kosten der Lösung für den Endkunden. Und natürlich Vielseitigkeit. Wir möchten die Eintrittsschwelle minimieren, um einfache Handarbeit zu automatisieren. Im Idealfall kann sogar ein Kleinunternehmer ohne besondere Fähigkeiten unsere "Einheit" kaufen oder mieten, sie an den Arbeitsplatz stellen und betreiben.
Wir haben ein paar Wochen nachgedacht, die Hypothesen ein paar Monate lang getestet und genau das ist passiert (Version mit Jetson AGX an der Basis und einer anderen Übersichtskamera als auf dem Titel):
Und ein genauerer Suchscheinwerfer:
Zusammensetzung:
- Jetson NX
- 2 3D Realsense-Kameras (eine Übersicht, die andere für den Arbeitsbereich)
- Scheinwerfer
- Vakuumpumpe bei Bedarf
- Roboterarm (Eva / UR / ABB YuMi) mit Vakuum oder mechanischem Griff
- WiFi Internet oder Kabel
Ein solcher Teleskopständer mit einem Taschenrechner und einer Vakuumpumpe an der Basis befindet sich neben dem Arbeitsbereich des Roboters, stellt eine Verbindung zum Internet her (z. B. über einen QR-Code zu WiFi) und beginnt sofort, die Aufgabe mit wenig oder keiner Konfiguration zu lösen.
Hier können Sie die Kosten sofort abschätzen. Der günstigste Eva-Roboterarm kostet 8000 Euro (nicht in Russland erhältlich), und der UR10 kostet fast 50 000 Euro. Hierbei ist jedoch zu beachten, dass UR eine viel höhere Zuverlässigkeit beansprucht, sodass er auf lange Sicht möglicherweise nicht viel teurer ist. Und sie werden in letzter Zeit billiger. Der Rest des Kits kostet ca. 2000 Euro.
ABB YuMi IRB 14050
Wir haben uns bereits mit einem Zweihand-YuMi befasst , aber hier haben wir eine neue Version des IRB14050 ausprobiert, bei der es sich im Wesentlichen nur um eine abgetrennte Hand handelt.
Kurz was mir gefallen hat:
- Präzision und mechanische Verarbeitung
- hohe Empfindlichkeit gegenüber Kollisionen und Dämpfern an den Gelenken
und mochte es nicht:
- Es ist schwierig, Kollisionen und Notfallsituationen aus der Ferne zu lösen
- Der kleine Winkelweg einiger Gelenke erschwert die Flugbahnen für scheinbar einfache Bewegungen, die für die Kinematik anderer 6-Koordinaten-Arme nicht schwierig sind
- geringe Tragfähigkeit im Vergleich zu Analoga
- Außerdem muss ein Programm in einer eigenen Programmiersprache von ABB hochgeladen (und manchmal auch debuggt) werden, das TCP-Befehle von einem Computer verarbeitet
Und nicht kurz.
Hier haben wir die meiste Zeit verbracht. Das Rezept für den Start ist überhaupt nicht einfach:
- Nehmen Sie einen Windows-Computer, weil Andernfalls können Sie das RobotStudio von ABB nicht installieren.
- 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, .
Aber dies ist natürlich nur ein möglicher Weg, wie YuMi zum Gehorchen gebracht werden kann, und all die kleinen Dinge, über die man stolpern kann, sind hier natürlich nicht zu erwähnen.
Eva
Kurz was uns gefallen hat:
- Natürlich der Preis
- API einfach und prägnant
Und die Nachteile:
- Keine Kollisionserkennung (angekündigt in der Herbstversion)
- Positioniergenauigkeit - der Hersteller muss noch daran arbeiten, aber wir haben genug
Die Faszination des Managements besticht natürlich:
pip install evasdk
und
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])
Und der Roboterarm ist raus! und führt.
Nein, dann konnten wir natürlich die Protokolle in der Handsteuerung überlaufen lassen, woraufhin sie nicht mehr zuhörten. Aber wir müssen dem Hersteller Tribut zollen - die Erstellung eines Problems in ihrer Gita reichte aus, um die Gründe zu verstehen (und führte zu einigen Gesprächen mit einem ganzen Rat über unsere Probleme).
Und im Allgemeinen ist Automata (Produzent von Eva) großartig! Ich hoffe, dass sie auf dem Robotikmarkt weiter wachsen und sich weiterentwickeln können, wodurch Roboter viel erschwinglicher und einfacher werden als jetzt.
UR
Gefallen:
- ausgezeichnete Mechanik und hohe Präzision
- große Bereiche von Gelenkwinkeln, was die Flugbahnplanung erheblich erleichtert
- Kollisionen können im VNC Viewer durch Herstellen einer Verbindung zum Computer des Roboters behoben werden
- gut debuggt in ROS-Infrastruktur
Minuspunkte:
- Veraltetes Betriebssystem auf dem UR-Controller, seit ungefähr anderthalb Jahren gibt es keine Sicherheitsupdates
- immer noch nicht die modernste Art der Kommunikation, obwohl sie von den verfügbaren offenen Bibliotheken gut abgedeckt wird
Ab Python ist der Roboterarm in zwei Hauptszenarien verfügbar:
- Installieren Sie https://github.com/SintefManufacturing/python-urx und genießen Sie. Die Auflistung ist etwas länger als im Fall von evasdk, daher werde ich sie nicht geben. Es sind auch Kompatibilitätsprobleme mit den neuen Roboterarmen bekannt, gemessen am Issue-Tracker. Etwas, das auch für dich korrigiert werden musste, tk. Nicht alle Bewegungsarten wurden in der Bibliothek implementiert, aber dies sind Feinheiten.
- “ROS-” (https://github.com/ros-industrial/universal_robot). , ROS , : UR moveit ( ROS, , , ).
Wir versuchen ROS zu vermeiden, weil Ein Teil seiner Funktionen (Message Broker) wird von rabbitmq in unserem System ausgeführt, und es gibt eine schwerwiegende Komplikation des verwendeten Technologie-Stacks. Für den Fall, dass Sie Hindernisse umgehen müssen, kapseln wir ROS in einen Microservice auf der Serverseite.
Nun der Trick!
Für Sie ist UR wie folgt:
Dh. Niesen ist auf dem Touchpanel des Roboters erlaubt. Und um unseren Kollegen aus Aivero nicht fünfmal am Tag zu foltern und zur Bootsgarage zu fahren, müssen Sie irgendwie aus der Ferne hineinkommen.
Es stellte sich heraus, dass auf dem UR-Controller Linux installiert ist (und übrigens nicht der schwächste x86-Prozessor).
Wir geben ssh IP ein ... Benutzer: root, Passwort: easybot.
Und du bist auf Debian Wheezy.
Also nehmen und installieren wir den VNC-Server und finden uns als kompletter Meister des Roboters wieder! (Hier müssen Sie nur beachten, dass Wheezy seit 2 Jahren nicht mehr aktualisiert wurde und Sie aufgrund veralteter Register einfach keinen vnc-Server mehr installieren können. Es gibt jedoch einen Link zu der „magischen Datei“, mit der Sie dies tun können.)
Übrigens, Universal Robots, als wir ihnen unsere Demo zeigten, sagte, dass eine solche Fernbedienung ein neues Sicherheitszertifizierungsverfahren erfordert. Fair genug. Es ist sehr merkwürdig, wie Smart Robotics damit im Allgemeinen umgeht. Ich kann mir nicht vorstellen, dass die Zielvariablen von Computer Vision für andere 100% sicher sein könnten.
Es ist Zeit, dem Roboter beizubringen, die Kisten zu greifen
Ich möchte Sie daran erinnern, dass wir zeigen, was ein Roboter in VR tun sollte:
Jene. Für jede Bewegung haben wir aufgezeichnet, wie die Szene aussah und welche Art von Befehl es war, zum Beispiel:
{“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"}
Im Allgemeinen reicht dies aus, um die Gitter zu trainieren, um den Begrenzungsrahmen eines Objekts im Raum zu bestimmen und wo es zu greifen ist.
Also sitzen wir eine halbe Stunde und zeigen dem Roboter, wie man mit 4 Arten von Kisten jongliert. Wir bekommen ungefähr 100 Beispiele. Wir drücken den magischen Knopf ... nun, genauer gesagt, Sudo Docker run -e INPUT_S3_FOLDER = ... OUTPUT_S3_FOLDER = ... rembrain / train_all_stages: dev . Und lass uns schlafen gehen. Am Morgen sendet der Docker eine Nachricht an den ML-Prozessor, um die Gewichte zu aktualisieren, und mit angehaltenem Atem (obwohl Roboter von den Herstellern kostenlos getestet wurden, kosten sie ernsthaftes Geld) starten wir und ...
OOPS ... Ich
muss sagen, dass beim Debuggen kein einziger Roboter beschädigt wurde. Ich denke nur wegen des unglaublichen Glücks.
Eines Tages kam mein zweijähriger Sohn und beschloss, mit dem VR-Tracker zu spielen. Er kletterte auf einen Stuhl, nahm ihn von der Fensterbank ... und schickte die UR10 auf eine unvorstellbare Reise, schob die Kamerastange beiseite und brachte den Roboterarm in eine ziemlich schwierige Position. Also musste ich den Bedienelementen einige Sicherungen hinzufügen. Und die zweite Beobachtungskamera, tk. Andernfalls ist manchmal einfach nicht sichtbar, wohin die Hand gegangen ist und ob es möglich ist, sie zu bewegen.
Und wenn es kein Scherz ist, dann hat die Erkennungsgenauigkeit derart einfacher Boxen in unseren Tests 99,5% überschritten, selbst bei einer kleinen Trainingsstichprobe von mehreren hundert Beispielen. Die Hauptursache für Probleme ist hier nicht mehr die Bildverarbeitung, sondern damit verbundene Schwierigkeiten: zum Beispiel einige Anomalien bei der anfänglichen Anordnung von Objekten oder unbeabsichtigte Interferenzen im Rahmen. Aber dann machen wir ein Lernsystem mit Bedienern in einer Schleife, um für alles bereit zu sein und Probleme zu lösen, ohne lebende Menschen vor Ort einzubeziehen.
Noch ein Algorithmus, über meine Anwesenheit im Backend und einen Fehler im UI-Frontend
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 .
Was weiter
Wir drehen in 2 Minuten ein Video über die Installation und Einrichtung des Roboters und bereiten Materialien für die Werbung für verschiedene Arten von Aufgaben vor.
Gleichzeitig suchen wir nach neuen praktischen Anwendungen neben der verständlichen und beliebten Müllsammlung (ich persönlich träume davon, Roboter auf einer Baustelle einzusetzen).
Ich denke, in ein paar Monaten werden wir
Die Quarantäne war also gut!