İçindekiler:

LEGO ve Raspberry Pi ile Yapılmış Satranç Robotu: 6 Adım
LEGO ve Raspberry Pi ile Yapılmış Satranç Robotu: 6 Adım

Video: LEGO ve Raspberry Pi ile Yapılmış Satranç Robotu: 6 Adım

Video: LEGO ve Raspberry Pi ile Yapılmış Satranç Robotu: 6 Adım
Video: Satranç Oynayan Robot 2024, Kasım
Anonim
Image
Image

Bu satranç robotuyla arkadaşlarınızı şaşırtın!

Daha önce LEGO robotları yaptıysanız ve en azından temel düzeyde bilgisayar programlama ve Linux bilgisine sahipseniz, inşa etmek çok zor değil.

Robot kendi hareketlerini yapar ve insan oyuncunun hareketini belirlemek için görsel tanıma kullanır.

Bu robottaki yeni şeylerden biri, hareket tanıma kodudur. Bu görüntü kodu, diğer birçok şekilde oluşturulmuş satranç robotları için de kullanılabilir (örneğin, Lynxmotion robotik kolunu kullanan ChessRobot'um gibi).

Özel bir satranç tahtası, saz anahtarı veya herhangi bir şey gerekmez (insanın hareketi görsel tanıma ile belirlenir).

Kodum kişisel kullanım için kullanılabilir.

Adım 1: Gereksinimler

Işıklar kamera motor!
Işıklar kamera motor!

Tüm kod, diğer şeylerin yanı sıra bir Raspberry Pi üzerinde çalışacak olan Python'da yazılmıştır.

Raspberry Pi, ekrana ve klavyeye takılabilen kredi kartı boyutunda bir bilgisayardır. Elektronik projelerde ve robotikte ve masaüstü bilgisayarınızın yaptığı birçok şey için kullanılabilecek ucuz (yaklaşık 40 $), yetenekli küçük bir bilgisayardır.

Robotum bir Ahududu Pi ve Lego kullanıyor. RPi ve Lego Mindstorms EV3 motorları ve sensörleri arasındaki donanım arayüzü, Dexter Industries'den BrickPi3 tarafından sağlanmaktadır.

Lego yapısı, Lego Mindstorms işlemcisi yerine bir RPI kullanmak için modlar da dahil olmak üzere, benim tarafımdan değiştirilen Darrous Hadi'nin "Charlie the Chess Robot" a dayanmaktadır. Lego Mindstorms EV3 motorları ve sensörleri kullanılmaktadır.

Ayrıca bir masaya, kameraya, aydınlatmaya, klavyeye, ekrana ve işaretleme aygıtına (örneğin fare) ihtiyacınız olacak.

Ve tabii ki, satranç taşları ve bir tahta.

Tüm bunları sonraki adımlarda daha ayrıntılı olarak açıklayacağım.

2. Adım: Donanım Yapısı

Image
Image

Daha önce belirttiğim gibi, vizyon kodunun kalbi çeşitli yapılarla çalışacak.

Robotumu Darrous Hadi'nin "Charlie the Chess Robot" (EV3 versiyonu) üzerine kurdum, o sayfadaki bilgiler yapım talimatlarının nasıl alınacağını söylüyor. Parça listesi burada.

Robotu birkaç şekilde değiştirdim.

1. kapmak. Bu benim için işe yaramadı. Dişliler kaydı, ben de bunu önlemek için ek Lego parçaları ekledim. Ve sonra vinç indirildiğinde genellikle sıkışıyordu, bu yüzden bunu önlemek için bir Watt'ın bağlantısı ekledim.

Yukarıda, değiştirilmiş bağlantıyı gösteren kapmak hareket halindedir.

2. Orijinal yapı Lego Mindstorms EV3 işlemciyi kullanıyor, ancak Python'u kullanmayı kolaylaştıran bir Raspberry Pi kullanıyorum.

3. Raspberry Pi 3 Model B kullanıyorum.

4. RPi'yi Lego'ya bağlamak için Dexter Industries'den BrickPi3 kullanıyorum. BrickPi, Raspberry Pi'ye bağlanır ve birlikte LEGO Mindstorms NXT veya EV3 Brick'in yerini alır.

Lego Digital Designer dosyasına sahip olduğunuzda, o zaman LEGO parçalarını alma meselesi var. Tuğlaları doğrudan LEGO mağazasından temin edebilirsiniz ve bu, onları elde etmenin en ucuz yoludur. Ancak, ihtiyacınız olan her şeye sahip olmayacaklar ve tuğlaların gelmesi birkaç hafta veya daha uzun sürebilir.

Rebrickable'ı da kullanabilirsiniz: bir hesap açın, LDD dosyasını yükleyin ve bundan satıcı listesini alın.

Bir başka iyi kaynak da Bricklink.

Adım 3: Robotu Hareket Ettiren Yazılım

Tüm kod Python 2'de yazılmıştır.

  1. Dexter Industries, EV3 motorlarının vb. hareket ettirilmesini desteklemek için kod sağlar. Bu, BrickPi3 ile birlikte gelir.
  2. Motorları satranç taşlarını hareket ettirecek şekilde hareket ettirmek için kodu veriyorum!
  3. Satranç motoru Stockish - her insanı yenebilir! "Stockfish dünyanın en güçlü satranç motorlarından biridir. Aynı zamanda en iyi insan satranç ustalarından çok daha güçlüdür."
  4. Satranç motorunu çalıştıran, bir hamlenin geçerli olduğunu doğrulayan kod ChessBoard.py'dir.
  5. Bununla arayüz oluşturmak için https://chess.fortherapy.co.uk adresinden bazı kodlar kullanıyorum.
  6. Kodum (yukarıda 2'de) daha sonra bununla arayüz oluşturur!

Adım 4: İnsanın Hareketini Tanıma Yazılımı

Oyuncu hamlesini yaptıktan sonra kamera bir fotoğraf çeker. Kod, satranç tahtasının sonraki görüntüye tam olarak uyması için bunu kırpar ve döndürür. Satranç tahtası kareleri kare görünmelidir!. Tahtanın kenarları, kameranın merkezinden daha uzakta olduğu için görüntüde bozulma var. Ancak, kamera yeterince uzakta olduğundan, kırptıktan sonra bu bozulma önemli değildir. Robot, bilgisayar hareket ettikten sonra tüm parçaların nerede olduğunu bildiği için, insan bir hamle yaptıktan sonra yapılması gereken tek şey, kodun aşağıdaki üç durum arasındaki farkı söyleyebilmesidir:

  • Boş bir kare
  • Herhangi bir siyah parça
  • Herhangi bir beyaz parça.

Bu, rok ve en passant dahil tüm durumları kapsar.

Robot, insanın hareketinin doğru olup olmadığını kontrol eder ve yanlışsa onları bilgilendirir! Kapsanmayan tek durum, insan oyuncunun bir piyonu vezir olmayana terfi ettirdiği durumdur. Oyuncu daha sonra robota terfi edilen parçanın ne olduğunu söylemelidir.

Şimdi görüntüyü satranç tahtası kareleri olarak düşünebiliriz.

İlk tahta kurulumunda tüm beyaz ve siyah parçaların nerede olduğunu ve boş karelerin nerede olduğunu biliyoruz.

Boş kareler, dolu karelere göre çok daha az renk çeşitliliğine sahiptir. Her kare için tüm pikselleri boyunca (karenin sınırlarına yakın olanlar dışında) üç RGB renginin her biri için standart sapmayı hesaplıyoruz. Herhangi bir boş kare için maksimum standart sapma, dolu herhangi bir kare için minimum standart sapmadan çok daha azdır ve bu, sonraki bir oyuncu hamlesinden sonra hangi karelerin boş olduğunu belirlememizi sağlar.

Boş ve dolu kareler için eşik değerini belirledikten sonra, şimdi dolu kareler için parça rengini belirlememiz gerekiyor:

İlk tahtada her beyaz kare için, R, G, B'nin her biri için piksellerinin ortalama (ortalama) değerini (karenin sınırlarına yakın olanlar dışında) hesaplarız. Herhangi bir beyaz kare için bu ortalamaların minimumu, herhangi bir siyah karedeki araçların maksimumundan daha büyüktür ve böylece dolu kareler için parça rengini belirleyebiliriz. Daha önce de belirtildiği gibi, insan oyuncunun hamlesinin ne olduğunu belirlemek için yapmamız gereken tek şey bu.

Satranç tahtasının rengi, taşların renginden çok uzaksa, algoritmalar en iyi sonucu verir! Robotumda, parçalar kirli beyaz ve kahverengidir ve satranç tahtası karttan el yapımıdır ve "siyah" ve "beyaz" kareler arasında çok az fark olan açık yeşildir.

Edit 17 Ekim 2018: Algoritmanın daha değişken aydınlatma koşullarında çalışmasını sağlayan kahverengi parçaları mat siyaha boyadım.

Adım 5: Işıklar, Kamera, Eylem

Işıklar

Tahtanın üzerine yerleştirilmiş eşit bir ışık kaynağına ihtiyacınız var. Ben amazon.co.uk'den gerçekten ucuz olan bunu kullanıyorum - ve şüphesiz amazon.com'da benzer bir şey var. Oda ışıkları kapalıyken.

Güncelleme: Artık daha eşit bir ışık kaynağı sağlamak için iki ışığım var

Kamera

Hiç şüphe yok ki özel Raspberry Pi kamera modülünü (uzun bir kablo ile) kullanabilirsiniz, ancak ben RPi ile çalışan bir USB kamera - "Logitech 960-001064 C525 HD Webcam - Black" - kullanıyorum. Bir kule inşa ederek veya sağlam bir şekilde sabitleyecek bir yere sahip olarak kameranın tahtaya göre hareket etmemesini sağlamalısınız. Geometrik bozulmayı azaltmak için kameranın panonun oldukça üzerinde olması gerekir. Fotoğraf makinem tahtanın 58 cm yukarısında.

Güncelleme: Artık daha güvenilir bulduğum için HP Webcam HD 2300'ü tercih ediyorum.

Tablo

Sağlam birine ihtiyacın var. Bunu aldım. Bunun üzerine, araba hareket ettiğinde robotun zıplamasını durdurmak için bazı şeylerle birlikte bir kare MDF'ye sahip olduğumu görebilirsiniz. Kamerayı tahta üzerinde aynı konumda tutmak iyi bir fikirdir!

Tuş takımı

RPi'nin ilk kurulumu için bir USB klavyeye ihtiyacı vardır. Ve bunu kodu geliştirmek için kullanıyorum. Robotun klavyeye ihtiyacı olan tek şey programı başlatmak ve satranç saatini vurmayı simüle etmektir. Bunlardan birini aldım. Ama gerçekten, yalnızca RPi'ye bağlı bir fareye veya GPIO'ya bağlı bir düğmeye ihtiyacınız var

Görüntülemek

Geliştirme için büyük bir ekran kullanıyorum, ancak robotun ihtiyaç duyduğu tek şey hareketinizin geçersiz olduğunu, kontrol edin vb.

Ancak bir gösterime ihtiyaç duymak yerine, robot bu cümleleri söyleyecek! Bunu, burada açıklandığı gibi kodu kullanarak metni konuşmaya dönüştürerek ve küçük bir hoparlör ekleyerek yaptım. ("Hamburger mini hoparlörü" kullanıyorum).

Robotun söylediği ifadeler:

  • Kontrol etmek!
  • Şah Mat
  • Geçersiz hareket
  • Kazandın!
  • çıkmaz
  • Üç kat tekrarla çizin
  • 50 hamle kuralıyla beraberlik

Satrançtaki elli hamle kuralı, bir oyuncunun son elli hamlede hiçbir piyon hareket ettirilmediği ve ele geçirilmediği takdirde beraberlik talep edebileceğini belirtir (bu amaçla bir "hamle", sırasını tamamlayan bir oyuncunun ardından Rakip sırasını tamamlıyor).

Yukarıdaki kısa "aptalın arkadaşı" videosunda robotun konuşmasını duyabilirsiniz (sesini oldukça açarsanız)!

Adım 6: Yazılım Nasıl Edinilir

1. Stok balığı

Raspbian'ı RPi'nizde çalıştırırsanız Stockish 7 motorunu kullanabilirsiniz - ücretsizdir. Sadece koş:

sudo apt-get install stockfish

2. ChessBoard.py

Bunu buradan al.

3. Kod

Kodumla birlikte geliyor.

4. BrickPi3 için Python sürücüleri:

Bunları buradan alın.

5. Yukarıdaki tüm kodları çağıran ve robotun hamle yapmasını sağlayan kodum ve görüntü kodum.

Bir yorum göndererek bunu benden alın, ben de cevap vereceğim.

Önerilen: