Innehållsförteckning:

Schackrobot gjord med LEGO och Raspberry Pi: 6 steg
Schackrobot gjord med LEGO och Raspberry Pi: 6 steg

Video: Schackrobot gjord med LEGO och Raspberry Pi: 6 steg

Video: Schackrobot gjord med LEGO och Raspberry Pi: 6 steg
Video: Schackrobot 2024, Juli
Anonim
Image
Image

Förvåna dina vänner med denna schackrobot!

Det är inte för svårt att bygga om du har gjort LEGO -robotar tidigare och om du har åtminstone en grundläggande kunskap om datorprogrammering och Linux.

Roboten gör sina egna drag och använder visuellt igenkänning för att bestämma den mänskliga spelarens förflyttning.

En av de nya sakerna i denna robot är koden för flyttigenkänning. Denna visionskod är också användbar för schackrobotar byggda på många andra sätt (t.ex. min ChessRobot som använder Lynxmotion robotarm).

Inget speciellt schackbräde, vassbrytare eller vad som helst krävs (eftersom människans drag bestäms av visuell igenkänning).

Min kod är tillgänglig för personligt bruk.

Steg 1: Krav

Ljus, kamera, kör!
Ljus, kamera, kör!

All kod är skriven i Python, som körs på bland annat en Raspberry Pi.

Raspberry Pi är en dator i kreditkortstorlek som kan anslutas till en skärm och ett tangentbord. Det är en billig (cirka $ 40), kapabel liten dator som kan användas i elektronikprojekt och robotik, och för många av de saker som din stationära PC gör.

Min robot använder en Raspberry Pi och Lego. Hårdvarugränssnittet mellan motorerna och sensorerna RPi och Lego Mindstorms EV3 tillhandahålls av BrickPi3 från Dexter Industries.

Lego -byggnaden är baserad på "Charlie the Chess Robot", av Darrous Hadi, modifierad av mig, inklusive mods för att använda en RPi, snarare än Lego Mindstorms -processorn. Lego Mindstorms EV3 -motorer och sensorer används.

Du behöver också ett bord, en kamera, belysning, ett tangentbord, skärm och pekdon (t.ex. mus).

Och naturligtvis schackpjäser och en bräda.

Jag beskriver alla dessa saker mer detaljerat i de efterföljande stegen.

Steg 2: Maskinvarubyggnaden

Image
Image

Som jag tidigare har angett kommer hjärtat i visionskoden att fungera med en mängd olika byggnader.

Jag baserade min robot på "Charlie the Chess Robot" (EV3 -version) av Darrous Hadi, info på den sidan säger hur man får bygginstruktionerna. Dellistan finns här.

Jag modifierade roboten på ett par sätt.

1. Griparen. Detta fungerade inte för mig. Växlarna gled, så jag lade till ytterligare Lego -bitar för att förhindra det. Och när kranen sänktes, fastnade det ofta, så jag lade till en Watt -koppling för att förhindra det.

Ovan är griparen i aktion, som visar den modifierade kopplingen.

2. Den ursprungliga byggnaden använder Lego Mindstorms EV3 -processorn, men jag använder en Raspberry Pi, vilket gör det enkelt att använda Python.

3. Jag använder en Raspberry Pi 3 Model B.

4. För att ansluta RPi till Lego använder jag BrickPi3 från Dexter Industries. BrickPi fästs på Raspberry Pi och tillsammans ersätter de LEGO Mindstorms NXT eller EV3 Brick.

När du har Lego Digital Designer -filen är det frågan om att få LEGO -bitarna. Du kan få klossar direkt från LEGO -butiken, och detta är det billigaste sättet att få dem. De kommer dock inte att ha allt du behöver, och det kan ta ett par veckor eller mer innan klossarna kommer fram.

Du kan också använda Rebrickable: öppna ett konto, ladda upp LDD -filen och få därefter en lista över säljare.

En annan bra källa är Bricklink.

Steg 3: Programvaran som får roboten att flytta

All kod är skriven i Python 2.

  1. Dexter Industries tillhandahåller kod för att stödja förflyttning av EV3 -motorer etc. Detta följer med BrickPi3.
  2. Jag tillhandahåller koden för att få motorerna att röra sig på ett sådant sätt att de kan flytta schackpjäserna!
  3. Schackmotorn är Stockfish - som kan slå vilken människa som helst! "Stockfish är en av de starkaste schackmotorerna i världen. Den är också mycket starkare än de bästa mästarna i schack."
  4. Koden för att driva schackmotorn, validera att ett drag är giltigt och så vidare är ChessBoard.py
  5. Jag använder lite kod från https://chess.fortherapy.co.uk för att ansluta till det.
  6. Min kod (i 2 ovan) gränsar sedan till det!

Steg 4: Programvaran för att känna igen människans rörelse

När spelaren har gjort sitt drag tar kameran ett foto. Koden beskär och roterar detta så att schackbrädet exakt passar efterföljande bild. Schackbrädrutorna måste se fyrkantiga ut !. Det finns snedvridning i bilden eftersom kanterna på kortet sitter längre bort från kameran än mitt på kortet. Kameran är dock tillräckligt långt bort så att denna snedvridning efter beskärning inte är signifikant. Eftersom roboten vet var alla bitar är efter datorrörelsen, är allt som måste göras efter att människan har gjort ett drag att koden ska kunna se skillnaden mellan följande tre fall:

  • En tom ruta
  • En svart bit av något slag
  • En vit bit av något slag.

Detta täcker alla fall, inklusive castling och en passant.

Roboten kontrollerar att människans drag är korrekt och informerar dem om det inte är det! Det enda fallet som inte täcks är där den mänskliga spelaren marknadsför en bonde till en icke-drottning. Spelaren måste sedan berätta för roboten vad den marknadsförda biten är.

Vi kan nu betrakta bilden i termer av schackbrädor.

På den första bräduppsättningen vet vi var alla vita och svarta bitar är och var de tomma rutorna är.

Tomma rutor har mycket mindre variation i färg än som har upptagna rutor. Vi beräknar standardavvikelsen för var och en av de tre RGB -färgerna för varje kvadrat över alla dess pixlar (andra än dem nära kvadratets gränser). Den maximala standardavvikelsen för en tom kvadrat är mycket mindre än den minsta standardavvikelsen för en ockuperad kvadrat, och detta gör att vi, efter ett efterföljande spelarrör, kan avgöra vilka rutor som är tomma.

Efter att ha bestämt tröskelvärdet för tomma kontra ockuperade kvadrater, måste vi nu bestämma bitens färg för ockuperade kvadrater:

På den inledande tavlan beräknar vi för varje vit kvadrat, för var och en av R, G, B, medelvärdet (medelvärdet) av dess pixlar (andra än de nära kvadratets gränser). Minimi av dessa medel för en vit kvadrat är större än maxvärdet för medel över en svart kvadrat, och så kan vi bestämma bitens färg för ockuperade rutor. Som tidigare nämnts är detta allt vi behöver göra för att avgöra vad den mänskliga spelarens drag var.

Algoritmerna fungerar bäst om schackbrädet har en färg som är långt från bitarnas färg! I min robot är bitarna benvita och bruna, och schackbrädan är handgjorda i kort och är en ljusgrön med liten skillnad mellan de "svarta" och "vita" rutorna.

Redigera 17 oktober 2018: Jag har nu målat de bruna bitarna mattsvarta, vilket får algoritmen att fungera under mer varierande ljusförhållanden.

Steg 5: Ljus, kamera, action

Ljus

Du behöver en jämn ljuskälla placerad över brädet. Jag använder den här, som är riktigt billig, från amazon.co.uk - och utan tvekan finns det något liknande på amazon.com. Med rumslamporna släckta.

Uppdatering: Jag har nu två lampor för att ge en jämnare ljuskälla

Kamera

Du kan utan tvekan använda den speciella Raspberry Pi -kameramodulen (med en lång kabel), men jag använder en USB -kamera - "Logitech 960-001064 C525 HD Webcam - Black" - som fungerar med RPi. Du måste se till att kameran inte rör sig i förhållande till brädet, genom att bygga ett torn eller ha någonstans att fixa det ordentligt. Kameran måste vara ganska hög över brädet för att minska geometrisk snedvridning. Jag har min kamera 58 cm ovanför tavlan.

Uppdatering: Jag föredrar nu HP Webcam HD 2300, eftersom jag tycker att den är mer pålitlig.

Tabell

Du behöver en robust. Jag köpte den här. Utöver det kan du se att jag har en kvadrat av MDF, med några saker för att stoppa roboten som hoppar runt när vagnen rör sig. Det är en bra idé att hålla kameran i samma position över brädet!

Tangentbord

RPi behöver ett USB -tangentbord för sin första installation. Och jag använder det för att utveckla koden. Det enda roboten behöver ett tangentbord för är att starta programmet och simulera att slå schackklockan. Jag fick en av dessa. Men egentligen behöver du bara en mus eller en knapp GPIO-ansluten till RPi

Visa

Jag använder en stor skärm för utveckling, men det enda roboten behöver är att berätta att ditt drag är ogiltigt, kontrollera, etc. Jag har en av dessa, även tillgänglig på amazon.com.

Men i stället för att kräva en display kommer roboten att tala dessa fraser! Jag har gjort detta genom att konvertera text till tal med hjälp av kod enligt beskrivningen här och bifoga en liten högtalare. (Jag använder en "Hamburger mini -högtalare").

Fraser som roboten säger:

  • Kontrollera!
  • Schackmat
  • Ogiltigt drag
  • Du vann!
  • Dödläge
  • Rita genom trefaldig upprepning
  • Rita med 50 dragregel

Regeln om femtiosteg i schack säger att en spelare kan hävda oavgjort om ingen fångning har gjorts och ingen bricka har flyttats under de femtio flytten (för detta ändamål består ett "drag" av att en spelare slutför sin tur följt av motståndaren fullbordar sin tur).

Du kan höra roboten tala i den korta "dårens kompis" -videon ovan (om du höjer ditt ljud ganska högt)!

Steg 6: Hur man får programvaran

1. Torrfisk

Om du kör Raspbian på din RPi kan du använda Stockfish 7 -motorn - det är gratis. Bara spring:

sudo apt-get install stockfish

2. ChessBoard.py

Få det här.

3. Kod baserad på

Kommer med min kod.

4. Python -drivrutiner för BrickPi3:

Få dessa här.

5. Min kod som åberopar all kod ovan och som får roboten att göra rörelserna, och min visionskod.

Få detta från mig genom att lägga ut en kommentar, så svarar jag.

Rekommenderad: