Netidee Blog Bild
Inverse Kinematik fürs Web
IKFast goes Webassembly (18.06.2020)
Förderjahr 2019 / Project Call #14 / ProjektID: 4647 / Projekt: netRob

Wie in unserem letzten Blog-Artikel erwähnt, liegt das Hauptaugenmerk dieses Artikels auf der Vorwärtskinematik bzw. eigentlich dessen Gegenstück, der Inversen Kinematik.

Einfach formuliert kann man damit zwischen den Gelenkwinkeln eines Roboters und der Position des Greifers umrechnen. Damit können quasi folgende Fragen beantwortet werden:

  • Wo im Raum befindet sich der Greifer wenn die Gelenke folgende Winkel haben?“ – Vorwärtskinematik
  • Wie müssen die Gelenke abgewinkelt werden damit der Greifer sich an folgender Position befindet?“ – Inverse Kinematik

An einen Roboter können neben Greifern natürlich unterschiedliche Werkzeuge montiert werden, deshalb spricht man allgemein von einem Endeffektor (Tool Center Point - TCP).

Um diese Berechnungen durchführen zu können, muss der schematische Aufbau des Roboters bekannt sein, also Informationen über die Gelenke und die dazwischenliegenden Segmente (Achsen). Es muss bekannt sein welche Achsen wo und über welche Segmente verbunden sind, sowie die Länge der Achsen.

Die Berechnung der Vorwärtskinematik ist üblicherweise relativ einfach (Vektorrechnung), aber die Inverse Kinematik ist mathematisch betrachtet nicht trivial. Außerdem ist die Lösung dieses Problems nicht eindeutig - oft hat man unendlich viele Lösungen. Als illustratives Beispiel hilft der eigene Ellenbogen: Sobald man seine Hand vor sich hält und der Arm nicht ganz ausgestreckt ist, kann man trotzdem seinen Ellenbogen so bewegen, dass sich die Hand nicht bewegt, ergo unendlich viele Möglichkeiten.

Zum Glück haben sich schon viele kluge Köpfe diesem Problem der inversen Kinematik angenommen, und in ein Softwarepaket gepackt. Wir haben uns hierfür alle relevanten Softwarepakete angesehen, wobei sich alle nicht für die Ausführung im Browser eigenen. Diese Pakete sind diese üblicherweise in C/C++ programmiert, wobei der Browser nur Javascript versteht. Glücklicherweise gibt es eine relativ neue Technologie um beispielsweise C/C++ Code ins Web zu bringen: Webassembly. Webassembly ist quasi plattformunabhängiger Zwischencode ähnlich wie Java-Bytecode – kann also in jedem Browser ausgeführt werden.

Für unser Projekt eignet sich zur Kinematikberechnung am besten IKFast, welches C++-Code für einen konkreten Roboter generiert. Diesen konnten wir mittels Emscripten, einem Webassembly-Compiler, zu Webassembly portieren, welcher sich im Browser ausführen lässt. Der schwierige Teil war lediglich die hierfür benötigten Mathematikpakete auch für Webassembly zu compilieren und den gesamten Prozess so effizient zu automatisieren, dass man vollautomatisch aus der Roboterbeschreibung Javascript-Code für den Browser generieren kann.

CAPTCHA
Diese Frage dient der Überprüfung, ob Sie ein menschlicher Besucher sind und um automatisierten SPAM zu verhindern.