Spisu treści:

Robot szachowy wykonany z LEGO i Raspberry Pi: 6 kroków
Robot szachowy wykonany z LEGO i Raspberry Pi: 6 kroków

Wideo: Robot szachowy wykonany z LEGO i Raspberry Pi: 6 kroków

Wideo: Robot szachowy wykonany z LEGO i Raspberry Pi: 6 kroków
Wideo: Get Started → Learn English → Master ALL the ENGLISH BASICS you NEED to know! 2024, Lipiec
Anonim
Image
Image

Zaskocz swoich znajomych tym robotem szachowym!

Budowanie nie jest zbyt trudne, jeśli wcześniej robiłeś roboty LEGO i masz przynajmniej elementarną wiedzę z zakresu programowania komputerowego i Linuksa.

Robot wykonuje własne ruchy i wykorzystuje rozpoznawanie wizualne do określenia ruchu gracza.

Jedną z nowatorskich rzeczy w tym robocie jest kod rozpoznawania ruchu. Ten kod wizyjny jest również użyteczny dla robotów szachowych zbudowanych na wiele innych sposobów (takich jak mój ChessRobot używający ramienia robota Lynxmotion).

Nie jest wymagana żadna specjalna szachownica, kontaktrony lub cokolwiek innego (ponieważ ruch człowieka jest określany przez rozpoznanie wzrokowe).

Mój kod jest dostępny do użytku osobistego.

Krok 1: Wymagania

Światła, kamera, akcja!
Światła, kamera, akcja!

Cały kod jest napisany w Pythonie, który będzie działał między innymi na Raspberry Pi.

Raspberry Pi to komputer wielkości karty kredytowej, który można podłączyć do ekranu i klawiatury. Jest to niedrogi (około 40 USD), mały komputer, który może być używany w projektach elektronicznych i robotyce oraz do wielu rzeczy, które robi twój komputer stacjonarny.

Mój robot używa Raspberry Pi i Lego. Interfejs sprzętowy pomiędzy silnikami i czujnikami RPi i Lego Mindstorms EV3 zapewnia BrickPi3 firmy Dexter Industries.

Kompilacja Lego jest oparta na "Charlie the Chess Robot" autorstwa Darrousa Hadiego, zmodyfikowanej przeze mnie, w tym modów do używania RPi, a nie procesora Lego Mindstorms. Zastosowano silniki i czujniki Lego Mindstorms EV3.

Potrzebny będzie również stół, kamera, oświetlenie, klawiatura, ekran i urządzenie wskazujące (np. mysz).

No i oczywiście figury szachowe i plansza.

Wszystkie te rzeczy opisuję bardziej szczegółowo w kolejnych krokach.

Krok 2: Budowa sprzętu

Image
Image

Jak już wcześniej wspomniałem, serce kodu wizji będzie działać z różnymi kompilacjami.

Oparłem mojego robota na "Charlie the Chess Robot" (wersja EV3) autorstwa Darrousa Hadiego, informacje na tej stronie mówią, jak uzyskać instrukcje budowy. Lista części jest tutaj.

Zmodyfikowałem robota na kilka sposobów.

1. Chwytak. To nie zadziałało dla mnie. Koła zębate się ześlizgnęły, więc dodałem dodatkowe klocki Lego, aby temu zapobiec. A potem, gdy żuraw był opuszczany, często się zacinał, więc dodałem połączenie Watta, aby temu zapobiec.

Powyżej grabber w akcji, pokazujący zmodyfikowane połączenie.

2. Oryginalna kompilacja wykorzystuje procesor Lego Mindstorms EV3, ale ja używam Raspberry Pi, co ułatwia obsługę Pythona.

3. Używam Raspberry Pi 3 Model B.

4. Aby połączyć RPi z Lego, używam BrickPi3 firmy Dexter Industries. BrickPi podłącza się do Raspberry Pi i razem zastępuje klocek LEGO Mindstorms NXT lub EV3.

Kiedy masz plik Lego Digital Designer, pojawia się kwestia zdobycia elementów LEGO. Klocki możesz zdobyć bezpośrednio ze sklepu LEGO i jest to najtańszy sposób ich zdobycia. Jednak nie będą miały wszystkiego, czego potrzebujesz, a dostarczenie cegieł może potrwać kilka tygodni lub dłużej.

Możesz także użyć Rebrickable: otwórz konto, prześlij plik LDD, a następnie uzyskaj listę sprzedawców.

Innym dobrym źródłem jest Bricklink.

Krok 3: Oprogramowanie, które wprawia robota w ruch

Cały kod jest napisany w Pythonie 2.

  1. Dexter Industries dostarcza kod wspierający przenoszenie silników EV3 itp. Jest on dostarczany z BrickPi3.
  2. Podaję kod, aby silniki poruszały się w taki sposób, aby poruszyć figurami szachowymi!
  3. Silnikiem szachowym jest Sztokfisz, który może pokonać każdego człowieka! „Stockfish to jeden z najsilniejszych szachowych silników na świecie. Jest też znacznie silniejszy niż najlepsi ludzcy arcymistrzowie szachowi”.
  4. Kod do sterowania silnikiem szachowym, sprawdzania, czy ruch jest prawidłowy i tak dalej, to ChessBoard.py
  5. Używam kodu z https://chess.fortherapy.co.uk, aby się z tym połączyć.
  6. Mój kod (w 2 powyżej) następnie z tym współpracuje!

Krok 4: Oprogramowanie do rozpoznawania ruchu człowieka

Po wykonaniu ruchu przez gracza kamera robi zdjęcie. Kod przycina i obraca to tak, że szachownica dokładnie pasuje do kolejnego obrazu. Kwadraty szachownicy muszą wyglądać kwadratowo!. Obraz jest zniekształcony, ponieważ krawędzie planszy są dalej od kamery niż środek planszy. Aparat jest jednak na tyle daleko, że po przycięciu ta dystorsja nie jest znacząca. Ponieważ robot wie, gdzie znajdują się wszystkie elementy po ruchu komputera, po wykonaniu ruchu przez człowieka wystarczy, aby kod mógł odróżnić następujące trzy przypadki:

  • Pusty kwadrat
  • Czarny kawałek dowolnego rodzaju
  • Jakikolwiek biały kawałek.

Obejmuje to wszystkie przypadki, w tym roszady i en passant.

Robot sprawdza, czy ruch człowieka jest prawidłowy i informuje go, jeśli tak nie jest! Jedynym przypadkiem, który nie został omówiony, jest sytuacja, w której gracz prowadzący człowieka promuje pionka na nie-królową. Gracz musi wtedy powiedzieć robotowi, czym jest promowany kawałek.

Możemy teraz rozpatrywać obraz w kategoriach kwadratów szachownicy.

Na początkowym ustawieniu planszy wiemy, gdzie są wszystkie białe i czarne pionki i gdzie są puste pola.

Puste kwadraty mają znacznie mniejszą zmienność koloru niż kwadraty zajęte. Obliczamy odchylenie standardowe dla każdego z trzech kolorów RGB dla każdego kwadratu na wszystkich jego pikselach (poza tymi w pobliżu granic kwadratu). Maksymalne odchylenie standardowe dowolnego pustego pola jest znacznie mniejsze niż minimalne odchylenie standardowe dowolnego zajętego pola, co pozwala nam, po kolejnym ruchu gracza, określić, które pola są puste.

Po ustaleniu wartości progowej dla pustych i zajętych kwadratów musimy teraz określić kolor pionka dla zajętych kwadratów:

Na planszy początkowej obliczamy dla każdego białego kwadratu, dla każdego z R, G, B, średnią (średnią) wartość jego pikseli (innych niż te znajdujące się w pobliżu granic kwadratu). Minimalna wartość tych średnich dla każdego białego kwadratu jest większa niż maksymalna średnia w każdym czarnym kwadracie, więc możemy określić kolor pionka dla zajętych kwadratów. Jak wspomniano wcześniej, to wszystko, co musimy zrobić, aby określić, jaki był ruch gracza prowadzącego człowieka.

Algorytmy działają najlepiej, gdy szachownica ma kolor bardzo odległy od koloru pionków! W moim robocie pionki są w kolorze złamanej bieli i brązu, a szachownica jest ręcznie robiona w karty i jest jasnozielona z niewielką różnicą między "czarnymi" i "białymi" kwadratami.

Edytuj 17 października 2018: Teraz pomalowałem brązowe kawałki na matową czerń, co sprawia, że algorytm działa w bardziej zmiennych warunkach oświetleniowych.

Krok 5: Światła, kamera, akcja

Światła

Potrzebujesz równego źródła światła umieszczonego nad tablicą. Używam tego, który jest naprawdę tani, z amazon.co.uk - i bez wątpienia jest coś podobnego na amazon.com. Przy zgaszonych światłach w pokoju.

Aktualizacja: mam teraz dwa światła, aby zapewnić bardziej równomierne źródło światła

Kamera

Bez wątpienia można użyć specjalnego modułu kamery Raspberry Pi (z długim kablem), ale ja używam kamery USB - "Logitech 960-001064 C525 HD Webcam - Black" - która współpracuje z RPi. Musisz upewnić się, że kamera nie porusza się względem tablicy, budując wieżę lub mając miejsce, w którym można ją solidnie zamocować. Kamera musi znajdować się dość wysoko nad płytą, aby zredukować zniekształcenia geometryczne. Mam aparat 58 cm nad deską.

Aktualizacja: Teraz wolę kamerę internetową HP HD 2300, ponieważ uważam ją za bardziej niezawodną.

Tabela

Potrzebujesz mocnego. Kupiłem ten. Na dodatek widać, że mam kwadrat z MDF, z kilkoma rzeczami, które powstrzymają robota przed skakaniem, gdy wózek się porusza. Dobrym pomysłem jest trzymanie kamery w tej samej pozycji nad deską!

Klawiatura

Do pierwszej konfiguracji RPi potrzebuje klawiatury USB. Używam tego do tworzenia kodu. Jedyną rzeczą, do której robot potrzebuje klawiatury, jest uruchomienie programu i symulacja uderzenia zegara szachowego. Mam jeden z nich. Ale tak naprawdę potrzebujesz tylko myszy lub przycisku GPIO podłączonego do RPi

Wyświetlacz

Używam dużego ekranu do programowania, ale jedyne, czego potrzebuje robot, to powiedzieć, że twój ruch jest nieprawidłowy, sprawdzić itp. Mam jeden z nich, również dostępny na amazon.com.

Ale zamiast wymagać wyświetlacza, robot wypowiada te frazy! Zrobiłem to, konwertując tekst na mowę za pomocą kodu opisanego tutaj i dołączając mały głośnik. (Używam „mini głośnika Hamburger”).

Zwroty, które robot mówi:

  • Sprawdzać!
  • Szach mat
  • Nieprawidłowy ruch
  • Wygrałeś!
  • Pat
  • Rysuj przez trzykrotne powtórzenie
  • Zasada remisu przez 50 ruchów

Zasada pięćdziesięciu ruchów w szachach mówi, że gracz może ubiegać się o remis, jeśli nie został zbity i żaden pionek nie został przesunięty w ostatnich pięćdziesięciu ruchach (w tym celu „ruch” polega na tym, że gracz kończy swoją turę, a następnie przeciwnika kończącego swoją turę).

Możesz usłyszeć robota mówiącego w krótkim filmiku „Kumpla głupca” powyżej (jeśli podkręcisz dźwięk dość wysoko)!

Krok 6: Jak zdobyć oprogramowanie

1. Sztokfisz

Jeśli korzystasz z Raspbian na swoim RPi, możesz użyć silnika Stockfish 7 - jest bezpłatny. Po prostu biegnij:

sudo apt-get zainstaluj sztokfisz

2. Szachownica.py

Zdobądź to tutaj.

3. Kod oparty na

Pochodzi z moim kodem.

4. Sterowniki Pythona dla BrickPi3:

Zdobądź je tutaj.

5. Mój kod, który wywołuje powyższy kod i który sprawia, że robot wykonuje ruchy, oraz mój kod wizji.

Uzyskaj to ode mnie, publikując komentarz, a ja odpowiem.

Zalecana: