Talaan ng mga Nilalaman:

Tumpak na Wiimote Light Gun para sa Raspberry PI: 9 Mga Hakbang (na may Mga Larawan)
Tumpak na Wiimote Light Gun para sa Raspberry PI: 9 Mga Hakbang (na may Mga Larawan)

Video: Tumpak na Wiimote Light Gun para sa Raspberry PI: 9 Mga Hakbang (na may Mga Larawan)

Video: Tumpak na Wiimote Light Gun para sa Raspberry PI: 9 Mga Hakbang (na may Mga Larawan)
Video: Tumpak na antas ng metro 2024, Nobyembre
Anonim
Tumpak na Wiimote Light Gun para sa Raspberry PI
Tumpak na Wiimote Light Gun para sa Raspberry PI
Tumpak na Wiimote Light Gun para sa Raspberry PI
Tumpak na Wiimote Light Gun para sa Raspberry PI

Karaniwan, ang Wii Remote na ginamit bilang isang light gun ay hindi sapat na tumpak para sa mga retro game tulad ng NES Duck Hunt, sapagkat ang Wii Remote ay hindi sa katunayan pipili ng punto sa TV na tinuro nito. Hindi pwede! Ang Wii Remote ay may infrared camera sa harap nito na nakikita ang linya ng infrared LEDs sa sensor bar, ngunit hindi nito malalaman kung gaano kalayo (o sa anong direksyon) ang TV ay mula sa bar o kung gaano kalaki ang TV. Gumagana ang mga emulator at laro sa paligid nito sa pamamagitan ng pagpapakita ng mga cross-hair o iba pang tagapagpahiwatig ng pag-target, ngunit hindi iyon isang tumpak na karanasan sa pag-shoot ng target.

Upang magawa ang Wii Remote na gumana bilang isang tumpak na light gun na maaari mong makita kasama ang pumili ng isang target sa isang TV ay nangangailangan ng apat na infrared LEDs na nakaayos sa isang kilalang pattern na quadrilateral (hindi isang tuwid na linya) sa parehong eroplano ng TV. Pagkatapos ay nakikita ng Wii Remote ang apat na LEDs at ang imahe ng camera ay maaaring magamit upang makalkula ang isang homography na nagbibigay-daan sa amin upang malaman kung saan nakaturo ang camera.

Ang hardware para sa proyektong ito ay simple. Mayroong apat na infrared LEDs sa simpleng mga 3D-print na bahay na maaaring nakadikit sa tuktok at ibaba ng pabahay ng TV at isaksak sa isang USB charger. Dagdag pa, kung sakaling wala kang pabahay ng Wii gun, mayroon akong isang simpleng naka-print na hawakan ng 3D at mga pasyalan na maaari mong ilakip sa Wii Remote (bagaman upang makatipid ng plastik, gumawa ako ng minahan ng isang hybrid sa pagitan ng kahoy at 3D na naka-print na plastik).

Ang python-based software ay mas mahirap na gumawa ng kaysa sa hardware at kasalukuyang Linux-only. Ino-calibrate nito ang mga LED at ang Wii Remote at pagkatapos ay gumagamit ng mga kalkulasyon ng homography upang tularan ang isang ganap na mouse na gumagana nang maayos sa emulator ng Retroarch fceumm NES (at marahil ilang iba pang mga emulator) sa aking Raspberry PI 3B +.

Mga gamit

  • Wii Remote
  • Apat na 940nm 5mm infrared LEDs
  • Lumang USB cable na may isang gumaganang uri ng isang plug
  • Raspberry PI 3 o ibang Linux computer na may suporta sa Bluetooth
  • 3D printer at filament (opsyonal)

Hakbang 1: Infrared LED Chain

Infrared LED Chain
Infrared LED Chain
Infrared LED Chain
Infrared LED Chain

Kumuha ng isang lumang USB cable na may isang uri ng pagtatrabaho Isang male socket (karaniwang ang aking mga singilin na cable ng telepono ay masira sa dulo ng micro USB, kaya't mayroon akong mga natirang cable na may isang nagtatrabaho na uri ng isang male socket).. Sa totoo lang, OK lang kung ang data cables ay nasira basta gumana ang mga linya ng kuryente. Putulin ang kabilang dulo. Sa teorya ang pulang kable ay dapat na + 5V at ang itim ay dapat na lupa, ngunit suriin ito sa isang multimeter (isaksak ito sa isang charger, at pagkatapos suriin ang boltahe sa pagitan ng pula at itim na mga wire).

Dahil ang mga infrared LEDs ay may humigit-kumulang na 1.2-1.3V boltahe na drop, na-solder ko lang ang apat sa mga ito sa serye ng loop sa USB cable. Siguraduhin na ang mga wire na iyong hinangang ay sapat na haba upang mailagay mo ang mga LED sa ilalim ng TV at dalawa sa itaas, na may disenteng dami ng pahalang na puwang sa pagitan ng mga LED (mga 10 pulgada o higit pa).

Mas tiyak na gawin ang LED loop:

  • paghihinang ang minus na bahagi (cathode, mas maikli ang paa, na may flat edge) ng unang LED sa + 5V USB wire
  • sumali sa plus side ng unang LED (anode, mas mahaba ang binti, na may bilog na gilid) sa minus na bahagi ng pangalawang LED
  • ulitin upang sumali sa pangalawang LED sa pangatlo at ang pangatlo sa pang-apat
  • pagkatapos ay ikonekta ang plus side ng ika-apat na LED na may isang wire sa ground USB wire.

Upang gawing mas maayos ang mga bagay, maaari mong gamitin ang heat shrink tubing kapag ginawa mo ang mga koneksyon. Kung hindi man, gumamit ng electrical tape upang maiwasan ang mga shorts.

Tiyaking wala kang mga maikling circuit. Pagkatapos ay i-plug ito sa isang USB charger at suriin na naglalabas ito ng infrared light sa pamamagitan ng pagtingin sa mga LED gamit ang isang camera ng telepono. (Maraming mga camera ng telepono ang sensitibo sa infrared.)

Hakbang 2: Mag-attach sa TV

Maglakip sa TV
Maglakip sa TV
Maglakip sa TV
Maglakip sa TV
Maglakip sa TV
Maglakip sa TV

Ngayon, ikabit ang dalawa sa mga LED sa ilalim ng TV at dalawa sa itaas na bahagi. Ang pahalang na spacing ay dapat na halos sampung pulgada. Kung sobra ito, maaari kang magkaroon ng mga problema sa larangan ng view ng Wii Remote camera na kinukuha silang lahat. Ngunit kung ang mga ito ay masyadong malapit, at pagkatapos ay ang aking mga geometriko kawatasan sabi ni magkakaroon ka ng mas mababang katumpakan.

Para sa pagsubok, nai-tape ko ang mga LED na may electrical tape, at pagkatapos para sa isang permanenteng koneksyon, dinisenyo at na-print ko ang apat na malinis na maliit na mga LED clip (ang mga file ay narito) na mainit kong nakadikit sa TV. Dapat mong gawin ang mga LED na maging malapit sa eroplano ng display sa TV hangga't maaari, nang hindi tinakpan ng bezel ang mga ito mula sa lokasyon kung saan ka mag-shoot.

Hakbang 3: I-install ang Software

Sa kasalukuyan ang software ay sa Linux lamang. Ang sumusunod na pag-set up ay idinisenyo para sa Raspberry PI 3 na may Raspbian Stretch. Ang ibang mga sistema ng Linux ay mangangailangan ng ilang mga pagbabago. Sa mga naunang modelo kailangan mo ng isang dongle ng Bluetooth at kakailanganin mo ring patakbuhin ito mula sa isang commandline din:

sudo get-apt i-install ang Bluetooth

Hakbang A: udev

Susunod, lumikha ng isang file sa /etc/udev/rules.d/wiimote.rules na naglalaman ng solong linya:

Kernel == "uinput", MODE = "0666"

Maaari mong gawin iyon, halimbawa, sa isang text editor o sa pamamagitan ng pagta-type ng sumusunod sa commandline:

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

At pagkatapos ay i-restart ang udev:

sudo /etc/init.d/udev restart

Hakbang B: cwiid

Susunod, kakailanganin mo ang aking binagong pakete ng cwiid. Dito nakakakuha ng kaunting mabuhok na ayon sa perpektong kakailanganin mong itayo ito sa iyong Raspberry PI, ngunit kailangan kong ipagtapat na nawala sa aking subaybayan kung anong mga pakete ang kailangan mong i-install upang ito ay gumana. Mayroong tatlong mga pagpipilian para sa paggawa nito.

Pagpipilian B1: Buuin ang iyong sarili

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

Sa kasamaang palad, mayroong isang magandang pagkakataon na nawawala ka ng maraming mga bagay-bagay na kinakailangan para sa pagbuo nito, at./configure ay magreklamo. Maaari mong tingnan ang lahat ng mga bagay na inirereklamo nito at patakbuhin ang sudo apt na mai-install sa kanilang lahat.

Opsyon B2: Gamitin ang aking mga binary

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

Hakbang C: mga aklatan ng sawa

Panghuli, kumuha ng mga bagay para sa suporta para sa aking lightgun python script:

sudo pip3 install 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

Hakbang D: lightgun.py

Sa wakas, kunin ang aking lightgun python script:

cd ~

git clone

Kung naging maayos ang lahat, mayroon ka na ngayong ~ / lightgun.py na maaari mong gamitin upang i-calibrate ang lightgun.

Hakbang 4: Pagkalibrate Bahagi I: Pagsasentro sa Camera

Pagkakalibrate Bahagi I: Pagsasentro sa Camera
Pagkakalibrate Bahagi I: Pagsasentro sa Camera
Pagkakalibrate Bahagi I: Pagsasentro sa Camera
Pagkakalibrate Bahagi I: Pagsasentro sa Camera
Pagkakalibrate Bahagi I: Pagsasentro sa Camera
Pagkakalibrate Bahagi I: Pagsasentro sa Camera

Mayroong dalawang aspeto sa pagkakalibrate. Ang una ay upang i-calibrate ang sentro ng camera sa bawat Wiimote. Kinakailangan nito ang paggamit ng camera upang kumuha ng dalawang larawan ng mga LED sa paligid ng iyong TV screen, isa na may remote na kanang bahagi sa itaas at ang isa pa ay nakabaligtad.

Upang maiwasan ang pagpindot sa mga pindutan kapag inilatag mo ang Wii Remote sa harap nito, at upang gawing pare-pareho ang pag-angat ng Wii Remote, maaari mong i-print ang 3D sa tool na pagkakalibrate na isinama ko rito. Karaniwan mong kailangan ang mga bagay na 10.5mm makapal na maaari mong ilagay sa ilalim ng Wii Remote kapag nakahiga ito sa harap. Gumamit talaga ako ng ilang scrap playwud upang makatipid sa plastik.

I-on ang iyong mga LED at siguraduhin na ang iyong Raspberry PI o iba pang computer ay ipinapakita sa TV. Ikonekta ang isang keyboard (ito ay hindi gumagana sa paglipas ng ssh) o gamitin VNC. Pagkatapos ay tumakbo:

python3 ~ / lightgun / lightgun.py -M

Kung maayos ang lahat, makakakuha ka ng isang full-screen display na humihiling sa iyo na pindutin ang 1 + 2 sa Wii Remote. Gawin mo yan. Ang mga ilaw ay mag-flash sa Wii Remote, at pagkatapos ang mga ilaw ng 1 at 4 ay mananatili. Makakakita ka rin ng isang maliit na berdeng rektanggulo sa tuktok ng screen, na may tanawin mula sa Wii Remote camera. Ituro ang Wii Remote sa mga LED at kung maayos ang lahat, makikita mo ang apat na LED, na may bilang na 1 hanggang 4.

Ngayon ay kailangan mong makahanap ng isang solidong ibabaw na may isang matalim na gilid, tulad ng isang mesa ng kape, na maaari mong ituro sa screen ng TV at payagan ang Wii Remote na makita ang lahat ng mga LED na nakaayos ang Wii Remote laban sa gilid. Magsimula sa pamamagitan ng paghanay ng Wii Remote sa kanang bahagi pataas, na nakahanay ang panig ng Remote laban sa ibabaw na gilid, tiyakin na ang lahat ng apat na LEDs ay makikita. Pagkatapos ay pindutin ang SPACE sa iyong keyboard (o maglakip ng isang Nunchuck at pindutin ang C kung mas maginhawa iyon). Pagkatapos ay sasabihan ka upang paikutin ang Wii Remote. Ngayon, tiyaking nakataas ito ng 10.5 mm pataas mula sa iyong ibabaw, gamit ang tool sa pag-calibrate o iba pa, at sa malapit sa parehong lokasyon tulad ng dati (hal. Nakahanay laban sa parehong gilid ng iyong ibabaw). Pindutin ulit ang SPACE.

Kung maayos ang lahat, pupunta ka ngayon sa hakbang sa pag-calibrate ng LED. Yup, kumplikado ito! Ngunit magkakaroon ka ng isang napaka tumpak na lightgun. Presyo lang yan.

Tandaan: Kung tulad ko mayroon kang Wii sa ilalim ng TV, kailangang patayin ang Wii para sa dalawang kadahilanan: una, kung ang Wii ay nakabukas, ito ay kumokonekta sa Wiimote at, pangalawa, ang mga infrared LED ng sensor bar ay makagambala ang proyektong ito Para sa mga katulad na kadahilanan, habang ginagamit mo ang Wii isang magandang ideya na i-unplug ang mga LED sa paligid ng TV.

Hakbang 5: Pagkakalibrate Hakbang II: Mga LED

Pagkakalibrate Hakbang II: Mga LED
Pagkakalibrate Hakbang II: Mga LED
Pagkakalibrate Hakbang II: Mga LED
Pagkakalibrate Hakbang II: Mga LED

Ngayon ay kailangan mong sabihin sa software kung saan matatagpuan ang mga LED sa paligid ng gilid ng TV. Makakakita ka ng isang screen ng pagkakalibrate na nagpapakita ng apat na arrow, isa sa mga ito ang napili (maliwanag) at tatlo sa kanila ang naka-grey, sa paligid ng gilid ng TV. Gumamit ka +/- upang lumipat sa pagbabago na arrow ikaw ay pag-aayos.

Para sa bawat isa sa apat na arrow sa paligid ng gilid, gawin ito:

  1. pindutin ang kaliwa / kanan sa Wiimote upang ilipat ang mga arrow hanggang sa ituro ang mga ito nang tumpak na maaari mong patungo sa kaukulang LED;
  2. pindutin pataas / pababa sa Wiimote upang baguhin ang haba ng arrow hanggang sa haba ng arrow ay tumutugma sa distansya sa pagitan ng LED at ng gilid ng display sa TV; sa madaling salita, ang haba ng arrow ay kailangang katumbas ng distansya mula sa dulo ng arrow hanggang sa LED.

Kapag ang iyong apat na arrow ay tama (at marahil kahit na mas maaga) makikita mo ang isang pulang crosshair kapag itinuro mo ang Wiimote sa screen. Maaari mong suriin na narito kung saan ito dapat. (Tandaan na kailangan mong maging malayo sapat na upang makita ng Wiimote ang lahat ng mga LED. Mahalaga rin na walang iba pang mga mapagkukunan ng infrared sa larangan ng pagtingin. Minsan akong nagkaproblema dahil sa sikat ng araw na sumasalamin sa isang ulo ng tornilyo sa TV stand.)

Sa wakas, mayroong isang ikalimang arrow, lalabas lamang iyon kapag pinindot mo ang + mula sa ika-apat na LED arrow o - mula sa una (at ito bilang default ay may haba ng zero, kaya't isang pixel lamang ito). Ito arrow inaayos gaano kalayo sa itaas ng mga camera ng Wii Remote ang shot ay nakarehistro. Ang isyu ay ito: ikaw ay sighting sa tabi ng tuktok ibabaw ng Wii Remote. Ngunit ang camera ay talagang matatagpuan sa ilang distansya sa ibaba ng ibabaw na iyon, sa gitna ng itim na rektanggulo sa harap ng Wii Remote. Kung nairehistro namin ang mga kuha kung saan nakaturo ang camera, mairehistro ang mga ito tungkol sa 8 mm sa ibaba ng tuktok na ibabaw ng Wii Remote. Maaari mong suriin ito sa pamamagitan ng pagpuna na sa iyong paningin sa tuktok na ibabaw, ang gitna ng mga cross-hair ay nakatago ng camera.

Maaari kang mabuhay kasama nito, o mapapalago mo ang pang-limang arrow na ito upang ihanay ng software ang mga shot sa tuktok ng Wii Remote, o maaari mong ayusin ang mga naka-print na file na 3D para sa mga tanawin ng bakal upang mabayaran ito (ngunit gagana lang ang kabayaran isang partikular na distansya sa TV). Nagpunta ako para sa pagkakahanay ng software sa aking sarili.

Pindutin ang HOME sa Wii Remote upang lumabas sa pagkakalibrate at i-save ang lahat ng data sa direktoryo ng ~ /.wiilightgun.

Hakbang 6: Pagsubok at Paggamit

Pagsubok at Paggamit
Pagsubok at Paggamit
Pagsubok at Paggamit
Pagsubok at Paggamit
Pagsubok at Paggamit
Pagsubok at Paggamit

Marahil ay nais mong subukan ang iyong light gun ngayon. Tumakbo lamang sa isang terminal emulator (o isang script):

python3 ~ / lightgun / lightgun.py -t

Kakailanganin mong pindutin ang mga pindutan ng 1 + 2 nang sabay, at pagkatapos nito kung maayos ang lahat, hangga't tumatakbo ang lightgun.py, ang lightgun ay gagaya ng isang ganap na mouse na dalawang-pindutan. Ang pindutan ng pag-trigger ay pindutan ng mouse 1, at ang pindutang A ay pindutan ng mouse 2. Pindutin ang ctrl-c upang lumabas.

Kailangan mo na ngayong lamang-configure ang iyong mga emulators at / o mga laro sa trabaho na may isang ganap na mouse. Sa kasamaang palad, hindi palaging magiging madali iyon.

Ang isang nakakatuwang bagay na maaari mong subukan ay ang aking mod ng pato-pato-shoot ng iminurnamez:

cd ~

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

Para sa mga laro ng NES, ginagamit ko ang libretro fceumm core sa Retroarch. Pumunta sa menu ng Mga Pagpipilian, at i-configure ang Zapper upang maging isang touchscreen. (Ang pag-configure nito bilang isang mouse ay hindi aktwal na gumagana, tulad ng inaasahan ng fceumm na isang kilusan na medyo kaysa sa ganap na posisyon na mouse.)

Kung sinimulan mo ang iyong mga laro sa isang script, maaari mong i-edit ang bahagi na nagsisimula sa laro o emulator upang sabihin:

python3 ~ / lightgun / lightgun.py -t -B 30 "utos upang simulan ang laro"

Pagkatapos sa unang 30 segundo ng pagpapatupad ng laro (kaya't ang pagpipilian na -B 30), maaari mong ikonekta ang iyong lightgun sa pamamagitan ng pagpindot sa 1 + 2.

Sa pamamagitan ng paraan, ang lightgun.py script ay maaari ding magamit para sa pangkalahatang paglalaro ng Wii Remote na may Retroarch. Idagdag lamang ang opsyong -o at ang mga pagpapaandar ng lightgun ay papatayin, at sa halip ang Wii Remote ay gagana nang pahalang, kasama ang tatlong mga pindutan na 1, 2 at B ayon sa pagkakabanggit. Mayroong iba pang mga pagpapaandar na nauugnay sa Retroarch sa mga mapa ng lightgun.py na matutuklasan mo sa pamamagitan ng pagbabasa ng code. Halimbawa, ang minus key ay gumaganap bilang isang paglilipat, at kasama ang kontrol ng dpad sa pag-save at paglo-load (pataas / pababa = baguhin ang i-save ang numero; kaliwa = ibalik; kanan = i-save).

Hakbang 7: Hawak ng Baril at Paghangad

Gunle at Paghangad ng Baril
Gunle at Paghangad ng Baril
Gunle at Paghangad ng Baril
Gunle at Paghangad ng Baril
Gunle at Paghangad ng Baril
Gunle at Paghangad ng Baril

Maaari mong gamitin ang Wii Remote sa pamamagitan sarili nito bilang isang gun, sighting sa tuktok. Maaari ka ring bumili ng isa sa mga komersyal na casing gun para rito. Ngunit dahil ang orihinal na Wii Remote ay hindi kayang gamitin bilang isang nakikitang baril, ang mga pambalot ay may posibilidad na hindi dumating sa mga tanawin ng bakal, at ang mga tanawin ng bakal ay lubos na nagpapabuti sa kawastuhan.

Dinisenyo ko ang isang simpleng three-part 3D-printable system: isang slide-on na hawakan na nasa likod lamang ng gatilyo (kaya't parang isang Star Phase Original Series phaser), at mga slide-on na tanawin. Narito ang mga naka-print na file. Kung nais mong makatipid sa plastik sa gastos ng scrap kahoy, maaari mo ring gawin ang ginawa ko at sa halip na i-print ang buong hawakan, i-print lamang ang bahagi na humahawak sa Wiimote, at gupitin ang isang piraso ng kahoy at i-tornilyo ito.

Sa paningin, ituon ang iyong mga mata sa mga pasyalan. Pantayin ang bukol ng paningin sa harap sa pagitan ng mga paga ng likod na paningin upang ang puwang ng hangin sa alinman ay pantay at ang lahat ng tatlong mga paga ay lumalabas na pantay na mataas. Pagkatapos ay align sa gitna ng target sa itaas ng bumps.

Tandaan: Ang taas ng mga paga ay bahagyang hindi pantay, na may bukol ng harapan na paningin ay mas mababa nang bahagya, upang mabayaran ang taas ng paningin ng mga bukol sa kanilang sarili kapag nakikita mo kasama ang mga ito sa layo na 2.5 metro (ang distansya ko sa TV). Kung mayroon kang isang makabuluhang iba't ibang distansya sa TV, maaari mong ilagay iyon sa mga file ng OpenSCAD. Gayunpaman, ang pagsasaayos na ito ay maaaring mas mababa sa mga pagpapahintulot ng printer. Gayundin, kung hindi mo ginawa ang patayong pagsasaayos sa software, maaari kang magdagdag ng higit pang pagsasaayos sa mga pasyalan sa software sa pamamagitan ng pagtatakda ng extraSightAdjust sa isang bagay sa paligid ng -8 (sa millimeter).

Hakbang 8: Pagkakalibrate III (Opsyonal): Maayos na Pagsasaayos

Kung nais mo ng mas tumpak, maaari kang tumakbo:

python3 ~ / lightgun / lightgun.py -d

(Para sa mga demo) at hitsura mabuti kung ang mga pasyalan ihanay sa mga cross-hairs. Kung hindi, lumabas at manu-manong i-edit ang ~ /.wiilightgun / wiimotecalibration, at i-tweak nang kaunti ang x at y mga koordinasyon ng sentro ng camera upang ayusin ang paningin. Halimbawa, ang aking baril ay bumaril nang bahagya sa kanan, kaya't sa wakas ay binago ko ang x coordinate mula 529 hanggang 525. Ang mga numero ng lahat ay maaaring magkakaiba.

Hakbang 9: Apendiks: ang Algorithm

Apendiks: ang Algorithm
Apendiks: ang Algorithm

Gumagana ang code ng pagtulad sa mouse nang halos sumusunod.

  • Ang pagpindot sa pindutan ng proseso.
  • Kumuha ng data mula sa camera at ayusin para sa pag-calibrate ng pagsentro ng camera.
  • Kung mas kaunti sa tatlong LEDs ang makikita sa camera:

    Panatilihin ang huling posisyon ng mouse

  • Kung ang tatlo o apat na LEDs ay nakikita:

    • Gamitin ang data ng accelerometer ng Wiimote upang makuha ang oryentasyong Wiimote at kilalanin kung aling imahe ng camera ng LED ang tumutugma sa aling pisikal na LED.
    • Kung ang apat na LEDs ay nakikita:

      • Kalkulahin ang homography sa pagitan ng mga imahe ng LED camera at mga lokasyon ng LED (sa mga coordinate sa screen).
      • Gumamit ng homography upang makalkula kung ano ang lokasyon ng screen na tumutugma sa gitna ng larangan ng view ng camera.
      • Gawin ang pag-aayos ng Y upang ayusin ang gitna ng virtual baril ng baril sa ibaba ng linya ng paningin. Ito ay isang medyo kludgy algorithm ngunit gumagana ito.
      • Itakda ang posisyon ng mouse sa naayos na lokasyon ng screen.
    • Kung ang tatlong LEDs ay nakikita:

      • Gumamit ng OpenCV upang malutas ang problema sa P3P sa pagitan ng mga imahe ng LED camera at mga pisikal na lokasyon ng LED. Bumubuo ito ng hanggang sa apat na mga solusyon.
      • Kung matagumpay:

        • Kung mayroon kaming dating matagumpay na pagkalkula ng lokasyon, piliin ang solusyon na ginagawang pinakamalapit ang nawawalang LED sa huling sinusunod o na-compute na posisyon ng LED na iyon.
        • Kung wala kaming dating matagumpay na pagkalkula ng lokasyon, piliin ang solusyon na pinakamahusay na hinuhulaan ang heading ng accelerometer.
        • Gamitin ang pinakamahusay na solusyon upang makalkula kung saan dapat pumunta ang ika-apat na LED.
        • Gawin ang natitira tulad ng sa apat na LED case.
      • Kung hindi matagumpay:

        Panatilihin ang huling posisyon ng mouse

Inirerekumendang: