Gestengesteuerte Fernbedienung eines UR10-Roboters: Unterschied zwischen den Versionen
Zeile 166: | Zeile 166: | ||
* Opimierung der inversen Kinematik im Hinblick auf Performance und Genauigkeit: Ersetzen des numerischen Algorithmus durch ein ANFIS-Netzwerk | * Opimierung der inversen Kinematik im Hinblick auf Performance und Genauigkeit: Ersetzen des numerischen Algorithmus durch ein ANFIS-Netzwerk | ||
* Anwendung in einer Programmiersprache implementieren, die im Bezug auf Speicher und Durchlaufzeiten effizienter ist (z.B. C/C++) | * Anwendung in einer Programmiersprache implementieren, die im Bezug auf Speicher und Durchlaufzeiten effizienter ist (z.B. C/C++) | ||
</br> | |||
= Literatur = | = Literatur = |
Version vom 4. Juli 2017, 10:08 Uhr
![](/wiki/images/thumb/a/ab/Roboterarm_UR10.jpeg/250px-Roboterarm_UR10.jpeg)
Autoren: Kevin Penner
Betreuer: Prof. Goebel
Art: Bachelorarbeit
Thema der Arbeit
Als Hauptziel dieser Arbeit soll eine Anwendung in der MATLAB Umgebung implementiert werden, welche die Arm- und Handgesten einer Person unter Anwendung einer 3D-Kamera erfasst, diese verarbeitet und anschließend in eine vergleichbare Roboterarmstellung transformiert. Dabei sollen sowohl sicherheitsrelevante Aspekte, wie z. B. ein kollisionsfreies Arbeiten des Roboters, berücksichtigt werden, als auch die Rahmenbedingungen für einen späteren Greifvorgang geschafft werden, indem Handgesten erkannt werden können. Bei dem Roboterarm handelt es sich um den „Zweiarm-Knickroboter“ mit dem Namen UR10 der Firma Universal Robots.
Anforderungen
Anforderungen an Aktorik und Sensorik:
- Verwendung eines Kinect-Sensors zur Erkennung von Gelenkkoordinaten und Handgesten
- Verwendung eines UR10 Roboterarms zur Rekonstruktion menschlicher Gesten
Anforderungen an die verwendete Software/Programmierumgebung:
- Implementierung der Software in MATLAB
- Verwendung des Robot Operating System "Polyscope"
Softwareanforderungen:
- Handgesten erkennen für eine spätere Ansteuerung eines Greifers
- Filterung & Glättung der Gesten/Bewegungen des Benutzers
- Transformation der Gesten/Bewegungen in eine Roboterbewegung
- Sicherheitscheck der Rotorbewegungen in Form von Kollisionsüberprüfungen mit Objekten im Arbeitsbereich des Roboters
- Implementierung einer benutzerfreundlichen Anwendung unter Verwendung von akustischen Befehlen und einer detailierten Bedienungsanleitung
Anwendungsgebiete
- Heise-Artikel: GDC: NASA steuert Weltraum Roboter per Kinect
- New Atlas Artikel: Gesture-controlled computers and robotic nurses being developed for operating rooms
Grundlagen
In diesem Kapitel werden die technischen Grundlagen dieser Arbeit vermittelt. Hierbei handelt es sich zum einen um eine Beschreibung und die Funktionsweise der vorhandenen Hardware- und Softwarekomponenten, zum anderen um Grundlagen im Bereich der Gestensteuerung von technischen Systemen. Auf der Grundlage der verwendeten Hardware wurde so ein Konzept zur Gestensteuerung des Roboterarms aufgestellt.
Kinect-Sensor
![](/wiki/images/thumb/b/ba/Kinect_Metadaten_Gelenkkoordinaten.png/320px-Kinect_Metadaten_Gelenkkoordinaten.png)
Für die Erfassung des menschlichen Arms wird der Kinect-Sensor V2 der Firma Microsoft verwendet. Dieser besitzt neben einer RGB-Kamera einen Tiefensensor, welcher eine Kombination aus Infrarot-Projektor und Infrarot-Kamera ist (siehe Abbildung 2). Außerdem verfügt die Kinect-Hardware über ein Mikrofon-Array und eine eingebaute Intelligenz in Form eines Computers, welcher eine Sensordatenverarbeitung vollzieht und dadurch eine Skeletterkennung bei Menschen durchführt.
Für die Verwendung des Kinect-Sensors in MATLAB ist eine SDK notwendig. Diese SDK mit dem Namen „Image Acquisition Toolbox Support Package for Kinect for Windows Sensor“ kann in MATLAB über den Add-On Manager installiert werden und beinhaltet neben den Hardware Treibern eine Sammlung von Software Beispielen. Für die Nutzung dieser SDK ist jedoch eine MATLAB Version ab R2016a notwendig. Im Zuge dieser Arbeit wird die Toolbox der Version 16.2.0 verwendet.
Weitere Sepzifikationen des Kinect-Sensors befinden sich in folgender Tabelle [3]:
Beschreibung | Funktionen |
---|---|
Auflösung RGB-Kamera | 1920 x 1080 |
Auflösung Tiefensensor | 512 x 424 |
Max Distanz Tiefensensor | 4,5 m |
Min Distanz Tiefensensor | 0,5 m |
Bildfrequenz RGB-Kamera | 30 fps |
Bildfrequenz Tiefenkamera | 30 fps |
Horizontaler Sichtbereich Tiefenkamera | 70 deg |
Vertikaler Sichtbereich Tiefenkamera | 60 deg |
USB-Standard | 3 |
Unterstütztes OS | Windows 8 oder höher |
benötigte Grafikkarte | unterstützt DirectX 11.0 oder höher |
Die Skeletterkennung erfolgt auf der Kinect-Hardware. Neben dem Zugriff auf das Farb- und Tiefenbild der Kinect, lassen sich die Metadaten des Tiefenbildes in MATLAB auslesen. In diesen sind die 25 Gelenkkoordinaten im 3D Koordinatensystem der Kinect hinterlegt. In Abbildung 3 ist eine Auslistung der Gelenkkoordinaten sortiert nach ihrer Indexzahl abgebildet.
UR10 Roboterarm
Der aus Aluminium bestehende Industrieroboter UR10 ist der größte Knickroboterarm im Sortiment des Unternehmens Universal Robots (siehe Abbildung 1). Er besitzt sechs rotierende Gelenke, die von -360° bis 360 ° agieren. Durch eine maximale Traglast von 10 kg und einer maximalen Reichweite von 1,3 m ist der UR10 für Aufgaben in der Logistik (Verpackung und Palettierung), Montagearbeiten oder bei „Pick & Place“ Aufgaben (z. B. Sortieren von Objekten auf einem Fließband) prädestiniert. Die maximale lineare Geschwindigkeit des TCP von 1 m/s erlaubt es dem Roboter Automatisierungsaufgaben sehr schnell durchzuführen. Außerdem verfügt der Knickroboterarm über eine konfigurierbare Sensorik zur Messung der Drehmomente, die es ihm ermöglicht einen Sicherheitsstopp bei einer Kollision einzuleiten. Dies befähigt den Roboter ohne weitere Sicherheitssysteme in einem Umfeld mit dem Menschen zusammenzuarbeiten. Die Kommunikation mit dem Roboter kann über eine TCP/IP- Schnittstelle erfolgen, welche die Ansteuerung und Programmierung über einen PC ermöglicht. Weitere technische Spezifikation sind dem Datenblatt des UR10 zu entnehmen [4].
Für die Steuerung des Roboters in MATLAB, müssen sich Roboter und PC in einem lokalen Netzwerk befinden. So kann eine Übertragung von Befehlen erfolgen, die im Befehlssatz von Universal Robots hinterlegt sind [5].
Konzept der Gestensteuerung
Für die Aufstellung eines Konzepts zur Gestensteuerung des UR10 werden zunächst die kinematischen Aufbauten des menschlichen Arms und des Ur10 Roboterarms verglichen (siehe Abbildung 4). Hier fällt auf, dass der menschliche Arm im Vergleich zum Roboterarm einen zusätzlichen Freiheitsgrad in der Schulter besitzt. Dies befähigt den menschlichen Arm die Position des Ellbogens frei im Raum zu wählen, wohingegen dies beim UR10 nicht möglich ist. Dadurch ist die vollständige Rekonstruktion von Ellbogen- und Handposition mit dem UR10 nicht möglich.
Aufgrund dessen wurde eine Konzept gewählt, in welchem lediglich die Position und Orientierung der menschlichen Hand zuständig für die Position und Orientierung des Roboter-TCP ist. Die Position des Ellbogens wird hierbei vernachlässigt.
![](/wiki/images/thumb/0/00/Konzept_Gestensteuerung_UR10.png/600px-Konzept_Gestensteuerung_UR10.png)
Hardwareaufbau
Der Aufbau der Hardware ist der Abbildung 5 zu entnehmen. Der Benutzer kann mit dem System mittels eines Kinect-Sensors, Lautsprechers und einem Programmierhandgerät kommunizieren. Dabei erfasst der Kinect-Sensor die Gesten bzw. Armstellungen des Benutzers und schickt diese über die serielle Schnittstelle an den Rechner, der die Daten in der MATALB-Programmierumgebung verarbeitet. Für Aufforderungen an den Nutzer kann das Programm auf dem Rechner akustische Hinweise bzw. Befehle an den Benutzer zurücksenden. Die erfassten Bild- und Metadaten werden auf dem Rechner in eine Roboterarmstellung transformiert und über die TCP/IP-Schnittstelle an das Steuergerät des Roboters übermittelt. Außerdem besitzt der Benutzer die Option, mithilfe des Programmierhandgerätes einen direkten Eingriff auf den Roboter vorzunehmen (z. B. durch Betätigung des Not-Aus Schalters).
![](/wiki/images/thumb/3/30/Hardwareaufbau_Gestensteuerung_UR10.png/500px-Hardwareaufbau_Gestensteuerung_UR10.png)
Implementierung & Realisierung der Software
![](/wiki/images/thumb/c/c8/Programmablaufplan_Gestensteuerung_UR10.png/500px-Programmablaufplan_Gestensteuerung_UR10.png)
Der gesamte Ablaufplan der Software zur Gestensteuerung eines UR10 Roboters ist in Abbildung 6 zu sehen.
Zu Beginn des Programms werden die benötigten Daten mit den vorher eingestellten Konfigurationen aus dem Kinect-Sensor geladen. Aus diesen Daten lassen sich bestimmte Gelenkpositionen im Raum ermitteln. Da nicht alle Informationen benötigt werden, wird eine Vorauswahl getroffen. Darunter zählen Schulter-, Ellbogen-, Handgelenk-, Handposition und der Status der Hand, welcher aussagt, ob diese geschlossen oder geöffnet ist.
Die Armpositionen werden im Anschluss aus dem Koordinatensystem der Kinect in das Koordinatensystem des Roboters transformiert. Diese Transformation beinhaltet unter anderem Rotationen, Translationen und Skalierungen der Gelenkkoordinaten im 3D Raum. Für die Skalierung muss hierzu vor dem Hauptprogramm eine Kalibrierung durchgeführt werden. Diese wird benötitg, da die Länge des menschlichen Arms nicht der Länge des Roboterarms entspricht.
Die transformierten Gelenkkoordinaten der Hand werden mittels eines Kalman Filters einem Tracking und einer Glättung unterzogen, dem ein vorher erstelltes Bewegungsmodell zugrunde liegt [8]. Diese Position wird mit der Position aus dem vorherigen Zyklus verglichen. Bei nur kleinen Abweichungen zwischen zwei Zyklen, liegt die Bewegung in einer Totzone und der TCP des Roboters wird nicht bewegt.
Erst bei einer Überschreitung eines Grenzwertes bzw. einer größeren Bewegung, wird die Handposition nun mit einem Robotermodell des UR10 und einer vorgegebenen TCP-Orientierung (z. B. TCP soll nach unten zeigen) einer inversen Kinematik unterzogen. Die inverse Kinematik führt eine numerische Berechnung der Gelenkwinkel zum Erreichen dieser Position durch. Das Robotermodell wird mit DH-Parametern beschrieben, welche der Modellierung von Robotern bzw. kinematischer Ketten, die zueinander in Beziehung stehen, dienen. Dabei wird vom Nullpunkt des ersten Gelenks ausgegangen und schrittweise die kinematische Kette bis hin zum TCP beschrieben. Hierbei werden die relativen Positionen und die relative Orientierung zwischen zwei benachbarten Gelenke angegeben [9]. Für die diversen roboterspezifischen und kinematischen Funktionen wurde im Zuge dieser Arbeit die Robotic Toolbox | rvctools von Peter Corke verwendet, die eine Vielzahl an Funktionen liefert und eine ausführliche Dokumentation in Form eines PDF-Dokumentes beinhaltet [10].
Nach dieser Berechnung sind sowohl Gelenkwinkel als auch Greifstatus vorhanden und könnten an den Roboter geschickt werden. Da jedoch noch das Sicherheitsrisiko besteht, dass der Roboter bei diesen berechneten Gelenkwinkeln eine Kollision mit dem Umfeld verursacht, wird zusätzlich eine Kollisionsüberprüfung durchgeführt. Diese benötigt die 3D-Koordianten des TCP und die des Roboterellbogens, die mittels einer Vorwärtskinematik der Gelenkwinkel erzeugt werden. Außerdem benötigt der Sicherheitscheck eine Rekonstruktion des Arbeitsumfeldes, das mittels vereinfachter geometrischer Objekte im Raum erzeugt wird.
Ebenfalls wird überprüft, ob sich der TCP in einem vorher definierten Arbeitsraum befindet. Ist dieses der Fall, werden die Handkoordinaten der Kinect dazu verwendet, die Orientierung der Handfläche in die Orientierung des TCP überzuführen. Dies dient einer genaueren Rekonstruktion der Orientierung, die mithilfe der inversen Kinematik nicht gewährleistet ist.
Bevor die Gelenkwinkel an den Roboter übertragen werden, werden folgende finale Bedingungen geprüft:
- Abweichung zwischen der Soll-Position und Ist-Position darf einen definierten Schwellwert nicht überschreiten. Die Soll-Position wird durch die Handposition des Benutzers ermittelt. Die Ist-Position wird mittels der Vorwärtskinematik ermittelt, nachdem die Gelenkwinkel mit der inversen Kinematik berechnet wurden.
- Zwischen den Handpositionen zweier hintereinander folgender Zyklen muss ein eine vorher definierte Totzone überschritten werden.
- Es darf keine Kollision vorliegen.
Die Gelenkwinkel werden anschließend an den Roboter übermittelt. Die Übermittlung erfolgt über eine vorher konfigurierte TCP/IP-Schnittstelle. Außerdem wird sowohl die maximale Gelenkgeschwindigkeit, als auch die maximale Gelenkbeschleunigung an den Roboter übertragen. Der gesamte Vorgang wird für jeden Frame des Kinect-Sensors bzw. in jedem Zyklus durchgeführt.
Videoanleitung
Die geschriebene Software wird im folgendem Video präsentiert:
YouTube-Link
Ergebnisse
In diesem Kapitel wird ein Überblick über die funktionierenden Teilaspekte der Software gegeben. Außerdem werden Optimierungsansätze erläutert.
Fazit
Folgende Funktionaltäten deckt die geschriebene Software ab:
- Positionierung des Roboter-TCP mit der Hand
- Erkennung von Kollisionen und einfaches Einlernen weiterer Kollisionsobjekte
- Steuerung der TCP-Orientierung in einem Arbeitsbereich mittels einer Orientierungsänderung der Handfläche
- Stoppen und Starten der Software mittels einfacher Handgesten
- Erkennung von Handgesten für einen späteren Greifprozess (geschlossen/offen)
- Sprachausgabe für die Unterstützung des Benutzers innerhalb der Kalibrierung und im Hauptprogramm
Offene Punkte & Optimierungsansätze
Folgende Punkte bzw. Funktionalitäten sind in der Software/Anwendung denkbar:
- Montage und Installation eines Greifers, der mit Handgesten angesteuert werden kann. Dabei muss zusätzlich die Kollisionserkennung verändert werden, da die Umwelt ebenfalls mit dem Greifer kollidieren kann
- Verbesserung der Handgestenerkennung durch den Einsatz eines weiteren Sensors (z.B. Handschuh mit INS und Dehnungsmessstreifen
- Opimierung der inversen Kinematik im Hinblick auf Performance und Genauigkeit: Ersetzen des numerischen Algorithmus durch ein ANFIS-Netzwerk
- Anwendung in einer Programmiersprache implementieren, die im Bezug auf Speicher und Durchlaufzeiten effizienter ist (z.B. C/C++)
Literatur
- ↑ L. Valgma, „3D reconstruction using Kinect v2 camera,“ Tartu, 2016. | Weblink
- ↑ MathWorks Kinect, „mathworks.com,“ | Weblink
- ↑ E. Lachat, H. Macher, M.-A. Mittet, T. Landes und P. Grussenmeyer, „FIRST EXPERIENCES WITH KINECT V2 SENSOR FOR CLOSE RANGE 3D MODELLING,“ Straßburg, Frankreich, 2015. | Weblink
- ↑ Universal Robots, „Technische Daten UR10". | Weblink
- ↑ The URScript Programming Language Version 3.1 | Weblink
- ↑ Y. Al-Mashhadany und M. Al-Faiz, „Analytical Solution for Anthropomorphic Limbs Model, (IK of Human Arm),“ IEEE Symposium on Industrial Electronics and Applications, Kuala Lumpur, Malaysia, 2009
- ↑ Universal Robots, „Benutzerhandbuch UR10/CB3 Version 3.1,“ 2015. | Weblink
- ↑ G. Welch und G. Bishop, „An Introduction to the Kalman Filter,“ Chapel Hill, NC, 2006. | Weblink
- ↑ A. Colome, „Smooth Inverse Kinematics Algorithms for Serial Redundant Robots,“ Barcelona, 2011. | Weblink
- ↑ P. Corke, „Robotics Toolbox for MATLAB Release 10,“ 2017. | Weblink
→ zurück zum Hauptartikel: Studentische Arbeiten