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

Wiշգրիտ Wiimote Light Gun for Raspberry PI: 9 քայլ (նկարներով)
Wiշգրիտ Wiimote Light Gun for Raspberry PI: 9 քայլ (նկարներով)

Video: Wiշգրիտ Wiimote Light Gun for Raspberry PI: 9 քայլ (նկարներով)

Video: Wiշգրիտ Wiimote Light Gun for Raspberry PI: 9 քայլ (նկարներով)
Video: Area 51 RetroPie Light Gun Gameplay Demo Walkthrough on Raspberry Pi 4 - RetroPie Guy Light Gun 2024, Հուլիսի
Anonim
Imշգրիտ Wiimote Light Gun համար ազնվամորի PI
Imշգրիտ Wiimote Light Gun համար ազնվամորի PI
Imշգրիտ Wiimote Light Gun համար ազնվամորի PI
Imշգրիտ Wiimote Light Gun համար ազնվամորի PI

Սովորաբար, որպես թեթև ատրճանակ օգտագործվող Wii Remote- ը բավական ճշգրիտ չէ NES Duck Hunt- ի նման ռետրո խաղերի համար, քանի որ Wii Remote- ն իրականում չի ընտրում այն հեռուստացույցի այն կետը, որի վրա այն ուղղված է: Չի կարող! Wii Remote- ն ունի իր առջևի ինֆրակարմիր տեսախցիկ, որը տեսնում է ինֆրակարմիր LED- ների շարանը սենսորների սանդղակում, բայց չի կարող իմանալ, թե որքան հեռու է հեռուստացույցը (կամ որ ուղղությամբ) կամ որքան մեծ է հեռուստացույցը: Էմուլյատորներն ու խաղերն աշխատում են դրա շուրջ ՝ ցույց տալով խաչաձև կամ թիրախավորման այլ ցուցիչ, սակայն դա թիրախի կրակելու ճշգրիտ փորձ չէ:

Որպեսզի Wii Remote- ը աշխատի որպես ճշգրիտ թեթև ատրճանակ, որը կարող եք դիտել հեռուստացույցով թիրախ ընտրելու համար, պահանջվում է չորս ինֆրակարմիր LED լուսադիոդներ, որոնք դասավորված են հայտնի քառանկյուն ձևով (ոչ ուղիղ գիծ) նույն հարթության վրա, ինչ հեռուստացույցը: Wii Remote- ն այնուհետև տեսնում է չորս LED- ները, և տեսախցիկի պատկերը կարող է օգտագործվել homograph- ի հաշվարկման համար, որը թույլ է տալիս մեզ պարզել, թե ուր է ցույց տալիս տեսախցիկը:

Այս նախագծի սարքավորումները պարզ են: Գոյություն ունեն չորս ինֆրակարմիր լուսադիոդային լուսադիոդներ ՝ 3D տպված պարզ պատյաններում, որոնք կարելի է սոսնձել հեռուստացույցի պատյանի վերևից և ներքևից և միացնել USB լիցքավորիչին: Բացի այդ, եթե դուք չունեք Wii ատրճանակի պատյան, ես ունեմ պարզ տպված 3D բռնակ և տեսարժան վայրեր, որոնք կարող եք ամրացնել Wii Remote- ին (չնայած պլաստիկը խնայելու համար ես իմը հիբրիդ եմ դարձրել փայտի և 3D տպված պլաստիկի միջև):

Պիթոնի վրա հիմնված ծրագրակազմը ավելի դժվար էր սարքավորումների համեմատ պատրաստվել և ներկայումս միայն Linux- ի համար է: Այն չափաբերում է LED- ները և Wii Remote- ը, այնուհետև օգտագործում է հոմոգրաֆիայի հաշվարկներ ՝ ընդօրինակելու բացարձակ մկնիկը, որը բավականին լավ է աշխատում Retroarch- ի fceumm NES emulator- ում (և, հավանաբար, որոշ այլ էմուլյատորների դեպքում) իմ Raspberry PI 3B+ - ում:

Պարագաներ

  • Wii հեռակառավարիչ
  • Չորս 940 նմ 5 մմ ինֆրակարմիր LED
  • Հին USB մալուխ `աշխատանքային տիպի A խրոցակով
  • Raspberry PI 3 կամ այլ Linux համակարգիչ ՝ Bluetooth աջակցությամբ
  • 3D տպիչ և թել (ըստ ցանկության)

Քայլ 1: Ինֆրակարմիր LED շղթա

Ինֆրակարմիր LED շղթա
Ինֆրակարմիր LED շղթա
Ինֆրակարմիր LED շղթա
Ինֆրակարմիր LED շղթա

Ստացեք հին USB մալուխ ՝ աշխատանքային տիպի արական վարդակով (սովորաբար իմ հեռախոսի լիցքավորման մալուխները խափանում են միկրո USB ծայրը, այնպես որ ես մնացել եմ աշխատանքային տիպի արական վարդակով մալուխներ): Իրականում, նույնիսկ նորմալ է, եթե տվյալների մալուխները կոտրված, քանի դեռ էլեկտրահաղորդման գծերը աշխատում են: Կտրեք մյուս ծայրը: Տեսականորեն կարմիր մալուխը պետք է լինի +5V, իսկ սևը ՝ հիմնավորված, բայց ստուգեք այն մուլտիմետրով (միացրեք այն լիցքավորիչին, այնուհետև ստուգեք լարումը կարմիր և սև լարերի միջև):

Քանի որ ինֆրակարմիր LED- ները ունեն 1,2-1,3 Վ լարման անկում, ես դրանցից 4-ը սերիալային հանգույցով միացրեցի USB մալուխին: Համոզվեք, որ լարերը, որոնք դուք կպցրել եք, բավական երկար են, որպեսզի կարողանաք LED- ները տեղադրել հեռուստացույցի ներքևում, իսկ երկուսը ՝ վերևում, լուսադիոդների միջև հորիզոնական տարածությամբ (մոտ 10 դյույմ կամ ավելի):

Ավելի ճշգրիտ ՝ LED հանգույց պատրաստելու համար.

  • ամրացրեք առաջին LED- ի մինուս կողմը (կաթոդ, կարճ ոտք, հարթ եզրով) +5V USB լարին
  • միացրեք առաջին LED- ի դրական կողմը (անոդ, ավելի երկար ոտք, կլոր եզրով) երկրորդ LED- ի մինուս կողմին
  • կրկնել `երկրորդ LED- ին միացնել երրորդին և երրորդին` չորրորդին
  • ապա միացրեք չորրորդ LED- ի գումարած կողմը մետաղալարով գետնին USB լարին:

Իրերն ավելի կոկիկ դարձնելու համար միացումներն անելիս կարող եք օգտագործել ջերմության նվազեցման խողովակներ: Հակառակ դեպքում շորտերից խուսափելու համար օգտագործեք էլեկտրական ժապավեն:

Համոզվեք, որ կարճ միացում չունեք: Այնուհետև միացրեք այն USB լիցքավորիչին և ստուգեք, որ այն ինֆրակարմիր լույս է արձակում ՝ հեռախոսի տեսախցիկով դիտելով LED- ները: (Շատ հեռախոսի տեսախցիկները ինֆրակարմիր զգայուն են):

Քայլ 2: Կցեք հեռուստացույցին

Կցեք հեռուստատեսությանը
Կցեք հեռուստատեսությանը
Կցեք հեռուստատեսությանը
Կցեք հեռուստատեսությանը
Կցեք հեռուստատեսությանը
Կցեք հեռուստատեսությանը

Այժմ, LED- ներից երկուսը կցեք հեռուստացույցի ներքևի մասում, իսկ երկուսը `վերին: Հորիզոնական տարածությունը պետք է լինի մոտ տասը մատնաչափ: Եթե դա չափազանց շատ է, կարող եք խնդիրներ ունենալ Wii Remote տեսախցիկի տեսադաշտի հետ ՝ դրանք բոլորը գրավելու համար: Բայց եթե դրանք չափազանց մոտ են, ապա իմ երկրաչափական ինտուիցիան ասում է, որ դուք կունենաք ավելի ցածր ճշգրտություն:

Փորձարկման համար ես LED- ները կպցրի էլեկտրական ժապավենով, այնուհետև մշտական միացման համար ես նախագծեցի և տպեցի չորս կոկիկ փոքրիկ LED տեսահոլովակներ (ֆայլերն այստեղ են), որոնք ես տաք սոսնձեցի հեռուստացույցին: Դուք պետք է այնպես անեք, որ LED- ները հնարավորինս մոտ լինեն հեռուստացույցի հարթությանը, առանց այն եզրագծի, որը դրանք թաքցնում է այն վայրից, որտեղ նկարահանվելու եք:

Քայլ 3: Տեղադրեք ծրագրակազմ

Ներկայումս ծրագրակազմը միայն Linux- ի համար է: Հետևյալ կարգավորումը նախատեսված է Raspberry PI 3 -ի համար Raspbian Stretch- ով: Linux- ի այլ համակարգեր կպահանջեն որոշակի փոփոխություններ: Նախկին մոդելներում ձեզ հարկավոր է Bluetooth դոնգ, և այն պետք է գործարկվի նաև հրամանի տողից.

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

Քայլ Ա. Udev

Հաջորդը, ստեղծեք ֆայլ /etc/udev/rules.d/wiimote.rules- ում, որը պարունակում է մեկ տող.

KERNEL == "uinput", MODE = "0666"

Դուք կարող եք դա անել, օրինակ ՝ տեքստային խմբագրիչով կամ հրամանի տողում մուտքագրելով հետևյալը.

sudo sh -c 'echo KERNEL == / "uinput \", MODE = / "0666 \"> /etc/udev/rules.d/wiimote.rules'

Եվ ապա վերագործարկեք udev:

sudo /etc/init.d/udev վերագործարկեք

Քայլ B: cwiid

Հաջորդը, ձեզ հարկավոր կլինի իմ փոփոխված cwiid փաթեթը: Այստեղ այն մի փոքր մազոտ է դառնում, քանի որ իդեալականորեն անհրաժեշտ է այն կառուցել ձեր Raspberry PI- ի վրա, բայց ես պետք է խոստովանեմ, որ ես կորցրել եմ հետքերը, թե ինչ փաթեթներ են պետք տեղադրել, որպեսզի այն աշխատի: Դա անելու երեք տարբերակ կա:

Տարբերակ B1. Կառուցեք ինքներդ

cd

git clone https://github.com/arpruss/cwiid-1 autoconf./configure make -C libcwiid sudo make -C libcwiid install make -C python sudo make -C python install

Unfortunatelyավոք, բավականին լավ հնարավորություն կա, որ դուք բաց եք թողնում մի շարք իրեր, որոնք անհրաժեշտ են դրա կառուցման համար, և./configure- ը կբողոքի: Դուք կարող եք նայել այն ամենին, ինչից բողոքում է, և բոլորի վրա գործարկել sudo apt install:

Տարբերակ B2. Օգտագործեք իմ երկուական ֆայլերը

cd

wget https://github.com/arpruss/cwiid-1/releases/download/0.0.1/cwiid-rpi.tar.gz tar zxvf cwiid-rpi.tar.gz cd cwiid sudo make install

Քայլ Գ. Պիթոնի գրադարաններ

Վերջապես, ստացեք աջակցող նյութեր իմ հրացանի պիթոնի սցենարի համար.

sudo pip3 տեղադրել uinput numpy pygame opencv-python

sudo apt-get տեղադրել libatlas-base-dev sudo apt-get տեղադրել libjasper-dev sudo apt-get տեղադրել libqtgui4 sudo apt-get տեղադրել python3-pyqt5

Քայլ D: lightgun.py

Վերջապես, ստացեք իմ հրացանի պիթոնի սցենարը.

cd

git կլոն

Եթե ամեն ինչ լավ է ընթանում, այժմ ունեք ~/lightgun.py, որը կարող եք օգտագործել թեթև հրացանը չափաբերելու համար:

Քայլ 4. Կալիբրացում Մաս I. Տեսախցիկի կենտրոնացում

Կալիբրացիա Մաս I. Տեսախցիկի կենտրոնացում
Կալիբրացիա Մաս I. Տեսախցիկի կենտրոնացում
Կալիբրացիա Մաս I. Տեսախցիկի կենտրոնացում
Կալիբրացիա Մաս I. Տեսախցիկի կենտրոնացում
Կալիբրացիա Մաս I. Տեսախցիկի կենտրոնացում
Կալիբրացիա Մաս I. Տեսախցիկի կենտրոնացում

Կալիբրացիայի երկու ասպեկտ կա. Առաջինը `յուրաքանչյուր Wiimote- ում տեսախցիկի կենտրոնի չափագրումն է: Սա պահանջում է տեսախցիկի միջոցով ձեր հեռուստացույցի էկրանի շուրջ LED- ների երկու պատկեր վերցնել, մեկը `հեռավոր աջ կողմը վերև, իսկ մյուսը` գլխիվայր:

Wii հեռակառավարման վահանակի առջևի մասում կոճակները սեղմելուց խուսափելու համար, և որպեսզի Wii հեռակառավարիչը ունենա հետևողական բարձրություն, կարող եք 3D տպել այն չափագրման գործիքը, որը ես ներառել եմ այստեղ: Ձեզ հիմնականում անհրաժեշտ են 10,5 մմ հաստությամբ իրեր, որոնք կարող եք տեղադրել Wii Remote- ի տակ, երբ այն գտնվում է իր առջևի մասում: Իրականում ես պլաստիկի վրա խնայելու համար օգտագործեցի մի քանի նրբատախտակ:

Միացրեք ձեր LED- ները և համոզվեք, որ ձեր Raspberry PI- ն կամ այլ համակարգիչը ցուցադրվում է հեռուստացույցով: Միացրեք ստեղնաշարը (սա ssh- ով չի աշխատի) կամ օգտագործեք VNC: Այնուհետեւ գործարկեք.

python3 ~/lightgun/lightgun.py -M

Եթե ամեն ինչ լավ ընթանա, դուք կստանաք ամբողջական էկրանով ցուցադրում ՝ խնդրելով Wii Remote- ի վրա սեղմել 1+2: Արա դա: Wii հեռակառավարման վահանակի լույսերը կթափվեն, այնուհետև 1 և 4 լույսերը կմնան միացված: Էկրանի վերևում կտեսնեք նաև մի փոքրիկ կանաչ ուղղանկյուն ՝ Wii Remote տեսախցիկից տեսարանով: Ուղղեք Wii հեռակառավարիչը LED- ների վրա և եթե ամեն ինչ կարգին լինի, կտեսնեք չորս LED- ները ՝ համարակալված 1 -ից 4 -ը:

Այժմ դուք պետք է գտնեք սուր եզր ունեցող ամուր մակերես, ինչպես սուրճի սեղանը, որը կարող եք մատնանշել հեռուստացույցի էկրանին և որը թույլ կտա Wii Remote- ին տեսնել բոլոր LED- ները ՝ Wii Remote- ով եզրին հավասարեցված: Սկսեք ՝ Wii Remote- ի աջ կողմը հավասարեցնելով, հեռակառավարման կողմը հավասարեցնելով մակերևույթի եզրին ՝ համոզվելով, որ բոլոր չորս LED- ները երևում են: Այնուհետև սեղմեք SPACE ձեր ստեղնաշարի վրա (կամ կցեք Nunchuck և սեղմեք C, եթե դա ավելի հարմար է): Այնուհետև ձեզ կառաջարկվի պտտել Wii Remote- ը: Այժմ, համոզվեք, որ այն ձեր մակերևույթից բարձր է 10.5 մմ բարձրության վրա ՝ օգտագործելով չափաբերման գործիքը կամ այլ բան, և նույն տեղում, ինչպես նախկինում (օրինակ ՝ հավասարեցված ձեր մակերեսի նույն եզրին): Կրկին սեղմեք SPACE:

Եթե ամեն ինչ կարգին լինի, ապա այժմ կանցնեք LED- ի ստուգաչափման փուլին: Այո, սա բարդ է: Բայց դուք կունենաք շատ ճշգրիտ հրացան: Դա պարզապես գինն է:

Նշում. Եթե ինձ պես Wii ունեք հեռուստացույցի տակ, ապա Wii- ն պետք է անջատել երկու պատճառով. Նախ, եթե Wii- ն միացված է, այն միանում է Wiimote- ին, և երկրորդ `սենսորային սանդղակի ինֆրակարմիր LED- ները կխանգարեն այս նախագիծը: Նմանատիպ պատճառներով, մինչ Wii- ն եք օգտագործում, լավ գաղափար է անջատել LED- ները հեռուստացույցի շուրջը:

Քայլ 5. Կալիբրացում Քայլ II. LED- ներ

Կալիբրացիա Քայլ II. LED- ներ
Կալիբրացիա Քայլ II. LED- ներ
Կալիբրացում Քայլ II. LED- ներ
Կալիբրացում Քայլ II. LED- ներ

Այժմ դուք պետք է տեղեկացնեք ծրագրակազմին, թե որտեղ են LED- ները տեղադրված հեռուստացույցի եզրին: Հեռուստատեսության եզրին կտեսնեք ստուգաչափման էկրան, որը ցույց է տալիս չորս սլաք, որոնցից մեկն ընտրված է (լուսավոր) և երեքը մոխրագույն: Դուք օգտագործում եք +/- ՝ սլաքը կարգավորելու համար փոխելու համար:

Եզրին չորս սլաքներից յուրաքանչյուրի համար արեք սա.

  1. սեղմեք ձախ/աջ Wiimote- ի վրա ՝ սլաքները տեղափոխելու համար, մինչև դրանք հնարավորինս ճշգրիտ չդիմեն դեպի համապատասխան LED- ը;
  2. սեղմել Wiimote- ի վերև/ներքև ՝ սլաքի երկարությունը փոխելու համար, մինչև սլաքի երկարությունը համապատասխանի LED- ի և հեռուստացույցի եզրագծի միջև եղած հեռավորությանը. այլ կերպ ասած, սլաքի երկարությունը պետք է հավասար լինի սլաքի ծայրից մինչև LED լուսավորությանը:

Երբ ձեր չորս սլաքները ճիշտ են (և գուցե նույնիսկ ավելի վաղ), Wiimote- ը էկրանին ցույց տալով կարմիր խաչ կտեսնեք: Կարող եք ստուգել, որ սա այն վայրն է, որտեղ պետք է լինի: (Հիշեք, որ դուք պետք է այնքան հեռու լինեք, որ Wiimote- ը կարողանա տեսնել բոլոր LED- ները: Կարևոր է նաև, որ տեսադաշտում ինֆրակարմիր այլ աղբյուրներ չլինեն: Ես մի անգամ դժվարություն ունեցա, քանի որ արևի ճառագայթը անդրադարձնում էր պտուտակով գլուխը Հեռուստացույցի տակդիր)

Վերջապես, կա հինգերորդ սլաքը, որը երևում է միայն այն դեպքում, երբ սեղմում եք + չորրորդ LED սլաքից կամ - առաջինից (և այն լռելյայն ունի զրոյական երկարություն, այնպես որ դա ընդամենը պիքսել է): Այս սլաքը կարգավորում է, թե որքան հեռու է Wii Remote- ի տեսախցիկից կադրը գրանցվելու: Հարցը հետևյալն է. Դուք կտեսնեք Wii Remote- ի վերին մակերևույթը: Բայց տեսախցիկն իրականում գտնվում է այդ մակերևույթից որոշ հեռավորության վրա ՝ Wii Remote- ի առջևի սև ուղղանկյունի մեջտեղում: Եթե մենք գրանցեինք այն կադրերը, որտեղ տեսախցիկն է ցույց տալիս, դրանք գրանցված կլինեին Wii Remote- ի վերին մակերևույթից մոտ 8 մմ ներքևում: Դուք կարող եք դա ստուգել ՝ նշելով, որ վերևի մակերեսի երկայնքով դիտելիս խաչաձև մազերի կենտրոնը թաքնված է տեսախցիկի կողմից:

Դուք կարող եք ապրել դրանով, կամ կարող եք աճեցնել այս հինգերորդ սլաքը `ծրագրերը հարթեցնելու համար նկարները Wii Remote- ի վերևի մասով, կամ կարող եք հարմարեցնել եռաչափ տպագրվող ֆայլերը երկաթե տեսարանների համար` դա փոխհատուցելու համար (բայց փոխհատուցումը կգործի միայն հեռուստացույցից մեկ հատուկ հեռավորություն): Ես ինքս գնացի ծրագրակազմի հավասարեցման:

Սեղմեք HOME- ը Wii Remote- ի վրա ՝ ստուգաչափումից դուրս գալու և բոլոր տվյալները պահելու համար ~/.wiilightgun գրացուցակում:

Քայլ 6: Փորձարկեք և օգտագործեք

Փորձարկում և օգտագործում
Փորձարկում և օգտագործում
Փորձարկում և օգտագործում
Փորձարկում և օգտագործում
Փորձարկում և օգտագործում
Փորձարկում և օգտագործում

Դուք հավանաբար հիմա ցանկանում եք փորձել ձեր թեթև ատրճանակը: Պարզապես գործարկեք տերմինալի էմուլատոր (կամ սցենար).

python3 ~/lightgun/lightgun.py -t

Ձեզ հարկավոր կլինի միաժամանակ սեղմել 1+2 կոճակները, և դրանից հետո, եթե ամեն ինչ կարգին լինի, քանի դեռ lightgun.py- ն աշխատում է, թեթև հրացանը կրկնօրինակելու է երկու կոճակով բացարձակ մկնիկը: Գործարկման կոճակը մկնիկի կոճակն է 1, իսկ A կոճակը `մկնիկը: 2. Դուրս գալու համար սեղմեք ctrl-c:

Այժմ ձեզ անհրաժեշտ է միայն կարգավորել ձեր էմուլյատորները և/կամ խաղերը `բացարձակ մկնիկով աշխատելու համար: Unfortunatelyավոք, դա միշտ չէ, որ այդքան հեշտ կլինի:

Մի զվարճալի բան, որը դուք կարող եք փորձել, իմ իմիննամազի բադ-բադ-կրակոցի իմ ռեժիմն է.

cd

git clone https://github.com/arpruss/duck-duck-shoot cd duck-duck-shoot python play_game.py

NES խաղերի համար ես օգտագործում եմ libretro fceumm միջուկը Retroarch- ում: Գնացեք «Ընտրանքներ» ընտրացանկ և կազմաձևեք Zapper- ը սենսորային էկրան լինելու համար: (Այն որպես մուկ կազմաձևելը իրականում չի աշխատում, քանի որ fceumm- ն ակնկալում է հարաբերական, այլ ոչ թե բացարձակ դիրքի մուկ):

Եթե ձեր խաղերը սկսում եք սցենարով, կարող եք խմբագրել խաղը սկսող հատվածը կամ էմուլյատորը ՝ ասելով.

python3 ~/lightgun/lightgun.py -t -B 30 "խաղ սկսելու հրաման"

Այնուհետև խաղի կատարման առաջին 30 վայրկյանների ընթացքում (հետևաբար ՝ -B 30 տարբերակը), կարող եք միացնել թեթև հրացանը ՝ սեղմելով 1+2:

Ի դեպ, lightgun.py սցենարը կարող է օգտագործվել նաև Retroarch- ի հետ ընդհանուր Wii Remote խաղերի համար: Պարզապես ավելացրեք -o տարբերակը, և թեթև հրացանի գործառույթները կանջատվեն, իսկ դրա փոխարեն Wii Remote- ը կաշխատի հորիզոնական ՝ երեք կոճակները համապատասխանաբար 1, 2 և B: Lightgun.py- ի քարտեզագրման մեջ կան Retroarch- ի հետ կապված այլ գործառույթներ, որոնք դուք կհայտնաբերեք ՝ կարդալով կոդը: Օրինակ ՝ մինուս ստեղնը գործում է որպես տեղաշարժ, և dpad- ի հետ միասին վերահսկում է խնայողությունն ու բեռնումը (վեր/վար = փոխել պահպանման համարը, ձախ = վերականգնել, աջը = պահել):

Քայլ 7: ատրճանակի բռնակ և նպատակ

Ատրճանակի բռնակ և նպատակ
Ատրճանակի բռնակ և նպատակ
Ատրճանակի բռնակ և նպատակ
Ատրճանակի բռնակ և նպատակ
Ատրճանակի բռնակ և նպատակ
Ատրճանակի բռնակ և նպատակ

Դուք կարող եք օգտագործել Wii Remote- ն ինքնին որպես ատրճանակ ՝ տեսնելով վերևի երկայնքով: Դրա համար կարող եք գնել նաև առևտրային զենքի պատյաններից մեկը: Բայց քանի որ բնօրինակ Wii Remote- ը ի վիճակի չէր օգտագործել որպես տեսանելի ատրճանակ, պատյանները հակված չեն երկաթե տեսարանների, իսկ երկաթե տեսարանները մեծապես բարձրացնում են ճշգրտությունը:

Ես նախագծեցի երեք մասից բաղկացած 3D տպագրման պարզ համակարգ ՝ սահող բռնակ, որը նստած է ձգանի հետևում (ուստի այն մի փոքր նման է Star Trek Original Series ֆազերի) և սահող տեսարաններ: Տպելի ֆայլերը այստեղ են: Եթե ցանկանում եք խնայել պլաստիկի վրա փայտի ջարդոնի հաշվին, կարող եք նաև անել այն, ինչ ես արել եմ, և ամբողջ բռնակը տպելու փոխարեն տպել Wiimote- ի միայն այն հատվածը, կտրել փայտե կտոր և պտուտակել այն:

Տեսողության համար ձեր աչքերը կենտրոնացրեք տեսարժան վայրերի վրա: Հավասարեցրեք առջևի տեսողության թեքությունը հետևի տեսողության ցնցումների միջև այնպես, որ երկուսից երկուսը հավասար լինեն, և երեք հարվածներն էլ հավասարապես բարձր դուրս գան: Այնուհետև թիրախի կեսը հավասարեցրեք հարվածների վերևին:

Նշում. Հարվածների բարձրությունը փոքր -ինչ անհավասար է, իսկ առջևի թեքությունը փոքր -ինչ ցածր է, որպեսզի փոխհատուցեն տեսողության հարվածների բարձրությունը, երբ տեսնում եք նրանց երկայնքով 2,5 մետր հեռավորության վրա (իմ հեռավորությունը հեռուստատեսությունից): Եթե հեռուստատեսությունից զգալիորեն տարբերվում եք, կարող եք այն տեղադրել OpenSCAD ֆայլերի մեջ: Այնուամենայնիվ, այս ճշգրտումը կարող է լինել տպիչի թույլատրելիությունից ցածր: Բացի այդ, եթե ծրագրային ապահովման մեջ չեք կատարել ուղղահայաց ճշգրտում, կարող եք ևս մի ճշգրտում ավելացնել ծրագրաշարի տեսարժան վայրերին `լրացուցիչSightAdjust- ը սահմանելով -8 (միլիմետր):

Քայլ 8. Կալիբրացում III (ըստ ցանկության). Նուրբ ճշգրտում

Եթե ցանկանում եք նույնիսկ ավելի ճշգրիտ, կարող եք գործարկել.

python3 ~/lightgun/lightgun.py -d

(ցուցադրման համար) և ուշադիր նայեք, արդյոք տեսարժան վայրերը համընկնում են խաչաձև մազերի հետ: Եթե դա այդպես չէ, դուրս եկեք և ձեռքով խմբագրեք ~/.wiilightgun/wiimotecalibration և փոքր -ինչ շտկեք տեսախցիկի կենտրոնի x և y կոորդինատները `տեսողությունը դիտելու համար: Օրինակ, իմ հրացանը փոքր -ինչ աջ էր կրակում, ուստի ես փոխեցի x կոորդինատը 529 -ից 525 -ի: Ամեն մեկի թվերը, հավանաբար, տարբեր կլինեն:

Քայլ 9. Հավելված. Ալգորիթմ

Հավելված. Ալգորիթմ
Հավելված. Ալգորիթմ

Մկնիկի նմանակման կոդն աշխատում է մոտավորապես հետևյալ կերպ.

  • Գործընթաց կոճակների սեղմումներ:
  • Ստացեք տվյալներ տեսախցիկից և հարմարեցրեք տեսախցիկի կենտրոնացման տրամաչափման համար:
  • Եթե տեսախցիկում երևում է երեքից պակաս LED:

    Պահպանեք մկնիկի վերջին դիրքը:

  • Եթե տեսանելի են երեք կամ չորս լուսադիոդային լուսադիոդներ.

    • Օգտագործեք Wiimote արագացուցիչի տվյալները `Wiimote- ի կողմնորոշումը ստանալու համար և որոշեք, թե որ LED տեսախցիկի պատկերն է համապատասխանում որ ֆիզիկական LED- ին:
    • Եթե չորս LED- եր տեսանելի են.

      • Հաշվիր հոմոգրաֆիա LED ֆոտոխցիկի պատկերների և LED վայրերի միջև (էկրանի կոորդինատներով):
      • Օգտագործեք հոմոգրաֆիա `հաշվարկելու, թե որ էկրանի տեղն է համապատասխանում տեսախցիկի տեսադաշտի կենտրոնին:
      • Կատարեք Y- ճշգրտում `տեսողության գծից ներքև գտնվող վիրտուալ ատրճանակի տակառի կենտրոնը կարգավորելու համար: Սա ինչ -որ չափով kludgy ալգորիթմ է, բայց այն աշխատում է:
      • Մկնիկի դիրքը կարգավորեք էկրանի ճշգրտված վայրին:
    • Եթե տեսանելի է երեք LED

      • Օգտագործեք OpenCV ՝ LED ֆոտոխցիկի պատկերների և ֆիզիկական LED տեղադրությունների միջև P3P խնդիրը լուծելու համար: Սա առաջացնում է մինչև չորս լուծում:
      • Հաջողության դեպքում.

        • Եթե մենք ունենք նախորդ հաջող տեղադրության հաշվարկ, ընտրեք այն լուծումը, որը ստիպում է բացակայող LED- ն ամենամոտ լինել այդ LED- ի վերջին դիտված կամ հաշվարկված դիրքին:
        • Եթե մենք չունենք նախկին հաջող տեղադրության հաշվարկ, ընտրեք այն լուծումը, որը լավագույնս կանխատեսում է արագացուցիչի վերնագիրը:
        • Օգտագործեք լավագույն լուծումը `հաշվարկելու, թե ուր պետք է գնա չորրորդ LED- ը:
        • Մնացեք մնացածը, ինչպես չորս LED պատյանում:
      • Եթե հաջողակ չէ.

        Պահպանեք մկնիկի վերջին դիրքը:

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