Autor Beitrag
mael
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 172
Erhaltene Danke: 18


Delphi XE3 Prof.
BeitragVerfasst: Sa 02.06.18 21:29 
Hallo,

Ich wollte mal etwas anderes vorstellen:
Eine Software um Roboter intuitiv zu steuern, bzw. zu programmieren.
Es ist eine einfache Animationssoftware ähnlich zu Expression Blend für WPF, aber zur Steuerung von Robotern (oder Motoren und Aktoren allgemein).

Bisher habe ich einen Prototyp indem zwar viel Arbeit steckt, aber von außen her noch nicht so viel kann: einfache Animationen. Ich bin aber auch neugierig was ihr vom Konzept an sich haltet. Also gerne auch unter dem Screenshot weiterlesen ;)

Wer schnell ausprobieren möchte, ganz unten ist eine sehr kurze Installationsanleitung. Das Programm und eine Beispielanimation sind im Anhang.

user defined image

Einleitung - Vorstellung des Bedinungskonzepts
Die Grundidee ist es analog zu Animationssoftware, die Änderungen der jeweiligen Motorwinkel auf eine Zeitlinie angeben zu können, und solche Animationen dann einfach abspielen zu können. Dabei unterstützt einen die Software so, dass man mit minimalen Informationen komplexe Bewegungen beschreiben kann.

Als Programmierer kennt man vielleicht die Animationsmöglichkeiten von Expression Blend/WPF, bzw. Synfig Studio zum erstellen von 2D Animationen. Auch Musikkompositionssoftware (wie Tracker), oder Spieleeditoren wie Unity mit denen man virtuelle Charaktere animieren kann sind Vorbilder.

KeyFrame Animation
Denkt man an ein Daumenkino, oder klassische von Hand erstellte Animationen, so wird man pro Sekunde ca. 24 Bilder benötigen, damit eine flüssige Bewegung entsteht. Jedes dieser Bilder muss man einzeln zeichnen, bzw. am Computer die Werte alle einzeln für jedes Frame angeben.
Verwendet man aber KeyFrames, werden nur Bilder gezeichnet/Motorpositionen angegeben, die anderen Zwischenbilder/Zwischenpositionen werden dann aus den KeyFrames automatisch erstellt. So ist es z.B. möglich zwischen zwei Motorpositionen linear zu interpolieren, aber auch Bewegungen entlang eine Kurve sind vorstellbar, wo die KeyFrame nur die Stützpunkte sind die die Kurvenform festlegen.

KeyFrame Animationen sind momentan die elementare Art Animationen zu definieren. Langfristig gibt es viele weitere Ideen.

Komposition und Überblendung
Ein weiteres wichtiges Ziel ist es obig erstellte Animationen/Bewegungen kombinieren zu können, und aus diesen Basiselementen eine Folge von Bewegungs"stücken" zu bilden, die komplexere Bewegungen darstellen.
Das wird quasi wie bei Musikkomposition ablaufen, wo Bewegungsblöcke/Verhaltensmuster aneinandergereiht werden, aber es automatisch/einstellbare Überblendungen gibt, damit die Bewegung zu einer Einheit wird.

Stellt man sich z.B. zwei Animationen eines Spielecharakters/humanoiden Roboter vor: Laufen und Schießen. Dann sollte für einen Fußballspieler, der zum Ball hin läuft, ab einer gewissen Distanz zum Ball fließend zur Schießbewegung übergeblendet werden.

Interaktive Animationen/Modulierung
Eine Animation ist im Prinzip wie ein Instrument, es hat gewisse Eigenschaften, aber die können in einem gewissen Rahmen variiert werden, aber dabei behält das Instrument seinen Charakter. Man kann mehrere Instrumente spielen, sie harmonieren lassen, synchronisieren, und dein Einsatz eines Instruments von einem anderen abhängig machen. Tanzen ist auch eine mögliche Analogie, wo die jeweiligen Partner aufeinander eingehen, besonders wenn sie etwas improvisieren.

Denkt man nochmal an das Beispiel vom Fußballspieler oben, wird z.B. die Überblendung vom Laufen zum Schießen durch ein externes Signal gesteuert: der Distanz zum Ball, die z.B. von einem Abstandssensor/Kamera gemessen wird.
Aber es könnte auch ein Beschleunigungssensor sein, der einen Gleichgewichtsverlust signalisiert. In dem Fall würde dann eine Auffangbewegung abgespielt werden, die je nach Fallwinkel, Geschwindigkeit und anderen Faktoren moduliert werden muss.
Je nach Untergrund müsste auch eine Laufbewegung angepasst werden, damit der Gang stabil ist.

Grundidee bleibt aber trotzdem "prototypische" Bewegungen anzugeben, die dann durch Sensorsignale (oder auch berechnete Signale) moduliert werden können, und so in der echten Welt sinnvoll funktionieren.


Wenn man das Ganze noch weiter denkt lässt sich dass mit einem Planer verbinden, um z.B. Ziele auf einer Karte zu erreichen. Es gibt noch sehr viele weitere Ideen und Inspirationen, aber nun zum bisherigen Prototypen.


Prototyp/Programm (Bedienung)
Man kann bisher nur ziemlich einfache Animationen erzeugen, weil ich vorallem an dem Backend und den Grundlagen gearbeitet habe, um das Timeline-Steuerelement, aber auch an dem Mikrocontrollercode zu erstellen (DMA, Streaming von Signalen usw.). Deutlich mehr ist noch geplant.

KeyFrames können in der ersten Timeline/Zeile erstellt werden, die Werte können im "Value"-Textfeld angepasst werden. Die so erzeugte Bewegungskurve erscheint rechts unten im Hauptfenster. Es gibt einen Caret (vertikale Linie/Einfügemarke) die den aktuellen Zeitpunkt angibt. Bewegt man den Caret (Drag&Drop) oder klickt man Play (ganz unten links) wird die Animation abgespielt und der Kreis oben rechts bewegt sich entsprechend.

Man kann auch die Keyframes auswählen und dann den Wert ändern (Enter im Textfeld oder Fokusverlust übernimmt die Änderungen). Zum Hinzufügen von Keyframes gibt es eine Schaltfläche mit einem Symbol aus Raute und einem Plus.

Die Bewegungskurve kann auch per Drag&Drop angepasst werden, was sich dann auf der Zeitlinie/Timeline widerspiegelt.

Im Anhang ist auch eine Beispielanimation "bouncingball.txt", die per File|Open oder Drag&Drop geladen werden kann. Da bisher nur lineare Interpolation unterstützt wird, sieht das noch etwas abrupt aus, aber es illustriert das Prinzip recht gut.

Da es nicht immer offensichtlich ist welche Werte ein KeyFrame hat kann man Zahlen anzeigen, statt "diamonds"/Rauten (siehe ganz unten rechts im Fenster). Zahlen können aber unübersichtlich werden, daher sind manchmal Rauten besser. Längerfristig ist es auch denkbar die Bewegungskurven direkt in der Zeitlinie darzustellen. Hier muss man einfach mal sehen was gute Visualisierungen sind.

Schließlich gibt es noch rechts vom "CaretPos"-Textfeld eine Schaltfläche. Hier kann man wählen ob die CaretPos an den "Messlinien" einrasten soll oder nicht.

Die Angabe der Zeit ist in Sekunden und bisher auf 5 Sekunden Länge begrenzt. Das ist vorallem so damit das Testen schneller geht, aber keine grundsätzliche Einschränkung, und wird natürlich noch geändert.

Robotersteuerung
Da wohl nicht jeder entsprechende Hardware besitzt, oder wenn, dann andere Modelle, wird hier das Konzept des Programms anhand eines bewegbaren Kreises gezeigt.
Bei Interesse kann ich gerne auch mal ein Video mit einem Roboterarm zeigen.
Ich habe auch vor ein Interface zum Robotersimulator V-Rep (OpenSource) zu erstellen, so könnte dann jeder damit "spielen", auch ohne Hardware.

Installation
Die ZIP-Datei aus dem Anhang herunterladen. Im Explorer auf die Datei rechtsklicken und auf "Eigenschaften" gehen, dann dort "Zulassen" klicken. Nun kann man sie entpacken und die Setup.exe starten.
Im Startmenü lässt es sich unter "TimeLineRobotControl" finden, und es lässt sich wie üblich deinstallieren.
Einloggen, um Attachments anzusehen!
mael Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 172
Erhaltene Danke: 18


Delphi XE3 Prof.
BeitragVerfasst: Fr 29.06.18 17:50 
Keiner einen Kommentar oder Interesse?
Sinspin
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 1166
Erhaltene Danke: 81

Win7
DXE2 Prof, Lazarus
BeitragVerfasst: Sa 30.06.18 00:21 
Interesse schon, aber irgendwie vermisse ich aktuell in der Animation eine Dimension. so ziemlich alle mir bekannten Industrieroboter arbeiten in 3D. Also sollte auch dein Ball (Werkzeugkopf?) in 3D unterwegs sein.
Am Ende hast Du zwei oder drei (oder mehr) Gelenke plus ein Werkzeugkopf der etwas holt und ablegt oder Schraubt, bohrt, fraesst...
Bei einer Robotersteuerung / Simulation erwarte ich ein Tool das aus meinen Vorgaben fuer aufnehmen und ablegen, etc. den optimalen Bewegungsablauf berechnet und mir visualisiert. Dabei sollten idealerweise Hindernisse (Teile des Werkstuecks) definiert werden koennen die moeglichst effizient umgangen werden.
Wenn das klappt, wie waere es mit Montage/Bearbeitungssimulation?

_________________
Solange keine Zeile Code geschrieben ist, läuft ein Programm immer fehlerfrei.
Ich teste nicht, weil ich Angst habe Fehler zu finden.
mael Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 172
Erhaltene Danke: 18


Delphi XE3 Prof.
BeitragVerfasst: Sa 30.06.18 01:31 
Danke für das Feedback.

Zitat:
Bei einer Robotersteuerung / Simulation erwarte ich ein Tool das aus meinen Vorgaben fuer aufnehmen und ablegen, etc. den optimalen Bewegungsablauf berechnet und mir visualisiert. Dabei sollten idealerweise Hindernisse (Teile des Werkstuecks) definiert werden koennen die moeglichst effizient umgangen werden.
Wenn das klappt, wie waere es mit Montage/Bearbeitungssimulation?

Zumindest für den letzten Teil gibt es V-REP, was ich nicht duplizieren möchte. Stattdessen würde die Animationssoftware die simulierten Roboter in V-REP (oder einem anderen Simulator) steuern.

Den Bewegungsablauf eines Endeffektors würde ich in Zukunft z.B. über einen 3D-Pfad definieren, der dann nicht in seiner Gänze als Punktfolge, sondern, wie z.B. eine Bezierkurve, nur durch ein paar Stützpunkte, bzw. Zielorte definiert ist.
Daher die Idee der Keyframes (hier Stützpunkte) zwischen denen interpoliert wird, als allgemeines Prinzip. Momentan ist alles noch 1D, aber man kann mehrere 1D-"Kurven"/Signale synchronisieren.

Später ist auf jedenfall auch eine Fusionierung einzelner Signale angedacht, die dann z.B. zu einem 3D-Pfad werden. Oder aber man geht den umgekehrten Weg und definiert einen 3D-Pfad, und man kann das entfalten (TreeView-ähnlich) und die daraus abgeleiteten Signale für jede Achse ansehen.


Hauptziel ist es Animationen (erstmal statische) intuitiv angeben zu können. Z.B. ist es bei humanoiden Robotern nicht trivial den Gang zu definieren. Hat man einzelne statische Animationen, sollten die je nach Sensorinformationen oder wie in deinem Beispiel Hindernissen, dynamisch angepasst werden.


Diese Steuerungslogik wäre allerdings ein separater Bereich. Die Timelines sind tatsächlich erstmal nur für statische Animationen, die dann gewisse Stellen haben an denen zu einer anderen Animation gewechselt werden kann, bzw. die Stützpunkte geändert werden können, um die Animation dynamisch den geänderten Bedingungen anzupassen.

Man kann sich das wie eine Bezierkurve vorstellen, die dann live verformt wird. Nur dass Bezierkurven nur ein Beispiel für Kurven sind, die durch Stützpunkte definiert werden.