IGF - Projekt ProKon - (Service) Robotik Programmieren durch Konfigurieren
Förderkennzeichen: 18620N
Projektleitung: Prof. Dr. Alex Gräser (+49 177 79 79 036)
Ansprechpartner: Dr. Olena Kuzmicheva
Projektbegleitender Ausschuss
bvSys Bildverarbeitungssysteme GmbH (www.bvsys.de)
mevisco GmbH & Co. KG (www.mevisco.de)
AKON Robotics (www.akon-robotics.de)
NT Projektmanagement (www.nt-projektmanagement.com)
ICR Ingenieurbüro Christoph Rüsch GmbH (www.icruesch.de)
Robotik Pack Line (www.robotik-pack-line.de)
ECOMA Maschinenbau GmbH (www.ecoma-maschinenbau.de)
Vorwig GmbH (www.vorwig-gmbh.de)
BCM - Bremer Centrum für Mechatronik (www.mechatronik-bcm.de)
Beschreibung des Projektes
Das Ziel des Vorhabens ProKon ist es, eine visuelle Programmierumgebung, sogenannte SkillNets, zu erforschen und zu entwickeln, die das Programmieren von komplexen Abläufen und Handlungen in einem sensorgestützten Robotersystem durch Konfigurieren ersetzt und die Kosten, die für die Erstellung neuer oder die Anpassung bestehender Lösungen an ähnliche Aufgabenstellungen entstehen, deutlich senkt. Im Gegensatz zu existierenden Werkzeugen, welche jeweils nur einen Teil der geforderten Funktionalitäten anbieten, wird das neue Werkzeug eine integrierte Lösung für die Entwicklung und Modellierung beliebiger Robotiksysteme darstellen und so deutliche wirtschaftliche Vorteile insbesondere für herstellerunabhängig arbeitende KMUs erbringen.
Das Tool SkillNets basiert auf dem Konzept der Funktionsblocknetzwerke und ermöglicht die Handlungsabläufe abstrakt zu modellieren. Dabei können folgende Anforderungen erfüllt werden:
Der Nachweis, dass die neuen Methoden und Tools wesentliche Vorteile erbringen und damit wesentliche Ziele des Vorhabens erreicht werden, wird in verschiedenen Anwendungsszenarien mit entsprechenden Demonstratoren erbracht. |
Förderung
Laufzeit: Februar 2015 bis März 2017
Projektergebnisse
SkillNets-Basisrahmenwerk und Designer
SkillNets ist ein grafisches Modellierungs- und Programmierwerkzeug. Das Rahmenwerk besteht aus zwei wesentlichen Komponenten, der SkillNets – Logik und dem SkillNets – Designer. Die SkillNets-Logik ist für die Ausführung der Algorithmen zuständig und bleibt vor dem Endnutzer verborgen. Für die Endnutzer wird der SkillNets-Designer bereitgestellt, der das grafische Modellieren und Programmieren durch den Einsatz von vorprogrammierten Funktionsblöcken ermöglicht. Die Funktionsblöcke oder Funktionsbausteine stellen Basisfunktionalitäten bereit, aus denen Funktionsblocknetze gebildet werden. Die Funktionsblöcke können Eingangs- und Ausgangsports haben, über die der Datenaustausch mit anderen Blöcken erfolgt. Die Konfiguration der Funktionsbausteine erfolgt über ihre Eigenschaften, die bei der Erstellung der Funktionsblöcke von Programmierern, die diese Basisfunktionalitäten entwickeln, definiert werden müssen. Die Funktionsblöcke werden miteinander über ‚Links‘ verbunden, die einen kombinierten Daten- und Kontrollfluss definieren. Die Abbildung unten zeigt ein Beispielnetz, das im SkillNets-Designer zusammengestellt wurde. In dem Hauptfenster werden die SkillNets für die gewünschten Szenarien durch Zusammensetzen von Elementarfunktionen, die in grafisch darstellbaren Blöcken gekapselt sind, erstellt. Auf der rechten Seite werden die Informationen und die Eigenschaften des gerade ausgewählten Blocks eingeblendet. Unter dem Hauptfenster wird der Verlauf der Netzausführung bzw. der Simulation ausgegeben. |
Abbildung 1 SkillNets-Designer |
DatencontainerDatenstrukturen werden zwischen Funktionsblöcken in sog. Datencontainern ausgetauscht, die eine einheitliche Handhabung von Daten innerhalb des Netzwerks durch eine definierte Schnittstelle ermöglichen. Die Container enthalten Informationen zu der Art der darin enthaltenen Daten, sodass diese Daten typsicher in der Datenverarbeitung innerhalb des Blocks verwendet werden können. Damit eine neue Datenstruktur eingeführt werden kann, muss diese durch einen entsprechenden Datencontainer von einem Plugin zur Verfügung gestellt werden. Die Kennzeichnung eines Datencontainers besteht aus dem Typ der Datenstruktur und einem Namen. |
VerzweigungenDie Verzweigungen werden in SkillNets durch das Aktivieren und Deaktivieren definierter ausgehender Ports eines Funktionsblocks umgesetzt. Deaktivierte Ports zählen als nicht erfüllte Vorbedingungen für die nachfolgenden Funktionsblöcke, sodass diese nicht mit der Datenbearbeitung beginnen können. Abbildung 2 Verzweigungen durch Portdeaktivierung |
RückkopplungssystemDurch das integrierte Rückkopplungs-System des SkillNets kann eine Eigenschaft eines Funktionsbausteins über bestimmte Regeln angepasst werden. Die Rückkopplungs-Einstellungen werden im Designer konfiguriert. Dadurch werden Rückkopplungsschleifen umgesetzt, die z.B. den Aufbau von Regelkreisen ermöglichen. Abbildung 3 Rückkopplungsstruktur für die Positionsregelung |
Ausführung des NetzesDie Funktionsblocknetze werden iterativ ausgeführt. Die Funktionsblöcke werden vor der ersten Iteration initialisiert. Die erste Iteration beginnt mit allen Funktionsblöcken, deren Vorbedingungen zur Ausführung erfüllt sind, d.h. alle Eingangsports des Blocks gültige Werte enthalten. Bei einer Rückkopplungsschleife würde diese Bedingung allerdings zu einer unendlichen Schleifenabhängigkeit führen. Um das aufzulösen, werden die Rückkopplungsports als „optional“ definiert. Wenn kein Funktionsbaustein gestartet werden kann und kein Funktionsbaustein aktuell verarbeitet wird, werden die Funktionsbausteine mit der geringsten Menge an unerfüllten Rückkopplungsanschlüssen, einer sog. Vorverarbeitungsgrenze, gestartet. Solange SkillNets nicht so konfiguriert ist, dass der Algorithmus sequentiell verarbeitet wird, werden alle Blöcke gestartet, sobald ihre Vorbedingungen erfüllt sind. Jeder Funktionsblock wird in seinem eigenen Thread verarbeitet. Dabei hängt die eigentliche Parallelität von der Hardware ab, z.B. die Anzahl der CPU-Kerne. Jeder Funktionsblock der ausgeführt wurde, steuert den operativen Ablauf der nachfolgenden Blöcke. Sollte während der aktuellen Iteration ein Baustein bereits verarbeitet worden sein, so wird dieser Block für die nächste Iteration „geplant“. Dadurch werden lokale Schleifen vermieden und es wird sichergestellt, dass jeder Funktionsblock ausgeführt wird, bevor die nächste Iteration des Netzes beginnt. Nach der letzten Iteration werden alle Funktionsbausteine vor dem Beenden des Netzes de-initialisiert. |
Hierarchische StrukturenDas Rückkopplungsbeispiel (siehe Abbildung 3) repräsentierte einen unendlichen Regelkreis, um einen Ziel-Arbeitspunkt eines Systems zu halten. Weitere Anwendungsmöglichkeiten für Schleifen sind, ein System in einen gewünschten Zustand zu bringen oder Daten mit verschiedenen Verfahren solange iterativ zu verarbeiten, bis das gewünschte Ergebnis erzielt wird. Ein Algorithmus zur Suche eines optimalen Schwellenwerts bei der Segmentierung eines Bildes ist in der Abbildung 4 (oben) dargestellt. Die Prüfung der Schwellwerte erfolgt in einer Rückkopplungsaktion, die für den Funktionsblock "Threshold Segmentation [3]" konfiguriert ist. Als „Indikator“ für das segmentierte Bild wird die Entropie des segmentierten Bildbereiches ausgewählt, die in dem Block "2D Entropy [4]" errechnet wird. Nachdem alle möglichen Schwellwerte getestet worden sind, wird der Wert mit dem besten „Indikator“ in der endgültigen Iteration des Netzes beibehalten und weiterverwendet. Abbildung 4 Beispiel einer hierarchischen Struktur in SkillNets |
SkillNets-InteraktionsblöckeUm mit dem Nutzer während der Ausführung eines Netzes zu interagieren, wurden im Rahmen des Projektes verschiedene Interaktionsblöcke implementiert. Dabei werden sowohl einfache Mitteilungen z.B. zum Status der aktuellen Ausführung, ausgegeben als auch eine Möglichkeit implementiert, Eingaben von dem Nutzer zu erfragen. Die Interaktionsblöcke starten dabei Spezialprogramme (UIs), die die Nachrichten Anzeigen, die die Eingaben des Nutzers entgegennehmen und an das aktuell ausgeführte SkillNets übertragen. |
UI-Nachricht |
UI yes/no |
UI Gleitpunktzahl |
UI Pose |
Abbildung 5 Beispiele für SkillNets-Interaktionsblöcke
SkillNets-PluginsAls plattformunabhängiges Tool, sollte das SkillNets maximal flexibel entwickelt sein und eine Möglichkeit zur Erweiterung um beliebige domänenspezifische Inhalte bieten. Für diesen Zweck ist in SkillNets das Plugin-System vorgesehen. Die Funktionalität wird ebenfalls in Funktionsblöcken implementiert, die Datencontainer verwenden, um die Daten zwischen den Funktionsblöcken abstrakt zu erfassen und auszutauschen. Die Rückkopplungsbedingungen, Aktionen und Formel-Operationen erweitern dabei die Optionen des Rückkopplungssystems für alle Funktionsblöcke. Diese Flexibilität ermöglicht eine einfache Wiederverwendung von Legacy-Code in SkillNets und erleichtert das Hinzufügen von Funktionalitäten. Abbildung 6 SkillNets-Plugin-System |
Einbettung von SkillNets – Algorithmen in eine ApplikationDie im SkillNets implementierten Algorithmen können sowohl aus dem SkillNets-Designer aufgerufen und ausgeführt werden als auch in andere Applikationen integriert werden. Um SkillNets innerhalb einer anderen Applikation verwenden zu können, muss diese Applikation mit der logischen SkillNets-Bibliothek verknüpft werden. Diese Bibliothek lädt anschließend alle notwendigen Plugins zur Verwendung innerhalb der Applikation. |
Einbindung von externen vorkompilierten Programmen in SkillNetsSo wie die in SkillNets entwickelte Algorithmen innerhalb anderer Anwendungen auf dem Zielsystem eingebettet und ausgeführt werden können, können die SkillNets Funktionalitäten anderer Systeme in einem SkillNets geladen werden. Für diesen Zweck wurden sog. Prozessblöcke entwickelt und implementiert. |
SkillNets-ProzessblockDer Prozessblock stellt eine der wichtigsten Merkmale des SkillNets dar. Dieser Block wurde entwickelt, um einen beliebigen Prozess aus einem SkillNets starten und parallel zu SkillNets Hauptapplikation ausführen zu können. Anders als andere Blöcke (wie z.B. GUI-Blöcke zur Interaktion mit dem Nutzer), ermöglicht der Prozessblock die Ausführung des Prozesses im Hintergrund ohne die Ausführung des SkillNets – Prozesses zu beeinflussen. Während der Ausführung kommuniziert der Prozessblock mit dem im Hintergrund laufenden Prozess über das standardisierte Input/Output Verfahren. Die Erzeugung, Terminierung und Handhabung der parallel laufenden Prozesse übernimmt der Prozessmanager. Der Prozessmanager erstellt eine Liste aller erzeugten (und noch aktiven) Prozesse und ermöglicht Prozessmanipulation über Prozessblöcke anhand eindeutiger Prozesskennzeichnungen. Sollte ein neuer Prozess gestartet oder beendet werden, so muss diese Operation über Prozessmanager erfolgen. |
Prozessblock-FactoryDie Basisstruktur des SkillNets-Prozessblocks ermöglicht es, verschiede SkillNets-Blöcke zu erstellen, die sich nur über Prozessname, Erfolgs- und Abbruchbedingungen sowie Zeitüberschreitung-Parameter unterscheiden. Diese Parameter können von einem Programmierer in C++ gesetzt und in SkillNets-Plugin übertragen werden. Allerdings, wäre es wünschenswert, diesen Programmierschritt ebenfalls zu automatisieren und den Benutzer ohne Programmiererfahrung dazu zu befähigen, solche Blöcke auf einfache Weise zu erstellen und ohne Kompiliervorgang in das Plugin-System des SkillNets zu integrieren. Für diesen Zweck wurde im Rahmen des Projektes eine sog. Prozessblock-Factory entwickelt, getestet und in Beispielszenarien eingesetzt. Das Programm gilt als Ergänzung zum SkillNets-Tool und muss separat ausgeführt werden, um die entsprechenden Plugins zu erstellen. Die Plugins werden anschließend von SkillNets automatisch geladen und in Plugin-System aufgenommen. Das Programm stellt dem Nutzer ein grafisches Benutzerinterface (GUI) zur Verfügung, welches es erlaubt, die Eigenschaften des Blocks zu editieren. Die Blockinformationen werden in einer XML-Datei gespeichert, die vom SkillNets gelesen und interpretiert wird, um den so erstellten Block im Plugin-Bereich beim Starten des SkillNets verfügbar zu machen. Die Abbildung 7 zeigt das GUI der Prozessblock-Factory. Die implementierten Funktionalitäten sind wie folgt gegliedert:
Abbildung 7 GUI der Prozessblock-Factory Mit den oben aufgelisteten Funktionen wird den Nutzern ermöglicht, die Prozessblöcke anzulegen und die Parameter zu definieren und zu konfigurieren. |
VersuchsanordnungenDie Anwendung des SkillNets wird anhand von zwei Versuchsanordnungen im Rahmen verschiedener Anwendungsszenarien demonstriert und getestet. |
Versuchsanordnung 1 / Demo 1: mobiler Roboter auf Lego-BasisDie erste Demonstrationsanwendung wurde auf Basis von Lego Mindstorms aufgebaut (siehe Abbildung 8). Es wurde dazu ein mobiler Roboter bestehend aus einem intelligenten programmierbaren NXT-Baustein, montiert auf zwei Steuerungsrädern und einem Stützrad, aufgebaut. Der Roboter integriert zudem einen Ultraschallsensor und einen Taster. Die Kommunikation zwischen dem NXT-Baustein und dem Steuer-PC erfolgt über ein Bluetooth – Interface. Abbildung 8 Versuchsanordnung auf Basis eines Lego Ministers NXT Um die Versuchsanordnung anzusteuern, wurde ein Lego-Plugin entwickelt. Als Demonstrationsszenario wurde die Bewegungsregelung des mobilen Roboters umgesetzt. |
Versuchsanordnung 2: 6DOF Manipulator mit 3D-KamerasystemDie zweite Versuchsanordnung besteht aus einem LWA4P 6DOF Roboterarm der Fa. Schunk, der auf einem Labortisch montiert ist, einem Zweifinger-Parallelgreifer ebenfalls dem Projekt von der Fa. Schunk zur Verfügung gestellt, und einer 3D Microsoft Kinect2 Kamera, die auf einem Stativ aufgebaut ist und den Arbeitsraum des Roboterarms erfasst (siehe Abbildung 9). Abbildung 9 Versuchsanordnung 2: Schunk-Roboterarm mit Kinect2-Kamera Die Ansteuerung der Basiskomponenten in dieser Versuchsanordnung baut auf ROS-Komponenten auf, die für verwendete Hardware von der Robotic-Community bereits verfügbar sind. Die Szenarien stellen somit eine ‚kombinierte‘ Nutzung des SkillNets-Tools dar, das zur einfachen Umsetzung der Demonstrationsszenarien eingesetzt wird und die ROS-Funktionalitäten über die SkillNets – Prozessblöcke einbindet. |
Fremdsoftware zum Einsatz mit dem SystemFür die Entwicklung der beiden Testszenarien, wurden folgende ROS-Pakete von Drittanbietern verwendet:
|
Demonstrationsszenarien |
Szenario 1: Bewegungsregelung für den Lego-RoboterZur Demonstration der Verwendung des SkillNets – Tools wurde zunächst eine einfache Beispielanwendung implementiert. Das Demonstrationsszenario setzt eine Bewegungssteuerung für den mobilen Lego-Roboter um. Diese Bewegungssteuerung sollte aus Modulen bestehen, die für sich genommen lauffähig sind, in dem finalen Szenario aber zusammengeführt werden sollten. Eines der einfachsten denkbaren Szenarien für den Lego-Roboter ist die Kollisionsvermeidung. Hierbei soll der Lego-Roboter so lange geradeaus fahren, bis er auf ein Hindernis trifft. Dann soll der Lego-Roboter anhalten. Zur Hinderniserkennung wird ein Ultraschall-Abstandssensor verwendet, der durch den Funktionsblock „Get Sensor Value“ ausgelesen wird. Am Ausgangsport dieses Funktionsblocks liegt dann der Abstand zum nächsten Objekt in cm an. Das SkillNet „Kollisionsvermeidung“ ist in Abbildung 10 dargestellt. Abbildung 10 SkillNet „Kollisionsvermeidung“ |
Szenario2: Wegräumen von Objekten auf einem TischDas Ziel des Szenarios ist den Aufräumvorgang zu automatisieren und Objekte verschiedener Größe, die auf einem Tisch in der Reichweite des Roboters platziert sind, in zwei an der Seite des Tisches angebrachten Behälter (Box1 und Box2) entsprechend der Objektgröße einzusortieren (siehe Abbildung 11). Abbildung 11 Beispielanordnung Für das Szenario wurden zwei Objekttypen verwendet: Spielwürfel mit Kantenlänge 6cm und Tee-Boxen mit Abmessungen L x B x H = 6 x 6 x 14 cm. Für die Erkennung von Objekten auf dem Tisch sowie deren Vermessung wurde eine ROS – Komponente verwendet, die von einem Partnerinstitut entwickelt wurde. Um das Szenario zu konfigurieren, stehen dem Nutzer folgende Optionen zur Verfügung:
Die Implementierung des beschriebenen Szenarios ist in der Abbildung 12 dargestellt. Das Netz baut auf folgenden Basisblöcken: UI yes/no, Create pose, Add poses, Auswahl des Objektes auf dem Tisch (ergänzt durch Rückkopplung-Ports zur Implementierung der wiederholten Ausführung des Blocks), Joiner, UI message und Executor blocks (Subnetze). Abbildung 12 SkillNets zur Implementierung des Demonstrationsszenarios Dabei wird folgender Prozessablauf realisiert:
Eine der wichtigen Funktionalitäten des SkillNets ist die Möglichkeit, die Netze in Teilfunktionalitäten zu zerlegen und diese in Subnetzen umzusetzen (unter Verwendung der sog. „Executor“-Blöcke). Dadurch wird die Komplexität des Netzes reduziert und die Übersichtlichkeit des Hauptnetzes gewährleistet. Die Subnetze können weitere Subnetze beinhalten, was zur besseren Strukturierung der Gesamtlösung führt. In der hier vorgeschlagenen Umsetzung der Aufgaben „Aufräumen des Tisches“ wurden drei Subnetze für das Szenario definiert, die zum Teil weitere Subnetze integrieren. Somit weist das Szenario drei Zerlegungsebenen (siehe Abbildung 13). Abbildung 13 Netzhierarchie im Szenario "Aufräumen des Tisches" |
Szenario 3: Schreiben von TextenUm die Konfigurierbarkeit einer SkillNets-basierten Implementierung noch mehr zu verdeutlichen, wurde das Szenario „Schreiben von Texten“ definiert und in SkillNets umgesetzt. Der Nutzer wird aufgefordert, eine beliebige Zeichenkette vorzugeben, die dann mit dem Roboterarm Schunk lwa4p mit dem PG70 Greifer und speziell angefertigten Greiferbacken (Greifertyp 1) auf einem Blatt Papier, das auf dem Tisch befestigt ist, geschrieben werden soll. Das Szenario in verschiedenen Phasen der Ausführung ist in Abbildung 14 und Abbildung 15 dargestellt. Es stehen alle 26 Zeichen des englischen Alphabets, zehn Digitalzeichen sowie verschiedene Symbole (‘.’, ‘,’, ‘+’, ‘-’, ‘×’, ‘/’, ‘=’, ‘(’, ‘)’, ‘ ‘) zur Verfügung. Abbildung 14 Demonstrationsszenario "Schreiben von Texten": Ausführung läuft Abbildung 15 Demonstrationsszenario "Schreiben von Texten": Ausführung abgeschlossen Mit der Implementierung des Szenarios sollte dem Nutzer folgende Konfiguration des Szenarios ermöglicht werden
Das SkillNet zur Implementierung des beschriebenen Szenarios ist in der Abbildung 16 dargestellt und basiert auf folgenden SkillNets-Blöcken: Create number, Create string, Create pose, Number arithmetic operation, Add delta pose element, UI message, UI yes/no, Extract character from string, Move lwa4p to pose, Move pg70, Counter, Joiner, Bypass, Delay und Executor blocks (subnets). Abbildung 16 Hauptnetz zum Demonstrationsszenario "Schreiben von Texten" Der implementierte Prozessfluss setzt folgende Bearbeitungsschritte um:
Zur Konfiguration des vorliegenden Netzes folgende Parameter werden für die Bearbeitung durch den Nutzer freigegeben:
Beim Betrachten des Hauptnetzes zur Umsetzung des Szenarios (siehe Abbildung 16), können fünf verschiedene Subnetze identifiziert werden, die das Szenario besser strukturieren lassen. Diese Subnetze weisen ebenfalls eine verschachtelte Struktur auf, sodass der Gesamtzerlegungsgrad des Szenarios gleich sechs ist. Die verschiedenen Strukturebenen und deren Zusammenhänge sind in der Abbildung 17 dargestellt. Um die Darstellung zu vereinfachen, ist die sechste Ebene aus der Zeichnung rausgenommen. Es handelt sich dabei um das Subnetz eines speziellen Artes, wenn ein Subnetz zum Schreiben eines Spezialsymbols ein anderes Subnetz für das Schreiben eines Zeichens integriert, wie z.B. das Subnetz zum Schreiben einer „9“ das Subnetz zum Schreiben eines „P“ aufruft. Zur kompletten Implementierung des Schreibvorgangs von verschiedenen Zeichen wurden insgesamt 46 Subnetze implementiert. Abbildung 17 Subnetz "Write string" |
Verweise[1] ROS wiki, "Schunk_robots Package summary," [Online]. Available: http://wiki.ros.org/schunk_robots. [Accessed Dec. 2016]. [2] ROS wiki, "Schunk_modular_robotics Package summary," [Online]. Available: schunk_modular_robotics. [Accessed Dec. 2016] [3] MoveIt!, "MoveIt!," [Online]. Available: http://moveit.ros.org/. [Accessed Feb. 2017]. [4] ROS wiki, "Moveit Package summary," [Online]. Available: http://wiki.ros.org/moveit. [Accessed Feb. 2017]. [5] ROS wiki, "Ros_canopen Package summary," [Online]. Available: http://wiki.ros.org/ros_canopen. [Accessed Feb. 2017]. [6] Institute for Artificial Intelligence - University of Bremen, "IAI Kinect2," [Online]. Available: https://github.com/code-iai/iai_kinect2. [Accessed Feb. 2017]. [7] The Qt Company, "QProcess Class," [Online]. Available: http://doc.qt.io/qt-5/qprocess.html. [Accessed Feb 2017]. |