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.
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.