Guten Abend und wie immer machen wir heute Abend wieder Robotik 1,
diesmal die Vorlesung.
Heute machen wir noch den Rest, den Tami im letzten Mal nicht
geschafft hat, zu Bahnsteuerung.
Und dann fangen wir wahrscheinlich ein bisschen an mit dem
Bewegungsplanungskapitel.
Und dann machen wir Donnerstag noch die Regelungsübung.
Dann am Montag geht es dann weiter mit der Bewegungsplanung,
hoffentlich.
So ist der Plan.
Tami hatte angefangen so ein bisschen schon hier über die Punkt-zu
-Punkt -Bahn zu reden.
Und wir machen da im Grunde weiter.
Jetzt hier mit den Vollsynchronbahn.
Vielleicht als Erinnerung noch, wir hatten wahrscheinlich ziemlich
ausführlich dann über die verschiedenen Rampenprofile geredet.
Wenn man jetzt ein einzelnes Gelenk oder mehrere Gelenke steuern
möchte.
Da hatten wir ja immer eine Zeit, in der wir das Gelenk erstmal
beschleunigen.
Und dann haben wir eine Zeit, in der wir mit einer konstanten
Geschwindigkeit in dem Gelenk fahren.
Und am Ende müssen wir dann wieder abbremsen.
Und die Frage ist, was machen wir mit den anderen Achsen?
Die können natürlich dann einfach irgendwie asynchron dazu laufen oder
eben synchron dazu laufen.
Hängt eben davon ab, ob sie zum gleichen Zeitpunkt aufhören und
anfangen, wie die Achse.
Oder das Gelenk, über das wir reden.
Und jetzt hier bei den Vollsynchronbahn schauen wir uns an, eine
Achse, also die Leitachse, das Gelenk, das jetzt eben bestimmen soll,
wie lange das läuft.
Schauen wir uns von dem Gelenk an, wie lange fährt das mit konstanter
Geschwindigkeit.
Das ist eben die Zeit hier zwischen.
Das ist das TD.
Und dann benutzen wir diese Zeit von dem Gelenk, das eben bestimmt
sein soll, um zu berechnen, wie schnell maximal die anderen Gelenke
von der Geschwindigkeit und von der Beschleunigung her sein sollen.
Und deshalb wird jetzt hier... das I bezieht sich dann auf die anderen
Gelenke.
Aber das TD kommt eben... und das TA, das sind die Zeiten von der
Leitachse, also der Achse, die die Zeit bestimmt.
Und die anderen Elemente hier, die haben immer noch ein I drin.
Das sind die Eigenschaften des entsprechend anderen Gelenks, die dann
synchronisiert werden sollen mit der einen Leitachse, die es hier
gibt.
Und wenn man das natürlich so macht, dann werden eben... diese Zeit
ergibt sich hier einfach für das Hauptgelenk.
Und die Geschwindigkeit und die Beschleunigung für die anderen Gelenke
kann man dann hier eben nach diesen Formeln ausrechnen, was natürlich
dazu führt, dass die Werte hier rauskommen, die sind einfach fest, die
werden dann vorgegeben.
Es kann natürlich auch sein, dass man Gelenke hat, die dann zum
Beispiel so eine Beschleunigung gar nicht umsetzen können, wenn man
hier so vorgeht.
Genau, das ist im Grunde noch das Letzte, was übrig geblieben war zu
diesen einzelnen Bahnen im Gelenkwinkelraum.
Jetzt wollen wir uns nämlich im Anschluss dazu Bahnen im Arbeitsraum
anschauen.
Und das ist jetzt der Unterschied zu dem vorher.
Vorher hatten wir immer ein Gelenk oder mehrere Gelenke, wollten die
eben in Zielkonfiguration bringen.
Und jetzt interessiert uns die Pose vom Endeffektor.
Da haben wir natürlich schon ziemlich lange beschäftigt in der
Kinematik und in der inversen Kinematik.
Das berechnet, aber jetzt wollen wir nicht eine bestimmte Position
erreichen, sondern eine Bahn mit dem Endeffektor abfahren, eben die
Position und Orientierung vorgeben und die dann abfahren lassen.
Und dafür stellen wir natürlich unsere Positionen als normalen
dreidimensionalen Vektor dar.
Die Orientierung jetzt hier in diesem Beispiel als Eulerwinkel, aber
man könnte sich ja bezüglich der Interpolation oder so hier auch was
anderes vorstellen.
Aber hier ist es so.
Und dann müssen wir bestimmen, was denn oder ist quasi vorgegeben von
außen, wie schnell wollen wir eigentlich maximal fahren und
beschleunigen im Arbeitsraum jetzt.
Also das hat dann nichts mehr mit Gelenkwinkelbeschleunigung direkt zu
tun, sondern wie schnell soll sich der Endeffektor bewegen und
beschleunigt werden linear und dann wie schnell soll er das in der
Orientierung machen.
Also das ist dann eine Winkelgeschwindigkeit und eine
Winkelbeschleunigung.
Das sind die Dinge, die wir dann vorgeben, also wo wir hinwollen und
wie schnell wir uns bewegen dürfen im Arbeitsraum.
Und wenn wir hier jetzt interpolieren, also mit dem Continuous Path,
also im Arbeitsraum, dann machen wir die Interpolation hier, also im
Arbeitsraum selber und nicht im Gelenkwinkelraum.
Diese Interpolation ist im Arbeitsraum.
Das ist im Grunde der Unterschied zu dem, was wir vorher gemacht
haben.
Dann haben wir im Gelenkwinkelraum interpoliert und dann bekommen wir
eben eine Trajektur heraus.
Also zum Zeitpunkt T gleich so und so soll der Endeffektor so
positioniert sein und so orientiert sein.
Das kriegen wir hier aus der Interpolation heraus.
Die Ergebnisse von dieser Interpolation können wir dann in der inverse
Kinematik reinpacken, wie wir es kennengelernt haben und ausrechnen,
welche Gelenkwinkelkonfiguration erreicht denn diese Position des
Endeffektors.
Ist natürlich noch ein bisschen offen gelassen.
Also wie bestimme ich denn dann die Gelenkgeschwindigkeit und die
Beschleunigung?
Und natürlich ist es auch ein Problem, wenn wir hier die inverse
Kinematik für einen ähnlichen Wert, also ich mich hier zeitlich ein
bisschen bewege und beim nächsten Punkt gibt er mir dann die andere
Konfiguration raus.
Dann kann der Roboter das natürlich nicht direkt umsetzen.
Das heißt, zusätzlich muss man sich darum kümmern, dass die Werte, die
man hinten dann rausbekommt oder die man tatsächlich an den Roboter
füttert, die müssen natürlich in irgendeiner Form kontinuierlich sein.
Und das ist natürlich nicht immer bei jeder inverse Kinematik gegeben.
Das heißt, hier muss man noch ein bisschen aufpassen.
Aber so ist das grundlegende Konzept, wenn wir das im Arbeitsraum
machen wollen, eine Steuerung.
Und da gehen wir noch ein bisschen darauf ein, wie man jetzt diese
Interpolation machen kann.
Zum einen für die Position und dann für die Orientierung.
Für die Position ist es ja nicht besonders schwierig.
Also dort haben wir einen Startpunkt gegeben.
Jetzt mal hier und einen Zielpunkt.
Und wir wollen einfach zwischen denen interpolieren.
Und das ist natürlich eine ganz einfache lineare Interpolation.
Und das heißt, zu einem Zeitpunkt T, das wäre dann hier mal dieser
Pfeil, sind wir natürlich irgendwo auf dieser linear interpolierten
Strecke, die wir hier haben.
Und das können wir natürlich ausrechnen.
Also wenn wir wissen, das hier ist die Gesamtlänge der Strecke und das
ist die Länge, die wir bisher zurückgelegt haben zum Zeitpunkt T.
Dieses SEP und SP, das sind einfach nur reelle Zahlen.
Eben die Länge der Strecke und wie weit wir jetzt aktuell auf der
Strecke gefahren sind.
Und dann haben wir hier eine lineare Interpolation zwischen dem
Startpunkt und dem Zielpunkt.
Und was dann hier passiert ist natürlich, dass wir dann dieser geraden
Linie folgen.
Also jetzt haben wir uns eben von hier bis nach hier hin bisher bewegt
und können dann eben einen Punkt auf dieser Strecke finden.
Wir haben natürlich, wenn wir jetzt solche Interpolationen machen,
müssen wir festlegen, was die Anfangs- und Endbedingungen sind.
Und hier nehmen wir einfach mal an, am Anfang hat der Roboter keine
Strecke zurückgelegt, befindet sich am Startpunkt, hat aber auch eine
Geschwindigkeit von 0.
Und wir müssen auch die Endbedingungen festlegen und hier jetzt in
diesem Beispiel nehmen wir auch an, dass der Roboter sich am Ende mit
Geschwindigkeit 0 bewegt, also stehen bleibt.
Und dann müssen wir natürlich entsprechend die Geschwindigkeiten und
Beschleunigungen und so weiter darauf abbilden.
Genau, aber ich meine, in der linearen kathesischen Raum zu
interpolieren ist jetzt nicht besonders schwierig, wenn wir jetzt in
dieser Steuerung im Arbeitsraum sind, sondern das vielleicht
Kompliziertere wäre dann eben die Interpolation im Gelenkwinkelraum.
Wenn wir jetzt unsere Orientierung, die wir erreichen wollen,
dargestellt haben als Euler-Winkel, dann müssen wir natürlich
irgendwie bestimmen, wie viele Rotationen müssen wir jetzt durchführen
insgesamt.
Und da haben wir ja auch im ersten Mathe-Teil kennengelernt, wie man
zwischen zwei Orientierungen die Differenz berechnen kann.
Das heißt, hier ist es natürlich nicht so einfach, hier einfach die
Differenz von dem ersten und dem zweiten Euler-Winkelpaar zu nehmen,
weil dort eben natürlich die Winkel sind ja periodisch und so weiter,
sodass es eben nicht einfach nur eine Differenz ist, wie bei der
Interpolation der Position.
Und dann passen wir eben an, also können wir unsere Geschwindigkeiten
bestimmen und Beschleunigung für die Orientierung.
Und jetzt haben wir ja eine Interpolation für die Position und eine
für die Orientierung.
Und wir wollen jetzt, wie eben bei den Synchronen, dass eben die
Orientierung gleichzeitig mit der Position fertig ist.
Also dass, wenn wir mit der Position angekommen ist, dass dann auch
die Orientierung angekommen ist.
Das heißt, wir schauen uns an, was die maximale Zeit von den beiden
ist.
Also wir wissen, dass TEP ist die Positionszeit, also wie lange
braucht die Trajektorie für die Position, und dass T omega ist, wie
lange braucht die Interpolation für die Orientierung.
Wir nehmen eben das Maximum.
Und wenn wir das Maximum dann davon genommen haben, das ist unsere
Gesamtzeit, dann müssen wir entsprechend die andere Zeit anpassen,
eben länger machen oder kürzer machen, je nachdem.
Und das hier oben ist dann zum Beispiel der Fall, wenn TE gleich TEP
ist, dann ist die Position ist quasi auch die längste Zeit von beiden.
Ist also langsamer.
Und wenn TE gleich T omega ist, dann ist eben die Orientierung
langsamer.
Und entsprechend, wenn die Position langsamer ist, dann machen wir
eben künstlich die Orientierung langsamer, sodass sie eben
gleichzeitig ankommen.
Und wenn die Orientierung langsamer ist, dann machen wir eben die
Position langsamer, beide gleichzeitig am Ende ankommen.
Genau.
Und wenn wir das dann in der Praxis anwenden, dann sieht es ja relativ
einfach aus, in unserem kleinen Beispiel hier.
Hier ist jetzt eine Linearinterpolation zwischen verschiedenen
Punkten, also wir fangen bei Punkt 0 an hier, das ist unser Start.
Und wir machen immer eine Linearinterpolation zwischen verschiedenen
Punkten auf dieser Bahn.
Also erst zu P1, dann zu P2 und so weiter.
Und dann sind wir irgendwann eben an unserem Ziel angekommen.
Damit das Ganze eben umsetzbar ist, also man sieht ja, die Funktion
hier hat, also nicht die Funktion, sondern die Bahn hat hier Knicke
drin.
Damit man das umsetzen kann, muss eben der Roboter, der Endeffektor,
der jetzt hier langfährt, der muss immer an diesen Stellen hier die
Geschwindigkeit 0 haben.
Also er fährt immer zu einem Punkt hin, muss dann abbremsen und dann
komplett wieder die Richtung ändern, zum nächsten Punkt fahren, wieder
abbremsen und so weiter.
Das heißt, jeder dieser Punkte hier, an denen muss eben V gleich 0
sein, sonst könnten wir eben gar nicht diese Bahn hier einhalten.
Das ist natürlich dann auch ein Nachteil davon, also ein Roboter, der
sich so bewegt, wird eben sehr ruckartig, selbst wenn er sich schnell
bewegt oder er bremst langsam ab.
Das heißt, es ist nicht unbedingt die optimale Bahn, aber es ist eben
die einfachste Interpolation, die wir machen können, eine lineare
Interpolation.
Wenn wir jetzt das einen Schritt weitermachen wollen, dann würden wir
eben sagen, okay, wir machen jetzt nicht mehr in jedem Bahnpunkt die
Bedingung rein, dass die Geschwindigkeit hier gleich 0 sein muss,
sondern die kann auch einen anderen Wert annehmen.
Und was hier die Geschwindigkeit sein soll in so einem Punkt, was wir
eben wollen, ist, dass die Endgeschwindigkeit vom vorherigen, zum
Beispiel, also wenn das hier irgendwie unser V0 von der
Endgeschwindigkeit ist, das soll dann gleich der
Anfangsgeschwindigkeit vom nächsten sein, also nicht von dem, sondern
von dem nächsten, so dass wir hier eben so eine kontinuierliche
Geschwindigkeit haben, können auch die Beschleunigung für den Fall zum
Beispiel gleichsetzen.
Aber wir wollen eben, dass der Fall hier kontinuierlich ist und wir
nicht mehr so komplett abbremsen müssen, wenn wir an einem Punkt
ankommen.
Also jetzt hier ist die Geschwindigkeit normalerweise nicht gleich 0,
sondern es ist irgendein Wert, der sich ergibt, indem wir die
Endbedingungen von der vorherigen Trajektorie gleichsetzen mit den
Anfangsbedingungen der nachfolgenden Trajektorie.
Genau.
Und jetzt haben wir natürlich nicht mehr das Schöne, was wir eben
taten, also so eine einfache lineare Interpolation.
Also vorher war es ja relativ einfach zu beschreiben, wie diese rote
Linie verläuft, aber die KIT-farbenen, die türkisen Trajektorien sind
ja jetzt nicht mehr so einfach zu beschreiben wie verlaufen.
Aber das müssen wir natürlich, wenn wir jetzt unseren Endeffektor
steuern wollen.
Und das heißt, wenn man jetzt hier so vorgeht, also so eine
segmentweise Bahninterpolation, dann beschreiben wir diese Segmente
einzeln.
Und jetzt in dieser Vorlesung schauen wir uns dafür die Splines an,
also wie man jetzt so eine Trajektorie, die bestimmte Anfangs- und
Endbedingungen für Beschleunigung und Geschwindigkeit hat, in unserem
Fall nur Geschwindigkeit, wie man die mit Splines beschreiben kann.
Genau.
Und das, die kubischen Splines, das ist eigentlich nur ein schönes
Wort für ein Polynom mit drittem Grad, also einfach nur bis T hoch 3.
Und wir beschreiben jetzt eben unsere Trajektorie, also wir wollen
jetzt suchen eine Funktion, die unsere Trajektorie beschreibt.
In unserem Fall nehmen wir eben an, das ist ein Polynom mit drittem
Grad, das heißt wir haben insgesamt vier Parameter,
also A0, A1, A2, A3, jeweils die Vorfaktoren von unserer Zeit.
Und da wir vier Parameter haben, können wir jetzt auch vier
Bedingungen stellen an die Funktion.
In unserem Fall ist das eben der Anfangspunkt, soll definiert sein,
der Endpunkt, das ist eben der Positionsbereich und die
Geschwindigkeit am Anfangszeitpunkt und am Endzeitpunkt wollen wir
vorgeben.
Wenn man jetzt noch mehr vorgeben möchte, also zum Beispiel die
Beschleunigung oder noch weitere Ableitungen der Funktion, dann
brauchen wir natürlich ein Polynom mit höherem Grad, sowas beschreiben
zu können.
Aber hier beschränken wir uns mal auf die vier Parameter.
Und wenn wir jetzt unsere vier Bedingungen gegeben haben, dann ist
natürlich das Ziel, wie finde ich jetzt meine Parameter A0 bis A3, die
genau diese Eigenschaften erfüllen.
Das ist natürlich nur ein bisschen Algebra, also wir haben ja jetzt
die vier Bedingungen, das heißt wenn wir jetzt unsere Funktion nehmen
und umformen, dann müssten wir in der Lage sein herauszufinden, was
unsere Parameter sind.
Und zum Glück sind viele, also die erste hier, das f von 0, ist ja im
Grunde unsere Anfangsbedingung.
Und t gleich 0 ist ja besonders einfach, also wenn wir hier unser
Polynom haben, A0 A1 mal 0 plus A2 mal 0² plus A3 mal 0³, dann bleibt
da ja nicht viel übrig, sondern einfach nur unser A0.
Und das f von 0 ist ja unser Anfangspunkt der Trajektorie, unser SA.
Das heißt, damit haben wir schon einen unserer Parameter bestimmt, ich
meine, das ist auch der einfachste, weil er eben bei t gleich 0 liegt.
Und wir haben das gleiche für die Geschwindigkeit, also die
Anfangsgeschwindigkeit VA, die wollen wir vorgeben auf der
Trajektorie.
Das hier ist die Ableitung, f Punkt.
Das heißt, wenn wir die Ableitung machen, dann bekommen wir eben
heraus A1 plus 2 mal A2 mal t plus 3 mal A3 mal 0².
Und hier ist es jetzt auch wieder so, dass natürlich, weil wir beim
Zeitpunkt 0 sind, bleibt nur das A1 übrig.
Und das f Punkt von 0 war ja unsere Anfangsgeschwindigkeit VA.
Das heißt, auch hier haben wir einen
weiteren Parameter bestimmt, aber es ist auch wieder der einfache
Fall.
Und wenn wir jetzt weitermachen, zum Beispiel die Endgeschwindigkeit
einbringen wollen, dann ist es jetzt der Teil, der ein bisschen
komplizierter wird.
Also wenn wir hier jetzt unsere Werte einsetzen, A1 plus 2 mal A2 te
plus 3 mal A3 te² und das ist ja unsere Endgeschwindigkeit.
Und wir haben ja schon unser A1 haben wir oben schon mal bestimmt.
Das heißt, das ist die falsche Farbe.
Unser A1 ist ja einfach hier das VA.
Und das können wir auch schon mal rüberbringen.
Und dann bekommen wir eben eine Gleichung für A2 heraus.
Nehmen wir das hier A2 mal te und dann bringen wir den Rest drüber.
Das heißt, wir haben VE minus VA minus 3 A3 te² und dann können wir
eben durch 2 mal te teilen.
Und dann haben wir unser A2, aber noch nicht ganz.
Minus 3 halbe A3 te genau.
Und das hier ist jetzt natürlich noch nicht die Lösung für A2, weil
hier ist noch ein A3 drin.
Das heißt, hier haben wir nicht direkt einen Parameter rausbekommen,
sondern erstmal nur eine Beziehung zwischen zwei Parametern.
Das heißt, hier müssen wir uns noch die vierte Bedingung anschauen und
dann können wir komplett für A2 auflösen.
Genau.
Und hier haben wir jetzt natürlich dann alles zusammen einmal.
Also das hier sind die drei Bedingungen, die wir vorher bestimmt
haben.
Und die letzte Bedingung ist eben, dass wir zum Endzeitpunkt auch
unseren Endpunkt auf der Trajektorie erreicht haben.
Das heißt, wir haben hier dann einfach einmal die komplette Gleichung.
Und dann müssen wir jetzt eben einmal alles einsetzen.
Also unser A0 haben wir ja schon mal bestimmt.
Das ist unser SA.
Unser A1 haben wir bestimmt.
Das ist das VA.
Und das A2 ist natürlich ein großer Block, den wir hier haben.
Genau.
Und das Ganze war ja gleich SE.
Und jetzt haben wir natürlich hier wieder eine Gleichung.
Jetzt haben wir aber nur noch unsere A3 hier drin.
Und das heißt, wir können jetzt das Ganze komplett auflösen.
Wir bringen mal das SA rüber und multiplizieren das Ganze mal mal
zwei.
Und dann haben wir hier noch
ein VE plus VA mal TE.
Und hier bleibt übrig ein minus drei A3 TE hoch drei plus ein A3 TE
hoch drei.
Und jetzt können wir das Ganze eben noch zusammenfassen.
Also diese Einträge hier für das A3, das ist im Grunde minus drei plus
eins.
Das gibt uns einfach nur...
Ist das richtig?
Genau.
Dann können wir das Ganze bis zum Ende durchrechnen.
Und dann stellen wir die Gleichung eben um nach den A3s.
Wenn wir das dann umgeformt haben, dann müssen wir das Ganze natürlich
noch mitnehmen und unser A3 hier in das A2 einsetzen.
Und dann bekommen wir auch einen Wert für A2 heraus.
Und dann haben wir eine relativ komplexe Formel für das Polynom hier.
Aber wie gesagt, die Idee war eben, wir haben unser kubisches Polynom
mit den vier Parametern.
Wir haben unsere vier Bedingungen,
die sich eben auf den Anfangs- und Endpunkt der drei Tore beziehen.
Und dann haben wir das Polynom, das dann diese Bedingungen erfüllt.
Das heißt, wenn wir jetzt unsere Werte hierfür kennen, dann können wir
einen Polynom bestimmen, eine Funktion bestimmen, die all diese
Eigenschaften hat.
Und wenn wir jetzt über so kubische Splines unsere drei Tore
beschreiben, dann ist der Unterschied eben...
Also hier links, das sind die linearen Interpolationen.
Also hier sind wir linear, das sind die, die wir am Anfang
kennengelernt haben.
Dort haben wir eben diese Eigenschaft, dass man immer stehen bleibt an
jedem Punkt, an jedem Eckpunkt komplett.
Und hier bei den Splines können wir eben eine Funktion definieren, die
eben eine kontinuierliche Geschwindigkeit hat an den Übergangspunkten.
Gut, die Frage ist natürlich, jetzt haben wir ja so eine Interpolation
gemacht.
Also hier die Sachen, die wir uns hier angeschaut haben, die haben
diese Eigenschaft, dass alle Punkte, die wir angeben, sind auch in der
Trajektur hier drin.
Also auch wenn wir das mit Splines machen, dann sind diese vier
Punkte, die wir hier definiert haben zum Beispiel, um die drei Tore zu
beschreiben, die sind Bestandteil der Trajektur.
Also es gibt immer irgendeinen Zeitwert, zu dem man jeden dieser
Punkte erreicht.
Dazu im Gegensatz steht eben die Approximation oder approximierte
Bahnsteuerung.
Genau, im Gegensatz zu den Interpolationsverfahren hat man hier eben,
wenn man nur Approximation macht, die Eigenschaft, dass die
Kontrollpunkte, also wir nennen das dann vielleicht nicht mehr
Stützpunkte, die müssen nicht auf der Bahn sein.
Also hier ist zum Beispiel über diese drei Kontrollpunkte wird die
türkise Bahn hier beschrieben, aber die Bahn geht nicht durch die
Kontrollpunkte durch.
Das ist der Gegensatz zu den Interpolationsverfahren, wo die
Bahnpunkte immer enthalten sind.
Und wir schauen uns, wie man das umsetzen kann.
Dazu schauen wir uns erstmal einen sehr einfachen Fall an.
Also die einfachste Implementierung davon ist im Grunde, wir machen
eine lineare Interpolation eigentlich.
Also hier in den Hauptteilen, also zum Beispiel wenn wir hier sind
oder so, dann ist das eine ganz normale lineare Interpolation oder
meinetwegen auch mit Splines.
Aber wenn wir in der Nähe von so einem der Kontrollpunkte liegen, zum
Beispiel hier,
dann fangen wir an, also bevor wir den Punkt erreicht haben, fangen
wir schon an, teilweise der anderen Trajektorie zu folgen.
Also hier ist es im Zeitbereich, also wenn wir nah genug am Zeitpunkt
T3 sind, dann beginnt der Arm oder der Endeffektor schon, der nächsten
Trajektorie zu folgen.
Aber natürlich nicht einfach direkt, dass wir dann ja einfach nur
früher aufhören, sondern hier interpoliert man erstmal natürlich auch
zwischen den beiden Trajektorien.
Also zum Zeitpunkt T gleich 3 folgt er eben zur Hälfte der ersten
Trajektorie nach hier unten und zur anderen Hälfte der Trajektorie
nach oben, was eben dazu führt, dass er hier dann zum Zeitpunkt T3
senkrecht fährt.
Also hier so.
Dadurch bekommt man so eine Art Überschleifen, über die nennt man das
dann.
Das bedeutet, wir fahren dann immer solche Bahnen ab, kurz bevor wir
die Punkte erreichen und wechseln dann eben kontinuierlich in die
andere Richtung der nächsten Trajektorie.
Und ja, im Allgemeinen erreichen wir dann unsere Stützpunkte nicht.
Die Frage ist natürlich, wie sieht das Ganze dann im
Geschwindigkeitsraum aus?
Also hier haben wir wieder links ist das jetzt das ganz normale
lineare Interpolationsprofil.
Wir nehmen jetzt einfach mal an, der erste Teil hier wird etwas
langsamer abgefahren als der zweite Teil.
Und wie gesagt, wenn wir jetzt hier an so einem Punkt sind, wo wir
abrupt die Richtung ändern, dann müssen wir eben die Geschwindigkeit 0
haben an dem Zeitpunkt.
Und das sieht man auch in dem Geschwindigkeitsprofil, das sich aus
dieser Interpolation ergibt.
Das heißt, zwangsläufig bedeutet das, dass wir hier V gleich 0 haben
müssen, wenn wir von der einen Interpolation zur nächsten
Interpolation Trajektorie wechseln.
Wenn wir jetzt so diese einfache Variante mit dem Überschleifen
machen, wo wir in einem gewissen Radius oder einer gewissen Zeitnähe
von diesem Kontrollpunkt unsere Trajektorie, nach der wir folgen,
langsam ändern, dann bekommen wir eben so eine Kurve hier.
Das ist halt nicht mehr ein Knick, aber das Geschwindigkeitsprofil
sieht auch anders aus.
Also wenn wir uns das hier dann anschauen, dann landen wir eben hier
in diesem kurvigen Bereich, auch in der Geschwindigkeitskurve, wo wir
eben von der Geschwindigkeit der ersten Trajektorie interpolieren zur
Geschwindigkeit der nächsten Kurve.
Das heißt, hier vermeiden wir dieses abrupte Stoppen in der Bahn, in
der Interpolation.
Genau, dieses Überschleifen ist natürlich eine sehr simple
Implementierung, aber ich denke, erstmal relativ einfach.
Wir machen dann komplexere Dinge.
Dieses Überschleifen kann man natürlich an verschiedenen Kriterien
festmachen.
Also zum Beispiel, wenn die Geschwindigkeit einen bestimmten
Minimalwert unterschritten hat.
Also dadurch, dass man ja langsamer wird, je näher man seinem Ziel
kommt, kann man das benutzen.
Oder eben positionsabhängig.
Wenn ich also in einem gewissen Radius von dem Zielpunkt bin, dann
fange ich halt an, zur nächsten Trajektorie zu wechseln und außerhalb
von diesem Radius verfolge ich einfach die normale Trajektorie.
Das kann man sich dann eben aussuchen, je nach Anwendungsfall, was man
machen möchte.
Genau, aber das ist eben die einfache Variante, wie man so eine
Bahnapproximation machen kann, mit so Kontrollpunkten.
Der eigentliche Teil, den wir da behandeln wollen, sind ein bisschen
komplexere Darstellungen von so Bahnapproximationen oder von so
Kontrollpunkten für Trajektorien.
Und das sind eben die Bernstein-Polynome.
Und da haben wir dieses schreckliche Bild am Anfang.
Aber was man hier sieht ist, dieses X von T ist die eigentliche
Trajektorie, die wir jetzt beschreiben wollen oder abfahren wollen.
Und es gibt Kontrollpunkte.
Das sind eben die P's hier.
Das P0, P1, P2 und P3, das sind die Kontrollpunkte.
Und was ich möchte ist, ich gebe diese Kontrollpunkte vor und dann
möchte ich daraus eine Bahn haben, eine Interpolation, die eben hier
so verläuft wie die rote Strecke.
Wir wollen uns dann eben anschauen, wie man das macht.
Und man kann es hier so ein bisschen erahnen.
Nachher, die Konstruktion, die wir uns dann anschauen werden, die
schaut sich dann an, wie man Punkte auf der Bahn findet, indem man die
einzelnen linearen Verbindungen wieder unterteilt.
Und dann diese Verbindungen von denen nochmal unterteilt.
Aber da schauen wir uns den Algorithmus dazu auch genau an.
Das heißt, hier hat man dann wieder eine lineare Verbindung, die dann
hier bei Q0 und Q1 ist.
Und die können dann wieder linear verbunden werden und dann bekommt
man einen Punkt auf der Trajektorie.
Aber wie gesagt, das kommt... wie das genau funktioniert, diese
Konstruktion, das kommt später.
Aber das war zum Ziel.
Also wir haben Kontrollpunkte, die die Bahn in eine gewisse Richtung
ziehen sollen.
Und dann möchten wir hier so eine kontinuierliche Trajektorie haben.
Wie gesagt, das ist eins von den Approximationsverfahren.
Das heißt, unsere Kontrollpunkte werden nicht zwangsläufig von der
Trajektorie abgefahren.
Hier ist es sogar so, dass meistens nur der Start- und der Zielpunkt
erreicht werden.
Und das Ganze verläuft hier nach einer relativ einfachen
Basisfunktion.
Das heißt, die Punkte werden hier gewichtet zusammenaddiert, wenn man
so will.
Das ist hier nichts anderes.
Also der Teil hier, das bin, das ist ja einfach nur eine reelle Zahl.
Das ist irgendein Gewicht, mit dem der Kontrollpunkt dann eben
gewichtet werden soll.
Und das PI ist einer der Kontrollpunkte.
Und das heißt, wir haben eine gewichtete Summe von unseren
Kontrollpunkten.
Die Frage ist, was ist dieses BIN?
Das ist eben das I-Teglied von dem Bernstein-Polynom.
Da haben eben diese Kurven ihren Namen her.
Und das sieht so aus.
Also hier haben wir n über i, also die aus der Kombinatorik.
Und dann haben wir t hoch i und 1 minus t hoch n minus i.
Das heißt eben, das ist eine Kombination aus t und 1 minus t hoch
irgendwas, je nachdem wo wir gerade sind.
Und diese Kombination n über i gibt uns dann eben noch einige Faktoren
dazu.
Also man kennt wahrscheinlich, wenn man irgend sowas hat wie 3 über i,
dann bekommen wir da eben zum Beispiel die Werte...
ich lass es mal nur so... 1, 3, 3, 1 heraus.
Das sind eben die aus dem Pascal-Dreieck oder so, die kennt man
bestimmt.
Wir sehen davon auch gleich noch die einfachen.
Wir wollen uns auch erstmal nur... der einfache Teil, da schauen wir
uns eins an, wo n gleich 3 ist jetzt.
Genau.
Wir wollen jetzt natürlich die Zwischenstellungen hier berechnen
können.
Das können wir zum einen mit der Funktion machen, indem wir einfach
unser Bernstein-Polynom ausrechnen.
Und dann bekommen wir für n gleich 3 diese Gleichung hier raus.
Also hier steckt natürlich der Vorfaktor 1 drin und hier auch.
Das ist eben dann das 1, 3, 3, was wir hier gesehen haben.
Und dann sieht man hier, dass diese einzelnen Polynomenteile, also 1-t
hoch 3, 1-t² mal t, 1-t mal t² und t hoch 3, eben die Polynomenteile
hier, die dann hier mit reingehen.
Und wenn wir diese Funktion jetzt einfach plotten, dann folgt sie eben
diesem Schema.
Also dass wir jetzt hier unsere Kontrollpunkte P1, P0 bis P3 haben.
An P0 und P3, also den Anfangs- und Endpunkten, sind wir auch
tatsächlich auf der Trajektorie.
Und dazwischen werden wir so quasi hingezogen zu den Kontrollpunkten
hier P1 und P2.
Aber wir erreichen sie nicht.
Damit haben wir natürlich eine Möglichkeit, die verschiedenen
Trajektorien zu beschreiben.
Vielleicht noch ein bisschen zum Verständnis, was diese Faktoren hier,
die müssen sich natürlich am Ende auch wieder zu 1 addieren, sonst
macht das Ganze wenig Sinn.
Vielleicht ein bisschen das Verständnis zu entwickeln, wie sich diese
einzelnen Faktoren hier entwickeln.
Dafür ist diese Abbildung gedacht.
Das sieht immer etwas kurios aus, aber wenn man sich mal die einzelnen
Teile anschaut, also links hier, das hier ist für n gleich 2.
Und dafür sind eben, wenn wir 2 über i haben, da sind das dann einfach
nur die Werte 1, 2 und 1 jeweils für i gleich 0, 1 und 2.
Und was hier gezeichnet sein soll, ist eben einmal der Bernstein
-Polynomenteil für i gleich 0.
Und für i gleich 0 haben wir einfach nur 1 minus t Quadrat.
Und wenn man sich das hier anschaut, die x-Achse hier ist t und das
ist der Wert von dem einzelnen Glied.
Und das ist eben hier so eine Parabel, die ihren Nullpunkt hier bei t
gleich 1 hat.
Und eben also eine verschobene Parabel ist.
Dieser Wert, wenn man hier t gleich 1 setzt, dann hat man hier eben 0,
der Rest folgt der Parabel.
Genau andersrum ist es eben für den Teil bei i gleich 2.
Das soll der Teil hier sein.
Und der folgt eben einfach nur dem t Quadrat.
Also in Wirklichkeit steht da natürlich einmal das.
Das ist die 1 von hier.
Und hier steht natürlich auch einmal das.
Und dann haben wir noch den dritten Teil dazu.
Das ist dann also den mittleren Teil für i gleich 1.
Und der ist eben hier eingezeichnet.
Nur um vielleicht das Verständnis für dieses Bild etwas klar zu
machen.
Und das ist jetzt genau dieser Mittelteil, also der eben dann 2 mal.
Das ist eben die 2 aus der 2 über i.
Und hier haben wir jetzt eben 1 minus t hoch 1 mal t.
Und jetzt zu jedem beliebigen Zeitpunkt t setzt sich dann eben unser
Bernstein -Polynom insgesamt aus einer Kombination der drei Punkte
hier zusammen.
Die sich dann eben ergeben, wenn wir zu irgendeinem Zeitpunkt hier
eben durchgehen.
Dann bekommen wir eben irgendeinen Wert für den P0, irgendeinen Wert
für P1 und irgendeinen Wert für P2 als Gewicht heraus.
Das hier ist für unser P0.
Das für unser P1.
Und das für unser P2.
Und dann hat man eben ein Gewichtepaar, das man dann zusammenaddieren
kann.
Und dann bekommt man einen Punkt auf dieser approximierten
Trajektorie.
Und das gleiche ist eben hier nochmal dargestellt.
Natürlich etwas chaotischer für den Fall n gleich 3.
Also das müssen wir jetzt ja nicht mehr im Einzelnen durchgehen.
Aber das hier ist eben der Fall n gleich 3.
Und da haben wir eben hier 1, 2, 3, 4 Teile, die wir dann eben einzeln
ausrechnen können.
Genau.
Das ist so der mathematische Teil.
Die Frage ist natürlich für, wenn wir das jetzt wirklich ausrechnen
wollen, also so eine Trajektorie folgen wollen, dann ist es manchmal
nützlich, wenn man Teile linear approximieren kann, über Polygonzüge
oder so etwas.
Das heißt, gerade die Splines werden oft auch nochmal angenähert, um
sie dann implementieren zu können.
Und das ist das, was in dem Decasselia-Algorithmus passiert.
Also hier wollen wir uns an so eine Bezierkurve annähern, um das Ganze
eben effizient berechnen zu können, einfach damit es für den Rechner
einfacher ist.
Und das Ganze basiert auf einer Eigenschaft von diesen Bezierkurven.
Also man kann Bezierkurven immer in der Mitte durchteilen oder auch
tatsächlich an einer beliebigen Stelle in zwei Teile.
Und die einzelnen Teile sind auch wieder Bezierkurven.
Die Eigenschaft nutzen wir eben aus, dass wir die teilen können.
Und dadurch, dass wir die teilen können, können wir sie auch iterativ
berechnen.
Also der erste, dieser Algorithmus, hat verschiedene Facetten, aber
der Teil, den wir uns jetzt anschauen, der beschäftigt sich damit,
einen Punkt auf der Trajektur zu berechnen.
Man bekommt gleichzeitig auch immer eine Annäherung aus linearen
Segmenten an die Kurve heraus bei dem Prozess.
Und was man gegeben hat, sind eben die Kontrollpunkte.
Das sind ja die, die einfach die Kurve beschreiben, die wir hier
haben.
Und wir setzen einfach fest, unsere initialen Punkte nehmen wir eben
so an, als neue Punktmenge.
Da benutzen wir jetzt hier diesen Index 0, den wir dann hochzählen.
Also das Ganze ist ein iteratives Verfahren.
Also hier ist das K gleich 0 im ersten Schritt.
Das, was oben steht.
Und das Einzige, was man jetzt machen muss in jedem Iterationsschritt,
ist man macht einen neuen Punkt zwischen zwei Kontrollpunkten.
Also das hier ist... das K heißt, wir sind in dem vorherigen Schritt,
also wir wollen den nächsten Schritt berechnen, K plus 1.
Wir nehmen zwei Kontrollpunkte, die nebeneinander liegen, also I und I
plus 1.
Das sind zwei nebeneinander liegende Kontrollpunkte.
Und dann interpolieren wir zwischen denen linear.
Und dieses T0, das ist das, was wir bestimmen wollen.
Also wir wollen bestimmen, unsere Trajektorie P von T0 ist was, fragen
wir uns.
Und wir nehmen jetzt einfach dieses T0 und interpolieren zwischen den
einzelnen Kontrollpunkten linear.
Und was vielleicht nicht offensichtlich ist, wenn man das tut, dann
hat man immer weniger Punkte.
Also wenn ich am Anfang vier Punkte habe, dann sagen wir mal, der
Einfachheit halber, T0 ist 0,5.
Und ich den ersten Schritt durchführe, dann mache ich eine lineare
Interpolation zwischen dem ersten und zweiten Punkt, immer zwischen
den benachbarten, zwischen dem zweiten und dritten und zwischen dem
dritten und vierten.
Wenn ich das gemacht habe, dann habe ich nur noch drei Punkte jetzt.
Das sind die drei blauen hier.
Dann habe... das sind meine neun Punkte, mit denen ich dann in die
nächste Iteration gehen kann.
Das heißt, auch hier hat man jetzt was.
Und jetzt, wenn man das jetzt iterativ im nächsten Schritt wieder
macht, dann habe ich jetzt ja nur noch drei Punkte.
Das heißt, wenn ich jetzt linear interpoliere in der Hälfte, dann habe
ich danach ja nur noch zwei Punkte.
Das heißt, jetzt habe ich eigentlich nur noch eine Möglichkeit.
Wenn ich hier jetzt linear interpoliere, dann lande ich hier in der
Mitte von dem grünen.
Und das ist das Abschlusskriterium für den Algorithmus.
Also dann terminiert der Algorithmus, wenn man nur noch einen Punkt
hat.
Das heißt, das ist auch relativ schnell, wenn man jetzt so ein Polynom
hat mit wenigen Kontrollpunkten.
Dann ist das innerhalb von wenigen Schritten eben fertig.
Und die einzelnen Verbindungen hier kann man auch als Annäherung dann
an die tatsächliche Kurve betrachten, die natürlich wesentlich
komplexer verläuft.
Ich habe das jetzt natürlich nur irgendwie von Hand gezeichnet, aber
die eigentliche Kurve würde dann irgendwie so verlaufen.
Aber wir haben jetzt im Grunde so eine lineare Annäherung von oben an
die Kurve gebastelt dadurch.
Das haben wir auch nochmal in schön, wenn ich das nicht versuche, hier
so krakelig zu zeichnen, hier dargestellt.
Also jetzt hier mal mit einer richtigen Kurve, wo man auch wirklich
sieht, wie die Kontrollpunkte Einfluss haben.
Also schwarze ist die eigentliche Trajektorie.
Und die schwarzen Punkte hier, P0 bis P3, das sind die Kontrollpunkte,
die diese Kurve beschreiben.
Und wir haben jetzt hier ein t.
Das kann man hier sehen.
Das t ist jetzt nicht mehr 0,5, sondern mal was anderes.
Damit man hier mal was sieht.
Also was man hier sieht, es wird ja erstmal linear interpoliert
zwischen P0 und P1.
Das heißt, wir bekommen jetzt hier Anteile von denen.
Also einer von diesen Teilen ist eben 1-T0 und der andere ist T0, die
sich eben zu 1 addieren.
Das gleiche gilt eben hier für die Interpolation zwischen P1 und P2.
Hier ist es auch so, ein Teil ist eben 1-T0 und der andere Teil ist
T0.
Und hier auch.
Also zwischen P2 und P3.
Auch wieder linear interpoliert.
Um eben die neuen Punkte, also das rote P0, das rote P1 und das rote
P2 zu bestimmen.
Und jetzt, wie eben an dem einfacheren Beispiel, muss man
weitermachen.
Das heißt, hier werden die roten Punkte wieder verbunden, jetzt hier
in blau.
Und dann machen wir das gleiche wieder.
Also wir machen wieder eine lineare Interpolation für die blauen
Punkte.
Und dann bekommen wir hier die letzte Strecke.
Das ist hier jetzt so in pink dargestellt.
Und dann haben wir den Punkt P0 mit K gleich 3, der jetzt hier in pink
oder magenta ist.
Und dieser Punkt ist dann auch tatsächlich auf der Trajektorie.
Also so verläuft dieser Algorithmus, wenn man eben so eine Näherung an
so einer Bézier-Kurve haben möchte.
Und das Ganze hat natürlich auch indirekt den Vorteil, also dadurch,
dass wir jetzt diese Punkte bestimmt haben, also all diese Iterationen
gemacht haben, können wir eine Annäherung an die Bézier-Kurve direkt
finden.
Also wir haben ja unsere... das hier sind die gleichen Punkte, die wir
hier bestimmt haben.
Einfach auf dem Weg diesen einen Punkt hier auf der Trajektorie zu
bestimmen.
Aber wenn wir die dann insgesamt wieder verbinden, dann erhalten wir
eben eine Annäherung an diese Kurve.
Und man sieht, diese Annäherung ist natürlich etwas genauer dort, wo
wir den Punkt finden wollten.
Also das hier ist ja der Punkt für unser gewünschtes T0.
Dieser pinke hier ist ja der tatsächliche Punkt für P von T0.
Der liegt ja auch wirklich auf der... aber man sieht, wenn man weiter
weg geht, dann ist diese lineare Annäherung natürlich etwas grober,
weil wir hier dann ziemlich weit weg kommen von der eigentlichen
Kurve.
Genau.
Ja, das ist eigentlich alles zu den... also das sind nur noch der Rest
zu dieser Bahnsteuerung.
Habt ihr noch Fragen zu dem Teil?
Achso, also entweder möchtest du einen Punkt auf der Kurve bestimmen,
also einen konkreten, dann bestimmst du T0.
Wenn du aber jetzt eine Annäherung machen willst, also dass du so
einen Polygon zukasst, der so ähnlich aussieht, dann ist es oft so,
dass man einfach T gleich 0,5 wählt, weil das dann ungefähr gleiche
Genauigkeit entlang der Kurve hat.
Genau.
Also du kannst weitermachen, wenn du willst.
Also die Idee ist natürlich, wenn du so eine Annäherung machst, dass
du natürlich eine gewisse Auflösung haben willst, damit es noch
schnell zu berechnen ist für denjenigen, der damit arbeitet, weil die
einzelnen Teile linear sind, aber trotzdem irgendwie nah genug an der
eigentlichen Kurve ist.
Okay, ich habe noch eine Folie, die hat nicht so viel mit dem
Vorlesungskanal zu tun.
Naja, vielleicht ein bisschen.
Es ist auf jeden Fall eine Trajektorie, die der Roboter folgen wird.
Aber letztes Mal hat mich einer von euch, ich weiß nicht, ob er da
ist, von daher erkläre ich erstmal, worum es ging.
Es kam die Frage auf, wir haben uns ja in Kinematik, in Versa
-Kinematik und so weiter mit Roboterarmen beschäftigt, die teilweise
auch, die meistens in unseren Beispielen haben, die relativ wenig
Freiheitsgrade, damit es einfach zu berechnen ist.
Aber in der Realität haben Roboter ja oft viele Freiheitsgrade.
Also normale Industrieroboter haben dann oft einfach sechs.
Aber zum Beispiel der arme Sechs hat acht Freiheitsgrade in seinem
Arm.
Und dann war die Frage, warum macht man überhaupt acht Freiheitsgrade
in den Arm rein, wenn doch unsere Welt nur sechs Freiheitsgrade hat?
Also ich kann ja nur drei Positionen und drei
Orientierungsfreiheitsgrade haben.
Das heißt, wenn ich sechs Freiheitsgrade in meinem Roboter habe und
die genügend Gelenkwinkelgrenzen Freiraum haben, dann müsste doch
alles möglich sein.
Und da gibt es natürlich verschiedene Gründe dafür, warum man das
macht.
Also der Vorteil, wenn man mehr Freiheitsgrade hat, man kann eben auch
noch zusätzliche Bedingungen vorgeben, die zum Beispiel eine
Trajektorie folgen muss.
Also wir haben hier jetzt in dieser Bahnsteuerung überwiegend über
Beschleunigung und so weiter geredet.
Aber es gibt auch so etwas höherleveligere Anforderungen, zum Beispiel
die Gelenkwinkelgrenzen zu vermeiden.
Wir haben ja in der Kinematik und Inversen-Kinematik kennengelernt,
wenn ein Roboter nah an seine Gelenkwinkelgrenzen kommt, dann haben
wir oft numerische Probleme, weil zum Beispiel die Jacobi-Matrix nicht
mehr invertierbar ist und so weiter.
Und das macht auch Realprobleme.
Und deshalb habe ich mal dieses Video mitgebracht.
Es ist schon ein bisschen älter, aber was der Robot hier machen soll,
ist eine Kreistrajektorie mit seinem Arm abfahren.
Also hier spielt natürlich auch Inverse-Kinematik eine Rolle und so
weiter.
Aber der Endeffektor hier soll eine Kreisbahn abfahren, aber auch die
Orientierung ändern.
Also so eine Kreisbahn, also wir Menschen kommen dann irgendwann nicht
weiter, aber der Roboter hat acht Freiheitsgrade und kann das machen.
Aber links benutzt er seine acht Freiheitsgrade nicht dazu, seine zwei
zusätzlichen, die Gelenkwinkelgrenzen zu vermeiden, rechts schon.
Rechts kann er das im Prinzip unendlich weitermachen, aber links wird
man feststellen, also links versucht er einfach nur Position,
Orientierung zu halten und fährt immer wieder einfach nur über
Regelung die nächste Orientierung an und so weiter.
Und irgendwann kommt er dann in eine Gelenkwinkelgrenze.
Hier ist das jetzt passiert.
Dann sieht man, wie Dimitri erst noch entspannt ist und dann komisch
guckt.
Also was jetzt passiert ist, während er dieser Trajektur gefolgt ist,
also er hat ja einfach nur sechs, also er hat immer eine 6D-Pose
vorgegeben bekommen, also Position und Orientierung und hat dann die
immer mit Inversa-Kinematik verfolgt.
Und irgendwann hat sich dann sein, das eine Gelenk, das ist so das
Clavicular -Gelenk, das ist dieses, womit man die Schulter drehen kann
so ein bisschen, hat sich dann immer weiter nach vorne bewegt dadurch.
Und irgendwann war das im Anschlag.
Und sobald es dann im Anschlag ist, ist man dann eben an so einer
Gelenkwinkelgrenze.
Und das hat dann dazu geführt, dass er dann versucht hat, mit den
anderen Gelenken trotzdem weiterzufahren.
Und das hat dann nur zu, führt dann zu so lustigen Effekten wie dem,
was hier passiert ist.
Und wenn man jetzt halt mehr Freiheitsgrade in dem Roboterarm hat, wie
zum Beispiel hier 8, dann kann man die zwei zusätzlichen benutzen, um
zum Beispiel Gelenkwinkelgrenzen zu vermeiden, also einen maximalen
Abstand zu Gelenkwinkelgrenzen zu halten.
Das ist eine der Möglichkeiten, die man hat.
Man kann aber auch andere Optimierungskriterien definieren.
Das sind dann so etwas höherlevelige Kriterien, die man ansetzen kann,
die neben der einfachen Pose dann auch da sein können.
Genau.
Ja, ich hoffe, das hat vielleicht etwas, das etwas anschaulicher
gemacht, was das so bedeutet, wenn man 8 Freiheitsgrade in dem
Roboterarm hat und was man damit tun kann.
Ja, dann machen wir einfach noch so ein bisschen den Anfang von
Bewegungsplanung.
Also im Grunde von der Idee her folgt das Ganze so ein bisschen
aufeinander.
Also wir haben uns ja erst so Kinematik, inverse Kinematik und so
weiter angeschaut.
Damit kann man so einzelne Roboterkonfigurationen analysieren.
Dann sind wir so ein bisschen weitergegangen jetzt mit dieser
Bahnsteuerung.
Wie kann ich dann mehrere Gelenke gleichzeitig ansteuern, wenn ich
irgendwie eine Zielpose schon habe?
Das ist natürlich immer noch die Frage, wenn ich jetzt nicht einfach
linear oder mit einer Bezierkurve interpolieren will, sondern oft will
ich ja auch bei einer Trajektorie zum Beispiel Hindernissen
ausweichen.
Also ein Roboter muss dann irgendwie wissen, wo sind Hindernisse und
denen ausweichen und seine Bahn etwas mehr planen, als einfach nur zu
steuern.
Das ist der Teil, um den diese Vorlesung im Prinzip nur geht.
Und ja, hier sind noch so ein paar uralte Videos.
Also man kann sich zum Beispiel vorstellen, so ein Roboter, der in ein
Auto reingreifen will oder ein Roboter, der ein Werkstück hier durch
etwas durchziehen muss und dabei vermeiden muss, mit der Umgebung und
so weiter zu kollidieren.
Also es ist etwas mehr als einfach nur irgendeiner Trajektorie zu
folgen, sondern wir müssen irgendwie auch Hindernisse vermeiden
können, während sich der Roboter bewegt und trotzdem unsere Ziele
erreichen, obwohl diese Hindernisse im Weg sind.
Und hier ist es mal an dem Beispiel von so einem Dual Arm Roboter
dargestellt, der jetzt hier eben verschiedene Objekte auf den Tisch
greift und dabei natürlich trotzdem darauf achten muss, dass er die
anderen Objekte nicht umstößt, während er dann eben das eine Objekt
greift oder das andere Objekt abstellt.
Das heißt, das ist natürlich in vielen Bereichen wichtig, dass man
Bewegungen nicht nur ausführt, sondern vorher plant.
Und dafür schauen wir uns jetzt wahrscheinlich heute nur so ein paar
Begriffe an, die wir uns dann erstmal aneignen und die konkreten
Verfahren, wie man dann sowas planen kann, kommt dann vermutlich das
nächste Mal.
Aber ja, genau.
Das meiste davon kennen wir auch eigentlich schon.
Wir führen es hier nur nochmal neu ein, weil manchmal hat die
Bewegungsplanung das andere Symbole oder Vorstellung davon.
Aber den Konfigurationsraum vom Roboter, den kennen wir ja schon.
Der ist uns ja zu Genüge bekannt.
Also zum Beispiel die Gelenkwinkel und die Freiheitsgrade und so
weiter.
In der Bewegungsplanung ist es tatsächlich manchmal so, dass man auch
zum Beispiel direkt im Arbeitsraum plant, aber dann heißt es trotzdem
Konfigurationsraum.
Das ist manchmal etwas verwirrend, aber jetzt hier in dem Kapitel
Bewegungsplanung sieht uns der Konfigurationsraum und wir haben immer
eine Startkonfiguration und eine Zielkonfiguration aus unserem
Konfigurationsraum.
Also wir wollen von da nach da hinkommen.
Was wir jetzt auch haben wollen, wir brauchen eben eine stetige
Trajektorie.
Also wir wollen nicht einfach, der Roboter kann sich nicht
teleportieren von der einen Konfiguration in die andere, sondern er
muss sich stetig bewegen.
Und zusätzlich haben wir noch Randbedingungen.
Das Ganze hört sich ziemlich ähnlich an zu dieser Bahnsteuerung, aber
was hier eben noch reinkommt zu eben solchen Dingen wie
Gelenkwinkelgrenzen, maximaler Beschleunigung und so weiter, ist, dass
wir jetzt hier auch Dinge optimieren können wie Energie und so weiter,
aber zusätzlich auch ganz andere Neben- und Randbedingungen.
Also zum Beispiel kollidiert der Roboter mit der Umwelt oder ist er in
der Nähe von Menschen oder sowas.
Das heißt, hier können wir nochmal vom Optimierungsgrad her ganz
andere Werkzeuge auspacken und ganz andere Umstände beachten.
Und um das mal dann eben zu zeigen, also das ist jetzt so unser
Schritt von der Welt, wo es einfach nur einen Roboter gibt, der nicht
mit der Umwelt interagiert, gehen wir jetzt zu einem Roboter, der
immer noch nicht mit der Umwelt interagiert, aber ihr zumindest
ausweichen kann, wenn sie im Weg ist.
Und den Arbeitsraum haben wir auch schon kennengelernt.
Also jetzt nehmen wir für uns jetzt hier an, der Arbeitsraum ist
meistens halt sechstdimensional, weil das in unserer Welt so ist.
Wir benutzen oft in der Robotik, ich glaube, wir haben es irgendwann
mal eingeführt, aber ich bin mir nicht sicher, den Begriff TCP für den
Endeffektor.
Die Begriffe sind nicht immer gleich, aber für unsere Zwecke reicht
das.
Und wir haben jetzt hier so einen Roboter, der hat hier jetzt drei
Freiheitsgrade.
Das ist so ein Roboterarm, der jetzt hier einfach rumsteht und der hat
ein Hindernis.
Aber dieses Hindernis ist nicht im Gelenkregelrahmen, im
Konfigurationsraum, sondern im Arbeitsraum.
Und wenn der Roboter jetzt einen Startpunkt und einen Zielpunkt
vorgegeben hat
und er sich direkt dorthin bewegen würde, dann würde es wahrscheinlich
passieren, dass er kollidiert mit diesem roten Hindernis.
Das heißt, er muss irgendwie eine Bahn finden, um das Hindernis herum
zum Zielpunkt hin.
Die Frage ist jetzt, im Arbeitsraum sieht das ja alles ganz einfach
aus.
Also dieses Hindernis ist ja nur so ein Block quasi, eine Box mit
Höhe, Breite und so weiter.
Oft ist es so, dass wenn wir einfache Hindernisse im Arbeitsraum
haben, dass die sehr komplex werden, wenn wir in den
Konfigurationsraum wechseln.
Also wenn wir uns vorstellen, welche Werte hier für die einzelnen
Gelenke, Theta 0, Theta 1, Theta 2, sind denn in Kollision mit diesem
Objekt, dann ist das oft kein einfaches Objekt mehr.
Sondern hier ist das mal dargestellt.
Also diese Würfel hier, das ist der Konfigurationsraum vom Roboter.
Also Theta 0, Theta 1 und so weiter.
Oh Gott, warum ist das alles Theta 0?
Es soll natürlich Theta 0 bis Theta 2 sein.
Das ist natürlich Unsinn.
Und dieses einfache Hindernis wird zu einem sehr komplexen Objekt im
Konfigurationsraum.
Es liegt einfach daran, dass eben die, wenn wir Drehgelenke haben,
dann befinden wir uns einfach von der Orientierung her in einem ganz
anderen Raum als dem kathesischen Arbeitsraum.
Und was hier gemacht wurde, ist in diesem Block ist alles weiß, wo
keine Kollision mit diesem Hindernis ist und alles wurde rot gemacht,
wo der Roboter eine Kollision mit dem Hindernis hat.
Dann ergibt sich eben so eine Darstellung.
Unser Konfigurationsraum hat ja eben bei N Gelenken ist der N
-Dimensional und der weiße Raum, der keine Kollisionen hat, den nennen
wir dann C-Free.
Also das ist der kollisionsfreie Konfigurationsraum.
Und die roten Flächen hier, das sind die, wo der Roboter kollidieren
würde.
Das ist der Hindernisraum, also C-Ops.
Und insgesamt ist es natürlich so, dass in dem Konfigurationsraum ist
etwas entweder ein Hindernis oder es ist kein Hindernis.
Das heißt, die beiden ergeben dann wieder den gesamten
Konfigurationsraum des Roboters.
Und wenn wir jetzt unser Hindernis überführt haben in die Darstellung
hier im Konfigurationsraum, dann können wir hier natürlich eine
Trajektorie bestimmen.
Also das ist das gelbe hier von der Startkonfiguration zur
Zielkonfiguration.
Die Trajektorie darf natürlich nicht in den roten Bereich, also in C
-Ops kommen, sondern muss in C-Free bleiben.
Und wenn wir das erfüllen, dann können wir die eben ausführen und dann
führt es dazu, dass wir auch im Arbeitsraum das Hindernis nicht
treffen werden.
Das ist so das grundlegende Vorgehen, was wir einsetzen hier.
Aber natürlich ist dieser, zum einen ist diese Darstellung sehr
komplex und die Darstellung kann sich natürlich auch ändern, gerade
weil sich ja die Umgebung ändern kann.
Das heißt, hier ist mal ein immer noch relativ einfaches Beispiel
dargestellt, aber wir werden sehen, dass das auch schon relativ
komplex wird.
Also hier ist so ein Roboter, der hier drei Gelenke hat, dargestellt.
Und hier sind so mehrere Objekte, die vor ihm stehen.
Also ein ganz einfaches Szenario.
Und hier ergibt sich natürlich auch schon der, hier ist es schwarz
dargestellt in diesem Würfel.
Das sind all die Konfigurationen, die in Kollisionen sein würden für
den Roboter.
Aber jetzt im Gegensatz zu vorher kann dieser Roboter natürlich auch
hier Dinge herumschieben und verändern in seiner Welt.
Also wenn der Roboter jetzt hier was wegnimmt oder wegschiebt, dann
ändert sich natürlich mit jeder Veränderung der Umwelt auch wieder der
Hindernisraum.
Also wenn das Initial vielleicht so aussah, als alles zugebaut war.
Also das hier ist, das ist der Arbeitsraum.
Das hier ist im Konfigurationsraum.
Einfach nur planar geplottet für die Theta 1 und Theta 2.
Sehen wir, Initial ist zum Beispiel das Ziel in Kollision.
Da kommen wir gar nicht hin.
Aber wenn wir dann die Sachen weggeschoben hätten, also das Rote und
das Blaue hier, dann können wir die Zielkonfiguration erreichen.
Also die Zielkonfiguration ist jetzt hier so reingegriffen an dieses
grüne Objekt.
Und natürlich während der gesamten Ausführung sieht man dann hier,
also vorher sah unser Konfigurationsraum mit dem Hindernisraum hier so
aus und jetzt sieht er so aus.
Das heißt, hier haben wir dann unser Ziel quasi freigeschaufelt.
Genau, ja.
Also im Allgemeinen ist es der Gelenkwinkelraum.
Manchmal rechnet man in Bewegungsplanung auch im Arbeitsraum, aber im
Allgemeinen ist es der Gelenkwinkelraum, genau.
Ja.
Ne, wir berücksichtigen auch die Geometrie vom Roboter, was das Ganze
natürlich beliebig komplex macht, je nachdem.
Also dieser Roboter ist natürlich einfach, aber ich glaube, man sieht
auch schon an dieser Form, also das ist natürlich nur eine Annäherung.
Selbst bei diesen einfachen Geometrien ist oft im Konfigurationsraum
diese Form sehr seltsam, sage ich mal.
Also nicht einfach approximierbar.
Genau.
Ja, hier sind dann einfach noch ein paar Beispiele, wo der Roboter
hier was umgeräumt hat.
Und wenn man was umräumt, führt es natürlich dazu, dass sich die
Darstellung der Hindernisse ändert im Konfigurationsraum.
Das ist natürlich immer zu beachten, ja, mit der Umwelt interagiert.
Ja, also wir haben jetzt noch ein paar der Begriffe dann nochmal quasi
wieder hochgebracht.
Also wie ich gerade gesagt habe, meistens meinen wir mit dem
Konfigurationsraum eben den Gelenkwinkelraum.
Aber Bewegungsplanung ist halt ein größeres Gebiet als nur
enddimensionale Roboterarme.
Das heißt, im Allgemeinen beschreiben wir halt mit so einer
Konfiguration Q den Zustand des Roboters.
Wie auch immer muss irgendwie vollständig beschrieben sein.
Manchmal ist es dann eben die Lage und Orientierung im Raum.
Also wenn man zum Beispiel an eine Drohne denkt oder so, die ja auch
Bewegungsplanung machen, dann will man vielleicht die Konfiguration
nicht beschreiben, als wie die Motoren gerade gestellt sind, sondern
als die Position im Arbeitsraum oder die Orientierung.
Aber wie gesagt, für unsere Roboterarme ist es im Allgemeinen der
Gelenkwinkelraum, mit dem wir hier reden.
Genau.
Ja, wir müssen eben alle Konfigurationen vom Roboter beschreiben
können, um darin planen zu können.
Genau, das haben wir eben schon besprochen.
Also wenn wir ein Hindernis im Arbeitsraum haben, also das rote hier
zum Beispiel, dann ist das eine Sache, die wir natürlich, so
beschreiben wir oft unsere Welt.
Also bauen wir ein Umweltmodell für den Roboter oder der Roboter
erkennt ein Modell mit seinen Kameras, dann ist es halt oft im
Arbeitsraum wird es erkannt.
Und um nachher planen zu können im Konfigurationsraum, müssen wir das
eben irgendwie transformieren, umrechnen in ein
Konfigurationsraumhindernis.
Und damit meinen wir dann alle möglichen Konfigurationen, die in
Kollision mit diesem Hindernis sind, eben auch wie angesprochen, dann
eben die, die die Geometrie des Roboters berücksichtigen.
Also wenn der Roboter einen großen Arm hat, dann eben nicht nur, wenn
der Punkt im Hindernis ist von dem Endeffektor, sondern auch, wenn
irgendein Teil vom Roboter im Hindernis ist.
Genau und das gibt uns dann oft eben so eine Darstellung, die komplett
anders aussieht, als das Hindernis im Arbeitsraum.
Genau und natürlich müssen wir alle Hindernisse, die es gibt,
beachten.
Das heißt, wenn wir alle Hindernisse umgeformt haben in den
Konfigurationsraum, dann können wir die Menge von all diesen
Hindernispunkten oder Konfigurationen zusammenführen zu dem gesamten
Hindernisraum.
Im Konfigurationsbereich ist es natürlich.
Genau und das etwas einfache Konzept ist dann eben einfach durch, sage
ich mal, Negation definiert.
Wenn der Hindernisraum über alle möglichen Hindernisse definiert ist,
dann ist der Freiraum einfach der gesamte Konfiguration minus die
Hindernisse.
Also da haben wir jetzt keine besondere Definition, sondern das heißt
einfach nur, das sind alle Konfigurationen, die nicht mit einem
Hindernis kollidieren.
Und da wir jetzt eben schon gesehen haben, dass es oft so beliebig
nicht lineare und kuriose Funktionen sind, muss man in Realität
irgendwie immer eine Annäherung machen an den Freiraum oder eben an
den Hindernisraum.
Und da unser Konfigurationsraum oft, aber nicht immer größer ist, weil
wir Roboter mit vielen Freiheitsgraden haben, kann das natürlich
passieren, dass wir hier einen sehr großen, einfach nur Raum absuchen
müssen nach möglichen Hindernissen.
Das Ganze nicht immer so einfach ist.
Und es gibt im Allgemeinen auch keine geschlossene Form oder
irgendeine analytische Form, um diese Umwandlung zu machen vom
Arbeitsraum in den Konfigurationsraum, wenn man eine beliebige
Geometrie hat.
Das heißt, normalerweise macht man das irgendwie angenähert, sampelt
das irgendwie ab, approximiert das oder versucht es zu vereinfachen,
um irgendwie den freien Arbeitsraum darzustellen.
Die Frage ist natürlich, wie machen wir das allgemein?
Also in diesem Kapitel kommen wir noch nicht dazu, wie man das jetzt
zum Beispiel aus der Wahrnehmung oder so macht, also wie man aus
Kamerabildern Hindernisse erkennt oder so weiter.
Das machen wir hier noch nicht, sondern wir sind hier so in einer
Welt, wo wir sagen, wir kennen unsere Umwelt, aber wir müssen sie
irgendwie modellieren und darstellen.
Also, dass hier ein Hindernis ist oder dass dort ein Hindernis ist.
Das kann man natürlich exakt machen, indem man irgendwelche konkreten
Modelle davon hat oder man versucht es irgendwie anzunähern.
Vorteil von dann solchen angenäherten Sachen ist eben, dass sie
schneller berechnet werden können oder dass man einfache Lösungen
dafür kennt.
Aber in diesem Kapitel gehen wir davon aus, die Umwelt ist komplett
bekannt.
Wir wissen, was passiert.
Ja.
Und innerhalb von der Bewegungsplanung gibt es so verschiedene
Teilbereiche.
Also ursprünglich, als wir noch nicht, das ist schon sehr lange her,
als man noch nicht so Roboterarme mit vielen Freiheitsgraden hatte, da
gab es ja diese einfachen 2D-Roboter, die rumfahren, was man heute als
Staubsaugerroboter kennt.
Das gibt es ja schon ewig.
Also wenn ich zum Beispiel nur im zweidimensionalen Raum planen möchte
oder im zweidimensionalen Raum plus Orientierung, also der typische
Staubsaugerroboter, dann nennt man das oft einfach nur Fahrtplanung.
Also dann spricht man noch nicht von Bewegungsplanung, aber ist
natürlich ein Teil davon.
Und da gibt es auch so dieses typische ursprünglich Problem, dieses
Pianos -Mover-Problem, wo man sich halt fragt, wie kriege ich mein
Klavier durchs Treppenhaus oder so in meine Wohnung rein.
Und Bewegungsplanung, das benutzen wir eigentlich dann heute, wenn wir
über komplexere Systeme reden.
Also wenn wir mehrere Körper haben, also zum Beispiel der Roboterarm,
der mehrere Segmente hat und mehrere Gelenke, die diese Segmente
verbinden.
Oder eben, wenn wir nicht einen mobilen Roboter haben, sondern
mehrere.
Insgesamt, im Prinzip ist der Unterschied, wie viele Dimensionen wir
haben, macht am Ende des Tages nicht so viel aus, aber viele Dinge
lassen sich im zweidimensionalen Raum noch sehr gut analytisch lösen.
Oder es gibt sehr, sehr gute Näherungen, die sehr schnell Lösungen
finden, während wir in dem hochdimensionalen Raum oft einfach nur auf
Nährungslösungen angewiesen sind, auf heuristische Ansätze angewiesen
sind.
Ja, großer Unterschied.
Genau.
Im Ganzen, das hatten wir eben auch schon.
Bewegungsplanung heißt jetzt für uns mehr als einfach nur von A zu B
zu kommen, sondern wir können auch Randbedingungen definieren, zum
Beispiel die Kollisionen vermeiden, aber auch viele andere Dinge,
indem wir zum Beispiel sagen, gewisse Konfigurationen und so weiter
sind zu gefährlich, weil die zu viel Strom verbrauchen oder so.
Die wollen wir vermeiden.
Das heißt, wir können ja auch gegebenenfalls gewichten.
Und wir können auch so lokale Randbedingungen haben.
Das vergisst man immer.
Unsere Roboter können ja immer so rollonome Plattformen, das heißt,
die können immer sich auf der Stelle nach vorne, hinten und so weiter
bewegen und auf der Stelle drehen.
Normalerweise ist das nicht gegeben.
Also wenn man zum Beispiel an ein ganz normales Auto denkt, wenn man
im Auto ist, kann man auch nicht einfach einen Meter nach rechts
fahren, ohne vor- und zurückzufahren.
Also man muss dann immer... man hat so gewisse Einschränkungen.
Und die Einschränkungen von so nicht-rollonomen Fahrzeugen gehört auch
so zu einem Teil, der in der Bewegungsplanung sehr prominent ist, weil
man eben nicht immer den Luxus hat, dass man in jede beliebige
Richtung fahren kann, sondern vielleicht nur in vorne und ein bisschen
rechts und ein bisschen links.
Und dann muss man sich eben trotzdem zurechtfinden.
Und genau, das sind so lokale Randbedingungen, die man auch beachten
müsste.
Und ja, natürlich, das haben wir aber schon kennengelernt.
So maximale Geschwindigkeitenbeschleunigung, das kennen wir schon aus
der Bahnsteuerung.
Genau.
Ja, das Ganze geht dann sehr stark so in die Algorithmik rein.
Also wir werden uns, nachdem wir uns ein bisschen angeschaut haben,
wie man die Konfigurationsraum dann so irgendwie vernünftig darstellt
und wie man dann darin sucht, dann wird es einfache Algorithmen, die
wir kennen aus der Informatik gehen.
Und dort interessiert uns natürlich auch, wie komplex ist es
überhaupt, Bewegungsplanung zu machen.
Und selbst im Allgemeinen, also ohne, dass man jetzt noch irgendwas
Konkretes gesagt hat zu dem, was wir jetzt wirklich machen wollen,
sind diese Planungsaufgaben, die wir hier betrachten, die sind PSPACE
vollständig.
Das heißt für unser, heißt halt einfach nur, dass wir das lösen können
mit einer deterministischen Turingmaschine und dafür polynomiellen
Platz gebrauchen, proportional zu der Größe des Problems.
Das heißt, wir können das lösen, ohne dass uns der Speicherplatz
komplett explodiert.
Aber für den zeitlichen Horizont liegen wir halt eben genau zwischen
NP und exponentieller Zeit.
Das heißt, alleine solche Planungsaufgaben sind schon NP-harte
Probleme.
Das heißt, wir sind schon in dem Bereich, wo es sehr, sehr schwierig
wird, tatsächlich eine optimale Lösung zu finden.
Wenn man die wirklich finden will, dann ist das meistens so, dass man
dann irgendwie alles absuchen muss.
Aber wir werden sehr gute Heuristiken kennenlernen, wie man dann eben
dort Näherungslösungen finden kann, die eben gut genug sind und nah am
Optimum liegen.
Dann würde ich auch für heute Schluss machen und dann machen wir
Donnerstag mit der Regelungsübung weiter.