Orodha ya maudhui:

Bunduki sahihi ya Nuru ya Wiimote kwa Raspberry PI: Hatua 9 (na Picha)
Bunduki sahihi ya Nuru ya Wiimote kwa Raspberry PI: Hatua 9 (na Picha)

Video: Bunduki sahihi ya Nuru ya Wiimote kwa Raspberry PI: Hatua 9 (na Picha)

Video: Bunduki sahihi ya Nuru ya Wiimote kwa Raspberry PI: Hatua 9 (na Picha)
Video: ХАБИБ - Ягода малинка (Премьера клипа) 2024, Septemba
Anonim
Sahihi Bunduki la Nuru la Wiimote kwa Raspberry PI
Sahihi Bunduki la Nuru la Wiimote kwa Raspberry PI
Sahihi Bunduki la Nuru la Wiimote kwa Raspberry PI
Sahihi Bunduki la Nuru la Wiimote kwa Raspberry PI

Kwa kawaida, Kijijini cha Wii kinachotumiwa kama bunduki nyepesi sio sahihi kwa michezo ya kurudia kama NES Duck Hunt, kwa sababu Wii Remote haichagui hatua kwenye TV inayoelekezwa. Haiwezi! Wii Remote ina kamera ya infrared mbele yake ambayo inaona laini ya LED za infrared kwenye bar ya sensorer, lakini haiwezi kujua ni umbali gani (au ni mwelekeo gani) TV iko kutoka kwa baa au TV ni kubwa kiasi gani. Emulators na michezo hufanya kazi kuzunguka hii kwa kuonyesha nywele-msalaba au kiashiria kingine cha kulenga, lakini huo sio uzoefu sahihi wa kupiga risasi.

Ili kufanya Wii Remote ifanye kazi kama bunduki sahihi nyepesi ambayo unaweza kuona pamoja ili kuchagua shabaha kwenye Runinga inahitaji taa nne za infrared zilizopangwa kwa muundo unaojulikana wa pande zote (sio laini moja kwa moja) katika ndege sawa na TV. Wii Remote kisha inaona LEDs nne na picha ya kamera inaweza kutumika kuhesabu hesabu inayoturuhusu kujua ni wapi kamera inaelekeza.

Vifaa vya mradi huu ni rahisi. Kuna taa nne za infrared katika nyumba rahisi zilizochapishwa za 3D ambazo zinaweza kushikamana juu na chini ya nyumba ya Runinga na kuziba kwenye sinia ya USB. Isitoshe, ikiwa huna makazi ya bunduki ya Wii, nina kipini kilichochapishwa cha 3D na vituko ambavyo unaweza kushikamana na Wii Remote (ingawa kuokoa plastiki, nilifanya yangu mseto kati ya kuni na plastiki iliyochapishwa ya 3D).

Programu ya msingi wa chatu ilikuwa ngumu kutengeneza kuliko vifaa na kwa sasa ni Linux tu. Inalinganisha LED na Wii Remote na kisha hutumia mahesabu ya hesabu kuiga panya kabisa ambayo inafanya kazi vizuri katika emulator ya Retroarch ya NES emulator (na labda emulators zingine) kwenye Raspberry PI 3B yangu.

Vifaa

  • Wii Kijijini
  • LED nne za infrared 940nm 5mm
  • Cable ya zamani ya USB na aina ya kazi A kuziba
  • Raspberry PI 3 au kompyuta nyingine ya Linux na msaada wa Bluetooth
  • Printa na filamenti ya 3D (hiari)

Hatua ya 1: Mnyororo wa LED ya infrared

Mnyororo wa LED ya infrared
Mnyororo wa LED ya infrared
Mnyororo wa LED ya infrared
Mnyororo wa LED ya infrared

Pata kebo ya zamani ya USB na aina ya kazi Tundu la kiume (kawaida nyaya zangu za kuchaji simu huvunja mwisho wa USB ndogo, kwa hivyo nina nyaya zilizobaki na aina ya kazi A tundu la kiume).. Kwa kweli, ni sawa hata kama nyaya za data ni imevunjwa maadamu laini za umeme zinafanya kazi. Kata mwisho mwingine. Kwa nadharia kebo nyekundu inapaswa kuwa + 5V na nyeusi iwe chini, lakini iangalie kwa multimeter (ingiza kwenye sinia, halafu angalia voltage kati ya waya nyekundu na nyeusi).

Kwa kuwa taa za infrared zina karibu na kushuka kwa voltage 1.2-1.3V, niliziuza nne tu kwa kitanzi cha mfululizo kwa kebo ya USB. Hakikisha waya ulizotengeneza zina urefu wa kutosha kuweza kuweka LED chini ya TV na mbili juu, na nafasi nzuri ya usawa kati ya LED (kama inchi 10 au hivyo).

Kwa usahihi kufanya kitanzi cha LED:

  • solder upande wa minus (cathode, mguu mfupi, na makali gorofa) ya LED ya kwanza kwa waya + 5V USB
  • jiunga na upande wa pamoja wa mwangaza wa kwanza wa LED (anode, mguu mrefu, na ukingo wa pande zote) kwa upande wa minus wa mwangaza wa pili
  • rudia kujiunga na LED ya pili hadi ya tatu na ya tatu hadi ya nne
  • kisha unganisha upande wa pamoja wa LED ya nne na waya kwenye waya wa chini wa USB.

Ili kufanya mambo kuwa nadhifu, unaweza kutumia neli ya kupungua joto wakati unafanya unganisho. Vinginevyo, tumia mkanda wa umeme ili kuepuka kifupi.

Hakikisha hauna nyaya fupi. Kisha ingiza kwenye sinia ya USB na uangalie ikiwa inatoa taa ya infrared kwa kutazama LED zilizo na kamera ya simu. (Kamera nyingi za simu ni nyeti za infrared.)

Hatua ya 2: Ambatisha kwa Runinga

Ambatisha kwa TV
Ambatisha kwa TV
Ambatisha kwa TV
Ambatisha kwa TV
Ambatisha kwa TV
Ambatisha kwa TV

Sasa, ambatisha mbili za LED chini ya TV na mbili upande wa juu. Nafasi ya usawa inapaswa kuwa karibu inchi kumi. Ikiwa ni nyingi sana, unaweza kuwa na shida na uwanja wa maoni wa kamera ya mbali ya Wii kuzinasa zote. Lakini ikiwa wako karibu sana, basi intuition yangu ya kijiometri inasema utakuwa na usahihi wa chini.

Kwa upimaji, niligonga LED na mkanda wa umeme, na kisha kwa unganisho la kudumu, nilibuni na kuchapisha sehemu nne nadhifu za LED (faili ziko hapa) ambazo nilipiga gundi kwenye TV. Unapaswa kuzifanya taa za taa kuwa karibu na ndege ya onyesho la Runinga kadiri uwezavyo, bila bezel kuwaficha kutoka mahali utakapopiga risasi.

Hatua ya 3: Sakinisha Programu

Hivi sasa programu ni Linux-pekee. Usanidi ufuatao umeundwa kwa Raspberry PI 3 na Raspbian Stretch. Mifumo mingine ya Linux itahitaji mabadiliko. Kwenye mifano ya mapema utahitaji dongle ya Bluetooth na utahitaji kuendesha hii kutoka kwa laini ya amri pia:

sudo kupata-apt kufunga bluetooth

Hatua A: udev

Ifuatayo, tengeneza faili katika /etc/udev/rules.d/wiimote.rules ambayo ina laini moja:

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

Unaweza kufanya hivyo, kwa mfano, na mhariri wa maandishi au kwa kuandika zifuatazo kwenye safu ya amri:

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

Na kisha uanze tena udev:

sudo /etc/init.d/udev kuanza upya

Hatua ya B: cwiid

Ifuatayo, utahitaji kifurushi changu kilichobadilishwa cha cwiid. Hapa inakuwa na nywele kidogo kwa kweli utahitaji kuijenga kwenye Raspberry PI yako, lakini lazima nikiri kwamba nimepoteza wimbo wa vifurushi gani unahitaji kusanikisha ili ifanye kazi. Kuna chaguzi tatu za kufanya hivyo.

Chaguo B1: Jijenge

cd ~

Clone ya git

Kwa bahati mbaya, kuna nafasi nzuri sana ya kukosa kikundi cha vitu vinavyohitajika kwa ajili ya kujenga hii, na./configure italalamika. Unaweza kuangalia mambo yote ambayo inalalamika juu yake na kukimbia sudo apt kufunga juu yao wote.

Chaguo B2: Tumia binaries zangu

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

Hatua C: maktaba ya chatu

Mwishowe, pata vitu vya msaada kwa hati yangu ya chokaa ya lightgun:

sudo pip3 sakinisha uinput numpy pygame opencv-python

Sudo apt-get install libatlas-base-dev sudo apt-get kufunga libjasper-dev sudo apt-kupata kufunga libqtgui4 sudo apt-kupata kufunga python3-pyqt5

Hatua ya D: lightgun.py

Mwishowe, pata hati yangu ya chatu ya lightgun:

cd ~

clone ya git

Ikiwa yote yameenda vizuri, sasa unayo ~ / lightgun.py ambayo unaweza kutumia kusawazisha bunduki.

Hatua ya 4: Sehemu ya Ulinganishaji: Kuweka Kamera katikati

Sehemu ya Usawazishaji: Kuweka Kamera katikati
Sehemu ya Usawazishaji: Kuweka Kamera katikati
Sehemu ya Usawazishaji: Kuweka Kamera katikati
Sehemu ya Usawazishaji: Kuweka Kamera katikati
Sehemu ya Usawazishaji: Kuweka Kamera katikati
Sehemu ya Usawazishaji: Kuweka Kamera katikati

Kuna mambo mawili kwa usawa. Ya kwanza ni kusawazisha katikati ya kamera kwenye kila Wiimote. Hii inahitaji kutumia kamera kuchukua picha mbili za LED zilizo karibu na skrini yako ya Runinga, moja ikiwa na upande wa kulia wa mbali na nyingine nayo imeinama chini.

Ili kuepuka kubonyeza vitufe unapoweka Wii Remote mbele yake, na ili kufanya Wii Remote iwe na mwinuko thabiti, unaweza kuchapisha 3D zana ya usanidi niliyojumuisha hapa. Unahitaji vitu vyenye unene wa 10.5mm ambavyo unaweza kuweka chini ya Wii Remote wakati iko mbele yake. Kwa kweli nilitumia plywood chakavu kuokoa kwenye plastiki.

Washa LED zako na uhakikishe kuwa Raspberry PI yako au kompyuta nyingine inaonyeshwa kwenye Runinga. Unganisha kibodi (hii haitafanya kazi kwa ssh) au tumia VNC. Kisha kukimbia:

python3 ~ / lightgun / lightgun.py -M

Ikiwa yote yatakwenda sawa, utapata onyesho kamili la skrini kukuuliza bonyeza 1 + 2 kwenye Wii Remote. Fanya hivyo. Taa zitawaka kwenye Kijijini cha Wii, na kisha taa 1 na 4 zitabaki. Pia utaona mstatili mdogo wa kijani juu ya skrini, na maoni kutoka kwa kamera ya mbali ya Wii. Elekeza Kijijini cha Wii kwenye LED na ikiwa yote yatakwenda sawa, utaona LED nne, zilizohesabiwa 1 hadi 4.

Sasa unahitaji kupata uso thabiti na makali makali, kama meza ya kahawa, ambayo unaweza kuelekeza kwenye skrini ya TV na ambayo inaweza kuruhusu Wii Remote kuona LED zote zilizo na Wii Remote iliyokaa kando. Anza kwa kupanga upande wa kulia wa Wii upande wa kulia juu, na upande wa Remote umepangwa dhidi ya ukingo wa uso, kuhakikisha kuwa LED zote nne zinaonekana. Kisha bonyeza SPACE kwenye kibodi yako (au ambatanisha Nunchuck na ubonyeze C ikiwa ni rahisi zaidi). Kisha utahamasishwa kuzunguka Kijijini cha Wii. Sasa, hakikisha imeinuliwa 10.5 mm kutoka juu ya uso wako, ukitumia zana ya upimaji au kitu kingine chochote, na karibu na eneo sawa na hapo awali (kwa mfano, iliyokaa dhidi ya ukingo huo wa uso wako). Bonyeza SPACE tena.

Ikiwa kila kitu kitaenda sawa, sasa utaenda kwenye hatua ya calibration ya LED. Ee, hii ni ngumu! Lakini utakuwa na bunduki sahihi sana. Hiyo ni bei tu.

Kumbuka: Ikiwa kama mimi una Wii chini ya Runinga, Wii inahitaji kuzimwa kwa sababu mbili: kwanza, ikiwa Wii imewashwa, itaunganisha kwa Wiimote na, pili, taa za infrared za baa ya sensa zitaingiliana na mradi huu. Kwa sababu kama hizo, wakati unatumia Wii ni wazo nzuri kuchomoa taa za kuzunguka TV.

Hatua ya 5: Usawazishaji Hatua ya II: LEDs

Usawazishaji Hatua ya II: LEDs
Usawazishaji Hatua ya II: LEDs
Usawazishaji Hatua ya II: LEDs
Usawazishaji Hatua ya II: LEDs

Sasa unahitaji kuambia programu ambapo LED ziko karibu na kingo za TV. Utaona skrini ya urekebishaji inayoonyesha mishale minne, mmoja wao umechaguliwa (mkali) na tatu kati yao umejaa kijivu, pembezoni mwa Runinga. Unatumia +/- kubadili kubadili ni mshale upi unaobadilisha.

Kwa kila moja ya mishale minne inayozunguka ukingo, fanya hivi:

  1. bonyeza kushoto / kulia kwenye Wiimote kusogeza mishale mpaka inyooshe sawasawa uwezavyo kuelekea LED inayoendana;
  2. bonyeza juu / chini kwenye Wiimote ili kubadilisha urefu wa mshale hadi urefu wa mshale ulingane na umbali kati ya LED na makali ya onyesho la TV; kwa maneno mengine, urefu wa mshale unahitaji kuwa sawa na umbali kutoka ncha ya mshale hadi LED.

Mara tu mishale yako minne ikiwa sahihi (na labda hata mapema zaidi) utaona msalaba mwekundu wakati unaelekeza Wiimote kwenye skrini. Unaweza kuangalia kuwa hapa ndipo inapaswa kuwa. (Kumbuka kuwa unahitaji kuwa mbali sana ili Wiimote iweze kuona taa zote za LED. Ni muhimu pia kwamba kusiwe na vyanzo vingine vya infrared kwenye uwanja wa maoni. Wakati mmoja nilikuwa na shida kwa sababu ya mwangaza wa jua unaonyesha kichwa cha screw kwenye Stendi ya Runinga.)

Mwishowe, kuna mshale wa tano, ambao unaonekana tu unapobonyeza + kutoka kwa mshale wa nne wa LED au - kutoka kwa ya kwanza (na kwa msingi ina urefu wa sifuri, kwa hivyo ni pikseli tu). Mshale huu unarekebisha umbali gani juu ya kamera ya Wii Remote risasi itasajiliwa. Suala ni hili: utakuwa ukiangalia kwenye uso wa juu wa Wii Remote. Lakini kamera kweli iko umbali kidogo chini ya uso huo, katikati ya mstatili mweusi mbele ya Kijijini cha Wii. Ikiwa tutasajili picha ambapo kamera inaelekeza, zingesajiliwa karibu 8 mm chini ya uso wa juu wa Wii Remote. Unaweza kuangalia hii kwa kubainisha kuwa unapoona kando ya uso wa juu, katikati ya nywele za msalaba zimefichwa na kamera.

Unaweza kuishi na hii, au unaweza kukuza mshale huu wa tano kwa programu kupatanisha picha na sehemu ya juu ya Wii Remote, au unaweza kurekebisha faili zinazoweza kuchapishwa za 3D kwa vituko vya chuma kufidia hii (lakini fidia itafanya kazi tu umbali fulani kwa Runinga). Nilikwenda kwa usawa wa programu mwenyewe.

Bonyeza HOME kwenye Remote Wii ili uondoke na uhifadhi data zote kwenye saraka ya ~ /.wiilightgun.

Hatua ya 6: Jaribu na Tumia

Mtihani na Matumizi
Mtihani na Matumizi
Mtihani na Matumizi
Mtihani na Matumizi
Mtihani na Matumizi
Mtihani na Matumizi

Labda unataka kujaribu bunduki yako nyepesi sasa. Endesha tu kwenye emulator ya terminal (au hati):

python3 ~ / lightgun / lightgun.py -t

Utahitaji kubonyeza kitufe cha 1 + 2 kwa wakati mmoja, na baada ya hapo ikiwa yote yatakwenda sawa, mradi lightgun.py inaendesha, taa ya taa itaiga panya kamili ya vitufe viwili. Kitufe cha kuchochea ni kitufe cha panya 1, na kitufe cha A ni kitufe cha panya 2. Bonyeza ctrl-c kutoka.

Sasa unahitaji kusanidi emulators yako na / au michezo ili ufanye kazi na panya kabisa. Kwa bahati mbaya, hiyo haitakuwa rahisi kila wakati.

Jambo moja la kufurahisha unaloweza kujaribu ni mod yangu ya risasi-bata-bata ya iminurnamez:

cd ~

clone ya git https://github.com/arpruss/duck-duck-shoot cd bata-bata-risasi chatu play_game.py

Kwa michezo ya NES, ninatumia msingi wa fretumm ya libretro katika Retroarch. Nenda kwenye menyu ya Chaguzi, na usanidi Zapper iwe skrini ya kugusa. (Kusanidi kama panya haifanyi kazi, kwani fuseum inatarajia harakati-jamaa badala ya panya-msimamo kamili.)

Ukianza michezo yako na hati, unaweza kuhariri sehemu ambayo huanza mchezo au emulator kusema:

python3 ~ / lightgun / lightgun.py -t -B 30 "amri ya kuanza mchezo"

Halafu wakati wa sekunde 30 za kwanza za utekelezaji wa mchezo (kwa hivyo -B chaguo 30), unaweza kuunganisha taa yako kwa kushikilia 1 + 2.

Kwa njia, hati ya lightgun.py pia inaweza kutumika kwa uchezaji wa jumla wa mbali wa Wii na Retroarch. Ongeza tu -o chaguo na kazi za lightgun zitazimwa, na badala yake Wii Remote itafanya kazi kwa usawa, na vifungo vitatu ni 1, 2 na B mtawaliwa. Kuna kazi zingine zinazohusiana na Retroarch kwenye ramani za lightgun.py ambazo utagundua kwa kusoma nambari. Kwa mfano, kitufe cha kuondoa hufanya kama mabadiliko, na pamoja na dpad inadhibiti kuokoa na kupakia (juu / chini = badilisha nambari ya kuokoa; kushoto = kurejesha; kulia = kuokoa).

Hatua ya 7: Kushughulikia Bunduki na Kulenga

Kushughulikia Bunduki na Kulenga
Kushughulikia Bunduki na Kulenga
Kushughulikia Bunduki na Kulenga
Kushughulikia Bunduki na Kulenga
Kushughulikia Bunduki na Kulenga
Kushughulikia Bunduki na Kulenga

Unaweza kutumia Kijijini cha Wii yenyewe kama bunduki, ukiangalia juu. Unaweza pia kununua moja wapo ya bunduki za kibiashara kwa hiyo. Lakini kwa sababu Remote ya awali ya Wii haikuwa na uwezo wa kutumia kama bunduki inayoonekana, kasino huwa hazikuja na vituko vya chuma, na vituko vya chuma huboresha sana usahihi.

Niliunda mfumo rahisi wa kuchapishwa wa 3D wa sehemu tatu: kipini cha kusambaza ambacho kinakaa nyuma tu ya kichocheo (kwa hivyo inaonekana kama phaser ya Star Trek Original Series), na vituko vya kutazama. Faili zilizochapishwa ziko hapa. Ikiwa unataka kuweka akiba kwenye plastiki kwa gharama ya kuni chakavu, unaweza pia kufanya kile nilichofanya na badala ya kuchapa kipini nzima, chapisha tu sehemu ambayo inashikilia Wiimote, na ukate kipande cha mbao na kukikunja.

Kwa kuona, zingatia macho yako kwenye vituko. Panga bonge la kuona mbele kati ya matuta ya kuona nyuma ili nafasi ya hewa iwe sawa na matuta yote matatu yatengane sawa sawa. Kisha linganisha katikati ya lengo na juu ya matuta.

Kumbuka: Urefu wa matuta hayalingani, na matone ya mbele yapo chini kidogo, ili kulipia urefu wa matuta ya kuona wakati unapoona pamoja nao kwa umbali wa mita 2.5 (umbali wangu kwa TV). Ikiwa una umbali tofauti sana na TV, unaweza kuiweka kwenye faili za OpenSCAD. Marekebisho haya yanaweza kuwa chini ya uvumilivu wa printa, hata hivyo. Pia, ikiwa haukufanya marekebisho ya wima kwenye programu, unaweza kuongeza marekebisho zaidi kwa vituko kwenye programu hiyo kwa kuweka extraSightAdjust to something around -8 (in millimeters).

Hatua ya 8: Calibration III (Hiari): Marekebisho ya Faini

Ikiwa unataka usahihi zaidi, unaweza kukimbia:

python3 ~ / lightgun / lightgun.py -d

(kwa demo) na uangalie kwa uangalifu ikiwa vituko vinaambatana na nywele za msalaba. Ikiwa hawafanyi hivyo, toka na hariri kwa mikono ~ /.wiilightgun / wiimotecalibration, na ubadilishe uratibu wa x na y wa kituo cha kamera kidogo ili kurekebisha mwonekano. Kwa mfano, bunduki yangu ilikuwa ikipiga risasi kidogo kulia, kwa hivyo niliishia kubadilisha kuratibu x kutoka 529 hadi 525. Nambari za kila mtu labda zitakuwa tofauti.

Hatua ya 9: Kiambatisho: Algorithm

Kiambatisho: Algorithm
Kiambatisho: Algorithm

Nambari ya kuiga panya inafanya kazi kama ifuatavyo.

  • Vyombo vya habari vya vifungo vya mchakato.
  • Pata data kutoka kwa kamera na urekebishe upimaji wa katikati wa kamera.
  • Ikiwa chini ya LED tatu zinaonekana kwenye kamera:

    Weka nafasi ya mwisho ya panya

  • Ikiwa LED tatu au nne zinaonekana:

    • Tumia data ya kasi ya Wiimote kupata mwelekeo wa Wiimote na utambue ni picha gani ya kamera ya LED inayolingana na LED gani ya mwili.
    • Ikiwa LED nne zinaonekana:

      • Kokotoa hesabu kati ya picha za kamera za LED na maeneo ya LED (katika viwianishi vya skrini).
      • Tumia masimulizi kukokotoa eneo la skrini linalolingana na kituo cha mwonekano wa kamera.
      • Fanya marekebisho ya Y kurekebisha katikati ya pipa la bunduki chini ya mstari wa kuona. Hii ni algorithm ya kludgy lakini inafanya kazi.
      • Weka nafasi ya panya kwenye eneo la skrini lililobadilishwa.
    • Ikiwa LED tatu zinaonekana:

      • Tumia OpenCV kutatua shida ya P3P kati ya picha za kamera za LED na maeneo ya LED ya mwili. Hii inazalisha suluhisho nne.
      • Ikiwa imefanikiwa:

        • Ikiwa tuna hesabu ya eneo lililofanikiwa hapo awali, chagua suluhisho linalofanya taa inayokosekana iwe karibu zaidi na nafasi ya mwisho iliyozingatiwa au iliyohesabiwa ya LED hiyo.
        • Ikiwa hatuna hesabu ya eneo lililofanikiwa hapo awali, chagua suluhisho ambalo linatabiri vyema kichwa cha kasi.
        • Tumia suluhisho bora kuhesabu ni wapi LED ya nne inapaswa kwenda.
        • Fanya zingine zote katika kesi nne za LED.
      • Ikiwa haikufanikiwa:

        Weka nafasi ya mwisho ya panya

Ilipendekeza: