Franka Emika Panda: Unterschied zwischen den Versionen

Aus HSHL Mechatronik
Zur Navigation springen Zur Suche springen
Nils.betten@stud.hshl.de (Diskussion | Beiträge)
Keine Bearbeitungszusammenfassung
Nils.betten@stud.hshl.de (Diskussion | Beiträge)
 
(9 dazwischenliegende Versionen desselben Benutzers werden nicht angezeigt)
Zeile 6: Zeile 6:


Alle hier angesprochenen Themen sind in der Masterarbeit ausführlicher behandelt und liegen als einzelne Dokumentationsschritte im SVN-Verzeichnis des Roboters.
Alle hier angesprochenen Themen sind in der Masterarbeit ausführlicher behandelt und liegen als einzelne Dokumentationsschritte im SVN-Verzeichnis des Roboters.
[[Datei:Franka Emika Panda Arm.jpg|500px]]


Der Roboter ist ein 7-Achen Arm, welcher durch Kraftfeedback zur Gruppe der Cobot Roboter gehört und ohne Schutzkäfig betrieben werden kann.
Der Roboter ist ein 7-Achen Arm, welcher durch Kraftfeedback zur Gruppe der Cobot Roboter gehört und ohne Schutzkäfig betrieben werden kann.
Zeile 20: Zeile 22:


= Ansteuerungen =
= Ansteuerungen =
Folgend werden die einzelnen Ansteuerungen, welche getestet wurden, kurz beleuchtet.
Dabei geht es um Komplexität und Anwendungsbereiche, die genaue Umsetzung befindet sich im svn_trunk unter Roboter/FrankaEmikaRobot


== DESK ==
== DESK ==
Steuert den Roboter per Webschnittstelle an und ermöglicht dort sowohl die Verwaltung des Roboters in Form von:
* Blockieren/Öffnen der Gelenke
* Verwaltung der Firmware
* Verwaltung der installierten Software
* Freischalten der FCI-Schnittstelle für Ansteuerungen, die direkt auf das FCI zugreifen
* Programmieren von kleinen Applets im Browser
Die Ansteuerung per DESK benötigt keine Einrichtung und ist einfach zu bedienen, aber im Funktionsumfang eingeschränkt, da keine direkte Programmierung per Code und nur sehr beschränkt Roboterfeedback zur Verarbeitung zur Verfügung steht.


== RIDE ==
== RIDE ==
RIDE kontrolliert den Roboter über eine state-orientierte Programmiersprache namens Lingua Franka, welche das Programm durch eine Reihe von States und Services definiert und auf dem Roboter ausführt.
In RIDE geschriebene Programme, sogenannte Bundles, können als Build-Blöcke für DESK auf den Roboter geladen und dort verwendet werden.
RIDE ist einfach einzurichten und benötigt keinen Real Time Kernel, erfordert aber eine Umgewöhnung für alle, die mit der imperativen oder der Objekt-orientierten Programmierung vertraut sind.
Außerdem ist die Implementierung in größere Softwareprojekte schwieriger als mit C++ oder Python.


== FCI - C++ ==
== FCI - C++ ==
Die Ansteuerung per C++ ermöglicht die feinste Kontrolle von allen vorgestellten Ansteuerungen, da die direkte Integration der libfranka Bibliothek den direktesten Zugriff auf eine selbst definierte 1kHz Kontrollschleife ermöglicht.
Das Setup für C++ und libfranka ist vergleichsweise komplex, da sowohl ein Real-Time-Kernel als auch eine Instanz der libfranka Bibliothek auf dem System eingerichtet werden müssen.
Dafür ist die Implementierung in größere Softwareprojekte oder bereits bestehende Softwarelösungen problemlos möglich.


== FCI - Python ==
== FCI - Python ==
Die Ansteuerung per Python verwendet ein Wrapper-Package namens franky um libfranka in Python nutzbar zu machen. Dies vereinfacht die Arbeit mit franky im Vergleich zu libfranka, schränkt aber die Kontrollmöglichkeiten ein. Dies ist jedoch nur ein Problem, wenn auf niedrigster Ebene mit dem Roboter kommuniziert wird und die Software tief in die Änderungen an der Kontrollschleife eingreifen soll.
Das Einrichten geht leichter als für C++, ein Real-Time-Kernel ist jedoch immer noch notwendig. Die Implementierung von größeren Softwareprojekten geht durch die Arbeit in Python besonders einfach, da der Zugriff auf diverse Python-Pakete zum Beispiel die Arbeit mit einer Webcam oder statistische Auswertungen sehr vereinfacht.


== FCI - ROS ==
== FCI - ROS ==
Das Robot Operating System (ROS) ermöglicht es, den Roboter durch eine Instanz des roscore mit den durch ROS bereitgestellten Tools zu steuern. Ferner ermöglicht es den Zugriff auf eine Vielzahl bereits implementierter rosnodes zur Steuerung des Roboters.
Leider ist der Prozess zur Einrichtung vergleichsweise fehleranfällig und somit komplex, auch wird hier wieder ein real-time-kernel benötigt.
Durch die mögliche Einbindung bereits existierender rosnodes ist die Einbindung des Roboters in größere Projekte, auch ggf mit mehreren per ROS kontrollierten Robotern gut zu bewerkstelligen.


== FCI - MATLAB ==
== FCI - MATLAB ==
Aufgrund von Lizenzproblemem ist dieser Abschnitt rein theoretisch bearbeitet und bedarf weiterer Erprobung.
Durch Einbindung des Roboters in MATLAB und Simulink ist eine Kontrolle mit möglichst wenig Codezeilen möglich, außerdem kann der Roboter so in MATLAB modelliert und simuliert werden.


== FCI - RoboDK ==
== FCI - RoboDK ==
Die Ansteuerung per RoboDK ermöglicht eine Offline-Simulation des Roboters, das bedeutet dass man die Bewegungen in einer 3D-Umgebung definieren und simulieren kann, bevor man diese auf dem realen Roboter ausführt.
Für den Franka Emika Panda ist in RoboDK kein Postprozessor implementiert, deswegen ist eine Ausführung auf dem realen Roboter aus der Software heraus nicht möglich.
Es ist möglich, ein Python-Script zu verwenden um die Zielpositionen zu exportieren und dann in ROS anfahren zu lassen. Dieser Weg ist jedoch sehr umständlich und fehleranfällig.


= Tic Tac Toe =
= Tic Tac Toe =
Die grundlegende Idee ist eine interaktive Anwendung mit dem Roboter, welche die Möglichkeiten im MINT Bereich aufzeigt und sich gut als Stand auf Hochschulmessen zeigen und bespielen lässt.
Hier bin ich final auf TicTacToe gekommen, da außer zwei Stiften und etwas Papier nichts weiter an Verbrauchsmaterial benötigt wird, und dies lässt sich in der Größenordnung, die für einen vollen Tag Betrieb gebraucht wird direkt am Roboter lagern, es muss nur ggf alle 2h das Papier etwas aufgefüllt werden, was die Logistik sehr einfach gestaltet.


== Aufbau ==
== Aufbau ==
Der Roboter hält die Kamera und den Stift in einer 3D-gedruckten Halterung direkt in seinem Greifer.
Das Papier befindet sich in einem dafür gedruckten Halter auf dem Tisch, dort lassen sich bis zu 80 Blatt ablegen.
Die Höhenunterschiede durch Imperfektionen im Tisch und das Entfernen von Blättern gleicht die Mechanik in der Haltung des Stiftes aus.
<gallery mode="packed-overlay" heights="300">
<!--
Datei:Papertray.jpg
Datei:Penholder 1.jpg
Datei:Penholder 2.jpg
Datei:Tictactoe arm title 2.jpg
</gallery>
Diese Anwendung wird per Python und einem Wrapper für libfranka namens franky implementiert.
Auf diese Weise ist  die Verwendung von Python packages für die Bildverarbeitung möglich, was die Implementierung davon sehr einfach, modular und gut erweiterbar macht.
Die Spielzüge des Roboters werden in einem fünfstufigen Algorithmus bestimmt:
* Eigener Sieg möglich? --> diesen Zug ausführen
* Gegnerischer Sieg möglich? --> den verhindernden Zug ausführen
* Ecken noch frei? --> eine zufällig auswählen
* Mitte noch frei? --> Mitte belegen
* Alles obrige nicht zutreffend? --> Ein zufälliges Feld wählen


== Verwendung ==
== Verwendung ==
Diese Anwendung wurde bereits einmal erfolgreich am MINT-Tag im September 2024 an der HSHL verwendet und dort von den kleinen und großen Teilnehmern gut angenommen.
Etwa die Hälfte der Spiele endete in einem Unentschieden, 20% für den Roboter und 30% für den Gegner.
Außerdem endeten die meisten Spiele in sehr interessierten Diskussionen über Robotik und KI.
== mögliche Verbesserungen ==
* Den Halter für Webcam und Stift direkt an einem Finger verschrauben, dies macht alles mit Stift greifen und wieder loslassen obsolet.
* Die Bilderkennung optimieren, dass Arme im Bild zu weniger false positives bei der Spielfelderkennung führen.
* Implementierung, dass der Roboter das Papier unterschreibt und selbst aus der Halterung entfernt.
* Die Spiele werden nach Abschluss als Logdatei gespeichert, die Daten aber noch nicht statistisch aufbereitet, hier wäre eine Weiterverarbeitung per pandas und seaborn in Python denkbar.

Aktuelle Version vom 3. Juli 2025, 07:15 Uhr


Einleitung

Diese Seite dokumentiert die Masterarbeit von Nils Betten mit dem Franka Emika Panda. Das Ziel ist die Ansteuerung des Roboters auf verschiedene Methoden und die Entwicklung einer kleinen, interaktiven Anwendung zur Demonstration der Möglichkeiten des Roboters.

Alle hier angesprochenen Themen sind in der Masterarbeit ausführlicher behandelt und liegen als einzelne Dokumentationsschritte im SVN-Verzeichnis des Roboters.

Der Roboter ist ein 7-Achen Arm, welcher durch Kraftfeedback zur Gruppe der Cobot Roboter gehört und ohne Schutzkäfig betrieben werden kann.

Die Hand am Ende des Arms ist ein Zweifinger Parallelgreifer, welcher in seiner Standardkonfiguration eine Greifweite von 0mm bis 80mm hat.

HW-Aufbau

Der Roboter ist auf einer 800mm T-Nut Platte verschraubt, diese wird mit zwei Schraubzwingen an der Arbeitsplatte befestigt.

Der Roboter wird mit seiner Kontrolleinheit (Franka Control Interface - FCI) verbunden. Die Kontrolleinheit wird (mit eingebautem E-Stopp) mit Strom versorgt. Am Roboter werden noch ein bis zwei externe Schutzschalter verbunden, um den Roboter Programme ausführen zu lassen.

Die Steuerung erfolgt per Ethernet vom SteuerungsPC aus. Am Roboter befinden sich je ein RJ45 Stecker am Arm selbst (DESK und RIDE) und am FCI (alle Ansteuerungen). Der Anschluss an der Kontrolleinheit kann für alles genutzt werden während der am Arm nur für die Ansteuerung per DESK und RIDE verwendet werden kann.

Ansteuerungen

Folgend werden die einzelnen Ansteuerungen, welche getestet wurden, kurz beleuchtet.

Dabei geht es um Komplexität und Anwendungsbereiche, die genaue Umsetzung befindet sich im svn_trunk unter Roboter/FrankaEmikaRobot

DESK

Steuert den Roboter per Webschnittstelle an und ermöglicht dort sowohl die Verwaltung des Roboters in Form von:

  • Blockieren/Öffnen der Gelenke
  • Verwaltung der Firmware
  • Verwaltung der installierten Software
  • Freischalten der FCI-Schnittstelle für Ansteuerungen, die direkt auf das FCI zugreifen
  • Programmieren von kleinen Applets im Browser

Die Ansteuerung per DESK benötigt keine Einrichtung und ist einfach zu bedienen, aber im Funktionsumfang eingeschränkt, da keine direkte Programmierung per Code und nur sehr beschränkt Roboterfeedback zur Verarbeitung zur Verfügung steht.

RIDE

RIDE kontrolliert den Roboter über eine state-orientierte Programmiersprache namens Lingua Franka, welche das Programm durch eine Reihe von States und Services definiert und auf dem Roboter ausführt.

In RIDE geschriebene Programme, sogenannte Bundles, können als Build-Blöcke für DESK auf den Roboter geladen und dort verwendet werden.

RIDE ist einfach einzurichten und benötigt keinen Real Time Kernel, erfordert aber eine Umgewöhnung für alle, die mit der imperativen oder der Objekt-orientierten Programmierung vertraut sind. Außerdem ist die Implementierung in größere Softwareprojekte schwieriger als mit C++ oder Python.

FCI - C++

Die Ansteuerung per C++ ermöglicht die feinste Kontrolle von allen vorgestellten Ansteuerungen, da die direkte Integration der libfranka Bibliothek den direktesten Zugriff auf eine selbst definierte 1kHz Kontrollschleife ermöglicht.

Das Setup für C++ und libfranka ist vergleichsweise komplex, da sowohl ein Real-Time-Kernel als auch eine Instanz der libfranka Bibliothek auf dem System eingerichtet werden müssen.

Dafür ist die Implementierung in größere Softwareprojekte oder bereits bestehende Softwarelösungen problemlos möglich.

FCI - Python

Die Ansteuerung per Python verwendet ein Wrapper-Package namens franky um libfranka in Python nutzbar zu machen. Dies vereinfacht die Arbeit mit franky im Vergleich zu libfranka, schränkt aber die Kontrollmöglichkeiten ein. Dies ist jedoch nur ein Problem, wenn auf niedrigster Ebene mit dem Roboter kommuniziert wird und die Software tief in die Änderungen an der Kontrollschleife eingreifen soll.

Das Einrichten geht leichter als für C++, ein Real-Time-Kernel ist jedoch immer noch notwendig. Die Implementierung von größeren Softwareprojekten geht durch die Arbeit in Python besonders einfach, da der Zugriff auf diverse Python-Pakete zum Beispiel die Arbeit mit einer Webcam oder statistische Auswertungen sehr vereinfacht.

FCI - ROS

Das Robot Operating System (ROS) ermöglicht es, den Roboter durch eine Instanz des roscore mit den durch ROS bereitgestellten Tools zu steuern. Ferner ermöglicht es den Zugriff auf eine Vielzahl bereits implementierter rosnodes zur Steuerung des Roboters.

Leider ist der Prozess zur Einrichtung vergleichsweise fehleranfällig und somit komplex, auch wird hier wieder ein real-time-kernel benötigt. Durch die mögliche Einbindung bereits existierender rosnodes ist die Einbindung des Roboters in größere Projekte, auch ggf mit mehreren per ROS kontrollierten Robotern gut zu bewerkstelligen.

FCI - MATLAB

Aufgrund von Lizenzproblemem ist dieser Abschnitt rein theoretisch bearbeitet und bedarf weiterer Erprobung.

Durch Einbindung des Roboters in MATLAB und Simulink ist eine Kontrolle mit möglichst wenig Codezeilen möglich, außerdem kann der Roboter so in MATLAB modelliert und simuliert werden.

FCI - RoboDK

Die Ansteuerung per RoboDK ermöglicht eine Offline-Simulation des Roboters, das bedeutet dass man die Bewegungen in einer 3D-Umgebung definieren und simulieren kann, bevor man diese auf dem realen Roboter ausführt.

Für den Franka Emika Panda ist in RoboDK kein Postprozessor implementiert, deswegen ist eine Ausführung auf dem realen Roboter aus der Software heraus nicht möglich. Es ist möglich, ein Python-Script zu verwenden um die Zielpositionen zu exportieren und dann in ROS anfahren zu lassen. Dieser Weg ist jedoch sehr umständlich und fehleranfällig.

Tic Tac Toe

Die grundlegende Idee ist eine interaktive Anwendung mit dem Roboter, welche die Möglichkeiten im MINT Bereich aufzeigt und sich gut als Stand auf Hochschulmessen zeigen und bespielen lässt.

Hier bin ich final auf TicTacToe gekommen, da außer zwei Stiften und etwas Papier nichts weiter an Verbrauchsmaterial benötigt wird, und dies lässt sich in der Größenordnung, die für einen vollen Tag Betrieb gebraucht wird direkt am Roboter lagern, es muss nur ggf alle 2h das Papier etwas aufgefüllt werden, was die Logistik sehr einfach gestaltet.

Aufbau

Der Roboter hält die Kamera und den Stift in einer 3D-gedruckten Halterung direkt in seinem Greifer. Das Papier befindet sich in einem dafür gedruckten Halter auf dem Tisch, dort lassen sich bis zu 80 Blatt ablegen.

Die Höhenunterschiede durch Imperfektionen im Tisch und das Entfernen von Blättern gleicht die Mechanik in der Haltung des Stiftes aus.

Diese Anwendung wird per Python und einem Wrapper für libfranka namens franky implementiert. Auf diese Weise ist die Verwendung von Python packages für die Bildverarbeitung möglich, was die Implementierung davon sehr einfach, modular und gut erweiterbar macht.

Die Spielzüge des Roboters werden in einem fünfstufigen Algorithmus bestimmt:

  • Eigener Sieg möglich? --> diesen Zug ausführen
  • Gegnerischer Sieg möglich? --> den verhindernden Zug ausführen
  • Ecken noch frei? --> eine zufällig auswählen
  • Mitte noch frei? --> Mitte belegen
  • Alles obrige nicht zutreffend? --> Ein zufälliges Feld wählen

Verwendung

Diese Anwendung wurde bereits einmal erfolgreich am MINT-Tag im September 2024 an der HSHL verwendet und dort von den kleinen und großen Teilnehmern gut angenommen.

Etwa die Hälfte der Spiele endete in einem Unentschieden, 20% für den Roboter und 30% für den Gegner. Außerdem endeten die meisten Spiele in sehr interessierten Diskussionen über Robotik und KI.

mögliche Verbesserungen

  • Den Halter für Webcam und Stift direkt an einem Finger verschrauben, dies macht alles mit Stift greifen und wieder loslassen obsolet.
  • Die Bilderkennung optimieren, dass Arme im Bild zu weniger false positives bei der Spielfelderkennung führen.
  • Implementierung, dass der Roboter das Papier unterschreibt und selbst aus der Halterung entfernt.
  • Die Spiele werden nach Abschluss als Logdatei gespeichert, die Daten aber noch nicht statistisch aufbereitet, hier wäre eine Weiterverarbeitung per pandas und seaborn in Python denkbar.