... oder statistischen Methoden und so weiter und so fort
repräsentieren.
Das heißt, ich habe meine Bewegung unterteilt, jetzt in mehreren
Segmenten.
Also das ist das Problem, was wir als erstes lösen müssen.
Und nicht nur auf dem Level, nicht nur auf Trajektorien-Level, wo wir
die Trajektoren, sondern wirklich auf Aufgaben-Level.
Also was gerade passiert.
Jetzt hat der Mensch die Tasse oder die Flasche berührt.
Jetzt hat er die hochgehoben.
Jetzt schenkt er ein, jetzt ist er fertig mit Einschenken.
Und das ist nicht nur die Segmentierung von dieser Trajektorie,
sondern die Segmentierung von der Aufgabe.
Das sind die zentralen Ereignisse, die während der Demonstration
erfolgen.
Und das ist das erste Thema, was wir hier behandeln.
Oder ein wichtiges, ein zentrales Thema, was wir hier auch behandeln
wollen.
Natürlich müssen wir hier die Bewegungen reproduzieren.
Also wie ich bereits erwähnt habe, zum Beispiel kontextabhängig haben
wir erkannt die Primitiven Eins, Zehn und Siebzehn sollen jetzt hier
ausgeführt werden über Inversikinematik, wenn wir zum Beispiel im
kathesischen Raum hier lernen oder ohne Inversikinematik, wenn wir im
Gelenkwinkelraum lernen.
Natürlich wollen wir auch Feedback haben über die Ausführung von
diesen Bewegungen durch den Roboter.
Ja, das heißt, wir wollen diese Primitiven, die wir von Menschen
gelernt haben, die sind sehr menschenzentriert.
Die sind noch nicht abgebildet auf das Zielsystem, auf dem Roboter.
Die werden auf dem Roboter abgebildet durch die Inversikinematik, weil
die Inversikinematik ist ja was körperspezifisch oder
kinematikspezifisch.
Das heißt, für einen speziellen Roboter werden viele dieser Primitiven
nicht so toll sein vom Anfang an.
Und man wird durch die Ausführung wahrscheinlich diese Primitiven
verbessern, irgendwelche Parameter Adaptionen.
Und deshalb wäre es schade, wenn diese Verbesserung verloren geht.
Deshalb sollen diese Primitiven, die wir hier gelernt haben, von
Menschen angepasst beziehungsweise adaptiert werden.
Das ist ein sehr aktives Forschungsthema, was man zum Beispiel mit
Methoden des Reinforcement, also des verstärkenden Lernens oder
Reinforcement Lernen hier machen kann.
Nun wollen wir auch, dass die Anzahl der Primitiven in dieser
Bewegungsbibliothek nicht zu groß wird.
Deshalb müssen wir eigentlich immer in der Lage sein, zu erkennen, ob
bei einer Demonstration des Menschen eine Primitive aufgetaucht ist,
die wir bereits kennen.
Ja, das heißt eigentlich, das ist ein Aktionserkennungsproblem
beziehungsweise Recognition of Motion Primitives.
Ich erkenne jetzt, ich laufe oder ich hebe ein Objekt hoch oder ich
schneide.
Wenn ich in der Lage bin, wenn ich, wenn die Anzahl der Primitiven in
dieser Library nicht zu groß sein soll oder nicht zu ähnliche
Primitiven dort abgelegt werden müssen, dann muss ich in der Lage
sein, die Primitiven zu erkennen, also Primitiven in der Demonstration
zu erkennen.
So, und natürlich, klar, ein Lernensystem, dass wir das Ganze
verbessern und die Performance von dem ganzen System evaluieren und
kontinuierlich verbessern.
So, das heißt, wenn ihr euch mit dem Thema hier beschäftigt, aus, sage
ich mal, robotischer Sicht, dann sind das vielleicht die zentralen
Probleme, die man erlegen muss.
Ja, also einmal, wie lerne ich diese Primitiven?
Also wie segmentiere ich meine Aufgaben hier?
Und natürlich muss ich mir Gedanken darüber machen, wie repräsentiere
ich die einzelnen Teile?
Repräsentiere ich sie durch so eine mathematische Funktion hier?
Oder sind das Gaussian Mixer Models oder HMMs oder irgendwelche
anderen statistischen Repräsentationen?
Das ist der erste Punkt.
Der zweite, ein Action Recognition Problem, was natürlich aus der
Bildverarbeitung oder maschinellem Lernen auch bekannt ist.
Bewegungsgenerierung, das ist ein zentral robotisches Problem.
Ja, wie wir irgendeine Bewegung auf ein System ausführen, gegeben im
kathesischen Raum oder im Konfigurationsraum.
Und natürlich dieses Lernen oder Adaption von Bewegungsprimitiven,
also Reinforcement Lernen.
Was ich gar nicht erwähnt habe, sind natürlich die Probleme der
Wahrnehmung.
Also wir nehmen jetzt ganz schön an hier, dass wir in der Lage sind,
natürlich die räumlichen Relationen, die Objekte zu erkennen und
Bewegungen des Menschen zu erkennen.
Das ist ein riesiges Feld, wo es darum geht, tatsächlich den Menschen
zu tracken und zwar nicht nur im Bild, in der Bildebene jetzt
irgendein Skelettmodell, sondern in 3D.
3D-Informationen über Position der Hand, Position der Objekte und die
Relationen zwischen beiden.
Ja, bitte.
Also wir haben jetzt diese Primitive und wie werden jetzt überflüssige
Primitive eigentlich ausgeflossen?
Überflüssige Primitiven.
Letzten Endes suchen wir ja sowas wie eine Basis für den
Bewegungsraum.
Genau, wir suchen eine Basis für den Bewegungsraum.
Also wir suchen die Körnerfunktionen für den Bewegungsraum.
Und letzten Endes müssen wir ja irgendwie, wenn wir eine Bewegung
haben, können wir die ja auf diese Kombination von Basen zurückführen.
Könnt ihr das hören?
Also das müsst ihr hören, weil das ist interessant, was er erzählt.
Und richtig auch.
Du musst es vielleicht wiederholen.
Ja.
Also...
Ja.
Also die Idee ist ja quasi dann, dass wir, dass diese Primitive
nochmal zur Wiederholung eine Basis vom Bewegungsraum bilden.
Letzten Endes und dass wir dann jede Bewegung durch Kombinationen
dieser Primitive darstellen können.
Genau.
Also Bewegung ist ja eigentlich, wie soll ich das schreiben?
Vielleicht als Summi?
Soll ich Summi schreiben?
Als Operation könnte es vielleicht passen.
Könnte passen.
Kommt auf die Repräsentation an.
Genau.
Schreiben wir mal Operation X.
Ja, wir wissen nicht, wie diese Operation aussieht.
Operation X über I und I sind alle MIs.
Wir haben sie nicht bezeichnet.
Also Motion Primitives.
Ja, also das ist irgendeine Operation.
Tatsächlich, das sind jetzt hier Basisfunktionen.
Also wenn wir jetzt an der Mathematik denken, das sind hier
Basisfunktionen, mit denen wir alle möglichen Bewegungen,
Demonstrationen beschreiben können.
Ja, wahrscheinlich gibt es irgendwelche Alphas und so weiter und so
fort.
Genau.
Und ausgehend von der Repräsentation links, also quasi im linken Teil,
werden dann die Bewegungen auf den spezifischen Roboter übersetzt.
Und die Frage wäre jetzt auf der rechten Seite, wie zerlegen wir dann
eine, also wie schließen wir überflüssige Basen dann quasi aus, dass
wir die Menge möglichst klein halten?
Genau.
Das ist eine sehr gute Frage eigentlich.
Danke.
Danke für die Frage.
Also seine Frage ist, manche von diesen zum Beispiel Primitiven, die
wir hier segmentieren oder extrahieren, die sind überflüssig.
Aber das wissen wir ja am Anfang gar nicht.
Eigentlich, wenn ich jetzt hier mein Beispiel nehme, dann habe ich
eine MP1, MP2, MP3 und so weiter und so fort bis MP11.
Ja, so.
Und zunächst mal kommen alle rein.
Eigentlich zunächst müssen alle reinkommen, weil ich habe keine andere
Wahl.
Es sei denn, mein Segmentierungsalgorithmus ist blöd.
Aber ich muss mit irgendeinem Segmentierungsalgorithmus anfangen.
Wenn ich jetzt den hier nehme, dann kommen alle diese Primitiven rein
und ich habe keine andere Chance eigentlich.
Aber was man machen muss, man muss diese Primitiven vielleicht im
Laufe der Zeit bewerten.
Ja, also zum Beispiel, wie oft wurden welche Primitiven in
menschlichen Demonstrationen beobachtet?
So.
Und dann könnte man die naivste Idee, könnte man sagen, diejenigen,
die gar nicht benötigt werden, die schmeiße ich raus.
Also diejenigen, die ich für die Ausführung einer bestimmten Aufgabe
überhaupt nicht benötige, schmeiße ich raus.
Das könnte eine Möglichkeit sein, dass man sagt, okay, somit kann ich
die Anzahl der Primitiven in dieser Library klein halten.
Aber das ist auch gefährlich, weil wahrscheinlich solche, die gar
nicht benutzt werden, sind zu signifikant oder beziehungsweise, die
könnten sehr gute Beispiele eigentlich sein für irgendwelche Aufgaben,
die wir noch nicht benötigt haben.
Das heißt, das können wir gar nicht so auf eine triviale Art und Weise
definitiv irgendwie bereinigen.
Ich weiß nicht, ob dir das reicht.
Naja, der Ansatz wäre dann quasi zerlegend.
Wir haben ja immer eine Bewegung und die zerlegen wir dann in unsere
Primitive.
Man könnte aber auch den umgekehrten Weg gehen und versuchen, das
Ganze auf ein generatives Problem umzumünzen.
Klar, natürlich.
Das kann man auch machen.
Also ich kann zum Beispiel jetzt auch sagen, okay, das Ganze ist für
mich eine Primitivie.
Also es ist jetzt nur hier, ich glaube, was irritierend ist, dass ich
das hier zerlegt habe.
Aber man könnte sagen, ja, die komplette Demonstration von Menschen
ist jetzt eine einzige Primitivie.
Und das kann man nur dann machen, wenn es uns gelingt, eine
mathematische Approximation.
Eigentlich suchen wir immer Funktionsapproximationen von
Demonstrationen.
Also das ist eine Demonstration.
Wir brauchen jetzt irgendeinen Funktionsapproximator, der in der Lage
ist, das darzustellen.
Und deshalb ist diese Definition von dieser Library hier gar nicht so
trivial.
Also wie man reingeht.
Ob auf die Art und Weise oder andere Art und Weise, das ist noch
komplett offen.
Genau.
So, das Ganze mehr technisch orientiert hier, das ist eigentlich fast
20 Jahre Forschung hier in Karlsruhe.
Angefangen bei Professor Dillmann hier, wie man sieht, zum Thema
Programmieren durch Vormachen, die ganzen Anfänge.
Das ist, was wir heute so mit diesem biologisch motivierten Learning
by Imitation mit den Mirror Neurons, wie man hier sieht.
Und das ist, wie man technisch sowas gemacht hat, also dass man
Menschen beobachtet, wie man sieht hier über externe Kameras aus der
Beobachtung irgendwelche Skills lernt durch die Segmentierung.
Man interpretiert sie, versucht so eine Abstraktion von diesen
extrahierten Skills zu erreichen, mit deren Hilfe man komplexe
Aufgaben löst und dann bildet man das auf unterschiedliche Roboter
-Systeme.
So, und da wollen wir ein bisschen schauen, wie wir das Problem hier
lösen.
Das ist ein Vorschlag für eine Prozedur, für eine Vorgehensweise.
Also wir bilden einen Bewegungsprimitiv hier und die Elemente, die
nennen wir eine Bewegungsbibliothek, deren Elemente nennen wir
Bewegungsprimitiven.
Wir wollen uns auf zielgerichteten Bewegungen fokussieren.
Das heißt, wir wollen zum Beispiel Randbedienungen wie Objekte, wie
Kräfte, wie Relationen zwischen Hand und Objekt hier berücksichtigen.
Und natürlich brauchen wir Methoden, um Bewegungen des Menschen zu
erfassen.
Also sagt man dazu auch Motion Capture Techniques.
Und wir wollen das nicht nur jetzt auf einzelne Aktionen von einem
Arm, sondern auf Ganzkörperbewegungen von einem humanoiden Roboter
machen.
Und die zentralen Fragen sind, wie wir diese Demonstrationen
repräsentieren und wie wir sie adaptieren, die Bewegungsprimitiven
dann adaptieren.
Und das ist so hier, was ihr vielleicht kennt aus mehreren
Vorlesungen, was ich immer wieder zur Motivation benutze.
Das heißt, ein Bewegungsalphabet, aus dem ein Roboter seine Aufgaben
ausführt, das wäre jetzt hier Wischen, das wäre hier Pick and Place,
das wäre hier die Aktion Schieben, nach links, nach rechts, nach
vorne, nach hinten.
Und mithilfe von dieser Bewegungsbibliothek könnte man dann alle
Aufgaben lösen.
Das heißt, was wir machen wollen, wir wollen zunächst mal uns schauen,
was kann man heute machen oder wie beobachtet man menschliche
Demonstrationen.
Wir wollen uns sehr stark mit dem Block hier beschäftigen.
Wie können wir diese Demonstrationen auf eine generalisierte Art und
Weise beschreiben?
Speziell jetzt hier nicht nur generalisiert im Sinne, dass ich diese
Funktion irgendwie parametrisiere und statt von 0 bis N hier von 1 bis
X ausführe, sondern wirklich im Sinne von Berücksichtigung von den
Randbedienungen der Aufgabe.
Und dann natürlich Reproduktion auf einem Roboter, wo die Evaluierung
oder Bewertung vom Erfolg beziehungsweise Misserfolg sehr zentral ist
und das Lernen aus dieser Erfahrung, aus Erfolg und Misserfolg dazu
genutzt werden muss, um das gelernte Wissen über die Aufgaben zu
optimieren.
Wir folgen hier oder überall eigentlich, in all diesen drei Blöcken
werden Modelle benutzt, also zum Beispiel zur Beobachtung von
Menschen, Modelle des menschlichen Körpers.
Hier Modelle, mit denen wir zum Beispiel Trajektoren beschreiben, mit
denen wir statistische Zusammenhänge zwischen mehrfachen
Demonstrationen beschreiben können.
Und natürlich hier Modelle des Roboters, die wir brauchen für die
Ausführung.
Am einfachsten die Inverse Kinematik.
Und wir fangen mal an kurz mit der Beobachtung und da gibt es
natürlich hier zwei Wege, wenn wir menschliche Bewegungen beobachten
wollen, dann gibt es die zwei Wege.
Einmal, dass man irgendwelche Marker am Körper des Menschen anbringt
und einmal, dass man markerlos zum Beispiel mit Computervision
-Systemen und damit auch Computervision-Problemen sich beschäftigen
muss oder auch die Verwendung von neuen Sensoren wie RGBD-Kameras und
Ähnliches.
Und die markerbasierten Systeme, die kennt ihr, das heißt, das ist zum
Beispiel ein Valkyrie-System, wo ein Mensch hier demonstriert, wie
etwas im Kühlschrank zu tun ist.
Das ist so ein paar Jahre alt hier und da sieht man hier die Abbildung
auf einem Modell des Menschen für unterschiedliche Aufgaben in der
Küche.
Noch genauer ist das hier, was ihr schon kennt.
Da sieht man hier, der Mensch ist vermarkert, die Objekte sind
vermarkert, weil wir sind interessiert in diesen Relationen zwischen
Objekten und Mensch oder Hand, also der Endeffektor, der die Aufgaben
ausführt.
Wir wollen auch unabhängig vom Lehrer sein, das heißt, ob die Person
groß, klein oder dick, dünn ist.
Deshalb normalisieren wir alle diese Demonstrationen von Menschen
mithilfe von diesem Modell, was wir in Kapitel 2 kennengelernt haben.
Und da sieht man hier auch Marker, die auf dem Objekt angebracht
werden, damit sie von diesem Valkyrie-System erfasst werden können und
damit wir praktisch, wie man sieht, eine komplette Rekonstruktion der
Szene in diesem normalisierten Raum der Bewegung darstellen können.
Und das habt ihr auch schon mal gesehen, das heißt, es geht nicht nur
um Teig mischen oder Salat vorbereiten, sondern Ganzkörperbewegungen,
wo wir Menschen erfassen.
Die laufen, die Objekte greifen, Objekte abstellen, Treppen steigen
und so weiter und so fort.
Und nicht nur einzelne Personen, sondern auch mehrere Personen, wie
man hier sieht.
Also wie eine Person hier eine andere Person beim Wischen oder beim
Waschen und Trocknen unterstützt.
Und das ist zum Beispiel hier eine Möglichkeit zur Segmentierung von
diesen Demonstrationen.
Und zwar nach den Posen im Körper, die für Balancieren oder für
Stabilität verantwortlich sind.
Ja, da hat man gesehen, diese roten Punkte, die immer wieder
auftreten, wenn man etwas berührt.
Und das ist das Ziel, also von Menschen eigentlich Roboterprogramme zu
erzeugen.
Und wie machen wir das?
Das haben wir in Kapitel 2, ich weiß nicht, ob ihr euch noch erinnert.
Wir haben ja dieses MMM, Master Motormap, eingeführt.
Das heißt, ein vereinheitliches Framework, um Bewegungen zu erfassen,
repräsentieren, visualisieren für Ganzkörperbewegungen, aber auch
deren Abbildung auf Roboter mit unterschiedlichen Kinematiken.
Das heißt, wir sind unabhängig vom Markersystem.
Das könnte ja visuelle Marker, zum Beispiel Markerlose Systeme sein.
Das kann jetzt ein markerbasiertes System.
Das kann hier ein anderes System, der nicht auf optischen Markern,
sondern auf IMUs benutzt, oder wo man auch Kraftinformationen messen
kann.
Und mithilfe von diesem Modell vom menschlichen Körper hier können
wir, also Referenzmodell und einheitlichen Datenformaten können wir
das Ganze hier vereinheitlichen.
Dazu müssen wir einmal einen Konverter von der Markerkonfiguration auf
dem menschlichen Körper bei dem zugrunde liegenden
Bewegungserfassungssystem zu diesem Referenzmodell schreiben, also
einen Konverter hier schreiben und dann auf der anderen Seite, um
diese Daten zu nutzen, einen weiteren Konverter von diesem
Referenzmodell zum Zielsystem wie Roboter A, B oder irgendein
Simulationsmodell für Renderung oder irgendwelche Emotional Analysis
Geschichten.
Und das sind ein paar Sachen, die tatsächlich mit dem Modell gemacht
wurden.
Die Visualisierung von dem Modell, die sah anders aus vor ein paar
Jahren.
Also das ist die Visualisierung von dem MMM-Modell 2009 oder 2008.
Und da sieht man hier ein Tracking von menschlichen Bewegungen, sogar
hier stereo basiert, also ohne Marker am menschlichen Körper hier, das
Tracking oder die Erfassung von menschlichen Bewegungen mit Markern
und deren Abbildung auf dem Arma 3.
Oder beziehungsweise das hier, das heißt Erfassung von Laufbewegungen
hier von Menschen mithilfe von diesem markenbasierten System und von
dem Master Motormap und dann die Abbildung hier auf zwei
unterschiedliche Kinematiken, einmal der Arma 4 und einmal der HRB 4
hier.
Genau und wie man sieht, das ist das Ziel und was interessant oder
wichtig hier ist, dass wir nicht nur Bewegungen des Menschen erfassen,
sondern Bewegungen von allen relevanten Objekten.
Also zum Beispiel die Bewegungen von der WIPI hier, die werden auch
erfasst, wie man sieht, und mit in diesen Reproduktionsprozess
berücksichtigt.
Das gleiche natürlich für Objekte, die man manipuliert, wie
Schneebesen oder Salatschüssel und so weiter und so fort.
Genau, es gibt, das soll weg, es gibt, ah nee, das soll nicht weg,
jetzt Markerlosesysteme und da gibt es hier, das sind vielleicht die
ältesten Arbeiten oder die ersten Arbeiten, wo man mit mehreren
Kamerasystemen, das ist von der Robotic Research Group von Oxford, von
Deutschland, wo man mit mehreren Kamerasystemen in der AG war, ich
glaube das war 1990, 91, tatsächlich eine komplette Rekonstruktion
hier von komplexen Bewegungen von Menschen zu machen.
Beziehungsweise hier von Pedram Asad, der in meiner Gruppe promoviert
hat, wo er auch ein Markerlosesystem hier zum Tracken von
Oberkörperbewegungen realisiert hat.
Das sind ein paar Details hier zu dem System, falls euch das
interessiert, aber heutzutage gibt es natürlich mächtigere Systeme,
mit denen man dieses Tracking machen kann, aber die Idee war, dass
wir, oder die Idee bei dem System war die Verwendung von einem
hierarchischen Partikelfilter, Lokalisierung von Hand- und
Kopfpositionen und dann von Kanten von Oberkörper und dann die Fusion
von den Kanten hier, wie man sieht, und von den Positionen von Hand
und Kopf, um diese Rekonstruktion von der Aufgabe beziehungsweise von
der Demonstration zu machen.
Und da sieht man hier eine simultane Detektion beziehungsweise
Tracking von Oberkörperbewegungen und Objektbewegungen, was ja
notwendig ist natürlich, um solche zielgerichteten
Manipulationsaufgaben auszuführen.
Das sind die Cues, die wir damals verwendet haben, wie gesagt für die
Kanten hier, beziehungsweise für die Distanz-Cues und die Fusion von
den beiden hier zu einem Modell.
Heutzutage gibt es natürlich, wie ich bereits erwähnt habe, mit RGB-D
-Kameras mächtigere Systeme, mit denen man sowas machen kann.
Ganz wichtig ist zum Beispiel hier Open-Pose, also ein Echtzeitfähiges
Multi -Person-Tracking-System, wo man Körper, Gesicht, aber auch Handy
von Menschen hier tracken kann.
Also das ist natürlich hier 2D-Information, also Skeleton-Modell im
2D, aber es gibt auch aktuelle Arbeiten, wo man jetzt hier 3D
-Informationen bekommt, beziehungsweise Kombinationen von
Objektdetektionsmethoden mit Open-Pose, also beispielsweise YOLO oder
Mask -RCNN mit Open-Pose, um gleichzeitig die semantische Information
über Objekte in der Szene und über Bewegungen des Menschen zu
erhalten.
Und da sieht man hier eine kleine Anwendung bei uns, was bei dem AMA6
-Roboter gerade auch sehr interessant ist oder benutzt wird, wo man
mithilfe von dem System hier auch erkennt, was ein Mensch macht.
Zum Beispiel greift der Schraubendreher, macht etwas mit dem
Schraubendreher, nutzt die Lampe, um zum Beispiel irgendwelche
Inspektionsaufgaben zu machen.
Und mithilfe von diesem System kann man heutzutage natürlich viel mehr
erreichen, als das, was ich vorher hier gezeigt habe.
Das heißt, das ist natürlich ein Computer-Vision-Problem oder ein
Machine -Learning-Problem, wie man hier die Detektion von menschlichen
Bewegungen, der Relation der menschlichen Hand oder menschlichen
Körper zu Objekten oder zu der Umgebung...
Und wenn man das hat, wie ich das gezeigt habe, dann hat man
eigentlich...
kann man jetzt irgendwas demonstrieren und dann die Bewegung einfach
kopieren und auf dem Roboter abbilden.
Aber das ist nicht, was wir suchen.
Also sieht man hier ein paar Beispiele, was wir gemacht haben, wo eine
Person vor dem Roboter stand und eine Tasse gegriffen hat und der
Roboter mithilfe von diesem markerlosen System, was ich vorher gezeigt
habe, in der Lage war zu verstehen, der Mensch hat jetzt die rote
Tasse gegriffen und dann war der Roboter in der Lage, hier die rote
Tasse natürlich zu greifen, aber nicht nur basierend auf die alleinige
Abbildung von der gelernten Bewegung aus menschlicher Demonstration,
sondern mit irgendwelchen Zusatzfunktionalitäten, wie zum Beispiel,
dass man Visual Servo zum Greifen braucht, weil der Roboter nicht
genau genug ist.
Natürlich muss man dieses Spiegeln der Bewegung auch machen, wenn der
Roboter den Menschen beobachtet, muss er verstehen, okay, er hat die
blaue Tasse jetzt mit der linken Hand, aber das ist nicht, was wir
wollen eigentlich.
Das ist ja keine Generalisierung, sondern das ist wirklich nur eine
Abbildung von menschlichen Bewegungen auf Roboterbewegungen, ohne
irgendwas zu verstehen, ohne generalisierte Beschreibungen hier zu
haben.
Und das ist, womit wir uns beschäftigen werden, oder das zentrale Teil
eigentlich von diesem Kapitel, also wie können wir generalisierte
Beschreibungen von menschlichen Demonstrationen lernen, wo wir auch
die Task-Constraints oder Randbedienungen berücksichtigen.
Und die Idee ist, dass wir tatsächlich diese Demonstrationen irgendwie
zerlegen, also segmentieren, in kleinen Einheiten zerlegen.
Also die Demonstrationen, nicht die Bewegungen.
Und dann diese kleinen Einheiten auf irgendeine parametrisierte Art
und Weise repräsentieren.
Und es gibt hier in der Literatur zwei Levels der Repräsentation von
Demonstrationen.
Der erste Level auf Trajektorien-Level, das man tatsächlich ähnlich zu
dem Beispiel, was ich auf dem Tisch hier oder auf der Tafel hier
gezeichnet habe, sagt, okay, ich habe irgendein Wissen, natürlich
haben wir irgendein Wissen, über Tischhöhe zum Beispiel, Objekte, die
ich gerade nutzen soll bei der Demonstration, ich kann die Position,
die kontinuierliche Bewegung nehmen und ich beschreibe diese Bewegung
auf Trajektorien-Level.
Letztendlich habe ich hier nur einen Funktionsapproximator, der für
mich diese Bewegung hier beschreibt und ich kann vielleicht anhand von
mehreren Beispielen, also wenn ich jetzt hier nicht nur eine einzelne
Demonstration, sondern mehrere Demonstrationen für die gleiche
Aufgabe, kann ich irgendwelche gemittelten Trajektorien lernen, also
generalisierte Beschreibungen von dieser Trajektorie lernen, die ich
dann nutzen kann, um ähnliche Aufgaben auszuführen.
Der zweite Level, und das ist was für uns natürlich viel interessanter
oder was für eine, meiner Meinung nach, echte Imitation zentral ist,
nicht nur auf Trajektorien-Level das Ganze zu betrachten, sondern auf
einem zementischen Level.
Das heißt, wir haben symbolische Repräsentationen, also
Repräsentationen auf einem höheren Level von einer Fertigkeit, die
eine Fertigkeit in eine Sequenz von Perzeptionen, Aktionen,
Fertigkeiten oder Skills zerlegt.
Und natürlich hat man hier weiterhin dieses Vorwissen, was man sowieso
hat, aber zusätzlich hat man jetzt hier Vorwissen im Sinne von, was
sind eigentlich die Fähigkeiten, die notwendig sind, um die Aufgabe
auszuführen, beziehungsweise Vorbestimmung von einer Menge von
Kontrollern, um die Fertigkeiten auszuführen.
Aber aus der kontinuierlichen Bewegung, und eigentlich ist es hier in
dem Buch falsch, das ist nicht nur die reine Bewegung, aus der
kontinuierlichen Beobachtung der Szene und nicht nur der Bewegung,
weil hier natürlich auf Trajektorienlevel beobachte ich die Szene,
aber hier habe ich nur die Bewegung.
Und hier, wenn ich auf symbolischem Level bin, dann beobachte ich
nicht nur die Bewegung, sondern ich beobachte die komplette Szene,
Bewegung, also inklusive Objekte und Relationen der Objekte.
Und basierend auf dieser semantischen Repräsentation mit
Vorbedienungen und Nachbedienungen der einzelnen Aktionen kann ich
eine Repräsentation auf einem symbolischen Level erzeugen.
Und diese Repräsentation auf dem symbolischen Level sagt mir, okay,
das waren die Aktionen, die der Mensch ausgeführt hat.
Und vielleicht enthält auch diese Repräsentation automatisch oder vom
Menschen wird vorgegeben, was sind die Vorbedienungen und die
Nachbedienungen für die Ausführung von einer bestimmten Aktion.
Und dann lerne ich wirklich ein Programm für eine Aufgabe und nicht
für eine Trajektorie, nicht für eine einzelne Bewegung.
So, das sind ganz zentral zwei Varianten oder zwei unterschiedliche
Level der Repräsentation von menschlichen Demonstrationen.
So, und das heißt Trajektorienlevel, Generalisierung von Bewegungen,
generische Repräsentation der Bewegung, die uns erlaubt, irgendwelche
Signale, Trajektorien und so weiter zu beschreiben.
Und das ist natürlich, erlaubt uns nicht so komplizierte Aufgaben.
Stellt euch mal vor, ihr wollt ja Tischabendessen vorbereiten für zwei
Personen aus Beobachtung des Menschenlernens.
Das heißt, es sind ja ganz komplexe Trajektorien, die wir auf die Art
und Weise vielleicht segmentieren oder generalisierte Repräsentationen
hier erzeugen müssen, um Abendessen für zwei Personen vorbereiten zu
können durch den Roboter.
Das heißt hier, komplizierte High-Level-Skills oder Aufgaben können
wir auf die Art und Weise nicht durchführen.
Symbolische Level, das heißt, wir haben irgendwelche Organisationen,
die kann sequentiell, aber auch vielleicht parallele Organisationen
von vordefinierten Fertigkeiten oder Elementen oder Aktionen oder
Skills.
Und basierend auf diesen Repräsentationen können wir Hierarchien
definieren.
Also Hierarchien, die uns zum Beispiel erlauben, hierarchische State
Charts oder hierarchische endliche Automaten zu benutzen, um so etwas
zu repräsentieren.
Wie Tischvorbereitung für zwei Personen heißt, was weiß ich,
Tassenteller auf den Tisch stellen und für jeden von diesen Aufgaben
muss ich die Objekte greifen, abstellen und so weiter und so fort.
Und das sind immer unter Kinderknoten, sag ich mal, in einem
hierarchischen Zustandsautomaten, wie wir in Robotik 1 vielleicht auch
das kennengelernt haben, in einem hierarchischen State Chart und auf
die Art und Weise brauchen wir oder hier brauchen wir dann so diese
vordefinierte Menge von elementaren Kontrollern und Fähigkeiten, die
in der Lage sind, diese einzelnen Fähigkeiten in den einzelnen
Zuständen auszuführen.
Das heißt, das interessiert uns nicht, das könnte man vielleicht auf
Trajektorienlevel lernen, also eine Kombination aus beiden und dann
hier nutzen.
In beiden Fällen brauchen wir Segmentierung und im ersten Fall heißt
es Trajektorensegmentierung, was wir jetzt hier kennengelernt haben
und im zweiten Fall heißt es Aufgabensegmentierung oder
Tasksegmentierung, wo tatsächlich semantische Information hier
notwendig ist.
Und da wollen wir gucken, welche Methoden zur Segmentierung im Kontext
von Programmierendurchführung machen hier gibt es.
Segmentierung bedeutet hier, dass wir eine Bewegung oder eine Aufgabe
in Segmente, also Abschnitte unterteilen, die durch irgendwelche
signifikanten Punkte, markanten Punkte, sogenannte Keyframes oder
Keypoints voneinander gedreht sind.
Das heißt, das sind eigentlich Keypoints.
Hier in diesem Beispiel an der Tafel, die Minima und Maxima sind die
Keypoints, mit denen meine Demonstration oder meine Trajektorie in
diesen elementaren Teilen hier zerlegt wird.
Das heißt zum Beispiel der Reaching Part für das Greifen oder ein Step
beim Laufen, das sind so die einzelnen Segmente, also die kleinen
Segmente, die durch diese Keypoints voneinander getrennt werden.
Ja, hier steht meaningful.
Und meaningful, was bedeutet das eigentlich?
Zum Beispiel, das ist so eine Geschmackssache.
Also wenn ich laufe jetzt, ist jeder Schritt tatsächlich ein Segment
oder sind das die einzelnen, acht Teilschritte des Laufzyklus, sind
die Segmente, die ich lernen soll.
Beziehungsweise, wie kann ich jetzt hier Tanzen und Laufen
segmentieren?
Also was ist das eigentlich?
Was sind die Punkte?
Wie soll ich das zerlegen oder unterteilen in diese meaningful
Segmente?
Und wie soll ich beispielsweise Wiederholungen berücksichtigen?
Und so weiter und so fort.
So, Input für diese Segmentierung oder Segmentierungsalgorithmen, das
können zum Beispiel Gelenkwinkeldaten sein.
Natürlich, wenn ich eine komplette Rekonstruktion von menschlichen
Bewegungen mache und ich kann diese Trajektoren im Gelenkwinkelraum
lernen, dann brauche ich nachher bei meinem Controller keine
Inversikinematik und spare ich mir viel Zeit.
Aber mit diesen gelernten Trajektoren im Gelenkwinkelraum kann man
vielleicht keine oder kann man nicht so leicht Bedienungen im
Aufgabenraum oder Konstrukte im Aufgabenraum auf einfache Art und
Weise berücksichtigen.
Das haben hier kartesische Trajektoren, zum Beispiel von Markern, die
auf den Endeffektoren angebracht sind.
Und zum dritten hier semantische Relationen zwischen Objekten in der
Szene und zwischen Objekten und der Hand, also des Menschen, der
irgendwas demonstriert.
Und da gibt es in der Literatur eine ganze Menge von Kriterien, wie
man diese Keypoints zur Segmentierung wählen kann.
Zum Beispiel, man kann sagen, okay, ich nehme Locale, Minima und
Maxima und Pausen in der Bewegung, die sind für mich sehr wichtig.
Also wenn ich jetzt hier Locale, Minima und Maxima sehe, dann sieht
man hier, das ist eigentlich ein Richtungswechsel, wenn ich die
Trajektoren im XY-Ebene betrachte.
Dann sind so signifikante Richtungswechsel wichtige Keypoints, die ich
in meiner Demonstration oder bei der Segmentierung berücksichtigen
muss.
Während hier zum Beispiel, wenn diese Änderung hier nicht so groß ist,
da sieht man hier, man hat so einen Y-Parameter, dann ist es kein
Keypoint, während das hier ist ein Keypoint.
Wenn man jetzt so ein Beispiel nimmt, das ist natürlich ein
Richtungswechsel und da sieht man hier, am Ende gibt es zwar eine
kleine Änderung, aber wenn man so vorgeht, nach dem Beispiel hier,
muss man hier kein Keypoint definieren, aber man sieht hier, dass am
Ende von diesem Punkt die Pause der Bewegung von dieser Trajektorie zu
Ende kommt.
Das heißt hier, die X-Koordinate bleibt konstant, bzw.
wenn es ein Theta ist, ein Gelenkwinkel ist, dann sieht man, es hat
sich etwas verändert, bleibt still bis zu dem Punkt und wenn es wieder
losgeht mit der Bewegung, dann ist es wahrscheinlich etwas Gutes oder
Wichtiges, was ich berücksichtigen soll.
So, bei Gelenkwinkeln, genau, das sind hier zum Beispiel Beispiele für
Keypoints im karthesischen Raum, also XY, und bei Gelenkwinkeln kann
man wie gesagt, Lokale maxima minima, aber auch Pausen hier
berücksichtigen und sagen, okay, das sind meine Keypoints, die ich
nutze.
So, aber das ist ziemlich trivial, das ist das Trivialste, was es
gibt.
Es gibt in der Literatur, also in der Literatur Programmieren durch
Vormachen, eine ganze Menge von Ansätzen und das sind ein paar, die
ich hier ausgewählt habe.
Einmal ein interessanter Algorithmus von Fodd hier, und zwar Zero
Velocity Crossings, das heißt eigentlich, alle Punkte, das ist so
dunkel hier, ich kann euch kaum sehen, aber wenn man das hell macht,
dann könnt ihr die Folien nicht sehen, oder doch?
Das heißt, alle Punkte, wo man durch den Nullpunkt in Geschwindigkeit
geht, sind wichtige Punkte, die man berücksichtigen muss.
Dann gibt es einen Ansatz, der natürlich versucht, hier
Demonstrationen in einem niedrigdimensionalen Raum darzustellen, also
beispielsweise PCE oder FDE, werden wir auch sehen.
Dann gibt es Algorithmen, die diese Segmentierung basierend auf
Cluster Methoden, also auf Clustering benutzen, oder allgemein auf
Klassifikation mit Machine Learning Methoden hier von Lin 2014.
Und es gibt zwei Methoden hier, einmal von Aaron Aksoy, der Postdoc
auch hier in meiner Gruppe war, und von Mirko Wächter, der immer noch
Postdoc ist, die berücksichtigen tatsächlich Objekt-Aktionsrelationen
bei der Segmentierung.
Also nicht nur diese reinen Trajektorien basierten Kriterien wie Zero
Velocity Crossing, Direction Change, Minima, Maxima und so weiter und
so fort, sondern wirklich die schauen, was sind wichtige Änderungen in
Relationen zwischen Objekt und Hand und versuchen dort die Aufgabe zu
segmentieren.
Oder Key Points oder Key Frames in der Segmentierung zu platzieren.
Die Anwendungen, warum macht man das, also warum braucht man
Segmentierung, Bewegungssegmentierung, nicht nur eigentlich für
Programmieren, Durchformen machen, sondern zum Beispiel hier bei
Rehabilitationsaufgaben, Segmentierung in Wiederholungen zum Beispiel
von irgendwelchen Übungen.
Dann Segmentierung, also Extraktion von Aktionen in einer
Demonstration, damit wir sehen, welche Primitiven haben wir gerade
gesehen, wenn wir an unsere primitiven Bewegungsdatenbanken denken,
oder Segmentierung zu Aktivitäten.
Welche Aktivitäten hat der Mensch gerade gemacht?
Er hat gerade getanzt, ist gelaufen, ist auf dem Fahrrad gestiegen und
ist Rad gefahren.
Das heißt, man sieht hier, dass man auch mehrere Anwendungen, aber
auch mehrere Levels der Segmentierung hier hat.
Fangen wir mal kurz an mit Zero-Velocity-Crossing, und zwar eigentlich
trivial, das heißt, die Änderung der Richtung in der Bewegung führt zu
einer Geschwindigkeit Null.
Immer wieder, wenn wir die Richtung ändern, haben wir eine
Geschwindigkeit Null.
Der Algorithmus funktioniert so, dass man alle diese ZVCs labelt und
dann irgendwelche Segmentierungsrules anwendet und sieht vor, dass man
ein Segment als Output von dem Algorithmus hat, wenn die Bewegung
signifikant ist.
Man will also keine kurzen Segmente oder zu kurzen Segmente haben,
deshalb ist das ein M hier, also an der RC-Bedienung.
Und dann haben minimum zwei Gelenke ein Zero-Velocity-Crossing, also
sind durch die Geschwindigkeit Null durchlaufen, während einer Zeit
von T.
Die Eigenschaften sind ziemlich einfach, also eigentlich trivial, wir
brauchen überhaupt kein Modellwissen über die Aufgabe, über die
Objekte und kann man tatsächlich für Online-Anwendungen benutzen, weil
natürlich die Berechnung von diesen Zero-Velocity-Crossings sehr
einfach ist.
Tendiert dazu, dass es untersegmentiert ist, was bedeutet
untersegmentiert in diesem Kontext?
Also richtig segmentiert, untersegmentiert und oversegmentiert?
Du sollst es wissen, wahrscheinlich.
Wahrscheinlich haben wir dann zu wenig Segmente.
Genau.
Genau, also das ist der Algorithmus, nicht alle Segmente tatsächlich,
also wenn man das vergleicht mit einer manuellen oder menschlichen
Segmentierung, dann nicht alle Segmente, bei denen diese Zero-Velocity
-Crossings auftreten, automatisch identifiziert.
Man findet keine Segmente mit glatten Transitionen, das kann man auch
nicht verlangen, weil es gibt überhaupt, hat man nicht danach
verlangt, dass es so ist.
Hat man getestet hier bei einem einfachen Arm mit vier Freiheitsgraden
2012.
Genau, und ansonsten natürlich kann man keine Koartikulationen, also
zum Beispiel in einem menschlichen Arm oder einem humanoiden Roboter
hier berücksichtigen.
Und was ganz schlimm ist, natürlich, wir haben zwei Parameter, das
sind zwei Threshold-Parameter und das ganze Ergebnis von dem
Algorithmus hängt von denen.
Und zwar M, also dass es eine gewisse Bewegung gab, aber wie groß ist
M eigentlich, wie weit muss sich ein Gelenk bewegen, damit wir sagen,
das ist signifikant.
Und dann, wir haben einen Zeitintervall der Größe T, in dem wir
suchen, ob mindestens zwei Gelenke durch einen Nulldurchgang der
Geschwindigkeit durchlaufen sind.
Und das sind zwei Parameter, die man natürlich irgendwie festlegen
muss, das heißt, wir haben die und die könnten natürlich problematisch
sein.
Und das wurde jetzt hier bei mehreren Beispielen, relativ einfachen
Beispielen, auch haben wir benutzt mit sieben oder acht
Freiheitsgraden zur Online-Segmentierung von Trajektorien.
Aber es ist impraktikabel bzw.
jetzt für Ganzkörperbewegungen, wo man 100 oder über 100
Freiheitsgrade hat, wie bei humanoiden Robotern oder Modellen des
menschlichen Körpers ist es eher ungeeignet.
Der zweite Algorithmus, den werden wir dann nächstes Mal kennenlernen,
der ist ein bisschen anspruchsvoller als der erste und zwar basiert
auf BCE und was darunter zu verstehen ist, sehen wir dann nächste
Woche.
Für heute bedanke ich mich für die Aufmerksamkeit und wünsche euch
noch eine schöne Woche.