Mündəricat:

LEGO və Raspberry Pi ilə hazırlanmış Şahmat Robotu: 6 addım
LEGO və Raspberry Pi ilə hazırlanmış Şahmat Robotu: 6 addım

Video: LEGO və Raspberry Pi ilə hazırlanmış Şahmat Robotu: 6 addım

Video: LEGO və Raspberry Pi ilə hazırlanmış Şahmat Robotu: 6 addım
Video: MSC Meraviglia Full Ship Tour Tips Tricks & Review Award Winning Cruise Ship Vista Project 2024, Noyabr
Anonim
Image
Image

Bu şahmat robotu ilə dostlarınızı heyrətləndirin!

Əgər əvvəllər LEGO robotları hazırlamısınızsa və ən azı kompüter proqramlaşdırma və Linux haqqında ilkin bilikləriniz varsa, qurmaq o qədər də çətin deyil.

Robot öz hərəkətlərini edir və insan oyunçusunun hərəkətini təyin etmək üçün vizual tanıma istifadə edir.

Bu robotdakı yeni şeylərdən biri, hərəkətin tanınması kodudur. Bu görmə kodu bir çox başqa yollarla qurulmuş şahmat robotları üçün də istifadə edilə bilər (məsələn, ChessRobotum Lynxmotion robot qolundan istifadə edir).

Xüsusi şahmat taxtası, qamış açarları və ya tələb olunan hər hansı bir şey yoxdur (insanın hərəkəti vizual tanınma ilə təyin olunduğu üçün).

Mənim kodum şəxsi istifadə üçün əlçatandır.

Addım 1: Tələblər

İşıqlar, Kamera, Fəaliyyət!
İşıqlar, Kamera, Fəaliyyət!

Bütün kodlar, başqa şeylər arasında bir Raspberry Pi üzərində işləyəcək Python -da yazılmışdır.

Raspberry Pi, ekrana və klaviaturaya qoşula bilən kredit kartı ölçülü bir kompüterdir. Ucuz (təxminən 40 dollar), elektronika layihələrində və robot texnikasında və masaüstü kompüterinizin etdiyi bir çox işlərdə istifadə edilə bilən kiçik bir kompüterdir.

Robotum Raspberry Pi və Lego istifadə edir. RPi ilə Lego Mindstorms EV3 mühərrikləri və sensorlar arasındakı aparat interfeysi Dexter Industries -dən BrickPi3 tərəfindən təmin edilir.

Lego quruluşu, Lego Mindstorms prosessorundan çox, bir RPi istifadə etmək modları da daxil olmaqla, mənim dəyişdirdiyim Darrous Hadinin "Charlie Chess Robot" əsərinə əsaslanır. Lego Mindstorms EV3 mühərrikləri və sensorlar istifadə olunur.

Ayrıca masa, kamera, işıqlandırma, klaviatura, ekran və işarə cihazına (məsələn, siçan) ehtiyacınız olacaq.

Əlbəttə ki, şahmat parçaları və lövhə.

Sonrakı addımlarda bütün bunları daha ətraflı təsvir edirəm.

Addım 2: Hardware Build

Image
Image

Daha əvvəl də qeyd etdiyim kimi, görmə kodunun ürəyi müxtəlif quruluşlarla işləyəcək.

Robotumu Darrous Hadinin "Charlie Chess Robot" (EV3 versiyası) üzərində qurdum, o səhifədəki məlumatlar qurma təlimatlarının necə alınacağını söyləyir. Parçaların siyahısı burada.

Robotu bir neçə yolla dəyişdirdim.

1. Tutan. Bu mənim üçün işləmədi. Viteslər sürüşdü, buna görə bunun qarşısını almaq üçün əlavə Lego parçaları əlavə etdim. Və sonra vinç endirildikdə tez -tez sıxışırdı, buna görə də bunun qarşısını almaq üçün bir Watt bağlantısı əlavə etdim.

Yuxarıda dəyişdirilmiş əlaqəni göstərən hərəkətdə olan tutucu var.

2. Orijinal quruluş Lego Mindstorms EV3 prosessorundan istifadə edir, amma Python istifadə etməyi asanlaşdıran bir Raspberry Pi istifadə edirəm.

3. Raspberry Pi 3 Model B istifadə edirəm.

4. RPi -ni Lego ilə birləşdirmək üçün Dexter Industries -dən BrickPi3 istifadə edirəm. BrickPi, Raspberry Pi -yə bağlanır və birlikdə LEGO Mindstorms NXT və ya EV3 Brick -i əvəz edir.

Lego Digital Designer faylınız olduqda, LEGO parçalarını əldə etmək məsələsi var. Kərpicləri birbaşa LEGO mağazasından əldə edə bilərsiniz və bu, onları əldə etməyin ən ucuz yoludur. Ancaq ehtiyacınız olan hər şeyə sahib olmayacaqlar və kərpiclərin gəlməsi bir neçə həftə və ya daha çox çəkə bilər.

Rebrickable -dan da istifadə edə bilərsiniz: bir hesab açın, LDD faylını yükləyin və satıcıların siyahısını əldə edin.

Başqa bir yaxşı mənbə Bricklinkdir.

Addım 3: Robotu hərəkətə gətirən proqram

Bütün kod Python 2 -də yazılmışdır.

  1. Dexter Industries, EV3 mühərriklərinin hərəkətini dəstəkləmək üçün kod təqdim edir. Bu, BrickPi3 ilə gəlir.
  2. Mən mühərrikləri şahmat fiqurlarını hərəkət etdirəcək şəkildə hərəkət etdirmək üçün kodu verirəm!
  3. Şahmat mühərriki hər insanı məğlub edə biləcək Stockfishdir! "Stockfish, dünyanın ən güclü şahmat mühərriklərindən biridir. Həm də ən yaxşı insan şahmat qrossmeysterlərindən qat -qat güclüdür."
  4. Şahmat mühərrikini idarə edən, bir hərəkətin etibarlı olduğunu təsdiq edən kod ChessBoard.py
  5. Bununla əlaqə qurmaq üçün https://chess.fortherapy.co.uk saytından bəzi kodlardan istifadə edirəm.
  6. Mənim kodum (yuxarıdakı 2 -də) bundan sonra interfeys yaradır!

Addım 4: İnsan Hərəkətini Tanıyan Proqram

Oyunçu hərəkət etdikdən sonra kamera bir şəkil çəkir. Kod, şahmat taxtasının sonrakı görüntüyə tam uyğun olması üçün bunu əkir və döndürür. Şahmat taxtasının meydanları kvadrat görünməlidir! Lövhənin kənarları lövhənin mərkəzindən daha uzaq olduğundan görüntüdə təhrif var. Bununla birlikdə, kamera kifayət qədər uzaqdır ki, kəsildikdən sonra bu təhrif əhəmiyyətli deyil. Robot kompüterin hərəkətindən sonra bütün parçaların harada olduğunu bildiyindən, insanın hərəkət etdikdən sonra edilməsi lazım olan hər şey kodun aşağıdakı üç hal arasındakı fərqi izah edə bilməsidir:

  • Boş bir meydan
  • Hər növ qara parça
  • Hər növ ağ parça.

Bu, döküm və keçid də daxil olmaqla bütün halları əhatə edir.

Robot, insanın hərəkətinin düzgün olduğunu yoxlayır və əgər olmadıqda onlara xəbər verir! İnsan oyunçusunun bir piyonu kraliça olmayan bir şəxs olaraq tanıtması halları əhatə olunmur. Oyunçu daha sonra təqdim olunan parçanın nə olduğunu robota deməlidir.

İndi görüntünü şahmat taxtası meydanları baxımından nəzərdən keçirə bilərik.

İlkin lövhədə bütün ağ və qara parçaların harada olduğunu və boş kvadratların harada olduğunu bilirik.

Boş kvadratların rəngləri işgal edilmiş kvadratlara nisbətən daha az dəyişir. Hər bir kvadrat üçün hər bir kvadrat üçün üç RGB rənginin hər biri üçün standart sapmanı hesablayırıq (meydanın sərhədlərinə yaxın olanlar istisna olmaqla). Hər hansı bir boş kvadrat üçün maksimum standart sapma, hər hansı bir işğal edilmiş kvadrat üçün minimum standart sapmadan çox azdır və bu, sonrakı oyunçu hərəkətindən sonra hansı meydanların boş olduğunu təyin etməyə imkan verir.

Boş və işğal olunmuş kvadratlar üçün eşik dəyərini təyin edərək, indi işğal olunmuş kvadratlar üçün parça rəngini təyin etməliyik:

İlkin lövhədə, hər bir ağ kvadrat üçün, R, G, B hər biri üçün, piksellərinin orta (orta) dəyərini hesablayırıq (kvadratın sərhədlərinə yaxın olanlar istisna olmaqla). Hər hansı bir ağ kvadrat üçün bu vasitələrin minimumu, hər hansı bir qara kvadratdakı vasitələrin maksimumundan çoxdur və buna görə də işğal olunmuş meydanlar üçün parça rəngini təyin edə bilərik. Daha əvvəl də qeyd edildiyi kimi, insan oyunçusunun hərəkətinin nə olduğunu müəyyən etmək üçün etməli olduğumuz şey budur.

Şahmat taxtası parçaların rəngindən çox uzaq bir rəngə sahib olduqda alqoritmlər daha yaxşı işləyir! Robotumda parçalar ağ və qəhvəyi rəngdədir və şahmat taxtası əllə hazırlanmışdır və "qara" və "ağ" kvadratlar arasında az fərq olan açıq yaşıldır.

Düzəliş 17 Oktyabr 2018: İndi alqoritmin daha dəyişkən işıqlandırma şəraitində işləməsini təmin edən qəhvəyi parçaları mat qara rəngə boyadım.

Addım 5: İşıqlar, Kamera, Fəaliyyət

İşıqlar

Lövhənin üstünə düz bir işıq mənbəyinə ehtiyacınız var. Həqiqətən ucuz olanı amazon.co.uk saytından istifadə edirəm - və şübhəsiz ki, amazon.com -da oxşar bir şey var. Otaqda işıqlar söndü.

Yeniləmə: İndi daha işıqlı bir işıq mənbəyi vermək üçün iki işığım var

Kamera

Şübhəsiz ki, xüsusi Raspberry Pi kamera modulundan (uzun kabel ilə) istifadə edə bilərsiniz, amma mən RPi ilə işləyən bir USB kamera - "Logitech 960-001064 C525 HD Veb Kamera - Qara" istifadə edirəm. Bir qüllə tikərək və ya möhkəm bir şəkildə düzəltmək üçün bir yerə sahib olaraq kameranın lövhəyə görə hərəkət etməməsini təmin etməlisiniz. Həndəsi təhrifləri azaltmaq üçün kameranın lövhədən kifayət qədər yüksək olması lazımdır. Kameram lövhədən 58 sm yuxarıdadır.

Yeniləmə: İndi daha etibarlı hesab etdiyim üçün HP Webcam HD 2300 -ə üstünlük verirəm.

Cədvəl

Güclü birinə ehtiyacınız var. Mən bunu aldım. Bunun üzərinə, arabanın hərəkət etdiyi zaman robotun ətrafa tullanmasını dayandırmaq üçün bir sıra MDF kvadratım olduğunu görə bilərsiniz. Kameranı lövhədə eyni vəziyyətdə saxlamaq yaxşı bir fikirdir!

Klaviatura

RPi -nin ilk qurulması üçün USB klaviatura lazımdır. Və kodu inkişaf etdirmək üçün istifadə edirəm. Robotun klaviaturaya ehtiyacı olan tək şey proqramı işə salmaq və şahmat saatını vurmağı simulyasiya etməkdir. Bunlardan birini aldım. Ancaq həqiqətən, yalnız bir siçana və ya RPi ilə əlaqəli GPIO düyməsinə ehtiyacınız var

Ekran

İnkişaf üçün böyük bir ekran istifadə edirəm, ancaq robotun ehtiyac duyduğu tək şey, hərəkətinizin etibarsız olduğunu, yoxlamaq və s. Deməkdir. Bunlardan birini aldım, amazon.com saytında da var.

Robot ekran tələb etmək əvəzinə, bu ifadələri danışacaq! Bunu mətni burada təsvir edildiyi kimi kodu istifadə edərək nitqə çevirərək və kiçik bir dinamik əlavə edərək etdim. ("Hamburger mini dinamikindən" istifadə edirəm).

Robotun söylədiyi ifadələr:

  • Yoxlayın!
  • Dama matçı
  • Yanlış hərəkət
  • Qazandın!
  • Durğunluq
  • Üç dəfə təkrarlamaqla çəkin
  • 50 hərəkət qaydası ilə çəkin

Şahmatdakı əlli hərəkət qaydası, bir oyunçunun son əlli hərəkətdə heç bir ələ keçirilməməsi və heç bir piyada hərəkət etməməsi halında heç-heçə tələb edə biləcəyini bildirir (bu məqsədlə "hərəkət" öz növbəsini tamamlayan bir oyunçudan ibarətdir. rəqib növbəsini tamamlayır).

Robotun yuxarıdakı qısa "axmaq yoldaşı" videosunda danışdığını eşidə bilərsiniz (səsinizi kifayət qədər yüksək çevirsəniz)!

Addım 6: Proqramı necə əldə etmək olar

1. Balıq balığı

Raspi -ni RPi -də işləsəniz, Stockfish 7 mühərrikindən istifadə edə bilərsiniz - pulsuzdur. Sadəcə qaç:

sudo apt-get stockfish yükləyin

2. ChessBoard.py

Bunu buradan alın.

3. https://chess.fortherapy.co.uk/home/a-wooden-chess… əsasında kod

Kodumla birlikdə gəlir.

4. BrickPi3 üçün Python sürücüləri:

Bunları buradan alın.

5. Yuxarıdakı bütün kodları çağıran və robotun hərəkət etməsini təmin edən kodum və görmə kodum.

Şərh yazaraq bunu məndən alın və cavab verəcəm.

Tövsiyə: