Բովանդակություն:

LEGO և Raspberry Pi- ով պատրաստված շախմատային ռոբոտ ՝ 6 քայլ
LEGO և Raspberry Pi- ով պատրաստված շախմատային ռոբոտ ՝ 6 քայլ

Video: LEGO և Raspberry Pi- ով պատրաստված շախմատային ռոբոտ ՝ 6 քայլ

Video: LEGO և Raspberry Pi- ով պատրաստված շախմատային ռոբոտ ՝ 6 քայլ
Video: SCP-261 Пан-мерное Торговый и эксперимент Войти 261 объявление Де + полный + 2024, Հուլիսի
Anonim
Image
Image

Amazարմացրեք ձեր ընկերներին այս շախմատային ռոբոտի միջոցով:

Շատ դժվար չէ կառուցել, եթե նախկինում պատրաստել եք LEGO ռոբոտներ և եթե ունեք համակարգչային ծրագրավորման և Linux- ի առնվազն տարրական գիտելիքներ:

Ռոբոտը կատարում է իր սեփական քայլերը և օգտագործում է տեսողական ճանաչումը `որոշելու համար, թե ով է մարդու խաղը:

Այս ռոբոտի վեպերից մեկը շարժման ճանաչման ծածկագիրն է: Տեսողության այս ծածկագիրը կարող է օգտագործվել նաև շատ այլ եղանակներով կառուցված շախմատային ռոբոտների համար (օրինակ ՝ իմ ChessRobot- ը օգտագործելով Lynxmotion ռոբոտային թևը):

Ոչ մի հատուկ շախմատի տախտակ, եղեգի անջատիչ կամ ինչ որ պահանջվում է (քանի որ մարդու քայլը որոշվում է տեսողական ճանաչմամբ):

Իմ կոդը հասանելի է անձնական օգտագործման համար:

Քայլ 1: Պահանջներ

Լույսեր, տեսախցիկ, գործողություն
Լույսեր, տեսախցիկ, գործողություն

Ամբողջ ծածկագիրը գրված է Python- ում, որը, ի թիվս այլ բաների, կաշխատի Raspberry Pi- ով:

Raspberry Pi- ն վարկային քարտի չափի համակարգիչ է, որը կարող է միացվել էկրանի և ստեղնաշարի հետ: Դա էժան (մոտ $ 40), ունակ փոքր համակարգիչ է, որը կարող է օգտագործվել էլեկտրոնիկայի նախագծերում և ռոբոտաշինությունում, և այն շատ բաների համար, ինչ անում է ձեր աշխատասեղանը:

Իմ ռոբոտը օգտագործում է Raspberry Pi և Lego: RPi- ի և Lego Mindstorms EV3 շարժիչների և տվիչների միջև ապարատային ինտերֆեյսը տրամադրվում է BrickPi3- ի կողմից Dexter Industries- ից:

Lego- ի կառուցվածքը հիմնված է «Չարլի շախմատային ռոբոտի» վրա, Դարուս Հադիի կողմից, իմ կողմից փոփոխված, ներառյալ RPi- ի օգտագործման ռեժիմներ, այլ ոչ թե Lego Mindstorms պրոցեսոր: Օգտագործվում են Lego Mindstorms EV3 շարժիչներ և տվիչներ:

Ձեզ նույնպես պետք է սեղան, տեսախցիկ, լուսավորություն, ստեղնաշար, էկրան և մատնանշող սարք (օրինակ ՝ մկնիկ):

Եվ, իհարկե, շախմատի խաղաքարեր և տախտակ:

Այս բոլոր բաները ես ավելի մանրամասն նկարագրում եմ հետագա քայլերում:

Քայլ 2: Սարքաշարի կառուցում

Image
Image

Ինչպես արդեն նշեցի, տեսողության կոդի սիրտը կաշխատի տարբեր կառուցվածքներով:

Ես իմ ռոբոտին հիմնեցի Դարուս Հադիի «Չարլի շախմատային ռոբոտը» (EV3 տարբերակ) վրա, այդ էջի տեղեկատվությունը ասում է, թե ինչպես ստանալ կառուցման հրահանգները: Մասերի ցանկը ՝ այստեղ:

Ես փոխեցի ռոբոտը մի քանի եղանակով:

1. Գրավողը: Սա ինձ մոտ չաշխատեց: Դարպասները սահեցին, ուստի ես դա ավելացնելու համար ավելացրեցի Լեգոյի լրացուցիչ կտորներ: Եվ երբ կռունկը իջեցվում էր, այն հաճախ խցանում էր, ուստի ես դա ավելացնելու համար ավելացրեցի Watt- ի կապը:

Վերևում գործող գրավիչն է ՝ ցույց տալով փոփոխված կապը:

2. Սկզբնական կառուցվածքում օգտագործվում է Lego Mindstorms EV3 պրոցեսորը, բայց ես օգտագործում եմ Raspberry Pi- ն, ինչը հեշտացնում է Python- ի օգտագործումը:

3. Ես օգտագործում եմ Raspberry Pi 3 Model B- ն:

4. RPi- ն Lego- ին միացնելու համար ես օգտագործում եմ BrickPi3 Dexter Industries- ից: BrickPi- ն ամրացվում է Raspberry Pi- ին և միասին դրանք փոխարինում են LEGO Mindstorms NXT կամ EV3 Brick- ին:

Երբ ունեք Lego Digital Designer ֆայլը, ապա LEGO կտորներ ստանալու հարց է առաջանում: Դուք կարող եք աղյուսներ ստանալ անմիջապես LEGO խանութից, և սա դրանք ձեռք բերելու ամենաէժան տարբերակն է: Այնուամենայնիվ, նրանք չեն ունենա այն ամենը, ինչ ձեզ հարկավոր է, և աղյուսների ժամանումը կարող է տևել մի քանի շաբաթ կամ ավելի:

Կարող եք նաև օգտագործել Rebrickable ՝ հաշիվ բացել, վերբեռնել LDD ֆայլը և դրանից ստանալ վաճառողների ցուցակ:

Մեկ այլ լավ աղբյուր է Bricklink- ը:

Քայլ 3. Softwareրագրակազմը, որը ստիպում է ռոբոտին շարժվել

Ամբողջ ծածկագիրը գրված է Python 2 -ում:

  1. Dexter Industries- ը կոդ է մատակարարում ՝ աջակցելու EV3 շարժիչները և այլն: Սա գալիս է BrickPi3- ի հետ:
  2. Ես տրամադրում եմ ծածկագիրը, որպեսզի շարժիչները շարժվեն այնպես, որ շարժվեն շախմատի խաղաքարերը:
  3. Շախմատային շարժիչը Stockfish- ն է, որը կարող է հաղթել ցանկացած մարդու: «Ստոկֆիշը աշխարհի ամենաուժեղ շախմատային շարժիչներից մեկն է: Այն նաև շատ ավելի ուժեղ է, քան շախմատի լավագույն մարդկային գրոսմայստերները»:
  4. Շախմատային շարժիչ վարելու, վավերացնելու, որ քայլը վավեր է և այլն, ChessBoard.py- ն է:
  5. Ես դրան միանալու համար օգտագործում եմ https://chess.fortherapy.co.uk- ի որոշ ծածկագիր:
  6. Իմ ծածկագիրը (վերը նշված 2 -ում) այնուհետև դրան միանում է:

Քայլ 4. Մարդու շարժը ճանաչելու ծրագրակազմ

Երբ խաղացողը կատարել է իր քայլը, տեսախցիկը լուսանկարում է: Կոդը կտրում և պտտում է այն այնպես, որ շախմատային տախտակը ճշգրիտ համապատասխանի հաջորդ պատկերին: Շախմատի տախտակները պետք է քառակուսի տեսք ունենան: Պատկերում աղավաղում կա, քանի որ տախտակի եզրերը տեսախցիկից ավելի հեռու են, քան տախտակի կենտրոնը: Այնուամենայնիվ, տեսախցիկը բավականաչափ հեռու է, որպեսզի կտրելուց հետո այս խեղաթյուրումն էական չլինի: Քանի որ ռոբոտը գիտի, թե որտեղ են գտնվում բոլոր կտորները համակարգչի տեղաշարժից հետո, ապա այն, ինչ պետք է անել մարդու կողմից քայլ կատարելուց հետո, այն է, որ ծածկագիրը կարողանա տարբերել հետևյալ երեք դեպքերի միջև.

  • Դատարկ հրապարակ
  • Սև կտոր ցանկացած տեսակի
  • Pieceանկացած տեսակի սպիտակ կտոր:

Սա ընդգրկում է բոլոր դեպքերը, ներառյալ castling- ը և en passant- ը:

Ռոբոտը ստուգում է, որ մարդու քայլը ճիշտ է, և տեղեկացնում է նրանց, եթե դա այդպես չէ: Միակ դեպքը, որը չի լուսաբանվում, այն է, երբ մարդ խաղացողը գրավ է դնում ոչ թագուհու վրա: Հետո խաղացողը պետք է ռոբոտին ասի, թե որն է գովազդվող կտորը:

Այժմ մենք կարող ենք պատկերը դիտարկել շախմատի տախտակի քառակուսիների առումով:

Տախտակի սկզբնական տեղադրման վրա մենք գիտենք, թե որտեղ են բոլոր սպիտակ և սև կտորները և որտեղ են դատարկ քառակուսիները:

Դատարկ քառակուսիների գույնը շատ ավելի քիչ է, քան զբաղեցրած քառակուսիները: Մենք հաշվարկում ենք յուրաքանչյուր քառակուսի RGB- ի երեք գույներից յուրաքանչյուրի համար ստանդարտ շեղումը իր բոլոր պիքսելներով (բացառությամբ քառակուսի սահմանների մոտ գտնվողների): Emptyանկացած դատարկ քառակուսի առավելագույն ստանդարտ շեղումը շատ ավելի փոքր է, քան ցանկացած զբաղեցրած քառակուսիի համար սահմանված ստանդարտ շեղումը, և դա թույլ է տալիս մեզ, խաղացողի հաջորդ քայլից հետո, որոշել, թե որ հրապարակներն են դատարկ:

Որոշելով դատարկ և զբաղեցված քառակուսիների շեմի արժեքը, այժմ մենք պետք է որոշենք կտորի գույնը զբաղված քառակուսիների համար.

Սկզբնական տախտակի վրա մենք հաշվարկում ենք յուրաքանչյուր սպիտակ քառակուսիի համար, R- ի, G- ի, B- ի յուրաքանչյուրի համար, նրա պիքսելների միջին (միջին) արժեքը (բացի քառակուսի սահմաններին մոտ գտնվողներից): Meansանկացած սպիտակ քառակուսի համար այդ միջոցների նվազագույնը մեծ է ցանկացած սև քառակուսի միջոցի առավելագույնից, ուստի մենք կարող ենք որոշել կտորների գույնը զբաղեցրած քառակուսիների համար: Ինչպես արդեն նշվեց, սա այն ամենն է, ինչ մենք պետք է անենք, որպեսզի որոշենք, թե որն է եղել խաղացողի քայլը:

Ալգորիթմներն ավելի լավ են աշխատում, եթե շախմատային տախտակն ունի գույն, որը շատ հեռու է խաղաքարերի գույնից: Իմ ռոբոտում խաղաքարերը սպիտակ են և շագանակագույն, իսկ շախմատային տախտակը ձեռքով պատրաստված է քարտով և բաց կանաչ է ՝ փոքր տարբերությամբ «սև» և «սպիտակ» քառակուսիների միջև:

Խմբագրել 17 հոկտեմբեր 2018. Այժմ ես ներկել եմ դարչնագույն կտորները սև, ինչը ստիպում է ալգորիթմին աշխատել ավելի փոփոխական լուսավորության պայմաններում:

Քայլ 5: Լույսեր, տեսախցիկ, գործողություն:

Լույսեր

Ձեզ հարկավոր է լույսի հավասար աղբյուր, որը տեղադրված է տախտակի վրա: Ես օգտագործում եմ այս մեկը, որն իսկապես էժան է, amazon.co.uk- ից - և անկասկած, նման բան կա նաև amazon.com- ում: Սենյակի լույսերն անջատված էին:

Թարմացում. Ես այժմ ունեմ երկու լույս, ավելի լուսավոր աղբյուր տալու համար

Տեսախցիկ

Անկասկած, դուք կարող եք օգտագործել Raspberry Pi ֆոտոխցիկի հատուկ մոդուլը (երկար մալուխով), բայց ես օգտագործում եմ USB տեսախցիկ `« Logitech 960-001064 C525 HD վեբ -տեսախցիկ - սև », որն աշխատում է RPi- ով: Դուք պետք է համոզվեք, որ տեսախցիկը չի շարժվում տախտակի նկատմամբ `աշտարակ կառուցելով կամ այն ամուր ամրացնելու տեղ ունենալով: Երկրաչափական աղավաղումը նվազեցնելու համար տեսախցիկը պետք է բավականին բարձր լինի տախտակից բարձր: Ես ունեմ իմ տեսախցիկը տախտակից 58 սմ բարձրության վրա:

Թարմացում. Ես այժմ նախընտրում եմ HP Webcam HD 2300- ը, քանի որ այն ավելի հուսալի եմ համարում:

Սեղան

Ձեզ անհրաժեշտ է ամուր մեկը: Ես գնել եմ այս մեկը: Դրա վերևում դուք կարող եք տեսնել, որ ես ունեմ MDF- ի քառակուսին, որոշ իրեր կարող են կանգնեցնել ռոբոտին ցատկելը, երբ տրոլեյբուսը շարժվում է: Լավ գաղափար է, որ տեսախցիկը տախտակի վրա նույն դիրքում պահի:

Ստեղնաշար

RPi- ին անհրաժեշտ է USB ստեղնաշար իր առաջին տեղադրման համար: Եվ ես դա օգտագործում եմ ծածկագիրը մշակելու համար: Միակ բանը, որի համար ռոբոտին անհրաժեշտ է ստեղնաշար, ծրագիրը սկսելն է և շախմատային ժամացույցին հարվածելը մոդելավորելը: Ես ստացել եմ սրանցից մեկը: Բայց իսկապես, ձեզ հարկավոր է միայն մկնիկ կամ RPi- ին միացված GPIO կոճակ

Displayուցադրել

Developmentարգացման համար ես օգտագործում եմ մեծ էկրան, բայց միակ բանը, որ անհրաժեշտ է ռոբոտին, դա ձեզ ասելն է, որ ձեր քայլը անվավեր է, ստուգեք և այլն: Ես ստացա դրանցից մեկը, որը հասանելի է նաև amazon.com կայքում:

Բայց ցուցադրում պահանջելու փոխարեն, ռոբոտը կխոսի այս արտահայտությունները: Ես դա արել եմ ՝ տեքստը խոսքի վերածելով ՝ օգտագործելով այստեղ նկարագրված ծածկագիրը և կցելով փոքր բարձրախոս: (Ես օգտագործում եմ «Համբուրգերի մինի բարձրախոս»):

Ռոբոտի արտահայտություններն ասում են.

  • Ստուգեք!
  • Չամմ
  • Անվավեր քայլ
  • Դուք հաղթեցիք!
  • Փակուղի
  • Նկարեք եռակի կրկնությամբ
  • Ոչ ոքի 50 քայլով կանոն

Շախմատի հիսուն քայլի կանոնը սահմանում է, որ խաղացողը կարող է ոչ-ոքիի դիմել, եթե վերջին հիսուն քայլում գրավում չի կատարվել, և գրավ չի տեղափոխվել (այդ նպատակով «քայլը» բաղկացած է այն խաղացողից, որն ավարտում է իր հերթը, որին հաջորդում է. հակառակորդն ավարտում է իր հերթը):

Դուք կարող եք լսել ռոբոտին, որը խոսում է վերևում «հիմարի կողակից» կարճ տեսանյութում (եթե ձեր ձայնը բարձրացնեք բավականին բարձր):

Քայլ 6: Ինչպես ձեռք բերել ծրագրակազմ

1. Թռչնամիս

Եթե Raspbian- ը գործարկում եք ձեր RPi- ով, կարող եք օգտագործել Stockfish 7 շարժիչը `անվճար է: Պարզապես գործարկեք.

sudo apt-get տեղադրել stockfish

2. ChessBoard.py

Ստացեք այստեղ:

3. Կոդ ՝ հիմնված

Գալիս է իմ ծածկագրով:

4. Python- ի վարորդներ BrickPi3- ի համար.

Ստացեք դրանք այստեղ:

5. Իմ կոդը, որը վկայակոչում է վերը նշված բոլոր ծածկագրերը և որոնք ստիպում են ռոբոտին կատարել շարժումները, և իմ տեսողության կոդը:

Ստացեք սա ինձանից ՝ մեկնաբանություն տեղադրելով, և ես կպատասխանեմ:

Խորհուրդ ենք տալիս: