Mundarija:

Malinali PI uchun aniq Wiimote yorug'lik quroli: 9 qadam (rasmlar bilan)
Malinali PI uchun aniq Wiimote yorug'lik quroli: 9 qadam (rasmlar bilan)

Video: Malinali PI uchun aniq Wiimote yorug'lik quroli: 9 qadam (rasmlar bilan)

Video: Malinali PI uchun aniq Wiimote yorug'lik quroli: 9 qadam (rasmlar bilan)
Video: Bitta o'pi jonim - Afandining qizlari | Битта ўпи жоним - Афандининг қизлари 2024, Iyul
Anonim
Raspberry PI uchun aniq Wiimote Light Gun
Raspberry PI uchun aniq Wiimote Light Gun
Raspberry PI uchun aniq Wiimote Light Gun
Raspberry PI uchun aniq Wiimote Light Gun

Odatda, engil qurol sifatida ishlatiladigan Wii masofadan boshqarish pulti NES Duck Hunt kabi retro o'yinlar uchun etarli darajada aniq emas, chunki Wii masofadan boshqarish pulti ko'rsatiladigan nuqtani tanlamaydi. Bu mumkin emas! Wii masofadan boshqarish pultining oldida infraqizil LED kamerasi bor, u sensor panelida infraqizil LEDlar chizig'ini ko'radi, lekin televizor bardan qanchalik uzoq (yoki qaysi yo'nalishda) yoki televizor qanchalik katta ekanligini bila olmaydi. Emulyatorlar va o'yinlar bu maqsadda o'zaro faoliyat sochlar yoki boshqa nishon ko'rsatkichlarini ko'rsatib ishlaydi, ammo bu aniq nishonga olish tajribasi emas.

Wii masofadan boshqarish pultini aniq nurli qurol sifatida ishlash uchun siz televizorda nishonni tanlashingiz mumkin, bu to'rtta infraqizil LEDni televizor bilan bir tekisda joylashgan to'rtburchaklar shaklida (to'g'ri chiziqda emas) talab qiladi. Wii masofadan boshqarish pulti to'rtta LEDni ko'radi va kamera tasvirini homografiyani hisoblash uchun ishlatish mumkin, bu bizga kamera qayerga ishora qilayotganini aniqlash imkonini beradi.

Ushbu loyiha uchun uskunalar oddiy. 3D bosilgan oddiy korpuslarda to'rtta infraqizil LED mavjud, ularni televizor korpusining yuqori va pastki qismiga yopishtirib, USB zaryadlovchiga ulash mumkin. Bundan tashqari, agar sizda Wii qurol bo'lmasa, menda oddiy 3D bosma tutqich va Wii masofadan boshqarish pultiga ulash mumkin bo'lgan diqqatga sazovor joylar bor (plastmassani tejash uchun men yog'och va 3D bosma plastmassa orasidagi gibridni yasaganman).

Python-ga asoslangan dasturiy ta'minotni ishlab chiqarish apparatdan ko'ra qiyinroq edi va hozirda faqat Linuxda. U LED va Wii masofadan boshqarish pultini sozlaydi va keyin Raspberry PI 3B+da Retroarch fceumm NES emulyatorida (va ehtimol boshqa emulyatorlarda) yaxshi ishlaydigan mutlaq sichqonchani taqlid qilish uchun homografiya hisob -kitoblaridan foydalanadi.

Ta'minotlar

  • Wii masofadan boshqarish pulti
  • To'rtta 940nm 5 mm infraqizil LED
  • Ishlaydigan A tipidagi vilkasi bo'lgan eski USB kabeli
  • Raspberry PI 3 yoki Bluetooth qo'llab -quvvatlanadigan boshqa Linux kompyuterlari
  • 3D printer va filament (ixtiyoriy)

1 -qadam: Infraqizil LED zanjiri

Infraqizil LED zanjiri
Infraqizil LED zanjiri
Infraqizil LED zanjiri
Infraqizil LED zanjiri

Erkak rozetkali eski USB kabelni oling (odatda telefonimning zaryadlovchi kabellari mikro USB uchida uzilib qoladi, shuning uchun menda A tipli erkak rozetkasi bor qolgan kabellar bor).. Aslida, agar ma'lumotlar kabellari bo'lsa elektr uzatish liniyalari ishlaguncha uzilib qolgan. Boshqa uchini kesib oling. Nazariy jihatdan, qizil simi +5V bo'lishi kerak, qora esa tuproqli bo'lishi kerak, lekin uni multimetr bilan tekshiring (zaryadlovchiga ulang, keyin qizil va qora simlar orasidagi kuchlanishni tekshiring).

Infraqizil LEDlar taxminan 1,2-1,3 V kuchlanish pasayishiga ega bo'lganligi sababli, men ulardan to'rttasini ketma-ket halqali USB kabelga lehimladim. Lehimlaydigan simlar etarlicha uzun ekanligiga ishonch hosil qiling, siz LEDni televizorning pastki qismiga va ikkitasini yuqori qismiga qo'yishingiz mumkin, ular orasida LEDlar orasidagi gorizontal bo'sh joy etarli (taxminan 10 dyuym).

Aniqrog'i, LED halqasini yaratish uchun:

  • birinchi LEDning minus tomonini (katod, oyog'i qisqaroq, tekis qirrali) +5V USB simiga lehimlang
  • birinchi LEDning ortiqcha qismini (anod, uzun oyoqli, dumaloq qirrali) ikkinchi LEDning minus tomoniga ulang
  • ikkinchi LEDni uchinchisiga va uchinchisidan to'rtinchisiga ulash uchun takrorlang
  • keyin to'rtinchi LEDning ortiqcha qismini sim bilan er usti simiga ulang.

Ishlarni yanada toza qilish uchun, siz ulanish paytida issiqlik qisqaruvchi quvurlardan foydalanishingiz mumkin. Aks holda, qisqa tutashuvni oldini olish uchun elektr tasmasini ishlating.

Qisqa tutashuvlar yo'qligiga ishonch hosil qiling. Keyin uni USB zaryadlovchiga ulang va telefon kamerasi bilan LEDlarga qarab infraqizil nur chiqarayotganini tekshiring. (Ko'p telefon kameralari infraqizil sezgir.)

2 -qadam: televizorga ulang

Televizorga ulang
Televizorga ulang
Televizorga ulang
Televizorga ulang
Televizorga ulang
Televizorga ulang

Endi ikkita LEDni televizorning pastki qismiga va ikkitasini yuqori tomonga ulang. Gorizontal masofa taxminan o'n dyuym bo'lishi kerak. Agar bu juda ko'p bo'lsa, siz Wii Remote kamerasining ko'rish maydonida ularning hammasini yozib olishda muammolarga duch kelishingiz mumkin. Ammo agar ular juda yaqin bo'lsa, mening geometrik sezgim sizda aniqlik pastroq bo'lishini aytadi.

Sinov uchun men LEDlarni elektr tasmasi bilan yopishtirdim, so'ngra doimiy ulanish uchun men televizorga yopishtirib qo'yilgan to'rtta kichik LED -klipni (fayllar shu erda) ishlab chiqdim va chop etdim. Siz LEDni televizor ekranining tekisligiga iloji boricha yaqinroq qilib qo'yishingiz kerak.

3 -qadam: Dasturiy ta'minotni o'rnating

Hozirgi vaqtda dasturiy ta'minot faqat Linux uchun. Quyidagi sozlash Raspbian Stretch bilan Raspberry PI 3 uchun mo'ljallangan. Boshqa Linux tizimlari ba'zi o'zgarishlarni talab qiladi. Oldingi modellarda sizga Bluetooth dongle kerak bo'ladi va siz uni buyruq satridan ishlatishingiz kerak bo'ladi:

sudo get-apt bluetooth-ni o'rnating

A qadam: udev

Keyin, bitta satrni o'z ichiga olgan /etc/udev/rules.d/wiimote.rules faylini yarating:

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

Siz buni, masalan, matn muharriri yordamida yoki buyruq satriga quyidagilarni kiritish orqali qilishingiz mumkin:

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

Va keyin udevni qayta ishga tushiring:

sudo /etc/init.d/udev qayta ishga tushirish

B bosqichi: cwiid

Keyin, sizga o'zgartirilgan cwiid paketim kerak bo'ladi. Bu erda u biroz tukli bo'ladi, chunki siz uni Raspberry PI -ga qurishingiz kerak bo'ladi, lekin shuni tan olishim kerakki, uni ishlashi uchun siz qanday paketlarni o'rnatishingiz kerakligini bilmay qoldim. Buning uchun uchta variant mavjud.

V1 -variant: O'zingizni yarating

CD ~

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

Afsuski, siz uni qurish uchun zarur bo'lgan narsalarni yo'qotib qo'yishingiz mumkin, va./configure shikoyat qiladi. Siz shikoyat qiladigan barcha narsalarni ko'rib chiqishingiz va ularning barchasida sudo apt install ni ishga tushirishingiz mumkin.

Variant B2: Mening ikkilik fayllarimdan foydalaning

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 install

C qadam: python kutubxonalari

Nihoyat, mening engil python skriptim uchun yordamchi narsalarni oling:

sudo pip3 ni o'rnating numpy pygame opencv-python

sudo apt-get o'rnatish libatlas-base-dev sudo apt-get o'rnatish libjasper-dev sudo apt-get libqtgui4 sudo apt-get install python3-pyqt5

D qadam: lightgun.py

Nihoyat, mening engil python skriptimni oling:

CD ~

git klon

Agar hammasi yaxshi bo'lgan bo'lsa, endi sizda miltiqni kalibrlash uchun foydalanishingiz mumkin bo'lgan ~/lightgun.py bor.

4 -qadam: I qismni kalibrlash: kamerani markazlashtirish

Kalibrlash I qismi: kamerani markazlashtirish
Kalibrlash I qismi: kamerani markazlashtirish
Kalibrlash I qismi: kamerani markazlashtirish
Kalibrlash I qismi: kamerani markazlashtirish
Kalibrlash I qismi: kamerani markazlashtirish
Kalibrlash I qismi: kamerani markazlashtirish

Kalibrlashning ikki jihati bor. Birinchisi, har bir Wiimote -da kameraning markazini sozlash. Buning uchun televizor ekranining atrofidagi LEDlarning ikkita tasvirini olish uchun kameradan foydalanish kerak bo'ladi, biri masofadan boshqarish pulti o'ng tomonida, ikkinchisi teskari.

Wii masofadan boshqarish pultini old tomoniga qo'yganingizda tugmalar bosilmasligi uchun va Wii masofadan boshqarish pultining izchil balandligi bo'lishi uchun siz men kiritgan kalibrlash vositasini 3D bosib chiqarishingiz mumkin. Sizga qalinligi 10,5 mm bo'lgan narsalar kerak bo'ladi, uni Wii masofadan boshqarish pultining old tomoniga qo'yishingiz mumkin. Men, aslida, plastmassani tejash uchun bir nechta kontrplak kontrplak ishlatardim.

LED -laringizni yoqing va Raspberry PI yoki boshqa kompyuteringiz televizorda ko'rsatilishiga ishonch hosil qiling. Klaviaturani ulang (bu ssh -da ishlamaydi) yoki VNC -dan foydalaning. Keyin ishga tushiring:

python3 ~/lightgun/lightgun.py -M

Agar hamma narsa yaxshi bo'lsa, siz Wii masofadan boshqarish pultidagi 1+2 tugmalarini bosishingizni so'rab to'liq ekranli ekranga ega bo'lasiz. Buni qil. Wii masofadan boshqarish pultida chiroqlar yonadi, keyin 1 va 4 chiroqlar yonadi. Bundan tashqari, ekranning yuqori qismida kichik yashil to'rtburchakni ko'rasiz, Wii masofadan boshqarish kamerasidan. Wii masofadan boshqarish pultini LEDlarga yo'naltiring va agar hamma narsa yaxshi bo'lsa, siz 1 dan 4 gacha raqamli to'rtta LEDni ko'rasiz.

Endi siz televizor ekraniga ishora qiladigan va sehpa kabi o'tkir qirrali qattiq sirtni topishingiz kerak, bu esa Wii masofadan boshqarish pultining barcha LEDlarini Wii masofadan boshqarish pultining chetiga moslashtirilgan holda ko'rishiga imkon beradi. Wii masofadan boshqarish pultini o'ng tomonini yuqoriga tekislashdan boshlang, masofadan boshqarish pultining chetini tekislang va to'rtta LED ham ko'rinib tursin. Keyin klaviaturadagi SPACE tugmachasini bosing (yoki Nunchukni ulang va agar bu qulayroq bo'lsa, C ni bosing). Keyin sizga Wii masofadan boshqarish pultini aylantirish taklif qilinadi. Kalibrlash moslamasi yoki boshqa biror narsadan foydalanib, u sizning yuzangizdan 10,5 mm yuqoriga ko'tarilganligiga ishonch hosil qiling va avvalgidek joyga yaqinroq joylashtiring (masalan, yuzangizning bir chetiga tekislanganda). SPACE tugmasini yana bosing.

Agar hamma narsa yaxshi bo'lsa, endi siz LED kalibrlash bosqichiga o'tasiz. Ha, bu murakkab! Ammo sizda juda aniq miltiq bo'ladi. Bu faqat narx.

Eslatma: Agar menda televizor ostida Wii bo'lsa, Wii ikkita sababga ko'ra o'chirilishi kerak: birinchi navbatda, agar Wii yoqilgan bo'lsa, u Wiimote -ga ulanadi, ikkinchidan, sensor paneli infraqizil LEDlari bu loyiha. Shunga o'xshash sabablarga ko'ra, siz Wii -dan foydalansangiz, televizor atrofidagi LEDlarni o'chirib qo'yish yaxshidir.

5 -qadam: kalibrlash II -qadam: LEDlar

Kalibrlashning ikkinchi bosqichi: LEDlar
Kalibrlashning ikkinchi bosqichi: LEDlar
Kalibrlashning ikkinchi bosqichi: LEDlar
Kalibrlashning ikkinchi bosqichi: LEDlar

Endi siz LED -lar televizor chetida qaerda joylashganligini dasturga aytishingiz kerak. Siz kalibrlash ekranida to'rtta o'qni ko'rasiz, ulardan biri tanlangan (yorqin) va uchtasi kulrang, televizor chetida. Siz sozlayotgan o'qni o'zgartirishga o'tish uchun +/- tugmalaridan foydalaning.

Chegaradagi to'rtta o'qning har biri uchun quyidagilarni bajaring:

  1. Wiimote -da chap/o'ng tugmachalarini bosib, o'qlarni mos keladigan LED tomon aniq yo'naltirguncha harakatlantiring;
  2. strelkaning uzunligi LED va televizor displeyining chetlari orasidagi masofaga to'g'ri kelguncha o'q uzunligini o'zgartirish uchun Wiimote -ni yuqoriga/pastga bosing; boshqacha aytganda, o'qning uzunligi o'qning uchidan LEDgacha bo'lgan masofaga teng bo'lishi kerak.

To'rtta o'qingiz to'g'ri (va ehtimol undan ham oldinroq) to'g'ri bo'lganda, siz Wiimote -ni ekranga yo'naltirganingizda qizil chiziqni ko'rasiz. Bu joy bo'lishi kerakligini tekshirishingiz mumkin. (Esda tutingki, Wiimote barcha LEDlarni ko'ra oladigan darajada uzoq bo'lishi kerak. Ko'rish sohasida boshqa infraqizil manbalar bo'lmasligi ham muhim. Bir paytlar quyosh nuri vint boshini aks ettirishi tufayli muammolarga duch kelganman. Televizor stendi.)

Nihoyat, beshinchi o'q bor, u faqat to'rtinchi LED o'qidan yoki + birinchi tugmachasini bosganingizda paydo bo'ladi (va u sukut bo'yicha nol uzunlikka ega, shuning uchun bu faqat piksel). Bu strelka Wii masofadan boshqarish pultining kamerasidan qanchalik balandroqda qayd etilishini sozlaydi. Muammo shundaki, siz Wii masofadan boshqarish pultining yuqori yuzasini ko'rasiz. Ammo kamera aslida bu sirtdan bir oz pastda, Wii masofadan boshqarish pultining oldidagi qora to'rtburchakning o'rtasida joylashgan. Agar biz kamera ko'rsatayotgan kadrlarni ro'yxatdan o'tkazgan bo'lsak, ular Wii masofadan boshqarish pultining yuqori yuzasidan taxminan 8 mm pastda ro'yxatdan o'tgan bo'lardi. Siz buni tekshirishingiz mumkin, agar siz yuqori yuzani ko'rsangiz, xochlarning o'rtasi kamera tomonidan yashiringan.

Siz shu bilan yashashingiz mumkin, yoki tasvirni Wii masofadan boshqarish pultining yuqori qismiga moslashtirish uchun dasturiy ta'minotning beshinchi o'qini kattalashtirishingiz mumkin, yoki buning o'rnini bosadigan temir joylar uchun 3D bosma fayllarni sozlashingiz mumkin (lekin kompensatsiya faqat ishlaydi. televizorga ma'lum masofa). Men o'zim dasturiy ta'minotni moslashtirishga bordim.

Kalibrlashdan chiqish va ~/.wiilightgun katalogiga saqlash uchun Wii masofadan boshqarish pultidagi HOME tugmasini bosing.

6 -qadam: sinov va foydalanish

Sinov va foydalanish
Sinov va foydalanish
Sinov va foydalanish
Sinov va foydalanish
Sinov va foydalanish
Sinov va foydalanish

Ehtimol, hozir siz engil qurolingizni sinab ko'rmoqchisiz. Faqat terminal emulyatorida (yoki skriptda) ishga tushiring:

python3 ~/lightgun/lightgun.py -t

Siz bir vaqtning o'zida 1+2 tugmachalarini bosishingiz kerak bo'ladi, shundan so'ng, agar hammasi yaxshi bo'lsa, lightgun.py ishlayotgan bo'lsa, miltiq ikki tugmachali mutlaq sichqonchani taqlid qiladi. Trigger tugmasi sichqoncha tugmasi 1, A tugmasi sichqoncha tugmasi 2. Chiqish uchun ctrl-c tugmalarini bosing.

Endi siz mutlaqo sichqoncha bilan ishlash uchun emulyatorlaringizni va/yoki o'yinlaringizni sozlashingiz kerak. Afsuski, bu har doim ham oson bo'lmaydi.

Siz sinab ko'rishingiz mumkin bo'lgan qiziqarli narsa bu mening iminurnamezning o'rdak-o'rdak otish uslubi:

CD ~

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

NES o'yinlari uchun men Retroarch -dagi libretro fceumm yadrosidan foydalanaman. Tanlovlar menyusiga o'ting va Zapperni sensorli ekran qilib sozlang. (Sichqoncha sifatida sozlash aslida ishlamaydi, chunki fceumm mutlaq pozitsiyali sichqonchani emas, balki nisbiy harakatni kutadi.)

Agar siz o'yinlaringizni skript bilan boshlasangiz, o'yinni yoki emulyatorni boshlaydigan qismni tahrir qilishingiz mumkin:

python3 ~/lightgun/lightgun.py -t -B 30 "o'yinni boshlash buyrug'i"

O'yinning dastlabki 30 soniyasida (shuning uchun -B 30 varianti) siz 1+2 tugmachasini bosib ushlab turishingiz mumkin.

Aytgancha, lightgun.py skriptidan Retroarch bilan umumiy Wii masofaviy o'yinlar uchun ham foydalanish mumkin. Faqat -o variantini qo'shsangiz, miltiq vazifalari o'chiriladi va uning o'rniga Wii masofadan boshqarish pulti gorizontal holatda ishlaydi, uchta tugma mos ravishda 1, 2 va B bo'ladi. Lightgun.py xaritalarida Retroarch bilan bog'liq boshqa funktsiyalar mavjud bo'lib, ularni kodni o'qish orqali bilib olasiz. Masalan, minus tugma siljish vazifasini bajaradi va dpad bilan birgalikda saqlash va yuklashni boshqaradi (yuqoriga/pastga = saqlash raqamini o'zgartirish; chapga = tiklash; o'ngga = saqlash).

7 -qadam: Qurolni ushlash va nishonga olish

Qurol ushlagichi va nishon
Qurol ushlagichi va nishon
Qurol ushlagichi va nishon
Qurol ushlagichi va nishon
Qurol ushlagichi va nishon
Qurol ushlagichi va nishon

Siz Wii masofadan boshqarish pultini qurol sifatida ishlatib, tepada ko'rishingiz mumkin. Bundan tashqari, siz tijorat qurollari uchun qobiqlardan birini sotib olishingiz mumkin. Asl Wii masofadan boshqarish pulti ko'rinadigan qurol sifatida ishlatilmasligi sababli, korpuslar temirdan yasalgan ko'rinishga ega emas va temir ko'zlar aniqlikni yaxshilaydi.

Men 3D-bosib chiqariladigan oddiy uch qismli tizimni ishlab chiqardim: tirgakning orqasida joylashgan slaydni ushlagich (shuning uchun u Star Trek Original Series faserga o'xshaydi) va ko'zdan kechiriladigan joylar. Chop etish mumkin bo'lgan fayllar bu erda. Agar siz plastmassani yog'och qoldiqlari evaziga tejashni xohlasangiz, siz ham men qilgan ishni qila olasiz va butun dastani bosib chiqarishning o'rniga, faqat Wiimote -ni ushlab turgan qismini chop eting va yog'ochdan yasalgan bo'lakni kesib vidalang.

Ko'rish uchun ko'zlaringizni diqqatga sazovor joylarga qarating. Orqa ko'zning dumg'azalari orasiga oldingi ko'zning dumg'azasini tekislang, shunda havo bo'shlig'i teng bo'ladi va uch zarba ham bir xil balandda turadi. Keyin nishonning o'rtasini tepaliklar bilan tekislang.

E'tibor bering: tepaliklarning balandligi biroz teng emas, oldingi ko'zning dumg'azasi bir oz pastroq, siz ularni balandligi 2,5 metr masofada ko'rganingizda o'zingizni tepishingizning o'rnini bosasiz. Agar siz televizordan uzoqroq masofada bo'lsangiz, uni OpenSCAD fayllariga qo'yishingiz mumkin. Shunga qaramay, bu sozlash printer toleransidan past bo'lishi mumkin. Bundan tashqari, agar siz dasturiy ta'minotda vertikal sozlamani qilmagan bo'lsangiz, qo'shimcha -8 atrofida millimetrga ekstraSightAdjust -ni o'rnatib, dasturiy ta'minotning diqqatga sazovor joylarini o'zgartirishingiz mumkin.

8 -qadam: III kalibrlash (ixtiyoriy): nozik sozlash

Agar siz yanada aniqroq bo'lishni xohlasangiz, ishga tushirishingiz mumkin:

python3 ~/lightgun/lightgun.py -d

(demo uchun) va diqqatga sazovor joylarning kesishgan sochlar bilan mos kelishini ko'rib chiqing. Agar ular buni qilmasa, ~/.wiilightgun/wiimotecalibration -dan chiqib, qo'lda tahrir qiling va ko'rishni sozlash uchun kamera markazining x va y koordinatalarini biroz o'zgartiring. Masalan, mening miltig'im biroz o'ngga o'q uzdi, shuning uchun x koordinatasini 529 dan 525 gacha o'zgartirdim. Hammaning raqamlari boshqacha bo'lishi mumkin.

9 -qadam: Ilova: Algoritm

Qo'shimcha: Algoritm
Qo'shimcha: Algoritm

Sichqoncha emulyatsiyasi kodi taxminan quyidagicha ishlaydi.

  • Jarayon tugmasi bosiladi.
  • Kameradan ma'lumot oling va kamerani markazlashtiruvchi kalibrlashni sozlang.
  • Agar kamerada uchta LEDdan kam bo'lsa:

    Sichqonchaning oxirgi holatini saqlang

  • Agar uchta yoki to'rtta LED ko'rinadigan bo'lsa:

    • Wiimote yo'nalishini olish va qaysi LED kamera tasviri qaysi jismoniy LEDga mos kelishini aniqlash uchun Wiimote akselerometr ma'lumotlaridan foydalaning.
    • Agar to'rtta LED ko'rinadigan bo'lsa:

      • LED kamera tasvirlari va LED joylashuvi orasidagi homografiyani hisoblang (ekran koordinatalarida).
      • Qaysi ekran joylashuvi kameraning ko'rish markazining markaziga mos kelishini hisoblash uchun homografiyadan foydalaning.
      • Virtual qurol o'qining markazini ko'rish chizig'i ostiga sozlash uchun Y-sozlamasini bajaring. Bu biroz algoritm, lekin u ishlaydi.
      • Sichqoncha o'rnini ekranning sozlangan joyiga o'rnating.
    • Agar uchta LED ko'rinadigan bo'lsa:

      • LED kamera tasvirlari va LEDning jismoniy joylashuvi o'rtasidagi P3P muammosini hal qilish uchun OpenCV -dan foydalaning. Bu to'rtta echim ishlab chiqaradi.
      • Agar muvaffaqiyatli bo'lsa:

        • Agar bizda oldingi joylashuv hisobi muvaffaqiyatli bo'lsa, yo'qolgan LEDni LEDning oxirgi kuzatilgan yoki hisoblangan holatiga eng yaqin bo'lgan echimni tanlang.
        • Agar bizda oldingi joylashuv hisobi muvaffaqiyatli bo'lmasa, akselerometr sarlavhasini yaxshiroq bashorat qiladigan echimni tanlang.
        • To'rtinchi LED qayerga ketishi kerakligini hisoblash uchun eng yaxshi echimdan foydalaning.
        • Qolganlarini to'rtta LED qutisidagi kabi qiling.
      • Agar muvaffaqiyatsiz bo'lsa:

        Sichqonchaning oxirgi holatini saqlang

Tavsiya: