INHOUDSOPGAWE:

Skaakrobot gemaak met LEGO en Framboos Pi: 6 stappe
Skaakrobot gemaak met LEGO en Framboos Pi: 6 stappe

Video: Skaakrobot gemaak met LEGO en Framboos Pi: 6 stappe

Video: Skaakrobot gemaak met LEGO en Framboos Pi: 6 stappe
Video: Быстрая укладка плитки на стены в санузле. ПЕРЕДЕЛКА ХРУЩЕВКИ от А до Я #27 2024, Julie
Anonim
Image
Image

Verbaas jou vriende met hierdie skaakrobot!

Dit is nie te moeilik om te bou as u al voorheen LEGO -robotte gemaak het nie en as u ten minste basiese kennis van rekenaarprogrammering en Linux het.

Die robot maak sy eie bewegings en gebruik visuele herkenning om die beweging van die menslike speler te bepaal.

Een van die nuwe dinge in hierdie robot is die kode vir bewegingherkenning. Hierdie visie -kode is ook bruikbaar vir skaakrobotte wat op baie ander maniere gebou is (soos my ChessRobot wat Lynxmotion robotarm gebruik).

Geen spesiale skaakbord, rietskakelaars of wat ook al is nodig nie (aangesien die beweging van die mens bepaal word deur visuele herkenning).

My kode is beskikbaar vir persoonlike gebruik.

Stap 1: Vereistes

Ligte, kamera, aksie!
Ligte, kamera, aksie!

Die hele kode is in Python geskryf, wat onder meer op 'n Raspberry Pi werk.

Raspberry Pi is 'n rekenaar met 'n kredietkaart-grootte wat op 'n skerm en 'n sleutelbord gekoppel kan word. Dit is 'n goedkoop rekenaar (ongeveer $ 40) wat in staat is om in elektroniese projekte en robotika gebruik te word, en vir baie van die dinge wat u tafelrekenaar doen.

My robot gebruik 'n Raspberry Pi en Lego. Die hardeware -koppelvlak tussen die RPi en die Lego Mindstorms EV3 motors en sensors word verskaf deur BrickPi3 van Dexter Industries.

Die Lego -konstruksie is gebaseer op 'Charlie the Chess Robot', deur Darrous Hadi, gewysig deur my, insluitend mods om 'n RPi te gebruik, eerder as die Lego Mindstorms -verwerker. Lego Mindstorms EV3 motors en sensors word gebruik.

U benodig ook 'n tafel, 'n kamera, beligting, 'n sleutelbord, 'n skerm en 'n wyser (byvoorbeeld muis).

En natuurlik, skaakstukke en 'n bord.

Ek beskryf al hierdie dinge in meer detail in die daaropvolgende stappe.

Stap 2: Die hardeware -opbou

Image
Image

Soos ek voorheen aangedui het, werk die hart van die visie -kode met verskillende konstruksies.

Ek het my robot gebaseer op 'Charlie the Chess Robot' (EV3 -weergawe) deur Darrous Hadi, inligting op die bladsy bevat inligting oor hoe om die bouinstruksies te kry. Die onderdele lys is hier.

Ek het die robot op 'n paar maniere aangepas.

1. Die gryp. Dit het nie vir my gewerk nie. Die ratte het gegly, so ek het ekstra Lego -stukke bygevoeg om dit te voorkom. En toe die kraan neergesit word, het dit gereeld vasgeloop, so ek het 'n Watt -koppeling bygevoeg om dit te voorkom.

Bo is die gryp in aksie, wat die gewysigde koppeling wys.

2. Die oorspronklike gebou gebruik die Lego Mindstorms EV3 -verwerker, maar ek gebruik 'n Raspberry Pi, wat dit maklik maak om Python te gebruik.

3. Ek gebruik 'n Raspberry Pi 3 Model B.

4. Om die RPi met die Lego te koppel, gebruik ek BrickPi3 van Dexter Industries. Die BrickPi word aan die Raspberry Pi geheg en saam vervang hulle die LEGO Mindstorms NXT of EV3 Brick.

As u die Lego Digital Designer -lêer het, is daar die vraag of u die LEGO -stukke moet kry. U kan stene direk by die LEGO -winkel kry, en dit is die goedkoopste manier om dit te bekom. Hulle het egter nie alles wat u nodig het nie, en dit kan 'n paar weke of langer neem om die stene te bereik.

U kan ook Rebrickable gebruik: maak 'n rekening oop, laai die LDD -lêer op en kry 'n lys met verkopers.

'N Ander goeie bron is Bricklink.

Stap 3: Die sagteware wat die robot laat beweeg

Al die kode is in Python 2 geskryf.

  1. Dexter Industries verskaf kode om die beweging van die EV3 -motors, ens., Te ondersteun. Dit kom saam met die BrickPi3.
  2. Ek gee die kode om die motors so te laat beweeg dat die skaakstukke beweeg!
  3. Die skaakmotor is Stockfish - wat enige mens kan klop! "Stockfish is een van die sterkste skaakmotors ter wêreld. Dit is ook baie sterker as die beste menslike skaak -grootmeesters."
  4. Die kode om die skaakmotor aan te dryf, te bevestig dat 'n beweging geldig is, ensovoorts is ChessBoard.py
  5. Ek gebruik 'n kode van https://chess.fortherapy.co.uk om daarmee te werk.
  6. My kode (in 2 hierbo) koppel dan daarmee!

Stap 4: Die sagteware om die beweging van die mens te herken

Nadat die speler besluit het, neem die kamera 'n foto. Die kode sny en draai dit sodat die skaakbord presies by die volgende prentjie pas. Die blokkies van die skaakbord moet vierkantig lyk! Daar is vervorming in die beeld omdat die rande van die bord verder van die kamera af is as wat die middel van die bord is. Die kamera is egter ver genoeg weg sodat hierdie vervorming na afsny nie beduidend is nie. Omdat die robot weet waar al die stukke is na die rekenaarbeweging, moet die kode slegs die verskil tussen die volgende drie gevalle sien nadat die mens 'n skuif gemaak het:

  • 'N Leë vierkant
  • 'N Swart stuk van enige aard
  • 'N Wit stuk van enige aard.

Dit dek alle gevalle, insluitend kasteel en en passant.

Die robot kyk of die mens se beweging korrek is, en laat weet hulle indien nie! Die enigste geval wat nie behandel word nie, is waar die menslike speler 'n pion in 'n nie-koningin bevorder. Die speler moet dan aan die robot vertel wat die promosiestuk is.

Ons kan die beeld nou oorweeg in terme van skaakbordvierkante.

Op die aanvanklike bordopstelling weet ons waar al die wit en swart stukke is en waar die leë blokkies is.

Leë vierkante het baie minder kleurvariasie as wat vierkante inneem. Ons bereken die standaardafwyking vir elk van die drie RGB -kleure vir elke vierkant oor al sy pixels (behalwe dié naby die grense van die vierkant). Die maksimum standaardafwyking vir enige leë vierkant is baie minder as die minimum standaardafwyking vir enige bewoonde vierkant, en dit stel ons in staat om na 'n volgende spelerbeweging te bepaal watter vierkante leeg is.

Nadat ons die drempelwaarde vir leë versus bewoonde vierkante bepaal het, moet ons nou die stuk kleur vir besette vierkante bepaal:

Op die aanvanklike bord bereken ons vir elke wit vierkant, vir elkeen van R, G, B, die gemiddelde (gemiddelde) waarde van sy pixels (anders as dié naby die grense van die vierkant). Die minimum van hierdie middele vir enige wit vierkant is groter as die maksimum van die middele oor enige swart vierkant, en daarom kan ons die stuk kleur vir besette vierkante bepaal. Soos voorheen gesê, is dit al wat ons moet doen om te bepaal wat die beweging van die menslike speler was.

Die algoritmes werk die beste as die skaakbord 'n kleur het wat ver van die kleur van die stukke is! In my robot is die stukke spierwit en bruin, en die skaakbord is met die hand gemaak in kaart, en is 'n ligte groen met min verskil tussen die "swart" en "wit" blokkies.

Redigering 17 Okt 2018: Ek het die bruin stukke nou mat swart geverf, wat die algoritme onder meer veranderlike beligtingstoestande laat werk.

Stap 5: Ligte, kamera, aksie

Ligte

U benodig 'n egalige ligbron oor die bord. Ek gebruik hierdie een, wat baie goedkoop is, van amazon.co.uk - en daar is ongetwyfeld iets soortgelyks op amazon.com. Met die kamer se ligte af.

Opdatering: ek het nou twee ligte om 'n meer egalige bron van lig te gee

Kamera

U kan ongetwyfeld die spesiale Raspberry Pi -kameramodule (met 'n lang kabel) gebruik, maar ek gebruik 'n USB -kamera - "Logitech 960-001064 C525 HD Webcam - Black" - wat saam met die RPi werk. U moet seker maak dat die kamera nie ten opsigte van die bord beweeg nie, deur 'n toring te bou of om dit êrens vas te maak. Die kamera moet redelik hoog bo die bord wees om meetkundige vervorming te verminder. Ek het my kamera 58 cm bo die bord.

Opdatering: Ek verkies nou die HP Webcam HD 2300, aangesien ek dit meer betroubaar vind.

Tabel

Jy het 'n stewige een nodig. Ek het hierdie een gekoop. Boonop kan u sien dat ek 'n vierkant van MDF het, met 'n paar goed om te keer dat die robot rondspring wanneer die waentjie beweeg. Dit is 'n goeie idee om die kamera in dieselfde posisie oor die bord te hou!

Sleutelbord

Die RPi benodig 'n USB -sleutelbord vir die eerste opstelling. En ek gebruik dit om die kode te ontwikkel. Die enigste ding waarvoor die robot 'n sleutelbord nodig het, is om die program te begin en die skaakklok te simuleer. Ek het een hiervan gekry. Maar eintlik het u slegs 'n GPIO-muis of 'n knoppie nodig wat aan die RPi gekoppel is

Vertoon

Ek gebruik 'n groot skerm vir ontwikkeling, maar die enigste ding wat die robot nodig het, is om jou te vertel dat jou skuif ongeldig is, kyk, ens. Ek het een hiervan, ook beskikbaar by amazon.com.

Maar eerder as om 'n skerm te benodig, sal die robot hierdie frases spreek! Ek het dit gedoen deur teks na spraak om te skakel met behulp van kode soos hier beskryf, en 'n klein luidspreker aan te sluit. (Ek gebruik 'n "Hamburger mini -luidspreker").

Frases wat die robot sê:

  • Tjek!
  • Skaakmat
  • Ongeldige skuif
  • Jy het gewen!
  • Dooiepunt
  • Teken deur drievoudige herhaling
  • Trek met 50 trekke reël

Die reël van vyftig bewegings in skaak bepaal dat 'n speler gelykop kan aanspraak maak as daar nie gevang is nie en geen pion in die laaste vyftig bewegings geskuif is nie (vir hierdie doel bestaan 'n "skuif" uit 'n speler wat sy beurt voltooi, gevolg deur die teenstander sy beurt voltooi).

U kan die robot hoor spreek in die kort video van 'dwaas se maat' hierbo (as u die geluid redelik hoog maak)!

Stap 6: Hoe om die sagteware te kry

1. Stokvis

As u Raspbian op u RPi gebruik, kan u die Stockfish 7 -enjin gebruik - dit is gratis. Hardloop net:

sudo apt-get installeer stockfish

2. ChessBoard.py

Kry dit hier.

3. Kode gebaseer op

Kom met my kode.

4. Python -bestuurders vir BrickPi3:

Kry hierdie hier.

5. My kode wat al die kode hierbo aanroep en wat die robot laat beweeg, en my visie -kode.

Kry dit van my deur 'n opmerking te plaas, en ek sal reageer.

Aanbeveel: