Elektroda.pl
Elektroda.pl
X
Computer ControlsComputer Controls
Proszę, dodaj wyjątek dla www.elektroda.pl do Adblock.
Dzięki temu, że oglądasz reklamy, wspierasz portal i użytkowników.

10 projektów na nudne lato: Robot do gry w Connect Four (10)

ghost666 03 Sie 2016 14:36 8250 2
  • 10 projektów na nudne lato: Robot do gry w Connect Four (10)
    Nadal jest lato, chociaż pogoda nie dopisuje. Każdy ma trochę więcej wolnego czasu niż zazwyczaj. Czas ten spożytkować można na wiele sposobów - granie w gry komputerowe, oglądanie filmów na youtubie czy uprawianie sportów to tylko niektóre z możliwości. Ale oczywiście elektronicy i programiści - hobbyści i zawodowcy - mają teraz więcej czasu niż zazwyczaj na zrealizowanie jakiegoś pobocznego projektu, zanim nadejdzie jesień i wszelkie terminy powrócą ze swoją nieubłaganością.

    W poprzednim odcinku przedstawialiśmy opartą o moduł UDOO fotobudkę, która pozwala na automatyczne robienie i drukowanie zdjęć. Ostatni odcinek cyklu poświęcony jest natomiast projektowi robota, który pozwala na grę w Connect Four.

    Projekt autora zainspirowany został jego zainteresowaniem grami logicznymi różnego rodzaju. Sama idea integracji Raspberry Pi z grą Connect Four narodziła się, gdy autor realizował prosty system sortowania kolorowych klocków na Raspberry Pi z kamerą, która była w stanie rozróżniać kolory elementów. Za część mechaniczną układu odpowiada MeArm, produkowane przez Igora Pavola, podłączone do RPi.

    Pierwszym krokiem do realizacji było stworzenie i przetestowanie systemu analizy obrazu, który pozwoliłby Raspberry Pi na 'widzenie' planszy i rozumienie co się na niej dzieje. Kolejnym etapem było stworzenie odpowiedniego AI, które byłoby w stanie grać w tą grę, a jednocześnie nie wymagało zbyt wielkiej mocy obliczeniowej do przeliczania kolejnych ruchów. Autor znalazł wiele skryptów w Pythonie, pozwalających na realizację takiego algorytmu, jednakże okazało się, że większość z nich nie działała na Pi lub z różnych powodów nie dawała się uruchomić na tym minikomputerze. Dlatego też 4-Bot, jak nazwany został układ, wyposażony został w autorskie oprogramowanie AI oparte jedynie o kilka prostych bibliotek.

    10 projektów na nudne lato: Robot do gry w Connect Four (10)


    4-Bot używa tej samej biblioteki, z której korzystał robot sortujący LEGO. Automat analizę obrazu rozpoczyna od down-samplowania zebranego zdjęcia planszy do 16 kolorów, co poprawia jego czytelność dla programu. Następnie obraz dzielony jest na siatkę, która pokrywa się z polami planszy i analizuje każdy z 42 pikseli siatki. Na podstawie koloru każde pole identyfikowane jest jako czerwone, żółte lub puste. Wyniki takiej analizy następnie zapisywane są w pamięci w postaci prostej macierzy, która przesyłana jest do algorytmu AI, który podejmuje decyzję co zrobić dalej.

    AI oparte jest o algorytm 'minimax', który doskonale sprawdza się w tego rodzaju grach logicznych. Okazuje się, że istnieje biblioteka do tego algorytmu w języku Python, z której skorzystał autor. Sam algorytm wykorzystuje drzewiastą strukturę do analizy N kroków w przód i wybiera na tej podstawie najlepszy dla siebie ruch. Brzmi to bardzo prosto, ale pamiętać trzeba, że na prostej planszy 6 x 7, jaką używa się w tej grze, istnieje 4 531 985 219 092 możliwych kombinacji ruchów - tak, ponad 4,5 biliona! Zmuszenie Raspberry Pi, aby w wydajny sposób przeliczał drzewo potencjalnych ruchów nie było proste o wymagało ograniczenie zaawansowania obliczeń, tak aby z jednej strony uzyskać dobrego gracza, a z drugiej aby czas pomiędzy ruchami nie był zbyt duży. Finalnie autorowi udało się stworzyć AI, które jest w stanie prowadzić całkiem inteligentną grę, a jednocześnie pomiędzy czas pomiędzy jego ruchami, jaki potrzebny jest mu do 'zastanowienia się' wynosi około 25 sekund, co jest wartością akceptowalną, aby prowadzić w miarę płynną grę.

    Gdy system rozpoznawania obrazu i współpracujące z nim AI były gotowe przyszedł czas na stronę mechaniczną projektu. Niestety autorowi nie udało się spozycjonować ramienia MeArm nad planszą tak, aby sięgało do wszystkich pól. Potrzebna była przeróbka tego mechanizmu, na szczęście w zakresie tego autorowi konstrukcji pomógł jeden z użytkowników Cheltenham Hackspace. W tym miejscu udało się mu także znaleźć niemalże wszystkie potrzebne do skonstruowania mechanizmu elementy.

    10 projektów na nudne lato: Robot do gry w Connect Four (10) 10 projektów na nudne lato: Robot do gry w Connect Four (10) 10 projektów na nudne lato: Robot do gry w Connect Four (10) 10 projektów na nudne lato: Robot do gry w Connect Four (10) 10 projektów na nudne lato: Robot do gry w Connect Four (10) 10 projektów na nudne lato: Robot do gry w Connect Four (10)


    Nad planszą powstała rama, na której zamontowana została platforma, do której przyczepiono fragment mechanizmu MeArm - chwytak, który łapać i upuszczać w odpowiednie miejsce będzie pionki. Sam element poruszany nad plansza będzie z wykorzystaniem osi pobranej z rozmontowanej drukarki 3D. Rama została pomalowana, a konstrukcja - szyna do poruszania chwytakiem i sam chwytak - zostały na niej zamontowane. Następnie autor precyzyjnie odmierzył pozycje, w jakich znaleźć musi się chwytak, aby upuścić żeton w zadaną kolumnę na planszy. Dzięki temu udało się pozycjonować automatowi żetony na planszy bardzo precyzyjnie i powtarzalnie.

    Cały system został następnie podłączony do Raspberry Pi. Serwomechanizm chwytaka, szyna poruszająca nim nad planszą oraz alfanumeryczny wyświetlacz LCD, prezentujący proste wiadomości, zostały podpięte do minikomputera przez moduł PiXi firmy Astro Designs. Moduł ten dedykowany jest do podłączania różnych układów wykonawczych do płytki rozwojowej z układem FPGA, a jego możliwości są na prawdę ogromne - opisane powyżej funkcje ledwo zarysowują powierzchnię tego, co potrafi moduł PiXi.

    Następnie do konstrukcji dodany został dyspenser żetonów, tak aby automat mógł bez problemu pobierać kolejne żetony podczas gry. Dyspenser wykonany został z tworzywa corex, a dzięki odpowiedniemu ukształtowaniu otworu dyspensera robot pobiera żetony bardzo sprawnie i nie wypadają one z niego same. Finalnie do projektu dodano jeden przycisk do sterowania działaniem automatu. Wyświetlacz LCD podłączony do komputera prezentuje proste informacje na temat gry. Robot jest teraz zupełnie samowystarczalny i nie potrzebuje żadnych elementów, poza zasilaczem.



    Jak ocenia autor konstrukcji, 4-Bot jest dotychczasowo najbardziej skomplikowanym jego dziełem. I z pewnością także najbardziej satysfakcjonującym. Niestety w powyższym opisie ciężko ująć poziom skomplikowania pewnych elementów, ale i tak "było warto" jak pisze autor. Planuje on udostępnić niebawem pełen kod programu, aby każdy mógł stworzyć w swoim domu podobny automat. Oprócz pełnej wersji programu, pojawić się także ma wersja czysto programowa, która nie będzie obsługiwać ramienia robota, a jedynie kamerę i Raspberry Pi - ruchy wykonywać będzie trzeba ręcznie za komputer.

    Źródła: Link
    http://www.eetimes.com/document.asp?elqTrackId=61c2d5ebce624231b13849d045fe63ba&elq=e6f9091b1a0c40ce975f905948a6da6d&elqaid=33266&elqat=1&elqCampaignId=29086&doc_id=1329968&page_number=10
    http://www.piandchips.co.uk/uncategorized/4-bot-a-raspberry-pi-connect-4-robot/

    Fajne! Ranking DIY
    Potrafisz napisać podobny artykuł? Wyślij do mnie a otrzymasz kartę SD 64GB.
    O autorze
    ghost666
    Tłumacz Redaktor
    Offline 
    Fizyk z wykształcenia. Po zrobieniu doktoratu i dwóch latach pracy na uczelni, przeszedł do sektora prywatnego, gdzie zajmuje się projektowaniem urządzeń elektronicznych i programowaniem. Od 2003 roku na forum Elektroda.pl, od 2008 roku członek zespołu redakcyjnego.
    ghost666 napisał 9543 postów o ocenie 7608, pomógł 157 razy. Mieszka w mieście Warszawa. Jest z nami od 2003 roku.
  • Computer ControlsComputer Controls
  • #2
    TechEkspert
    Redaktor
    Ciekawe,
    gdyby wykrywanie położenia krążków było mniej widoczne i manualne (bariery optoelektroniczne w stojaku, lub kamera nie wymagająca przykładania tła?) to całość byłaby jeszcze bardziej efektowna.
  • #3
    pheonix
    Poziom 13  
    Trochę to wszystko powolne. Bym się chyba zanudził, albo bym dawał specjalnie mu wygrać żeby to skończyć :P