Inhaltsverzeichnis:

Schachroboter aus LEGO und Raspberry Pi - Gunook
Schachroboter aus LEGO und Raspberry Pi - Gunook

Video: Schachroboter aus LEGO und Raspberry Pi - Gunook

Video: Schachroboter aus LEGO und Raspberry Pi - Gunook
Video: Malroboter aus Fischertechnik und ESP32: "MalRob" 2024, November
Anonim
Image
Image

Überraschen Sie Ihre Freunde mit diesem Schachroboter!

Es ist nicht allzu schwierig zu bauen, wenn Sie bereits LEGO-Roboter gebaut haben und zumindest elementare Kenntnisse in Computerprogrammierung und Linux haben.

Der Roboter macht seine eigenen Bewegungen und verwendet visuelle Erkennung, um die Bewegung des menschlichen Spielers zu bestimmen.

Eines der neuartigen Dinge an diesem Roboter ist der Code zur Bewegungserkennung. Dieser Vision-Code ist auch für Schachroboter verwendbar, die auf viele andere Arten gebaut wurden (wie mein ChessRobot mit Lynxmotion-Roboterarm).

Es sind keine speziellen Schachbretter, Reed-Schalter oder was auch immer erforderlich (da der Zug des Menschen durch visuelle Erkennung bestimmt wird).

Mein Code ist für den persönlichen Gebrauch verfügbar.

Schritt 1: Anforderungen

Lichter, Kamera, Action!
Lichter, Kamera, Action!

Der gesamte Code ist in Python geschrieben, das unter anderem auf einem Raspberry Pi läuft.

Raspberry Pi ist ein kreditkartengroßer Computer, der an einen Bildschirm und eine Tastatur angeschlossen werden kann. Es ist ein preiswerter (ca. 40 US-Dollar), leistungsfähiger kleiner Computer, der in Elektronikprojekten und Robotik sowie für viele der Dinge verwendet werden kann, die Ihr Desktop-PC macht.

Mein Roboter verwendet einen Raspberry Pi und Lego. Die Hardware-Schnittstelle zwischen dem RPi und den Lego Mindstorms EV3-Motoren und -Sensoren wird von BrickPi3 von Dexter Industries bereitgestellt.

Der Lego-Build basiert auf "Charlie the Chess Robot" von Darrous Hadi, das von mir modifiziert wurde, einschließlich Mods, um ein RPi anstelle des Lego Mindstorms-Prozessors zu verwenden. Es werden Lego Mindstorms EV3-Motoren und -Sensoren verwendet.

Außerdem benötigen Sie einen Tisch, eine Kamera, Beleuchtung, eine Tastatur, einen Bildschirm und ein Zeigegerät (z. B. Maus).

Und natürlich Schachfiguren und ein Brett.

All diese Dinge beschreibe ich in den folgenden Schritten genauer.

Schritt 2: Der Hardware-Build

Image
Image

Wie ich bereits erwähnt habe, funktioniert das Herzstück des Vision-Codes mit einer Vielzahl von Builds.

Ich habe meinen Roboter auf "Charlie the Chess Robot" (EV3-Version) von Darrous Hadi basiert, Infos auf dieser Seite sagen, wie man die Bauanleitung bekommt. Die Teileliste ist hier.

Ich habe den Roboter in mehrfacher Hinsicht modifiziert.

1. Der Greifer. Dies hat bei mir nicht funktioniert. Die Zahnräder rutschten, also fügte ich zusätzliche Lego-Teile hinzu, um das zu verhindern. Und wenn der Kran dann abgesenkt wurde, klemmte er oft, also fügte ich ein Wattgestänge hinzu, um das zu verhindern.

Oben ist der Grabber in Aktion zu sehen, der das modifizierte Gestänge zeigt.

2. Der ursprüngliche Build verwendet den Lego Mindstorms EV3-Prozessor, aber ich verwende einen Raspberry Pi, der die Verwendung von Python erleichtert.

3. Ich verwende einen Raspberry Pi 3 Modell B.

4. Um das RPi mit dem Lego zu verbinden, verwende ich BrickPi3 von Dexter Industries. Der BrickPi wird am Raspberry Pi befestigt und zusammen ersetzen sie den LEGO Mindstorms NXT oder EV3 Brick.

Wenn Sie die Lego Digital Designer-Datei haben, stellt sich die Frage, ob Sie die LEGO-Teile erhalten. Sie können Steine direkt im LEGO-Shop kaufen, und dies ist der billigste Weg, um sie zu erhalten. Sie haben jedoch nicht alles, was Sie brauchen, und es kann einige Wochen oder länger dauern, bis die Steine ankommen.

Sie können auch Rebrickable verwenden: Eröffnen Sie ein Konto, laden Sie die LDD-Datei hoch und erhalten Sie daraus eine Verkäuferliste.

Eine weitere gute Quelle ist Bricklink.

Schritt 3: Die Software, die den Roboter bewegt

Der gesamte Code ist in Python 2 geschrieben.

  1. Dexter Industries liefert Code, um das Bewegen der EV3-Motoren usw. zu unterstützen. Dies wird mit dem BrickPi3 geliefert.
  2. Ich stelle den Code zur Verfügung, um die Motoren so zu bewegen, dass sie die Schachfiguren bewegen!
  3. Die Schachengine ist Stockfish - die jeden Menschen schlagen kann! "Stockfish ist eine der stärksten Schachmotoren der Welt. Es ist auch viel stärker als die besten menschlichen Schachgroßmeister."
  4. Der Code, um die Schach-Engine zu steuern, zu überprüfen, ob ein Zug gültig ist usw. ist ChessBoard.py
  5. Ich benutze etwas Code von https://chess.fortherapy.co.uk, um damit zu kommunizieren.
  6. Mein Code (in 2 oben) verbindet sich dann damit!

Schritt 4: Die Software zum Erkennen der Bewegung des Menschen

Nachdem der Spieler seinen Zug gemacht hat, macht die Kamera ein Foto. Der Code beschneidet und dreht dies so, dass das Schachbrett genau zum nachfolgenden Bild passt. Die Schachbrettfelder müssen quadratisch aussehen!. Das Bild weist Verzerrungen auf, da die Kanten der Platine weiter von der Kamera entfernt sind als die Mitte der Platine. Allerdings ist die Kamera weit genug entfernt, sodass diese Verzerrung nach dem Beschneiden nicht ins Gewicht fällt. Da der Roboter nach dem Zug des Computers weiß, wo sich alle Teile befinden, muss der Code nach dem Zug des Menschen nur noch den Unterschied zwischen den folgenden drei Fällen erkennen:

  • Ein leeres Quadrat
  • Ein schwarzes Stück jeglicher Art
  • Ein weißes Stück jeglicher Art.

Dies deckt alle Fälle ab, auch Rochade und en passant.

Der Roboter überprüft, ob die Bewegung des Menschen richtig ist und informiert ihn, wenn dies nicht der Fall ist! Der einzige nicht abgedeckte Fall ist, dass der menschliche Spieler einen Bauern zu einer Nicht-Dame macht. Der Spieler muss dann dem Roboter sagen, was das beförderte Stück ist.

Wir können das Bild nun in Form von Schachbrettfeldern betrachten.

Bei der anfänglichen Aufstellung des Spielbretts wissen wir, wo alle weißen und schwarzen Steine sind und wo die leeren Felder sind.

Leere Quadrate haben viel weniger Farbunterschiede als besetzte Quadrate. Wir berechnen die Standardabweichung für jede der drei RGB-Farben für jedes Quadrat über alle seine Pixel (außer denen in der Nähe der Ränder des Quadrats). Die maximale Standardabweichung für jedes leere Feld ist viel geringer als die minimale Standardabweichung für jedes besetzte Feld, und dies ermöglicht es uns, nach einem nachfolgenden Spielerzug zu bestimmen, welche Felder leer sind.

Nachdem wir den Schwellenwert für leere vs. besetzte Felder bestimmt haben, müssen wir nun die Steinfarbe für besetzte Felder bestimmen:

Auf der Ausgangstafel berechnen wir für jedes weiße Quadrat, für jedes von R, G, B, den Mittelwert (Durchschnitt) seiner Pixel (außer denen in der Nähe der Ränder des Quadrats). Das Minimum dieser Mittelwerte für ein beliebiges weißes Quadrat ist größer als das Maximum der Mittelwerte über ein beliebiges schwarzes Quadrat, und so können wir die Steinfarbe für besetzte Quadrate bestimmen. Wie bereits erwähnt, ist dies alles, was wir tun müssen, um den Zug des menschlichen Spielers zu bestimmen.

Die Algorithmen funktionieren am besten, wenn das Schachbrett eine Farbe hat, die weit von der Farbe der Figuren entfernt ist! In meinem Roboter sind die Figuren cremefarben und braun, und das Schachbrett ist aus Karton handgefertigt und ist hellgrün mit geringem Unterschied zwischen den "schwarzen" und "weißen" Quadraten.

Edit 17 Okt 2018: Ich habe die braunen Teile jetzt mattschwarz lackiert, wodurch der Algorithmus unter variableren Lichtverhältnissen funktioniert.

Schritt 5: Lichter, Kamera, Aktion

Beleuchtung

Sie benötigen eine gleichmäßige Lichtquelle über der Platine. Ich benutze dieses wirklich billige von amazon.co.uk - und zweifellos gibt es etwas Ähnliches auf amazon.com. Bei ausgeschalteter Raumbeleuchtung.

Update: Ich habe jetzt zwei Lichter, um eine gleichmäßigere Lichtquelle zu geben

Kamera

Zweifellos können Sie das spezielle Raspberry Pi-Kameramodul (mit einem langen Kabel) verwenden, aber ich verwende eine USB-Kamera - "Logitech 960-001064 C525 HD Webcam - Black" - die mit dem RPi funktioniert. Sie müssen sicherstellen, dass sich die Kamera in Bezug auf das Board nicht bewegt, indem Sie einen Turm bauen oder eine feste Befestigung haben. Die Kamera muss ziemlich hoch über der Platine sein, um geometrische Verzerrungen zu reduzieren. Ich habe meine Kamera 58 cm über dem Brett.

Update: Ich bevorzuge jetzt die HP Webcam HD 2300, da sie meiner Meinung nach zuverlässiger ist.

Tisch

Du brauchst einen robusten. Ich habe dieses gekauft. Darüber hinaus kann man sehen, dass ich ein Quadrat aus MDF habe, mit einigen Sachen, um den Roboter daran zu hindern, herumzuspringen, wenn sich der Wagen bewegt. Es ist eine gute Idee, die Kamera in der gleichen Position über dem Brett zu halten!

Klaviatur

Das RPi benötigt für die erste Einrichtung eine USB-Tastatur. Und das verwende ich für die Entwicklung des Codes. Das einzige, wofür der Roboter eine Tastatur benötigt, ist das Programm zu starten und das Schlagen der Schachuhr zu simulieren. Ich habe eine davon. Aber wirklich, Sie brauchen nur eine Maus oder eine Taste, die GPIO-verbunden ist mit dem RPi

Anzeige

Ich benutze einen großen Bildschirm für die Entwicklung, aber das Einzige, was der Roboter braucht, ist, Ihnen mitzuteilen, dass Ihr Zug ungültig ist, überprüfen usw. Ich habe einen davon, auch auf amazon.com erhältlich.

Aber anstatt ein Display zu benötigen, spricht der Roboter diese Sätze! Ich habe dies getan, indem ich Text mit Code wie hier beschrieben in Sprache umgewandelt und einen kleinen Lautsprecher angeschlossen habe. (Ich benutze einen "Hamburger Mini-Lautsprecher").

Sätze, die der Roboter sagt:

  • Prüfen!
  • Schachmatt
  • Ungültiger Zug
  • Du hast gewonnen!
  • Patt
  • Zeichnen durch dreimalige Wiederholung
  • Remis nach 50-Züge-Regel

Die Fünfzig-Züge-Regel im Schach besagt, dass ein Spieler ein Remis beanspruchen kann, wenn in den letzten fünfzig Zügen kein Schlag gemacht und kein Bauer bewegt wurde (zu diesem Zweck besteht ein "Zug" darin, dass ein Spieler seinen Zug beendet, gefolgt von der Gegner, der seinen Zug beendet).

Sie können den Roboter im obigen kurzen "Narrenkumpel"-Video sprechen hören (wenn Sie Ihren Ton ziemlich hoch drehen)!

Schritt 6: So erhalten Sie die Software

1. Stockfisch

Wenn Sie Raspbian auf Ihrem RPi ausführen, können Sie die Stockfish 7-Engine verwenden - sie ist kostenlos. Renn einfach:

sudo apt-get install Stockfish

2. Schachbrett.py

Holen Sie sich das hier.

3. Code basierend auf

Kommt mit meinem Code.

4. Python-Treiber für BrickPi3:

Holen Sie sich diese hier.

5. Mein Code, der den gesamten obigen Code aufruft und der den Roboter dazu bringt, die Bewegungen auszuführen, und mein Visionscode.

Erhalten Sie dies von mir, indem Sie einen Kommentar posten, und ich werde antworten.

Empfohlen: