Talaan ng mga Nilalaman:

Chess Robot Ginawa Ng LEGO at Raspberry Pi: 6 Hakbang
Chess Robot Ginawa Ng LEGO at Raspberry Pi: 6 Hakbang

Video: Chess Robot Ginawa Ng LEGO at Raspberry Pi: 6 Hakbang

Video: Chess Robot Ginawa Ng LEGO at Raspberry Pi: 6 Hakbang
Video: Хитрая тюбитейка ► 8 Прохождение Red Dead Redemption 2 2024, Nobyembre
Anonim
Image
Image

Humanga ang iyong mga kaibigan sa chess robot na ito!

Hindi masyadong mahirap buuin kung nakagawa ka ng mga robot ng LEGO dati at kung mayroon kang hindi bababa sa isang elementarya na kaalaman sa pagprograma ng computer at Linux.

Gumagawa ang robot ng sarili nitong mga paggalaw, at gumagamit ng visual na pagkilala upang matukoy ang paglipat ng manlalaro.

Ang isa sa mga bagay na nobela sa robot na ito ay ang code para sa pagkilala sa paglipat. Ang vision code na ito ay magagamit din para sa mga robot ng chess na binuo sa maraming iba pang mga paraan (tulad ng aking ChessRobot na gumagamit ng Lynxmotion robotic arm).

Walang mga espesyal na chess board, switch ng tambo o kung anuman ang kinakailangan (dahil ang paglipat ng tao ay natutukoy ng pagkilala sa visual).

Ang aking code ay magagamit para sa personal na paggamit.

Hakbang 1: Mga Kinakailangan

Mga ilaw, Camera, Aksyon!
Mga ilaw, Camera, Aksyon!

Ang lahat ng code ay nakasulat sa Python, na tatakbo, bukod sa iba pang mga bagay, isang Raspberry Pi.

Ang Raspberry Pi ay isang computer na may sukat sa credit-card na maaaring mai-plug sa isang screen at isang keyboard. Ito ay isang mura (sa paligid ng $ 40), may kakayahang maliit na computer na maaaring magamit sa mga proyekto sa electronics at robotics, at para sa marami sa mga bagay na ginagawa ng iyong desktop PC.

Gumagamit ang aking robot ng isang Raspberry Pi, at Lego. Ang interface ng hardware sa pagitan ng RPi at ng Lego Mindstorms EV3 na mga motor at sensor ay ibinibigay ng BrickPi3 mula sa Dexter Industries.

Ang Lego build ay batay sa "Charlie the Chess Robot", ni Darrous Hadi, binago ko, kasama ang mga mod na gumamit ng isang RPi, kaysa sa Lego Mindstorms processor. Ginagamit ang Lego Mindstorms EV3 na mga motor at sensor.

Kakailanganin mo rin ang isang mesa, isang camera, ilaw, isang keyboard, screen at tumuturo na aparato (hal. Mouse).

At syempre, mga piraso ng chess at isang board.

Inilalarawan ko ang lahat ng mga bagay na ito nang mas detalyado sa mga kasunod na hakbang.

Hakbang 2: Ang Hardware Build

Image
Image

Tulad ng dati kong ipinahiwatig, ang puso ng vision code ay gagana sa iba't ibang mga build.

Ibinatay ko ang aking robot sa "Charlie the Chess Robot" (bersyon na EV3) ni Darrous Hadi, ang impormasyon sa pahinang iyon ay nagsasabi kung paano makukuha ang mga tagubilin sa pagbuo. Narito ang listahan ng mga bahagi.

Binago ko ang robot sa isang pares ng mga paraan.

1. Ang mang-agaw. Hindi ito gumana sa akin. Nadulas ang mga gears, kaya nagdagdag ako ng karagdagang mga piraso ng Lego upang maiwasan iyon. At pagkatapos kapag ang crane ay ibinaba madalas itong masikip, kaya nagdagdag ako ng isang link ng Watt upang maiwasan iyon.

Sa itaas ay ang tagahawak sa pagkilos, ipinapakita ang binagong linkage.

2. Ang orihinal na pagbuo ay gumagamit ng Lego Mindstorms EV3 processor, ngunit gumagamit ako ng isang Raspberry Pi, na ginagawang mas madaling gamitin ang Python.

3. Gumagamit ako ng isang Raspberry Pi 3 Model B.

4. Upang mai-interface ang RPi sa Lego, gumagamit ako ng BrickPi3 mula sa Dexter Industries. Ang BrickPi ay nakakabit sa Raspberry Pi at magkasama silang pinalitan ang LEGO Mindstorms NXT o EV3 Brick.

Kapag mayroon kang file ng Lego Digital Designer, pagkatapos ay may tanong ng pagkuha ng mga piraso ng LEGO. Maaari kang makakuha ng mga brick na direkta mula sa LEGO shop, at ito ang pinakamurang paraan upang makuha ang mga ito. Gayunpaman, hindi sila magkakaroon ng lahat ng kailangan mo, at ang mga brick ay maaaring tumagal ng ilang linggo o higit pa upang makarating.

Maaari mo ring gamitin ang Rebrickable: magbukas ng isang account, i-upload ang file na LDD at mula doon makakuha ng isang listahan ng mga nagbebenta.

Ang isa pang mahusay na mapagkukunan ay Bricklink.

Hakbang 3: Ang Software Alin na Gumagawa sa Paglipat ng Robot

Ang lahat ng code ay nakasulat sa Python 2.

  1. Ang Dexter Industries ay nagbibigay ng code upang suportahan ang paglipat ng mga motor na EV3, atbp. Kasama ito sa BrickPi3.
  2. Nagbibigay ako ng code upang ilipat ang mga motor sa isang paraan upang ilipat ang mga piraso ng chess!
  3. Ang chess engine ay Stockfish - na maaaring talunin ang sinumang tao! "Ang Stockfish ay isa sa pinakamalakas na makina ng chess sa buong mundo. Malakas din ito kaysa sa pinakamahusay na mga grandmaster ng chess ng tao."
  4. Ang code upang himukin ang chess engine, patunayan na ang isang paglipat ay wasto, at iba pa ay ChessBoard.py
  5. Gumagamit ako ng ilang code mula sa https://chess.fortherapy.co.uk upang mai-interface iyon.
  6. Ang aking code (sa 2 sa itaas) pagkatapos ay interface sa na!

Hakbang 4: Ang Software para sa Pagkilala sa Paglipat ng Tao

Matapos ang paglipat ng manlalaro, kumukuha ng larawan ang camera. Ang mga pananim ng code at paikutin ito upang ang chessboard ay eksaktong akma sa kasunod na imahe. Ang mga parisukat ng chessboard ay kailangang magmukha sa parisukat !. Mayroong pagbaluktot sa imahe dahil ang mga gilid ng board ay mas malayo sa camera kaysa sa gitna ng board. Gayunpaman, ang camera ay sapat na malayo upang, pagkatapos ng pag-crop, ang pagbaluktot na ito ay hindi makabuluhan. Dahil alam ng robot kung saan ang lahat ng mga piraso ay pagkatapos ng paglipat ng computer, kung gayon ang dapat gawin matapos ang paglipat ng tao ay para masabi ng code ang pagkakaiba sa pagitan ng mga sumusunod na tatlong mga kaso:

  • Isang walang laman na parisukat
  • Isang itim na piraso ng anumang uri
  • Isang puting piraso ng anumang uri.

Saklaw nito ang lahat ng mga kaso, kabilang ang castling at en passant.

Sinusuri ng robot kung tama ang paglipat ng tao, at ipinaalam sa kanila kung hindi! Ang tanging kaso na hindi sakop ay kung saan ang manlalaro ng tao ay nagtataguyod ng isang pangan sa isang hindi reyna. Pagkatapos ay sasabihin ng manlalaro sa robot kung ano ang na-promote na piraso.

Maaari naming isaalang-alang ang imahe sa mga tuntunin ng mga parisukat na chessboard.

Sa paunang pag-set up ng board alam namin kung nasaan ang lahat ng mga puti at itim na piraso at kung nasaan ang mga walang laman na parisukat.

Ang mga walang laman na parisukat ay may mas kaunting pagkakaiba-iba ng kulay kaysa sa sinakop na mga parisukat. Kinukuwenta namin ang karaniwang paglihis para sa bawat isa sa tatlong mga kulay ng RGB para sa bawat parisukat sa lahat ng mga pixel nito (maliban sa mga malapit sa mga hangganan ng parisukat). Ang maximum na standard na paglihis para sa anumang walang laman na parisukat ay mas mababa kaysa sa minimum na karaniwang paglihis para sa anumang sinasakop na parisukat, at pinapayagan kaming, pagkatapos ng isang kasunod na paglipat ng manlalaro, upang matukoy kung aling mga parisukat ang walang laman.

Natutukoy ang halaga ng threshold para sa walang laman kumpara sa mga inookupahan na mga parisukat, kailangan namin ngayon upang matukoy ang kulay ng piraso para sa mga inookupahan na mga parisukat:

Sa paunang board kinakalkula namin ang bawat puting parisukat, para sa bawat R, G, B, ang average (average) na halaga ng mga pixel nito (maliban sa mga malapit sa mga hangganan ng parisukat). Ang minimum ng mga pamamaraang ito para sa anumang puting parisukat ay mas malaki kaysa sa maximum na mga paraan sa anumang itim na parisukat, at sa gayon maaari naming matukoy ang kulay ng piraso para sa mga sinasakop na mga parisukat. Tulad ng nakasaad dati, ito lang ang kailangan nating gawin upang matukoy kung ano ang paglipat ng manlalaro.

Ang mga algorithm ay pinakamahusay na gagana kung ang chessboard ay may isang kulay na malayo sa kulay ng mga piraso! Sa aking robot, ang mga piraso ay maputi at kayumanggi, at ang chess board ay gawa sa kamay sa card, at isang ilaw na berde na may kaunting pagkakaiba sa pagitan ng "itim" at "puting" mga parisukat.

I-edit ang 17 Oktubre 2018: Ipininta ko ngayon ang mga kayumanggi na piraso ng matt black, na ginagawang gumana ang algorithm sa ilalim ng mas maraming variable na mga kondisyon sa pag-iilaw.

Hakbang 5: Mga Ilaw, Camera, Pagkilos

Mga ilaw

Kailangan mo ng pantay na mapagkukunan ng ilaw na nakalagay sa pisara. Ginagamit ko ang isang ito, na talagang mura, mula sa amazon.co.uk - at walang alinlangan na may katulad na bagay sa amazon.com. Sa mga ilaw ng silid pinatay.

Update: Mayroon na akong dalawang ilaw, upang magbigay ng isang mas pantay na mapagkukunan ng ilaw

Kamera

Walang alinlangan maaari mong gamitin ang espesyal na module ng camera ng Raspberry Pi (na may isang mahabang cable), ngunit gumagamit ako ng isang USB camera - "Logitech 960-001064 C525 HD Webcam - Black" - na gumagana sa RPi. Kailangan mong tiyakin na ang camera ay hindi gumagalaw na may paggalang sa board, sa pamamagitan ng pagbuo ng isang tower o pagkakaroon ng isang lugar upang ayusin ito nang matatag. Ang camera ay kailangang medyo mataas sa itaas ng board, upang mabawasan ang pagbaluktot ng geometriko. Mayroon akong camera na 58 cm sa itaas ng board.

Update: Mas gusto ko ngayon ang HP Webcam HD 2300, dahil nakikita kong mas maaasahan ito.

Talahanayan

Kailangan mo ng isang matibay. Binili ko ang isang ito. Sa itaas ng na maaari mong makita na mayroon akong isang parisukat ng MDF, na may ilang mga bagay upang ihinto ang robot na tumatalon sa paligid kapag gumagalaw ang troli. Magandang ideya na panatilihin ang camera sa parehong posisyon sa board!

Keyboard

Ang RPi ay nangangailangan ng isang USB keyboard para sa unang pag-set up nito. At ginagamit ko iyon para sa pagbuo ng code. Ang tanging bagay na kailangan ng robot ng isang keyboard ay upang simulan ang programa at upang gayahin ang pagpindot sa orasan ng chess. Nakuha ko ang isa sa mga ito. Ngunit talaga, kailangan mo lamang ng isang mouse o isang pindutan na GPIO-konektado sa RPi

Ipakita

Gumagamit ako ng isang malaking screen para sa pag-unlad, ngunit ang tanging mga bagay na kailangan ng robot ay upang sabihin sa iyo na ang iyong paglipat ay hindi wasto, suriin, atbp. Nakuha ko ang isa sa mga ito, magagamit din sa amazon.com.

Ngunit sa halip na mangangailangan ng isang display, sasabihin ng robot ang mga pariralang ito! Nagawa ko ito sa pamamagitan ng pag-convert ng teksto sa pagsasalita gamit ang code tulad ng inilarawan dito, at paglakip ng isang maliit na tagapagsalita. (Gumagamit ako ng isang "Hamburger mini speaker").

Mga parirala na sinasabi ng robot:

  • Suriin mo!
  • Checkmate
  • Di-wastong paglipat
  • Nanalo ka!
  • Patahimikin
  • Iguhit sa pamamagitan ng tatlong beses na pag-uulit
  • Gumuhit ng 50 paggalaw ng panuntunan

Ang panuntunang limampung paglipat sa chess ay nagsasaad na ang isang manlalaro ay maaaring mag-angkin ng isang draw kung walang nakuha na nagawa at walang pawn na inilipat sa huling limampung galaw (para sa layuning ito ang isang "paglipat" ay binubuo ng isang manlalaro na nakumpleto ang kanilang turn na sinundan ng kalaban na kinukumpleto ang kanilang tira).

Maaari mong marinig ang robot na nagsasalita sa maikling video na "kabobo ng tanga" sa itaas (kung pinapalaki mo ang iyong tunog)!

Hakbang 6: Paano Makukuha ang Software

1. Stockfish

Kung nagpatakbo ka ng Raspbian sa iyong RPi maaari mong gamitin ang engine ng Stockfish 7 - libre ito. Patakbuhin lang:

sudo apt-get install stockfish

2. ChessBoard.py

Kunin mo 'to.

3. Code batay sa

Kasama ang aking code.

4. Mga driver ng Python para sa BrickPi3:

Kunin ang mga ito dito.

5. Ang aking code na nagsasabi sa lahat ng code sa itaas at kung aling nakakakuha ng robot upang gumalaw, at ang aking code sa paningin.

Kunin ito sa akin sa pamamagitan ng pag-post ng isang puna, at tutugon ako.

Inirerekumendang: