Sisukord:
- Tarvikud
- Samm: infrapuna LED -kett
- Samm: kinnitage teleriga
- Samm: installige tarkvara
- 4. samm: kalibreerimine I osa: kaamera tsentreerimine
- 5. samm: kalibreerimine II etapp: valgusdioodid
- 6. samm: testimine ja kasutamine
- 7. samm: relva käepide ja sihtimine
- 8. samm: III kalibreerimine (valikuline): peen reguleerimine
- 9. samm: Lisa: algoritm
Video: Täpne Wiimote valguspüstol vaarika PI jaoks: 9 sammu (piltidega)
2024 Autor: John Day | [email protected]. Viimati modifitseeritud: 2024-01-30 08:46
Tavaliselt pole kerge relvana kasutatav Wii kaugjuhtimispult piisavalt täpne selliste retromängude jaoks nagu NES Duck Hunt, sest Wii Remote ei vali tegelikult televiisorist punkti, millele see on suunatud. See ei saa! Wii Remote'i ees on infrapunakaamera, mis näeb anduriribal infrapuna -LED -de joont, kuid see ei saa teada, kui kaugel (või mis suunas) teler ribast asub või kui suur teler on. Emulaatorid ja mängud töötavad selle ümber, näidates risti või muid sihtimisnäitajaid, kuid see pole täpne sihtmärgi laskmise kogemus.
Selleks, et Wii Remote töötaks täpse valguspüstolina, mida telerist sihtmärgi valimiseks näete, on vaja nelja infrapuna -LED -i, mis on paigutatud teadaoleva nelinurkse (mitte sirgjoonelise) mustriga teleriga samal tasapinnal. Seejärel näeb Wii Remote nelja LED -i ja kaamera pilti saab kasutada homograafia arvutamiseks, mis võimaldab meil aru saada, kuhu kaamera osutab.
Selle projekti riistvara on lihtne. Lihtsates 3D-prinditud korpustes on neli infrapuna-LED-i, mida saab liimida teleri korpuse üla- ja alaossa ning ühendada USB-laadijaga. Lisaks, kui teil pole Wii püstoli korpust, on mul lihtne 3D -prinditud käepide ja vaatamisväärsused, mille saate Wii Remote'i külge kinnitada (kuigi plasti säästmiseks tegin ma puidu ja 3D -prinditud plasti vahelise hübriidi).
Pythonil põhinevat tarkvara oli raskem valmistada kui riistvara ja see on praegu ainult Linuxi jaoks. See kalibreerib valgusdioodid ja Wii kaugjuhtimispuldi ning kasutab seejärel homograafiaarvutusi, et jäljendada absoluutset hiirt, mis töötab minu Raspberry PI 3B+Retroarchi fceumm NES emulaatoris (ja tõenäoliselt ka mõnes muus emulaatoris) üsna hästi.
Tarvikud
- Wii kaugjuhtimispult
- Neli 940 nm 5 mm infrapuna -LED -i
- Vana USB -kaabel töötava A -tüüpi pistikuga
- Raspberry PI 3 või muu Bluetooth -toega Linuxi arvuti
- 3D -printer ja hõõgniit (valikuline)
Samm: infrapuna LED -kett
Hankige vana USB -kaabel, millel on töötav A -tüüpi pistikupesa (tavaliselt mu telefoni laadimiskaablid purunevad mikro -USB -otsas, nii et mul on A -tüüpi isase pesaga kaablijääke).. Tegelikult on isegi OK, kui andmekaablid on katki, kuni elektriliinid töötavad. Lõika teine ots ära. Teoreetiliselt peaks punane kaabel olema +5 V ja must maandatud, kuid kontrollige seda multimeetriga (ühendage see laadijaga ja seejärel kontrollige pinget punase ja musta juhtme vahel).
Kuna infrapuna-LED-idel on pingelangus umbes 1,2-1,3 V, siis ma jootsin neist neli järjestikku USB-kaabli külge. Veenduge, et jootetavad juhtmed on piisavalt pikad, et saaksite LED -id panna teleri alla ja kaks ülaossa, kusjuures valgusdioodide vahele jääks korralik horisontaalne ruum (umbes 10 tolli või nii).
LED -silmuse tegemiseks täpsemalt:
- jootke esimese LED -i miinuspool (katood, lühem jalg, lameda servaga) +5 V USB -juhtme külge
- ühendage esimese LED -i plusspool (anood, pikem jalg, ümara servaga) teise LED -i miinuspoolega
- korrake teise LED -i ühendamiseks kolmanda ja kolmanda neljandaga
- seejärel ühendage neljanda LED -i plusspool juhtmega maandatud USB -juhtmega.
Asjade korralikumaks muutmiseks võite ühenduste tegemisel kasutada termokahanevaid torusid. Vastasel juhul kasutage lühiste vältimiseks elektrilinti.
Veenduge, et teil pole lühiseid. Seejärel ühendage see USB -laadijaga ja kontrollige, kas see kiirgab infrapunavalgust, vaadates telefoni kaameraga LED -e. (Paljud telefonikaamerad on infrapunatundlikud.)
Samm: kinnitage teleriga
Nüüd kinnitage kaks LED -i teleri alumisele küljele ja kaks ülemisele küljele. Horisontaalne vahekaugus peaks olema umbes kümme tolli. Kui seda on liiga palju, võib teil olla probleeme Wii Remote kaamera vaateväljaga, mis neid kõiki jäädvustab. Aga kui need on liiga lähedal, siis minu geomeetriline intuitsioon ütleb, et teil on väiksem täpsus.
Testimiseks teipisin LED -id elektrilindiga ja seejärel püsiühenduse jaoks kujundasin ja printisin neli korralikku väikest LED -klambrit (failid on siin), mille liimisin kuumalt telerile. Valgusdioodid peaksid olema teleriekraani tasapinnale võimalikult lähedal, ilma et raam varjaks neid pildistamise kohast.
Samm: installige tarkvara
Praegu on tarkvara mõeldud ainult Linuxile. Järgmine seadistus on mõeldud Raspberry PI 3 jaoks koos Raspbian Stretchiga. Teised Linuxi süsteemid nõuavad mõningaid muudatusi. Varasematel mudelitel on teil vaja Bluetooth -donglit ja see tuleb käivitada ka käsurealt:
sudo get-apt install bluetooth
Samm A: udev
Seejärel looge failis /etc/udev/rules.d/wiimote.rules fail, mis sisaldab ühte rida:
KERNEL == "uinput", MODE = "0666"
Seda saate teha näiteks tekstiredaktoriga või tippides käsureale järgmise:
sudo sh -c 'echo KERNEL == / "uinput \", MODE = / "0666 \"> /etc/udev/rules.d/wiimote.rules'
Ja siis taaskäivitage udev:
sudo /etc/init.d/udev taaskäivitage
Samm B: cwiid
Järgmisena vajate minu muudetud cwiidipaketti. Siin läheb see natuke karvaseks, sest ideaaljuhul peaksite selle oma Raspberry PI -le üles ehitama, kuid pean tunnistama, et olen kaotanud ülevaate sellest, millised paketid peate selle toimimiseks installima. Selle tegemiseks on kolm võimalust.
Variant B1: ehitage ise
cd ~
git kloon https://github.com/arpruss/cwiid-1 autoconf./configure make -C libcwiid sudo make -C libcwiid install make -C python sudo make -C python install
Kahjuks on üsna hea võimalus, et teil on puudu hulk selle ehitamiseks vajalikke asju ja./configure kaebab. Saate vaadata kõiki asju, mille üle ta kaebab, ja käivitada kõigil neist sudo apt install.
Valik B2: kasutage minu binaarfaili
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
Etapp C: pythoni teegid
Lõpuks hankige minu lightgun pythoni skripti jaoks tugiteenused:
sudo pip3 installige uinput numpy pygame opencv-python
sudo apt-get install libatlas-base-dev sudo apt-get install libjasper-dev sudo apt-get install libqtgui4 sudo apt-get install python3-pyqt5
Samm D: lightgun.py
Lõpuks hankige minu lightgun pythoni skript:
cd ~
git kloon
Kui kõik on hästi läinud, on teil nüüd ~/lightgun.py, mille abil saate tulirelva kalibreerida.
4. samm: kalibreerimine I osa: kaamera tsentreerimine
Kalibreerimisel on kaks aspekti. Esimene on kalibreerida kaamera keskosa igal Wiimote'il. Selleks on vaja kasutada kaamerat, et teha kaks pilti televiisori ekraani ümbritsevatest LED-idest, üks kaugjuhtimispult parempoolne ülespoole ja teine tagurpidi.
Et vältida nuppude vajutamist, kui asetate Wii puldi selle esiküljele ja et Wii kaugjuhtimispult oleks ühtlase kõrgusega, saate siin lisatud kalibreerimistööriista 3D -printida. Põhimõtteliselt vajate 10,5 mm paksuseid asju, mida saate Wii puldi alla panna, kui see asub selle esiküljel. Ma kasutasin plasti säästmiseks tegelikult vanametalli.
Lülitage valgusdioodid sisse ja veenduge, et teie Raspberry PI või mõni muu arvuti kuvatakse teleris. Ühendage klaviatuur (see ei tööta ssh -ga) või kasutage VNC -d. Seejärel käivitage:
python3 ~/lightgun/lightgun.py -M
Kui kõik läheb hästi, kuvatakse täisekraanil ekraan, kus palutakse vajutada Wii puldil nuppu 1+2. Tee seda. Wii kaugjuhtimispuldil vilguvad tuled ning seejärel jäävad põlema tuled 1 ja 4. Samuti näete ekraani ülaosas väikest rohelist ristkülikut, kust avaneb vaade Wii Remote kaamerale. Suunake Wii kaugjuhtimispult LED -ide poole ja kui kõik läheb hästi, näete nelja LED -i, nummerdatud 1 kuni 4.
Nüüd peate leidma terava servaga kindla pinna, näiteks kohvilaua, mille saate suunata teleri ekraanile ja mis võimaldab Wii -kaugjuhtimispuldil näha kõiki LED -e, mille Wii -kaugjuhtimispult on servaga joondatud. Alustuseks joondage Wii Remote parempoolne külg üles, nii et kaugjuhtimispuldi külg on joondatud pinna servaga, veendudes, et kõik neli LED -i oleksid nähtavad. Seejärel vajutage klaviatuuril SPACE (või kinnitage Nunchuck ja vajutage C, kui see on mugavam). Seejärel palutakse teil Wii kaugjuhtimispulti pöörata. Nüüd veenduge, et see oleks kalibreerimisvahendi või millegi muu abil teie pinnast 10,5 mm kõrgemale tõstetud ja samale kohale nagu varem (nt joondatud sama pinna servaga). Vajutage uuesti SPACE.
Kui kõik läheb hästi, lähete nüüd LED -i kalibreerimisetappi. Jah, see on keeruline! Kuid teil on väga täpne tulirelv. See on lihtsalt hind.
Märkus. Kui teil, nagu minul, on teleri all Wii, tuleb Wii välja lülitada kahel põhjusel: esiteks, kui Wii on sisse lülitatud, ühendatakse see Wiimote'iga ja teiseks häirivad anduriba infrapuna -LED -id seda projekti. Sarnastel põhjustel on Wii kasutamise ajal hea mõte teleri ümber olevad valgusdioodid lahti ühendada.
5. samm: kalibreerimine II etapp: valgusdioodid
Nüüd peate tarkvarale ütlema, kus LED -id asuvad teleri serva ümber. Näete teleri serva ümber kalibreerimisekraani, millel on neli noolt, üks neist valitud (hele) ja kolm neist hallid. Kasutate +/-, et muuta, millist noolt te reguleerite.
Tehke iga nelja serva ümber asuva noole puhul järgmist.
- vajutage Wiimote'il vasakule/paremale, et liigutada nooli, kuni need osutavad nii täpselt kui võimalik vastava valgusdioodi poole;
- vajutage Wiimote'il üles/alla, et muuta noole pikkust, kuni noole pikkus vastab LED -i ja teleriekraani serva vahekaugusele; teisisõnu, noole pikkus peab olema võrdne kaugusega noole otsast valgusdioodini.
Kui teie neli noolt on õiged (ja võib -olla isegi varem), näete Wiimote'i ekraanile suunamisel punast sihti. Saate kontrollida, kas see peaks seal olema. (Pidage meeles, et peate olema piisavalt kaugel, et Wiimote näeks kõiki LED -e. Samuti on oluline, et vaateväljas ei oleks muid infrapunaallikaid. Mul oli kunagi probleeme, kuna päikesevalgus peegeldas TV -alus.)
Lõpuks on viies nool, mis ilmub alles siis, kui vajutate neljanda LED -noole + klahvi või - esimesest (ja sellel on vaikimisi nullpikkus, seega on see vaid piksel). See nool reguleerib, kui kaugele Wii puldi kaamera kohal võte registreeritakse. Probleem on järgmine: näete Wii kaugjuhtimispuldi ülemist pinda. Kuid kaamera asub tegelikult sellest pinnast mõnevõrra allpool, Wii kaugjuhtimispuldi esiosa musta ristküliku keskel. Kui registreeriksime kaadrid, kuhu kaamera osutab, registreeritaks need umbes 8 mm allpool Wii puldi ülemist pinda. Seda saate kontrollida, märkides, et ülemist pinda vaadates on kaamera risti juuste keskosa varjatud.
Saate sellele kaasa elada või kasvatada selle viienda noole, et tarkvara joondada kaadrid Wii Remote'i ülaosaga, või saate selle kompenseerimiseks reguleerida 3D prinditavaid faile raua sihikute jaoks (kuid kompensatsioon töötab ainult televiisorist teatud kaugusel). Ma läksin ise tarkvara joondamisele.
Kalibreerimisest väljumiseks ja kõigi andmete salvestamiseks kataloogi ~/.wiilightgun vajutage Wii kaugjuhtimispuldil nuppu HOME.
6. samm: testimine ja kasutamine
Tõenäoliselt tahate nüüd oma kerge relva proovida. Lihtsalt käivitage terminaliemulaator (või skript):
python3 ~/lightgun/lightgun.py -t
Peate samal ajal vajutama 1+2 nuppe ja pärast seda, kui kõik läheb hästi, nii kaua kui lightgun.py töötab, jäljendab valguspüstol kahe nupuga absoluutset hiirt. Päästikunupp on hiirenupp 1 ja nupp A on hiirenupp 2. Väljumiseks vajutage klahvikombinatsiooni ctrl-c.
Nüüd peate konfigureerima ainult oma emulaatorid ja/või mängud absoluutse hiirega töötamiseks. Kahjuks pole see alati nii lihtne.
Üks lõbus asi, mida võiksite proovida, on minu iminurnamezi pardi-pardi võrse mod:
cd ~
git kloon https://github.com/arpruss/duck-duck-shoot cd duck-duck-shoot python play_game.py
NES mängude puhul kasutan Retroarchis libretro fceumm tuuma. Minge menüüsse Valikud ja konfigureerige Zapper puuteekraaniks. (Selle seadistamine hiireks ei toimi tegelikult, kuna fceumm eeldab suhtelist liikumist, mitte absoluutse positsiooni hiirt.)
Kui alustate oma mänge skriptiga, saate mängu või emulaatorit käivitavat osa muuta järgmiselt:
python3 ~/lightgun/lightgun.py -t -B 30 "käsk mängu alustamiseks"
Seejärel saate mängu täitmise esimese 30 sekundi jooksul (seega valik -B 30) ühendada oma tulirelva, hoides all nuppu 1+2.
Muide, skripti lightgun.py saab kasutada ka üldiste Wii kaugmängude jaoks Retroarchiga. Lihtsalt lisage -o ja valguspüstoli funktsioonid lülitatakse välja ning selle asemel töötab Wii Remote horisontaalselt, kolm nuppu on vastavalt 1, 2 ja B. Lightgun.py kaardistustes on ka teisi Retroarchiga seotud funktsioone, mille leiate koodi lugedes. Näiteks toimib miinusklahv nihkena ning koos dpadiga juhib salvestamist ja laadimist (üles/alla = muuda salvestusnumbrit; vasak = taasta; parem = salvesta).
7. samm: relva käepide ja sihtimine
Võite kasutada Wii Remote'i relvana, vaadates ülaosas. Selle jaoks saate osta ka ühe kaubandusliku relvaümbrise. Kuid kuna originaalset Wii Remote'i ei saanud kasutada ohkamispüstolina, ei pruugi korpused olla kaasas rauast sihikutega ja rauast sihikud parandavad oluliselt täpsust.
Kujundasin lihtsa kolmeosalise 3D-prinditava süsteemi: libistatava käepideme, mis asub päästiku taga (nii et see näeb välja natuke nagu Star Treki originaalseeria faaser), ja libistatavad vaatamisväärsused. Prinditavad failid on siin. Kui soovite plasti pealt kokku hoida puidujäätmete arvelt, võite teha ka seda, mida mina tegin, ja selle asemel, et trükkida kogu käepide, printida ainult see osa, mis Wiimote'i hoiab, ja lõigata välja puidust tükk ja keerata see kinni.
Nägemiseks keskenduge oma vaatamisväärsustele. Joondage eesmise sihiku löök tagumise sihiku konaruste vahele nii, et õhuruum oleks mõlemal võrdne ja kõik kolm muhku oleksid võrdselt kõrged. Seejärel joondage sihtmärgi keskosa muhke ülaosaga.
Märkus: muhke kõrgus on veidi ebavõrdne, eesmise sihiku kühm on veidi madalam, et kompenseerida sihiku kõrgust, kui näete neid mööda 2,5 meetri kaugusel (minu kaugus telerist). Kui teil on televiisorist oluliselt erinev kaugus, saate selle sisestada OpenSCAD -failidesse. See reguleerimine võib siiski jääda allapoole printeri lubatud hälbeid. Samuti, kui te ei teinud tarkvara vertikaalset reguleerimist, saate tarkvara vaatamisväärsustele veel natuke kohandada, määrates extraSightAdjust väärtuseks umbes -8 (millimeetrites).
8. samm: III kalibreerimine (valikuline): peen reguleerimine
Kui soovite veelgi täpsust, võite joosta:
python3 ~/lightgun/lightgun.py -d
(demo jaoks) ja vaadake hoolikalt, kas vaatamisväärsused joonduvad risti. Kui ei, siis väljuge ja muutke käsitsi ~/.wiilightgun/wiimotecalibration ning muutke nägemise reguleerimiseks kaamera keskpunkti x- ja y -koordinaate veidi. Näiteks tulistas mu relv veidi paremale, nii et muutsin x -koordinaadi 529 -lt 525 -le. Tõenäoliselt on kõigi numbrid erinevad.
9. samm: Lisa: algoritm
Hiire jäljenduskood töötab umbes järgmiselt.
- Protsessi nuppude vajutamine.
- Hankige andmed kaamerast ja kohandage kaamera tsentreerimise kalibreerimiseks.
-
Kui kaameras on näha vähem kui kolm LED -i:
Hoidke hiire viimast positsiooni
-
Kui kolm või neli LED -i on nähtavad:
- Kasutage Wiimote kiirendusmõõturi andmeid, et saada Wiimote'i orientatsioon ja tuvastada, milline LED -kaamera pilt vastab füüsilisele LED -ile.
-
Kui neli LED -i on nähtavad:
- Arvutage homograafia LED -kaamerapiltide ja LED -asukohtade vahel (ekraani koordinaatides).
- Kasutage homograafiat, et arvutada, milline ekraani asukoht vastab kaamera vaatevälja keskpunktile.
- Tehke Y-reguleerimine, et kohandada virtuaalse püstolitoru keskpunkti vaatejoonest allpool. See on pisut kummaline algoritm, kuid see töötab.
- Määrake hiire asend ekraani kohandatud asukohale.
-
Kui kolm LED -i on nähtavad:
- Kasutage OpenCV -d, et lahendada LED -kaamera piltide ja LED -ide füüsiliste asukohtade vaheline P3P -probleem. See annab kuni neli lahendust.
-
Kui õnnestub:
- Kui meil on varasem edukas asukohaarvutus, valige lahendus, mis muudab puuduva LED -i selle LED -i viimati täheldatud või arvutatud asukohale kõige lähemale.
- Kui meil pole varasemat edukat asukohaarvestust, valige kiirendusmõõturi suunda kõige paremini ennustav lahendus.
- Kasutage parimat lahendust, et arvutada, kuhu neljas LED peaks minema.
- Tehke ülejäänud, nagu nelja LED -korpuse puhul.
-
Kui ei õnnestu:
Hoidke hiire viimast positsiooni
Soovitan:
Arduino täpne ja täpne voltmeeter (0-90V DC): 3 sammu
Arduino täpne ja täpne voltmõõtur (0–90 V alalisvool): selles juhendis olen ehitanud voltmeetri, mis mõõdab Arduino Nano abil suhteliselt täpselt ja täpselt kõrgepingeid (0–90 v). Minu tehtud katsemõõtmised olid piisavalt täpsed, enamasti 0,3 V piires tegelikust pingest, mida mõõdeti
Lihtne seadistada IR -kaugjuhtimispult LIRC abil vaarika PI (RPi) jaoks - juuli 2019 [1. osa]: 7 sammu
Lihtne seadistada infrapuna kaugjuhtimispult LIRC abil Raspberry PI (RPi) jaoks - juuli 2019 [1. osa]: Pärast pikka otsimist olin üllatunud ja hämmeldunud vastuolulise teabe üle, kuidas oma RPi projekti jaoks IR -kaugjuhtimispulti seadistada. Ma arvasin, et see oleks lihtne, kuid Linuxi infrapunajuhtimise (LIRC) seadistamine on olnud pikka aega problemaatiline
DIY Arduino toitega IR -valguspüstol: 12 sammu
DIY Arduino Powered IR Light Gun: SAMCO on Namco GunCon, mille siseküljed on asendatud Arduino mikrokontrolleri ja DF Robot IR positsioneerimiskaameraga ning töötab HID -hiirena LCD (lameekraan) teleril/monitoridel. Püstol töötab praegu RetroPie -s Mame'iga (Raspberry Pi jaoks), PSX Beetl
Kuidas teha täpne õhuvoolu andur Arduinoga alla 20 naelsterlingi COVID-19 ventilaatori jaoks: 7 sammu
Kuidas teha Arduinoga täpne õhuvoolu andur alla 20 naela suuruse COVID-19 ventilaatori jaoks: selle ava vooluanduri viimase disaini jaoks vaadake seda aruannet: https://drive.google.com/file/d/1TB7rhnxQ6q6C1cNb. ..See juhend juhendab, kuidas ehitada õhuvoolu andurit, kasutades odavat rõhuerinevuse andurit ja hõlpsasti
Loo oma graafikud minu IOT -andmete jaoks vaarika PI -l: 3 sammu
Loo oma graafikud minu IOT -andmete jaoks vaarika PI -l: Palun lugege edasi, kui soovite luua oma IOT -graafikuid, kasutades 7 koodirida. Tahtsin luua diagramme, et kuvada andmed IOT -andurite graafilises vormingus veebilehel. Varem olin selleks kasutanud kolmanda osapoole teenuseid (mõned