UR3 Roboter spielt Schach: Unterschied zwischen den Versionen

Aus HSHL Mechatronik
Zur Navigation springen Zur Suche springen
Keine Bearbeitungszusammenfassung
 
(42 dazwischenliegende Versionen von 2 Benutzern werden nicht angezeigt)
Zeile 1: Zeile 1:
[[UR3 Roboter spielt Schach | ]]
[[UR3 Roboter spielt Schach | ]]
'''Autor:''' [[Benutzer:Joern-hendrik.beleke@stud.hshl.de | Jörn-Hendrik Beleke]] <br/>
→ zurück zur Übersicht: [https://wiki.hshl.de/wiki/index.php/Praktikum_Produktionstechnik ''Praktikum Produktionstechnik'']<br/><br/>
'''Betreuer:''' [[Benutzer:Mirekgoebel|Prof. Dr. Mirek Göbel]] & [[Benutzer:Marc Ebmeyer|Marc Ebmeyer]]
[[Datei:Roboter_Spielt_Schach.png|Abbildung 1: Roboter am Schachbrett|links|200px|mini]]


→ zurück zur Übersicht: [https://wiki.hshl.de/wiki/index.php/Praktikum_Produktionstechnik ''Praktikum Produktionstechnik'']<br/><br/>


= Einleitung =
= Einleitung =
Das Projekt "UR3 spielt Schach" wurde entwickelt, um die Fähigkeiten eines UR3-Roboters in der präzisen Handhabung und Steuerung zu demonstrieren. Ziel war es, den Roboter zu programmieren, um eigenständig Schachzüge auszuführen, basierend auf vorgegebenen Befehlen. Obwohl das Projekt nicht vollständig abgeschlossen wurde, bietet es wertvolle Erkenntnisse und eine solide Basis für zukünftige Arbeiten.
Das Projekt "UR3 spielt Schach" wurde entwickelt, um die Fähigkeiten eines UR3-Roboters in der präzisen Handhabung und Steuerung zu demonstrieren. Ziel war es, den Roboter so zu programmieren, dass er eigenständig Schachzüge ausführt, basierend auf vorgegebenen Befehlen. Obwohl das Projekt nicht vollständig abgeschlossen wurde, bietet es wertvolle Erkenntnisse und eine solide Basis für zukünftige Arbeiten. Erkenntnisse aus dem Projekt [https://wiki.hshl.de/wiki/index.php/Schachspiel_mittels_kollaborierendem_UR-Roboter_unter_ROS  Schachspiel mittels kollaborierendem UR-Roboter unter ROS] wurden dabei genutzt.
Es wurden unter anderem Erkenntnisse des Projekts [https://wiki.hshl.de/wiki/index.php/Schachspiel_mittels_kollaborierendem_UR-Roboter_unter_ROS  Schachspiel mittels kollaborierendem UR-Roboter unter ROS] genutzt.
 


= Ziel des Projekts =
= Ziel des Projekts =
Zeile 18: Zeile 15:


= V-Modell =
= V-Modell =
Zur systematischen Umsetzung des Projekts wird das V-Modell als Vorgehensweise herangezogen (Abb. 1). Dieses Modell stellt sicher, dass sämtliche erforderlichen Schritte, die für die erfolgreiche Durchführung eines Projekts notwendig sind, konsequent umgesetzt werden.
Zur systematischen Umsetzung des Projekts wurde das V-Modell als Vorgehensweise herangezogen (Abb.1). Dieses Modell stellt sicher, dass sämtliche erforderlichen Schritte konsequent umgesetzt werden.
[[Datei:V-Modell2020.png|Abbildung 1: V-Modell|links|500px|mini]]<br><br>
[[Datei:V-Modell2020.png|Abbildung 2: V-Modell|links|500px|mini]]<br><br>
<br>
<br>
<br>
<br>
Zeile 33: Zeile 30:
<br>
<br>


Die Organisation und Verwaltung der erstellten Dokumente erfolgt mithilfe der Software [https://tortoisesvn.net/index.de.html TortoiseSVN]. Im Folgenden werden die jeweiligen Dokumente, passend zu den einzelnen Phasen des V-Modells, als Download-Links bereitgestellt.
Die Organisation und Verwaltung der erstellten Dokumente erfolgte mithilfe der Software [https://tortoisesvn.net/index.de.html TortoiseSVN].


= Anforderungsdefinition =
= Anforderungsdefinition =
Die '''Anforderungsdefinition''' wurde in zwei Teile getrennt.
Die '''Anforderungsdefinition''' wurde in funktionale und nicht-funktionale Anforderungen unterteilt..


'''Funktionale Anforderungen'''
'''Funktionale Anforderungen'''
# '''Präzision:''' Der Roboter muss die Schachfiguren sicher, ohne Kollisionen greifen und bewegen können.  
# '''Präzision:''' Der Roboter muss die Schachfiguren sicher und ohne Kollisionen greifen und bewegen können.
# '''Reaktionszeit:''' Der Roboter muss innerhalb von 5 Sekunden auf einen neuen Schachzug reagieren.
# '''Reaktionszeit:''' Der Roboter muss innerhalb von 5 Sekunden auf einen neuen Schachzug reagieren.
# '''Sicherheit:''' Der Roboter muss sicher betrieben werden und darf keine gefährlichen Bewegungen durchführen, die Benutzer gefährden könnten.
# '''Kollisionen vermeiden:''' Der Roboter muss Bewegungen so planen, dass er keine Hindernisse berührt.
# '''Benutzerfreundlichkeit:''' Die Interaktion mit dem System muss einfach und intuitiv sein, ohne dass umfangreiche Programmierkenntnisse erforderlich sind.
# '''Benutzerfreundlichkeit:''' Die Interaktion mit dem System soll intuitiv und ohne umfangreiche Programmierkenntnisse möglich sein.


'''Nicht-Funktionale Anforderungen'''
'''Nicht-Funktionale Anforderungen'''
# '''Zuverlässigkeit:''' Der Roboter und die Software müssen stabil arbeiten und auch bei längeren Schachpartien ohne Unterbrechungen funktionieren.
# '''Zuverlässigkeit:''' Das System soll stabil und ohne Unterbrechungen über längere Schachpartien hinweg funktionieren.


# '''Wartbarkeit:''' Der Code und die Hardware sollten so gestaltet sein, dass sie leicht aktualisiert, erweitert oder repariert werden können.
# '''Wartbarkeit:''' Code und Hardware sollten leicht aktualisierbar und erweiterbar sein.


= Fuktionaler Systementwurf =
= Fuktionaler Systementwurf =
Der Funktionale Systementwurf wurde in Powerpoint mit Piktogrammen und einem Foto erstellt (siehe Abbildung 2.).
Der Funktionale Systementwurf wurde in Powerpoint mit Piktogrammen und einem Foto erstellt (siehe Abbildung 3.) und ist unter [https://svn.hshl.de/svn/MTR_GPE_Praktikum/trunk/Fachthemen/UR3_Schach/Projekt/V_Modell/2_Funktionaler_Systementwurf.png Funktionaler Systementwurf] im SVN verfügbar.
[[Datei:Schachspiel_Systementwurf.jpg|Abbildung 2: funktionaler Systementwurf|links|350px|mini]]<br><br>
[[Datei:Schachspiel_Systementwurf.jpg|Abbildung 3: funktionaler Systementwurf|links|350px|mini]]<br><br>
<br>
<br>
<br>
<br>
Zeile 68: Zeile 65:


= Technischer Systementwurf =
= Technischer Systementwurf =
Der Technische Systementwurf wurde über den „PAP Designer“ erstellt (siehe Abbildung 3.).
Der Technische Systementwurf wurde über den „PAP Designer“ erstellt (siehe Abbildung 4.) und ist unter [https://svn.hshl.de/svn/MTR_GPE_Praktikum/trunk/Fachthemen/UR3_Schach/Projekt/V_Modell/3_Technischer_Systementwurf.png Technischer Systementwurf] im SVN verfügbar.


[[Datei:Schachspiel_Technischer_Systementwurf.jpg|Abbildung 3: technischer Systementwurf|links|350px|mini]]<br><br>
[[Datei:Schachspiel_Technischer_Systementwurf.jpg|Abbildung 4: technischer Systementwurf|links|350px|mini]]<br><br>
<br>
<br>
<br>
<br>
Zeile 88: Zeile 85:
=Komponentenspezifikation=
=Komponentenspezifikation=


Die '''Komponentenspezifikation''' definiert, welche einzelnen Komponenten für die Umsetzung der Aufgaben genutzt werden. Dabei werden die Komponenten klar in die Bereiche Hardware und Software gegliedert.
Die verwendeten '''Komponenten''' wurden in Hard- und Software unterteilt. Dabei wurde sich am Projekt [https://wiki.hshl.de/wiki/index.php/Schachspiel_mittels_kollaborierendem_UR-Roboter_unter_ROS  Schachspiel mittels kollaborierendem UR-Roboter unter ROS] orientiert.
 
=Hardware=
=Hardware=


Zeile 153: Zeile 151:


= Interaktive Schachsteuerung Stockfish und DGT Smart-Board - Modul 1 =
= Interaktive Schachsteuerung Stockfish und DGT Smart-Board - Modul 1 =
Ziel dieses Moduls ist es, ein interaktives Schachsystem, das
Das Ziel dieses Moduls ist die Entwicklung eines interaktiven Schachsystems, das:
* Den Schachzug eines Spielers auf einem DGT Smart-Board liest.
* Den Schachzug eines Spielers auf einem DGT Smart-Board erfasst.
* Den besten Zug für den Computergegner mithilfe der Stockfish-Schachengine berechnet.
* Den optimalen Zug für den Computergegner mithilfe der Stockfish-Schachengine berechnet.
* Den neuen Zug auf der Konsole präsentiert.
* Den berechneten Zug auf der Konsole ausgibt.


'''  Kommunikation mit dem DGT Smart-Board:'''


''' Kommunikation mit dem DGT Smart-Board:'''
'''Verbindung'''


'''Verbindung:'''
Das Schachbrett wird über die serielle Schnittstelle (z. B. COM9) verbunden.
Das Schachbrett wird über die serielle Schnittstelle (z. B. COM9) verbunden.
Kommunikation erfolgt mit der festen Baudrate 9600 und Steuerbefehlen.
Die Kommunikation erfolgt mit einer festen Baudrate von 9600 sowie definierten Steuerbefehlen.
Datenverarbeitung:
 
Rohdaten des Bretts werden in eine 8x8-Matrix umgewandelt, die den Zustand des Bretts beschreibt (z. B. Figurenpositionen).
'''Datenverarbeitung'''
Wandlung der Matrix in die FEN-Notation (Forsyth-Edwards-Notation)<ref name'fen'> FEN Notation Online https://www.chess.com/de/terms/forsyth-edwards-notation-fen; Abruf: 27.01.2025</ref>, ein Standardformat, das von Stockfish genutzt wird.
 
Die Rohdaten des Schachbretts werden in eine 8x8-Matrix umgewandelt, die die aktuelle Position der Schachfiguren beschreibt.
Die Matrix wird in die FEN-Notation (Forsyth-Edwards-Notation)<ref name'fen'> FEN Notation Online https://www.chess.com/de/terms/forsyth-edwards-notation-fen; Abruf: 27.01.2025</ref> umgewandelt, ein Standardformat, das von Stockfish zur Analyse verwendet wird.
 
'''FEN-Notation'''
 
Die FEN-Notation (Forsyth-Edwards Notation) ist eine standardisierte Methode zur Darstellung eines Schachbretts zu einem bestimmten Zeitpunkt im Spiel. Sie besteht aus sechs durch Leerzeichen getrennten Teilen: die Stellung der Figuren, die Zugfarbe, die Rochade-Möglichkeiten, die en-passant-Spalte, die Halbzugzahl und die Zugnummer.
 
*1.Stellung der Figuren
"rnbqkbnr/pppppppp/8/8/8/8/PPPPPPPP/RNBQKBNR w KQkq - 0 1"
 
Dies stellt die Anfangsstellung eines Schachspiels dar. Die Figuren werden reihenweise von oben nach unten notiert, wobei Kleinbuchstaben für schwarze Figuren und Großbuchstaben für weiße stehen. Die Buchstaben w oder b zeigen an, wer am Zug ist (hier Weiß).


''' Stockfish-Integration:'''
''' Stockfish-Integration:'''


Die FEN-Notation wird an Stockfish übergeben.
Die generierte FEN-Notation wird an die Stockfish-Engine übergeben.
Stockfish berechnet innerhalb von 2 Sekunden den besten Zug für den Computergegner.
Stockfish berechnet innerhalb von zwei Sekunden den optimalen Zug.
Ergebnis:
Das Ergebnis wird in '''algebraischer Notation''' (z. B. e2e4) ausgegeben.
Der Zug wird in '''algebraischer Schachnotation''' (z. B. e2e4) an den Nutzer zurückgegeben.
 
 
'''Ablauf des Programms'''


'''Schritt 1: Initialisierung'''
'''Schritt 1: Initialisierung'''
* Setzen einer seriellen Verbindung zum DGT-Brett (Port COM9).
* Aufbau einer seriellen Verbindung mit dem DGT Smart-Board über Port COM9.
* Starten der Stockfish-Engine (Dateipfad wird angegeben).
* Starten der Stockfish-Engine durch Angabe des Dateipfads.


'''Schritt 2: Schleife für den Spielfluss'''
'''Schritt 2: Schleife für den Spielfluss'''
*Spielerzug erkennen:
*Erkennung des Spielerzugs
**Vergleich des aktuellen Schachbretts mit dem zuletzt bekannten Zustand.
**Der aktuelle Zustand des Schachbretts wird mit dem zuletzt gespeicherten verglichen.
**Neuer Zug wird als FEN-String erkannt und verarbeitet.
**Der erkannte neue Zug wird in FEN-Notation umgewandelt.
*Stockfish-Berechnung:
*Stockfish-Berechnung:
**FEN-String wird an Stockfish übergeben, der den besten Zug des Computers berechnet.
**Die FEN-Notation wird an Stockfish übermittelt.
**Der berechnete Zug des Computers wird ausgegeben.
*Warten auf Computerzug:
*Warten auf Computerzug:
**Der Computerzug wird erwartet, basierend auf dem zuletzt berechneten Zug.
**Die Ausgabe des berechneten Computerzugs erfolgt nach dessen Berechnung.


'''Schritt 3: Aktualisierung'''
'''Schritt 3: Aktualisierung'''
*Die neue Stellung wird vom Brett gelesen und für die nächste Berechnung verwendet.
*Das Schachbrett wird erneut ausgelesen und der Zustand für den nächsten Zug gespeichert.
*Der Prozess wiederholt sich, bis das Spiel abgeschlossen ist.
*Der Prozess wiederholt sich, bis das Spiel abgeschlossen ist.


Das Programm ist unter <ref name 'Schachspiel manuell' > Interaktive Schachsteuerung Stockfish und DGT Smart-Board  https://svn.hshl.de/svn/MTR_GPE_Praktikum/trunk/Fachthemen/UR3_Schach/Projekt/Projekte_und_Dateien/Stockfish.py</ref> verfügbar und kann genutzt werden. Leider kann ein Fehler entstehen, dass Züge zurückgegeben werden, wenn Stockfish nicht an der Reihe ist und muss ausgebessert werden. Falls der Nutzer die Ausgaben des Programmes, falls der Computer nicht am Zug ist ignoriert funktioniert es jedoch einwandfrei.
 
Zur Nutzung des Programms müssen die Bibliotheken "serial, time, chess chess.engine" installiert werden. Dafür müssen in Python die folgenden Befehle ausgeführt werden:
 
'''Fehlerbehandlung und Optimierung'''
 
Ein bekannter Fehler tritt auf, wenn Stockfish einen Zug zurückgibt, obwohl der Computer nicht am Zug ist. Dies erfordert eine Optimierung der Steuerlogik. Eine mögliche Übergangslösung besteht darin, die fehlerhaften Ausgaben zu ignorieren, wenn der Computer nicht an der Reihe ist.
 
'''Erforderliche Bibliotheken'''
 
Für die Nutzung des Programms müssen folgende Python-Bibliotheken installiert sein:
<div style="width:1200px; height:50px; solid #088">
<div style="width:1200px; height:50px; solid #088">
<pre>
<pre>
Zeile 203: Zeile 222:
</div>
</div>
<br clear = all>
<br clear = all>
<br>
'''Inbetriebnahme'''
*Python installieren
*Das Python Programm  <ref name 'Schachspiel manuell' > Interaktive Schachsteuerung Stockfish und DGT Smart-Board https://svn.hshl.de/svn/MTR_GPE_Praktikum/trunk/Fachthemen/UR3_Schach/Projekt/Projekte_und_Dateien/Stockfish.py</ref> aus dem SVN herunterladen.
*Das USB-C Kabel an das Schachbrett anschließen.
*Die Schachfiguren auf dem Brett standardmäßig aufbauen.
*Das Python Skript per IDE oder CMD Konsole starten.
*Weitere Instruktionen sind in der Konsole.
*Eine Partie spielen. Dabei muss der Spieler die eigenen, sowie die in der Konsole ausgegebenen Züge von Stockfish manuell ziehen.


=RTDE-Schnittstelle für UR3 - Modul 2=
=RTDE-Schnittstelle für UR3 - Modul 2=
Leider konnte die RTDE (Real Time Data Exchange) Schnittstelle nicht ausreichend integriert werden. Dennoch wurden Lernerfolge erzielt.
Die RTDE (Real-Time Data Exchange) Schnittstelle konnte nicht vollständig integriert werden. Dennoch wurden wertvolle Lernerfahrungen gesammelt.


* '''Ziele der RTDE-Integration'''
* '''Ziele der RTDE-Integration'''
**Echtzeitkommunikation zwischen Python-Programm und UR3-Roboterarm.
**Herstellung einer Echtzeitkommunikation zwischen dem Python-Programm und dem UR3-Roboterarm.
**Steuerung des Greifers zur Bewegung und Platzierung von Schachfiguren.
**Steuerung des Greifers zur Bewegung und Platzierung von Schachfiguren.
**Synchronisierung von Roboterbewegungen und Greiferaktionen, basierend auf Schachzügen.
**Synchronisation von Roboterbewegungen und Greiferaktionen basierend auf Schachzügen.


'''Verwendeter Ansatz:'''
'''Verwendeter Ansatz:'''
*''' RTDE-Setup'''
*''' RTDE-Setup'''
**Installation und Grundkonfiguration des RTDE-Python-SDK von Universal Robots.
**Installation und Grundkonfiguration des RTDE-Python-SDKs von Universal Robots.
**Verbindung zum Roboter durch spezifizierte IP-Adresse 192.168.3.1 und Port COM9.
**Verbindung zum Roboter über die IP-Adresse 192.168.3.1 und den Port COM9.
*'''Erste Implementierung:'''
*'''Erste Implementierung:'''
**Tests zur Kommunikation von Befehlen wie
**Tests zur Übermittlung von Befehlen wie:
<div style="width:1200px; height:50px; solid #088">
<div style="width:1200px; height:50px; solid #088">
<pre>
<pre>
Zeile 227: Zeile 255:
*Entwicklung eines Prototyps zur Steuerung von Bewegungen und Greiferbefehlen.
*Entwicklung eines Prototyps zur Steuerung von Bewegungen und Greiferbefehlen.


Leider sind die erstellten Dokumente nicht zur Weiterverwendung geeignet, da die RTDE-Schnittstelle aufgrund technischer Schwierigkeiten nicht vollständig implementiert werden konnte und die Erstellung eines neuen Programmes vermutlich weniger Verwirrung stiften würde.
Die erstellten Dokumente sind nicht zur direkten Weiterverwendung geeignet, da die RTDE-Schnittstelle aufgrund technischer Herausforderungen nicht vollständig implementiert werden konnte. Aufgrund der unzureichenden Stabilität der aktuellen Implementierung wäre die Entwicklung eines neuen Programms zielführender, um Missverständnisse und Fehlfunktionen zu vermeiden.


= Robotersteuerung zur Ansteuerung von Schachfeldern - Modul 3 =
= Robotersteuerung zur Ansteuerung von Schachfeldern - Modul 3 =
Zeile 233: Zeile 261:
**Präzise Bewegung eines UR3-Roboters zu definierten Schachfeldern.
**Präzise Bewegung eines UR3-Roboters zu definierten Schachfeldern.
**Steuerung über RoboDK mithilfe von Python.
**Steuerung über RoboDK mithilfe von Python.
*'''Erreicht:'''
*'''Ergebnisse:'''
Der Roboter kann erfolgreich zu einzelnen Feldern gefahren werden.
Der Roboter kann erfolgreich zu einzelnen Feldern bewegt werden.
Ansteuerung über die Angabe von Gelenkwinkeln im Python-Skript.
Die Ansteuerung erfolgt über die Angabe von Gelenkwinkeln im Python-Skript.
*'''Ansatz:'''
*'''Ansatz:'''
**Verbindung über RoboDK API:
**Verbindung über RoboDK API:
***Der Roboter wird durch den Namen "UR3" in der RoboDK-Szene referenziert.
***Der Roboter wird durch den Namen „UR3“ in der RoboDK-Szene referenziert.
***Befehle werden in Echtzeit über die RunMode-Schnittstelle übertragen.
***Befehle werden in Echtzeit über die RunMode-Schnittstelle übertragen.
**Direkte Definition der Gelenkwinkel:
**Direkte Definition der Gelenkwinkel:
Zeile 244: Zeile 272:
***Beispiel für das Feld A8: [-6, -157, -39, -49, 95, 83].
***Beispiel für das Feld A8: [-6, -157, -39, -49, 95, 83].
*'''Synchronisierung der Bewegung:'''
*'''Synchronisierung der Bewegung:'''
**Roboter stoppt an der Position und wartet auf den Abschluss der Bewegung
**Der Roboter stoppt an der definierten Position und wartet auf den Abschluss der Bewegung.
 
Quellcode zur Umsetzung:
<div style="width:1200px; height:500px; solid #088">
<pre>
from robolink import *  # API zur RoboDK-Steuerung importieren
 
# Initialisiere die Verbindung zu RoboDK
RDK = Robolink()
 
# Roboterobjekt finden (Name aus der RoboDK GUI übernehmen)
robot = RDK.Item('UR3')


Die Berechnung der Inversen Kinematik (IK) für alle Schachfeldkoordinaten konnte leider nicht rechtzeitig umgesetzt werden. Ebenso blieb die komplexe Bewegungsplanung, wie die Entwicklung sicherer und kollisionsfreier Wege, unvollständig. Statt die Gelenkwinkel automatisch über RoboDK zu berechnen, wurden die Werte für jedes Schachfeld manuell eingegeben. Diese manuelle Vorgehensweise sollte dazu dienen, die grundsätzliche Funktionalität der Roboterarmbewegung anschaulich darzustellen.
# Verbindung prüfen
if robot is None:
    print("Kein Roboter gefunden")
else:
    # Setze RoboDK in einen Modus, der Echtzeit-Bewegungen ausführt (RUNMODE)
    RDK.setRunMode(RUNMODE_RUN_ROBOT)  # RUNMODE_RUN_ROBOT: Echtzeit-Modus
   
    # Zielgelenkwinkel (Anpassen an deinen Roboter)
    joints = [-6, -157, -39, -49, 95, 83]  # Werte in Grad


Das Programm kann genutzt werden, indem das UR3 Modell in RoboDK geladen- und der Roboter verbunden wird. Genaueres ist in der Anleitung: <ref name 'Anleitung' > Anleitung https://svn.hshl.de/svn/MTR_GPE_Praktikum/trunk/Fachthemen/UR3_Schach/Projekt/Projekte_und_Dateien/Inbetriebnahme_UR3_spielt_schach.docx</ref> erklärt. Dann wird und dann das Python Skript <ref name 'A8' > A8.py skript https://svn.hshl.de/svn/MTR_GPE_Praktikum/trunk/Fachthemen/UR3_Schach/Projekt/Projekte_und_Dateien/A8_anfahren.py></ref> ausgeführt, um den Roboter auf das Feld A8 fahren zu lassen. Das Programm funktioniert nur, wenn das Schachbrett mit den x- und y-Koordinaten mit den Kanten des Tisches auf dem der Roboter platziert ist übereinstimmt. Die Ausrichtung des Schachbrettes ist so, dass das Feld A8 in der Ecke des Tisches platziert ist. Das ist nicht optimal und braucht Ausbesserung zur dynamischeren Verwendung in der Zukunft. Das Programm funktioniert unter Beachtung der angegebenen Umstände jedoch einwandfrei.
    # Bewege den Roboter (echte Bewegung zum realen Roboter ausführen)
    robot.MoveJ(joints) 


= Integrationstest =
    # Warten, bis der Roboter die Bewegung abgeschlossen hat
noch nicht erfolgt.
    robot.WaitMove() 


= Systemtest =
    print("Roboterbewegung abgeschlossen und synchronisiert!")
noch nicht erfolgt.
</pre>
</div>
<br clear = all>


=Abnahmetest =
'''Testdurchführung & Anleitung'''
noch nicht erfolgt.
 
'''1. Voraussetzungen:'''
*RoboDK und Python sind installiert.
*Das Schachbrett ist korrekt ausgerichtet (Feld A8 in der Tisch-Ecke).
 
'''2. Inbetriebnahme:'''
*Das Python Skript <ref name 'A8' > A8.py skript https://svn.hshl.de/svn/MTR_GPE_Praktikum/trunk/Fachthemen/UR3_Schach/Projekt/Projekte_und_Dateien/A8_anfahren.py></ref> aus dem SVN herunterladen.
*pip <ref name 'pip' > https://packaging.python.org/en/latest/tutorials/installing-packages/ </ref> installieren.
* den nachfolgenden Befehl über eine beliebige Python IDE oder cmd ausführen.
<div style="width:1200px; height:50px; solid #088">
<pre>
pip install robodk
</pre>
</div>
<br clear = all>
*Das LAN-Kabel des UR3 Roboters an den Computer anschließen
*Den Roboter über den großen Ein-/Ausschalt Knopf starten
*Im Initialisierungsbildschirm auf „Roboter an“ drücken. Das anschließen einer Maus an den USB-Port des Steuergeräts ist hier zu empfehlen, es kann aber auch über den Touchscreen bedient werden.
*RoboDK öffnen und das Modell des UR3 Roboters über Datei->Öffnen…->UR3.robot laden. Es ist unter <ref name 'UR3 Modell' > https://robodk.com/robot/de/Universal-Robots/UR3#:~:text=Der%20Roboter%20UR3%20ist%20ein,Collaborative%2C%20Auftragen%2C%20Remote%20TCP. verfügbar. </ref>
*Das Python Skript über Datei->Öffnen...->A8.py in RoboDK laden. Es sollte im Projekt erscheinen.
*In RoboDK in der oberen leiste auf „verbinden->Roboter verbinden“ klicken.
*In der neuen Sidebar bei der IP 192.168.3.1 eingeben und „Ping“ drücken.
*Wenn der Roboter reagiert, auf „Verbinden“ drücken.
*Das Python-Skript durch einen Doppelklick starten.
 
 
'''Inverse Kinematik'''
 
Die Berechnung der Inversen Kinematik (IK) für alle Schachfeldkoordinaten wurde bisher nicht vollständig umgesetzt. Ebenso blieb die Entwicklung sicherer, kollisionsfreier Bewegungen unvollständig. Statt die Gelenkwinkel automatisch über RoboDK zu berechnen, wurden die Werte für jedes Schachfeld manuell eingegeben. Die manuelle Eingabe diente der Überprüfung der grundlegenden Funktionalität der Roboterbewegung.
 
In Zukunft sollten folgende Optimierungen vorgenommen werden:
*Automatische Berechnung der Gelenkwinkel über RoboDK.
*Dynamische Anpassung des Schachbretts für flexiblere Platzierung.
*Kollisionsvermeidung durch geplante Bewegungsbahnen.
 
'''Fazit'''
 
Das entwickelte Programm erlaubt die präzise Steuerung eines UR3-Roboters zu einem definierten Schachfeld. Die grundlegende Funktionalität wurde erfolgreich validiert, jedoch sind weitere Optimierungen erforderlich, um eine flexible und dynamische Anwendung zu ermöglichen.
Die Anleitung zur Inbetriebnahme findet sich im SVN <ref name 'Anleitung' > Anleitung https://svn.hshl.de/svn/MTR_GPE_Praktikum/trunk/Fachthemen/UR3_Schach/Projekt/Projekte_und_Dateien/Inbetriebnahme_UR3_spielt_schach.pdf</ref>


= Fazit =
= Fazit =
Das Projekt „UR3 spielt Schach“ hat einen interessanten Einblick in die Nutzung von kollaborativen Robotern, insbesondere des UR3 von Universal Robots, in der Automatisierung und Robotik zur Durchführung von Schachzügen gegeben. Trotz der nicht vollständigen Umsetzung aller geplanten Ziele konnten bedeutende Fortschritte erzielt werden, insbesondere in der Integration von RoboDK mit Python und der Entwicklung von Steuerungsskripten für die Roboterbewegungen. Das Projekt hat das Potenzial, ein gutes Fundament für die weitere Forschung und Entwicklung im Bereich der Robotik und Automatisierung von Spielemechaniken zu bieten.
Das Projekt „UR3 spielt Schach“ hat einen interessanten Einblick in die Nutzung von kollaborativen Robotern, insbesondere des UR3 von Universal Robots, in der Automatisierung und Robotik zur Durchführung von Schachzügen gegeben. Trotz der unvollständigen Realisierung aller geplanten Ziele konnten wesentliche Fortschritte erzielt werden, insbesondere in der Integration von RoboDK mit Python und der Entwicklung von Steuerungsskripten für die Roboterbewegungen. Das Projekt hat das Potenzial, ein gutes Fundament für die weitere Forschung und Entwicklung im Bereich der Robotik und Automatisierung von Spielemechaniken zu bieten.


Die realisierten Module zur Schachsteuerung und zur Ansteuerung der Schachfelder mit dem UR3 sind funktional, aber es gibt noch Herausforderungen, wie die vollständige Implementierung der RTDE-Schnittstelle und die Berechnung der Inversen Kinematik, die noch nicht rechtzeitig abgeschlossen werden konnten. Die manuelle Eingabe von Gelenkwinkeln konnte zwar eine erste Grundlage schaffen, jedoch ist die vollständige Automatisierung und Optimierung dieser Prozesse für eine zuverlässige und flexible Nutzung notwendig.
Die realisierten Module zur Schachsteuerung und zur Ansteuerung der Schachfelder mit dem UR3 sind funktional, aber es gibt noch Herausforderungen, wie die vollständige Integration der RTDE-Schnittstelle und die Berechnung der Inversen Kinematik, die noch nicht rechtzeitig abgeschlossen werden konnten. Die manuelle Eingabe von Gelenkwinkeln konnte zwar eine erste Grundlage schaffen, jedoch ist die vollständige Automatisierung und Optimierung dieser Prozesse für eine zuverlässige und flexible Nutzung notwendig.


Die Integration von Stockfish zur Berechnung von Schachzügen und die Nutzung des DGT Smart-Boards zur Erkennung von Spielzügen haben gut funktioniert und bieten eine solide Grundlage für eine interaktive Schachsteuerung. Für zukünftige Arbeiten sind jedoch Verbesserungen in der Bewegungsplanung, der Robotersteuerung sowie der vollständigen RTDE-Integration erforderlich, um das Projekt weiter zu optimieren und die geplante Automatisierung zu erreichen.
Die Integration von Stockfish zur Berechnung von Schachzügen und die Nutzung des DGT Smart-Boards zur Erkennung von Spielzügen haben gut funktioniert und bieten eine solide Grundlage für eine interaktive Schachsteuerung. Für zukünftige Arbeiten sind jedoch Verbesserungen in der Bewegungsplanung, der Robotersteuerung sowie der vollständigen RTDE-Integration erforderlich, um das Projekt weiter zu optimieren und die geplante Automatisierung zu erreichen.
Zeile 273: Zeile 361:
In zukünftigen Arbeiten wird es wichtig sein, die noch offenen Herausforderungen zu adressieren. Ein wichtiger Schritt wird die vollständige Implementierung der RTDE-Schnittstelle sein, um eine zuverlässige Echtzeitkommunikation zwischen Python und dem Roboter zu gewährleisten. Damit könnte der Roboter nicht nur präzise gesteuert, sondern auch komplexe Aufgaben autonom und ohne manuelle Eingriffe erledigen.
In zukünftigen Arbeiten wird es wichtig sein, die noch offenen Herausforderungen zu adressieren. Ein wichtiger Schritt wird die vollständige Implementierung der RTDE-Schnittstelle sein, um eine zuverlässige Echtzeitkommunikation zwischen Python und dem Roboter zu gewährleisten. Damit könnte der Roboter nicht nur präzise gesteuert, sondern auch komplexe Aufgaben autonom und ohne manuelle Eingriffe erledigen.


Ein weiteres Ziel ist die Automatisierung der Berechnung der Inversen Kinematik, die momentan manuell erfolgt. Die Entwicklung eines robusten Algorithmus, der diese Berechnungen in Echtzeit durchführen kann, wäre entscheidend für eine effiziente und flexible Steuerung der Roboterbewegungen und für die Handhabung von Schachfiguren auf verschiedenen Positionen des Schachbretts.
Ein weiteres Ziel ist die Automatisierung der aktuell noch manuell durchgeführten Berechnung der Inversen Kinematik. Die Entwicklung eines robusten Algorithmus, der diese Berechnungen in Echtzeit durchführen kann, wäre entscheidend für eine effiziente und flexible Steuerung der Roboterbewegungen und für die Handhabung von Schachfiguren auf verschiedenen Positionen des Schachbretts.


Auch die Bewegungsplanung des Roboters muss weiter optimiert werden, um kollisionsfreie und sichere Bewegungen zu gewährleisten. Hier wäre die Entwicklung eines Systems zur dynamischen Kollisionsvermeidung und Wegplanung sinnvoll, das nicht nur statisch definierte Felder, sondern auch variable Spielpositionen und Hindernisse berücksichtigen kann.
Auch die Bewegungsplanung des Roboters muss weiter optimiert werden, um kollisionsfreie und sichere Bewegungen zu gewährleisten. Hier wäre die Entwicklung eines Systems zur dynamischen Kollisionsvermeidung und Wegplanung sinnvoll, das nicht nur statisch definierte Felder, sondern auch variable Spielpositionen und Hindernisse berücksichtigen kann.
Zeile 281: Zeile 369:
Langfristig könnte das Projekt als Grundlage für den Einsatz kollaborativer Roboter in anderen Bereichen dienen, in denen Präzision und Automatisierung gefragt sind, wie etwa in der industriellen Fertigung oder in der medizinischen Rehabilitation.
Langfristig könnte das Projekt als Grundlage für den Einsatz kollaborativer Roboter in anderen Bereichen dienen, in denen Präzision und Automatisierung gefragt sind, wie etwa in der industriellen Fertigung oder in der medizinischen Rehabilitation.


Die gewonnenen Erfahrungen und die technische Grundlage bieten eine vielversprechende Basis für die Weiterentwicklung und die Erweiterung des Projekts zu einem voll funktionsfähigen, autonomen Roboter, der in der Lage ist, Schach auf hohem Niveau zu spielen und auch in anderen Anwendungen eingesetzt zu werden.
Die gewonnenen Erfahrungen und die technische Grundlage bieten eine vielversprechende Basis für die Weiterentwicklung und die Erweiterung des Projekts zu einem vollständig autonomen und funktionsfähigen Roboter", der in der Lage ist, Schach auf hohem Niveau zu spielen und auch in anderen Anwendungen eingesetzt zu werden.
 
=Literatur=

Aktuelle Version vom 14. Februar 2025, 19:33 Uhr

→ zurück zur Übersicht: Praktikum Produktionstechnik

Abbildung 1: Roboter am Schachbrett


Einleitung

Das Projekt "UR3 spielt Schach" wurde entwickelt, um die Fähigkeiten eines UR3-Roboters in der präzisen Handhabung und Steuerung zu demonstrieren. Ziel war es, den Roboter so zu programmieren, dass er eigenständig Schachzüge ausführt, basierend auf vorgegebenen Befehlen. Obwohl das Projekt nicht vollständig abgeschlossen wurde, bietet es wertvolle Erkenntnisse und eine solide Basis für zukünftige Arbeiten. Erkenntnisse aus dem Projekt Schachspiel mittels kollaborierendem UR-Roboter unter ROS wurden dabei genutzt.

Ziel des Projekts

  • Primäres Ziel: Programmierung eines UR3-Roboters, der Schachfiguren greift und bewegt.
  • Sekundäre Ziele:
    • Verstehen und Implementieren der RoboDK-Software in Kombination mit Python.
    • Entwicklung von Algorithmen zur Steuerung des "RG2 Gripper" Greifers.
    • Simulation und Optimierung der Roboterbewegungen.

V-Modell

Zur systematischen Umsetzung des Projekts wurde das V-Modell als Vorgehensweise herangezogen (Abb.1). Dieses Modell stellt sicher, dass sämtliche erforderlichen Schritte konsequent umgesetzt werden.

Abbildung 2: V-Modell















Die Organisation und Verwaltung der erstellten Dokumente erfolgte mithilfe der Software TortoiseSVN.

Anforderungsdefinition

Die Anforderungsdefinition wurde in funktionale und nicht-funktionale Anforderungen unterteilt..

Funktionale Anforderungen

  1. Präzision: Der Roboter muss die Schachfiguren sicher und ohne Kollisionen greifen und bewegen können.
  2. Reaktionszeit: Der Roboter muss innerhalb von 5 Sekunden auf einen neuen Schachzug reagieren.
  3. Kollisionen vermeiden: Der Roboter muss Bewegungen so planen, dass er keine Hindernisse berührt.
  4. Benutzerfreundlichkeit: Die Interaktion mit dem System soll intuitiv und ohne umfangreiche Programmierkenntnisse möglich sein.

Nicht-Funktionale Anforderungen

  1. Zuverlässigkeit: Das System soll stabil und ohne Unterbrechungen über längere Schachpartien hinweg funktionieren.
  1. Wartbarkeit: Code und Hardware sollten leicht aktualisierbar und erweiterbar sein.

Fuktionaler Systementwurf

Der Funktionale Systementwurf wurde in Powerpoint mit Piktogrammen und einem Foto erstellt (siehe Abbildung 3.) und ist unter Funktionaler Systementwurf im SVN verfügbar.

Abbildung 3: funktionaler Systementwurf

















Technischer Systementwurf

Der Technische Systementwurf wurde über den „PAP Designer“ erstellt (siehe Abbildung 4.) und ist unter Technischer Systementwurf im SVN verfügbar.

Abbildung 4: technischer Systementwurf


















Komponentenspezifikation

Die verwendeten Komponenten wurden in Hard- und Software unterteilt. Dabei wurde sich am Projekt Schachspiel mittels kollaborierendem UR-Roboter unter ROS orientiert.

Hardware

Komponenten Beschreibung Preis Bild
UR3

Das zentrale Element des Projekts ist der Roboterarm UR3 der Firma Universal Robots (UR). Der UR3 ist das kleinste Modell der kollaborativen Roboterreihe von UR. Mit einem Eigengewicht von 11 kg kann er Lasten von bis zu 3 kg heben. Die maximale Reichweite des Arms beträgt 500 mm, wenn dieser vollständig ausgefahren ist. Jedes Gelenk des UR3 kann sich um +/- 360° drehen. Für den Betrieb benötigt der Roboter eine Spannung von 24 V im Schaltschrank sowie 12 V an der Werkzeugschnittstelle. Die Kommunikation zwischen dem Roboter und einem PC erfolgt über eine Ethernet-Schnittstelle. Weitere technische Details können dem entsprechenden Datenblatt entnommen werden[1].

Kostenlos, da bereits vorhanden.
UR3Roboter
DGT Smart Board und Schachfiguren Das freundlicherweise vom Hersteller Digital Game Technology (DGT) bereitgestellte "DGT Smart Board" wird üblicherweise zur Übertragung von Turnierspielen ins Internet verwendet. Das bedeutet, dass dieses Smart Board die Möglichkeit zum Auslesen der einzelnen Figuren auf den bestimmten Feldern bietet. Die Datenübertragung wird durch ein USB-Kabel sichergestellt. Gleichzeitig kann eine von DGT hergestellte Schachuhr an das Schachbrett angeschlossen werden. Weitere Informationen sind unter der Quelle [2] zu finden. 0 €, Gesponsort vom Hersteller Digital Game Technology (DGT). Bei Chessware: 260€
DGT Smartboard
RG2 Gripper

Der RG2 Greifer von OnRobot ist ein vielseitiger und anpassungsfähiger Endeffektor, der für den Einsatz mit kollaborativen Robotern konzipiert wurde. Er wiegt 0,78 kg und kann Objekte mit einem maximalen Gewicht von 5 kg handhaben. Der Greifer verfügt über einen verstellbaren Hub von bis zu 110 mm und bietet eine hohe Präzision mit einer Wiederholgenauigkeit von ±0,1 mm . Die Greifkraft ist zwischen 3 und 40 N einstellbar, wobei die Greifgeschwindigkeit zwischen 38 und 127 mm/s variiert. Der Greifer benötigt eine Betriebsspannung von 24 V und hat einen Stromverbrauch, der je nach Einsatz zwischen 70 mA und 600 mA liegt.

Für den Betrieb ist eine Umgebungstemperatur zwischen 5 °C und 50 °C erforderlich, und der Greifer kann einer relativen Luftfeuchtigkeit von 0–95 % (nicht kondensierend) standhalten. Die Lebensdauer des Greifers wird auf etwa 30.000 Betriebsstunden geschätzt. Der RG2 Greifer ist mit einer IP54-Schutzart ausgestattet, die ihn vor Staub und Spritzwasser schützt.

Der Greifer wird durch einen integrierten elektrischen BLDC-Motor betrieben und bietet zahlreiche Anpassungsmöglichkeiten, wie etwa die Verwendung von Standard-, X-förmigen oder verlängerten Fingertippen, um unterschiedlichste Arbeitsstücke zu greifen. Die standardmäßigen Fingertipps bestehen aus EPDM-Gummi, der den Grip erhöht und gleichzeitig die Wahrscheinlichkeit verringert, dass Abdrücke auf den Objekten hinterlassen werden.

Weitere technische Details und Informationen zu den verfügbaren Zubehörteilen, wie Fingertip-Erweiterungen, können im offiziellen Datenblatt eingesehen werden.[3].

Kostenlos, da bereits vorhanden.
RG2 Gripper


Software - Robodk & Python Integration

RoboDK ist eine vielseitige Software zur Programmierung und Simulation von Industrierobotern. Sie ermöglicht die Entwicklung von Roboteranwendungen mit einer grafischen Benutzeroberfläche und ist vollständig kompatibel mit Python, um flexible, automatisierte Lösungen zu erstellen. Robodk bietet eine Vielzahl von Funktionen, die für die Programmierung und Simulation von Roboterbewegungen und -aufgaben genutzt werden können. Installation und Einrichtung Robodk Installation:

  • Robodk steht für verschiedene Betriebssysteme zur Verfügung, darunter Windows, macOS und Linux. Auf den jeweiligen Plattformen kann Robodk durch gängige Installationsmethoden eingerichtet werden. Die genaue Vorgehensweise für die Installation ist auf der offiziellen Robodk-Website[4]. verfügbar.

Python Installation: Python kann über die offizielle Webseite[5] heruntergeladen und installiert werden. Für das Projekt wurde ursprünglich die Version 3.10 verwendet. Die funktionalität kann nur für diese Version gewährleistet werden.

Für die Nutzung von Python mit RoboDK wird die RoboDK Python-API benötigt. Diese lässt sich einfach über den Python Package Index (PyPI) mit folgendem Befehl Installieren:

pip install robodk


Verwendung von Python mit Robodk Verbindung zwischen Robodk und Python:

  • Nach der Installation von Robodk und der Python-API können Python-Skripte genutzt werden, um Roboterbewegungen zu steuern, Berechnungen anzustellen und Simulationen durchzuführen. Robodk bietet hierfür ein einfach zu bedienendes API, das es ermöglicht, Roboter zu programmieren und Bewegungsabläufe zu simulieren. Dazu muss ein Modell des UR3 in RoboDK geladen werden. Dieses kann hier [6] heruntergeladen werden.

Entwicklung

Hier wurde die meiste Zeit des Projektzeitraums genutzt. Zur Erstellung der Skripte wurde die Programmiersprache Python über [7] gelernt und unter anderem mit KI-Unterstützung [8] geschrieben.

Die Programmierung wurde in drei Teilprogramme unterteilt.

  1. Ein Modul, das auf Schachzüge des Nutzers auf dem „DGT Smart-Board“ reagiert und auf Basis von „Stockfish“ Züge zurückgibt
  2. Eine rtde (real time data exchange) bzw Echtzeit Logik, die das Öffnen und Schließen des Greifers an den UR3 übermittelt
  3. Ein Programm, das den Roboter die einzelnen Felder auf dem Brett anfahren lässt

Interaktive Schachsteuerung Stockfish und DGT Smart-Board - Modul 1

Das Ziel dieses Moduls ist die Entwicklung eines interaktiven Schachsystems, das:

  • Den Schachzug eines Spielers auf einem DGT Smart-Board erfasst.
  • Den optimalen Zug für den Computergegner mithilfe der Stockfish-Schachengine berechnet.
  • Den berechneten Zug auf der Konsole ausgibt.

Kommunikation mit dem DGT Smart-Board:

Verbindung

Das Schachbrett wird über die serielle Schnittstelle (z. B. COM9) verbunden. Die Kommunikation erfolgt mit einer festen Baudrate von 9600 sowie definierten Steuerbefehlen.

Datenverarbeitung

Die Rohdaten des Schachbretts werden in eine 8x8-Matrix umgewandelt, die die aktuelle Position der Schachfiguren beschreibt. Die Matrix wird in die FEN-Notation (Forsyth-Edwards-Notation)[9] umgewandelt, ein Standardformat, das von Stockfish zur Analyse verwendet wird.

FEN-Notation

Die FEN-Notation (Forsyth-Edwards Notation) ist eine standardisierte Methode zur Darstellung eines Schachbretts zu einem bestimmten Zeitpunkt im Spiel. Sie besteht aus sechs durch Leerzeichen getrennten Teilen: die Stellung der Figuren, die Zugfarbe, die Rochade-Möglichkeiten, die en-passant-Spalte, die Halbzugzahl und die Zugnummer.

  • 1.Stellung der Figuren

"rnbqkbnr/pppppppp/8/8/8/8/PPPPPPPP/RNBQKBNR w KQkq - 0 1"

Dies stellt die Anfangsstellung eines Schachspiels dar. Die Figuren werden reihenweise von oben nach unten notiert, wobei Kleinbuchstaben für schwarze Figuren und Großbuchstaben für weiße stehen. Die Buchstaben w oder b zeigen an, wer am Zug ist (hier Weiß).

Stockfish-Integration:

Die generierte FEN-Notation wird an die Stockfish-Engine übergeben. Stockfish berechnet innerhalb von zwei Sekunden den optimalen Zug. Das Ergebnis wird in algebraischer Notation (z. B. e2e4) ausgegeben.


Ablauf des Programms

Schritt 1: Initialisierung

  • Aufbau einer seriellen Verbindung mit dem DGT Smart-Board über Port COM9.
  • Starten der Stockfish-Engine durch Angabe des Dateipfads.

Schritt 2: Schleife für den Spielfluss

  • Erkennung des Spielerzugs
    • Der aktuelle Zustand des Schachbretts wird mit dem zuletzt gespeicherten verglichen.
    • Der erkannte neue Zug wird in FEN-Notation umgewandelt.
  • Stockfish-Berechnung:
    • Die FEN-Notation wird an Stockfish übermittelt.
    • Der berechnete Zug des Computers wird ausgegeben.
  • Warten auf Computerzug:
    • Die Ausgabe des berechneten Computerzugs erfolgt nach dessen Berechnung.

Schritt 3: Aktualisierung

  • Das Schachbrett wird erneut ausgelesen und der Zustand für den nächsten Zug gespeichert.
  • Der Prozess wiederholt sich, bis das Spiel abgeschlossen ist.


Fehlerbehandlung und Optimierung

Ein bekannter Fehler tritt auf, wenn Stockfish einen Zug zurückgibt, obwohl der Computer nicht am Zug ist. Dies erfordert eine Optimierung der Steuerlogik. Eine mögliche Übergangslösung besteht darin, die fehlerhaften Ausgaben zu ignorieren, wenn der Computer nicht an der Reihe ist.

Erforderliche Bibliotheken

Für die Nutzung des Programms müssen folgende Python-Bibliotheken installiert sein:

pip install serial
pip install time
pip install chess
pip install chess.engine



Inbetriebnahme

  • Python installieren
  • Das Python Programm [10] aus dem SVN herunterladen.
  • Das USB-C Kabel an das Schachbrett anschließen.
  • Die Schachfiguren auf dem Brett standardmäßig aufbauen.
  • Das Python Skript per IDE oder CMD Konsole starten.
  • Weitere Instruktionen sind in der Konsole.
  • Eine Partie spielen. Dabei muss der Spieler die eigenen, sowie die in der Konsole ausgegebenen Züge von Stockfish manuell ziehen.

RTDE-Schnittstelle für UR3 - Modul 2

Die RTDE (Real-Time Data Exchange) Schnittstelle konnte nicht vollständig integriert werden. Dennoch wurden wertvolle Lernerfahrungen gesammelt.

  • Ziele der RTDE-Integration
    • Herstellung einer Echtzeitkommunikation zwischen dem Python-Programm und dem UR3-Roboterarm.
    • Steuerung des Greifers zur Bewegung und Platzierung von Schachfiguren.
    • Synchronisation von Roboterbewegungen und Greiferaktionen basierend auf Schachzügen.

Verwendeter Ansatz:

  • RTDE-Setup
    • Installation und Grundkonfiguration des RTDE-Python-SDKs von Universal Robots.
    • Verbindung zum Roboter über die IP-Adresse 192.168.3.1 und den Port COM9.
  • Erste Implementierung:
    • Tests zur Übermittlung von Befehlen wie:
set input register
set output register


  • Entwicklung eines Prototyps zur Steuerung von Bewegungen und Greiferbefehlen.

Die erstellten Dokumente sind nicht zur direkten Weiterverwendung geeignet, da die RTDE-Schnittstelle aufgrund technischer Herausforderungen nicht vollständig implementiert werden konnte. Aufgrund der unzureichenden Stabilität der aktuellen Implementierung wäre die Entwicklung eines neuen Programms zielführender, um Missverständnisse und Fehlfunktionen zu vermeiden.

Robotersteuerung zur Ansteuerung von Schachfeldern - Modul 3

  • Ziel:
    • Präzise Bewegung eines UR3-Roboters zu definierten Schachfeldern.
    • Steuerung über RoboDK mithilfe von Python.
  • Ergebnisse:

Der Roboter kann erfolgreich zu einzelnen Feldern bewegt werden. Die Ansteuerung erfolgt über die Angabe von Gelenkwinkeln im Python-Skript.

  • Ansatz:
    • Verbindung über RoboDK API:
      • Der Roboter wird durch den Namen „UR3“ in der RoboDK-Szene referenziert.
      • Befehle werden in Echtzeit über die RunMode-Schnittstelle übertragen.
    • Direkte Definition der Gelenkwinkel:
      • Zielgelenkwinkel werden im Gradmaß spezifiziert.
      • Beispiel für das Feld A8: [-6, -157, -39, -49, 95, 83].
  • Synchronisierung der Bewegung:
    • Der Roboter stoppt an der definierten Position und wartet auf den Abschluss der Bewegung.

Quellcode zur Umsetzung:

from robolink import *  # API zur RoboDK-Steuerung importieren

# Initialisiere die Verbindung zu RoboDK
RDK = Robolink()

# Roboterobjekt finden (Name aus der RoboDK GUI übernehmen)
robot = RDK.Item('UR3')

# Verbindung prüfen
if robot is None:
    print("Kein Roboter gefunden")
else:
    # Setze RoboDK in einen Modus, der Echtzeit-Bewegungen ausführt (RUNMODE)
    RDK.setRunMode(RUNMODE_RUN_ROBOT)  # RUNMODE_RUN_ROBOT: Echtzeit-Modus
    
    # Zielgelenkwinkel (Anpassen an deinen Roboter)
    joints = [-6, -157, -39, -49, 95, 83]  # Werte in Grad

    # Bewege den Roboter (echte Bewegung zum realen Roboter ausführen)
    robot.MoveJ(joints)  

    # Warten, bis der Roboter die Bewegung abgeschlossen hat
    robot.WaitMove()  

    print("Roboterbewegung abgeschlossen und synchronisiert!")


Testdurchführung & Anleitung

1. Voraussetzungen:

  • RoboDK und Python sind installiert.
  • Das Schachbrett ist korrekt ausgerichtet (Feld A8 in der Tisch-Ecke).

2. Inbetriebnahme:

  • Das Python Skript [11] aus dem SVN herunterladen.
  • pip [12] installieren.
  • den nachfolgenden Befehl über eine beliebige Python IDE oder cmd ausführen.
pip install robodk


  • Das LAN-Kabel des UR3 Roboters an den Computer anschließen
  • Den Roboter über den großen Ein-/Ausschalt Knopf starten
  • Im Initialisierungsbildschirm auf „Roboter an“ drücken. Das anschließen einer Maus an den USB-Port des Steuergeräts ist hier zu empfehlen, es kann aber auch über den Touchscreen bedient werden.
  • RoboDK öffnen und das Modell des UR3 Roboters über Datei->Öffnen…->UR3.robot laden. Es ist unter [13]
  • Das Python Skript über Datei->Öffnen...->A8.py in RoboDK laden. Es sollte im Projekt erscheinen.
  • In RoboDK in der oberen leiste auf „verbinden->Roboter verbinden“ klicken.
  • In der neuen Sidebar bei der IP 192.168.3.1 eingeben und „Ping“ drücken.
  • Wenn der Roboter reagiert, auf „Verbinden“ drücken.
  • Das Python-Skript durch einen Doppelklick starten.


Inverse Kinematik

Die Berechnung der Inversen Kinematik (IK) für alle Schachfeldkoordinaten wurde bisher nicht vollständig umgesetzt. Ebenso blieb die Entwicklung sicherer, kollisionsfreier Bewegungen unvollständig. Statt die Gelenkwinkel automatisch über RoboDK zu berechnen, wurden die Werte für jedes Schachfeld manuell eingegeben. Die manuelle Eingabe diente der Überprüfung der grundlegenden Funktionalität der Roboterbewegung.

In Zukunft sollten folgende Optimierungen vorgenommen werden:

  • Automatische Berechnung der Gelenkwinkel über RoboDK.
  • Dynamische Anpassung des Schachbretts für flexiblere Platzierung.
  • Kollisionsvermeidung durch geplante Bewegungsbahnen.

Fazit

Das entwickelte Programm erlaubt die präzise Steuerung eines UR3-Roboters zu einem definierten Schachfeld. Die grundlegende Funktionalität wurde erfolgreich validiert, jedoch sind weitere Optimierungen erforderlich, um eine flexible und dynamische Anwendung zu ermöglichen. Die Anleitung zur Inbetriebnahme findet sich im SVN [14]

Fazit

Das Projekt „UR3 spielt Schach“ hat einen interessanten Einblick in die Nutzung von kollaborativen Robotern, insbesondere des UR3 von Universal Robots, in der Automatisierung und Robotik zur Durchführung von Schachzügen gegeben. Trotz der unvollständigen Realisierung aller geplanten Ziele konnten wesentliche Fortschritte erzielt werden, insbesondere in der Integration von RoboDK mit Python und der Entwicklung von Steuerungsskripten für die Roboterbewegungen. Das Projekt hat das Potenzial, ein gutes Fundament für die weitere Forschung und Entwicklung im Bereich der Robotik und Automatisierung von Spielemechaniken zu bieten.

Die realisierten Module zur Schachsteuerung und zur Ansteuerung der Schachfelder mit dem UR3 sind funktional, aber es gibt noch Herausforderungen, wie die vollständige Integration der RTDE-Schnittstelle und die Berechnung der Inversen Kinematik, die noch nicht rechtzeitig abgeschlossen werden konnten. Die manuelle Eingabe von Gelenkwinkeln konnte zwar eine erste Grundlage schaffen, jedoch ist die vollständige Automatisierung und Optimierung dieser Prozesse für eine zuverlässige und flexible Nutzung notwendig.

Die Integration von Stockfish zur Berechnung von Schachzügen und die Nutzung des DGT Smart-Boards zur Erkennung von Spielzügen haben gut funktioniert und bieten eine solide Grundlage für eine interaktive Schachsteuerung. Für zukünftige Arbeiten sind jedoch Verbesserungen in der Bewegungsplanung, der Robotersteuerung sowie der vollständigen RTDE-Integration erforderlich, um das Projekt weiter zu optimieren und die geplante Automatisierung zu erreichen.

Insgesamt stellt das Projekt eine wertvolle Lernerfahrung dar, und die gewonnenen Erkenntnisse können als Grundlage für eine weiterführende Entwicklung in der Roboterprogrammierung und -steuerung dienen.

Ausblick

Das Projekt „UR3 spielt Schach“ hat die Basis für die Automatisierung und Robotik im Bereich von Brettspielen gelegt. Es zeigt, dass die Kombination von kollaborativen Robotern wie dem UR3, der Integration von RoboDK und Python sowie der Nutzung externer Software wie Stockfish und DGT Smart-Boards ein vielversprechendes Potenzial bietet, um Roboter für komplexe Aufgaben wie das Schachspielen zu nutzen.

In zukünftigen Arbeiten wird es wichtig sein, die noch offenen Herausforderungen zu adressieren. Ein wichtiger Schritt wird die vollständige Implementierung der RTDE-Schnittstelle sein, um eine zuverlässige Echtzeitkommunikation zwischen Python und dem Roboter zu gewährleisten. Damit könnte der Roboter nicht nur präzise gesteuert, sondern auch komplexe Aufgaben autonom und ohne manuelle Eingriffe erledigen.

Ein weiteres Ziel ist die Automatisierung der aktuell noch manuell durchgeführten Berechnung der Inversen Kinematik. Die Entwicklung eines robusten Algorithmus, der diese Berechnungen in Echtzeit durchführen kann, wäre entscheidend für eine effiziente und flexible Steuerung der Roboterbewegungen und für die Handhabung von Schachfiguren auf verschiedenen Positionen des Schachbretts.

Auch die Bewegungsplanung des Roboters muss weiter optimiert werden, um kollisionsfreie und sichere Bewegungen zu gewährleisten. Hier wäre die Entwicklung eines Systems zur dynamischen Kollisionsvermeidung und Wegplanung sinnvoll, das nicht nur statisch definierte Felder, sondern auch variable Spielpositionen und Hindernisse berücksichtigen kann.

Zudem könnte die Interaktivität des Systems weiter ausgebaut werden, beispielsweise durch die Einbindung von Benutzerschnittstellen, die es auch nicht-technischen Nutzern ermöglichen, den Roboter einfach zu steuern oder eigene Schachpartien gegen den Computer zu spielen.

Langfristig könnte das Projekt als Grundlage für den Einsatz kollaborativer Roboter in anderen Bereichen dienen, in denen Präzision und Automatisierung gefragt sind, wie etwa in der industriellen Fertigung oder in der medizinischen Rehabilitation.

Die gewonnenen Erfahrungen und die technische Grundlage bieten eine vielversprechende Basis für die Weiterentwicklung und die Erweiterung des Projekts zu einem vollständig autonomen und funktionsfähigen Roboter", der in der Lage ist, Schach auf hohem Niveau zu spielen und auch in anderen Anwendungen eingesetzt zu werden.

Literatur

  1. UR3: UniversalRobots- UR3Roboter. 2025. Online: https://www.i-botics.de/wp-content/uploads/2016/08/ur3_de.pdf; Abruf: 27.01.2025
  2. DGT: DGT - DGT Smart Board. 2025. Online: https://digitalgametechnology.com/products/home-use-e-boards/smart-board-with-indices; Abruf: 27.01.2025
  3. RG2Gripper: UniversalRobots- RG2 Gripper. 2025. Online:https://onrobot.com/sites/default/files/documents/Datasheet_RG2_EN_0.pdf; Abruf: 27.01.2025
  4. RoboDK 2025. Online: https://robodk.com/de/; Abruf: 27.01.2025
  5. Python 2025. Online: https://www.python.org/downloads/; Abruf: 27.01.2025
  6. Universal Robots: UR3. 2025. Online: https://robodk.com/robot/de/Universal-Robots/UR3#:~:text=Der%20Roboter%20UR3%20ist%20ein,Collaborative%2C%20Auftragen%2C%20Remote%20TCP.; Abruf: 27.01.2025
  7. Learnpython Online https://www.learnpython.org/; Abruf 27.01.2025
  8. Chat GPT Online https://chat.openai.com; Abruf: 27.01.2025
  9. FEN Notation Online https://www.chess.com/de/terms/forsyth-edwards-notation-fen; Abruf: 27.01.2025
  10. Interaktive Schachsteuerung Stockfish und DGT Smart-Board https://svn.hshl.de/svn/MTR_GPE_Praktikum/trunk/Fachthemen/UR3_Schach/Projekt/Projekte_und_Dateien/Stockfish.py
  11. A8.py skript https://svn.hshl.de/svn/MTR_GPE_Praktikum/trunk/Fachthemen/UR3_Schach/Projekt/Projekte_und_Dateien/A8_anfahren.py>
  12. https://packaging.python.org/en/latest/tutorials/installing-packages/
  13. https://robodk.com/robot/de/Universal-Robots/UR3#:~:text=Der%20Roboter%20UR3%20ist%20ein,Collaborative%2C%20Auftragen%2C%20Remote%20TCP. verfügbar.
  14. Anleitung https://svn.hshl.de/svn/MTR_GPE_Praktikum/trunk/Fachthemen/UR3_Schach/Projekt/Projekte_und_Dateien/Inbetriebnahme_UR3_spielt_schach.pdf