Სარჩევი:

ზუსტი Wiimote მსუბუქი იარაღი ჟოლოს PI– სთვის: 9 ნაბიჯი (სურათებით)
ზუსტი Wiimote მსუბუქი იარაღი ჟოლოს PI– სთვის: 9 ნაბიჯი (სურათებით)

ვიდეო: ზუსტი Wiimote მსუბუქი იარაღი ჟოლოს PI– სთვის: 9 ნაბიჯი (სურათებით)

ვიდეო: ზუსტი Wiimote მსუბუქი იარაღი ჟოლოს PI– სთვის: 9 ნაბიჯი (სურათებით)
ვიდეო: Xbox One კონტროლერი გამაძლიერებელი სამაჯურით 2024, ივლისი
Anonim
ზუსტი Wiimote მსუბუქი იარაღი ჟოლოს PI– სთვის
ზუსტი Wiimote მსუბუქი იარაღი ჟოლოს PI– სთვის
ზუსტი Wiimote მსუბუქი იარაღი ჟოლოს PI– სთვის
ზუსტი Wiimote მსუბუქი იარაღი ჟოლოს PI– სთვის

ჩვეულებრივ, Wii Remote გამოიყენება როგორც მსუბუქი იარაღი არ არის საკმარისად ზუსტი რეტრო თამაშებისთვის, როგორიცაა NES Duck Hunt, რადგან Wii Remote ფაქტობრივად არ ირჩევს ტელევიზორის იმ წერტილს, რომელზეც ის არის მინიშნებული. არ შეიძლება! Wii Remote– ს აქვს ინფრაწითელი კამერა, რომელიც ხედავს ინფრაწითელი LED- ების ხაზს სენსორულ ზოლში, მაგრამ მან არ იცის რამდენად (ან რა მიმართულებით) არის ტელევიზია ბარიდან ან რამდენად დიდია ტელევიზია. ემულატორები და თამაშები მუშაობენ ამის გარშემო, აჩვენებენ ჯვარედინ თმას ან სხვა სამიზნე მაჩვენებელს, მაგრამ ეს არ არის სამიზნეების გადაღების ზუსტი გამოცდილება.

იმისათვის, რომ Wii Remote იმუშაოს როგორც ზუსტი მსუბუქი იარაღი, რომლის დანახვაც შესაძლებელია ტელევიზორზე სამიზნეების შესარჩევად, საჭიროა ოთხი ინფრაწითელი LED ნათურა, რომლებიც მოწყობილია ცნობილი ოთხკუთხედის ნიმუშით (არა სწორი ხაზი) იმავე სიბრტყეში, როგორც ტელევიზია. Wii Remote ხედავს ოთხ LED- ს და კამერის სურათი შეიძლება გამოყენებულ იქნას ჰომოგრაფიის გამოსათვლელად, რაც საშუალებას გვაძლევს გავიგოთ სად არის კამერა მიმართული.

ამ პროექტის აპარატურა მარტივია. არის სამი ინფრაწითელი LED ნათურა 3D დაბეჭდილ მარტივ კორპუსებში, რომელთა გადაბმა შესაძლებელია ტელევიზიის კორპუსის ზედა და ქვედა ნაწილში და შეაერთეთ USB დამტენში. გარდა ამისა, იმ შემთხვევაში, თუ თქვენ არ გაქვთ Wii იარაღის საბურავი, მე მაქვს მარტივი 3D დაბეჭდილი სახელური და ღირსშესანიშნაობები, რომლებიც შეგიძლიათ მიამაგროთ Wii Remote– ზე (თუმცა პლასტმასის დაზოგვის მიზნით, მე გავხადე ჩემი ჰიბრიდი ხესა და 3D დაბეჭდილ პლასტმასს შორის).

პითონზე დაფუძნებული პროგრამული უზრუნველყოფის დამზადება უფრო რთული იყო ვიდრე აპარატურა და ამჟამად მხოლოდ Linux- ისაა. ის ახდენს LED- ებისა და Wii დისტანციის დაკალიბრებას და შემდეგ იყენებს ჰომოგრაფიულ გამოთვლებს აბსოლუტური თაგვის იმიტირებისთვის, რომელიც საკმაოდ კარგად მუშაობს Retroarch- ის fceumm NES ემულატორში (და ალბათ სხვა ემულატორებშიც) ჩემს ჟოლოს PI 3B+.

მარაგები

  • Wii დისტანციური
  • ოთხი 940nm 5 მმ ინფრაწითელი LED ნათურები
  • ძველი USB კაბელი სამუშაო ტიპის A დანამატით
  • ჟოლო PI 3 ან სხვა Linux კომპიუტერი Bluetooth მხარდაჭერით
  • 3D პრინტერი და ბოჭკო (სურვილისამებრ)

ნაბიჯი 1: ინფრაწითელი LED ჯაჭვი

ინფრაწითელი LED ჯაჭვი
ინფრაწითელი LED ჯაჭვი
ინფრაწითელი LED ჯაჭვი
ინფრაწითელი LED ჯაჭვი

მიიღეთ ძველი USB კაბელი, რომელსაც აქვს სამუშაო ტიპის A მამრობითი ბუდე (როგორც წესი, ჩემი ტელეფონის დამტენი კაბელები იშლება მიკრო USB ბოლოს, ასე რომ მე მაქვს დარჩენილი A ტიპის სამუშაო კაბელი).. სინამდვილეში, ყველაფერი კარგადაა, თუ მონაცემთა კაბელები გატეხილია სანამ ელექტროგადამცემი ხაზები მუშაობს. შეწყვიტე მეორე ბოლო. თეორიულად წითელი კაბელი უნდა იყოს +5V და შავი უნდა იყოს დაფქული, მაგრამ შეამოწმეთ იგი მულტიმეტრით (შეაერთეთ იგი დამტენში და შემდეგ შეამოწმეთ ძაბვა წითელ და შავ მავთულებს შორის).

მას შემდეგ, რაც ინფრაწითელ LED- ებს აქვთ დაახლოებით 1.2-1.3 ვ ძაბვის ვარდნა, მე მხოლოდ ოთხი მათგანი სერიულად შევაერთე USB კაბელში. დარწმუნდით, რომ მავთულები თქვენ საკმარისად გრძელია, რომ განათავსოთ LED- ები ტელევიზორის ბოლოში და ორი ზედა, 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

ნაბიჯი A: უდევი

შემდეგი, შექმენით ფაილი /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 პაკეტი. აქ ის ცოტათი ბეწვიანი ხდება, რადგან იდეალურ შემთხვევაში თქვენ უნდა ააწყოთ იგი თქვენს ჟოლოს PI– ზე, მაგრამ უნდა ვაღიარო, რომ მე დავკარგე კვალი, თუ რა პაკეტების დაყენებაა საჭირო იმისათვის, რომ ის იმუშაოს. ამის გაკეთების სამი ვარიანტი არსებობს.

ვარიანტი B1: შექმენით საკუთარი თავი

cd

git კლონი https://github.com/arpruss/cwiid-1 autoconf./ კონფიგურაცია make -C libcwiid sudo make -C libcwiid ინსტალაცია მარკა -C python sudo make -C პითონის ინსტალაცია

სამწუხაროდ, საკმაოდ დიდი შანსია, რომ გამოტოვოთ რამოდენიმე ნივთი, რომელიც საჭიროა ამის ასაშენებლად და./ კონფიგურაცია ჩივის. თქვენ შეგიძლიათ გადახედოთ ყველაფერს, რაზეც მას უჩივის და გაუშვათ 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 ინსტალაცია

ნაბიჯი C: პითონის ბიბლიოთეკები

დაბოლოს, მიიღეთ დამხმარე მასალები ჩემი მსუბუქი იარაღის პითონის სკრიპტისთვის:

sudo pip3 დააინსტალირეთ 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

ნაბიჯი D: lightgun.py

დაბოლოს, მიიღეთ ჩემი პითონის სკრიპტი:

cd

git კლონი

თუ ყველაფერი კარგად დასრულდა, თქვენ გაქვთ ~/lightgun.py, რომელიც შეგიძლიათ გამოიყენოთ მსუბუქი თოფის დაკალიბრებისთვის.

ნაბიჯი 4: კალიბრაცია ნაწილი I: კამერის ცენტრირება

კალიბრაცია ნაწილი I: კამერის ცენტრირება
კალიბრაცია ნაწილი I: კამერის ცენტრირება
კალიბრაცია ნაწილი I: კამერის ცენტრირება
კალიბრაცია ნაწილი I: კამერის ცენტრირება
კალიბრაცია ნაწილი I: კამერის ცენტრირება
კალიბრაცია ნაწილი I: კამერის ცენტრირება

კალიბრაციას ორი ასპექტი აქვს. პირველი არის კამერის ცენტრის დაკალიბრება თითოეულ Wiimote– ზე. ეს მოითხოვს კამერის გამოყენებას თქვენი ტელევიზორის ეკრანის გარშემო LED- ების ორი სურათის გადასაღებად, ერთი დისტანციური მარჯვენა მხარეს ზემოთ და მეორე თავდაყირა.

იმისათვის, რომ თავიდან აიცილოთ ღილაკების დაჭერა Wii Remote– ის წინა მხარეს და იმისათვის, რომ Wii Remote– ს ჰქონდეს მუდმივი სიმაღლე, შეგიძლიათ 3D ბეჭდვა მოახდინოთ კალიბრაციის ინსტრუმენტზე, რომელიც მე აქ ჩავრთე. თქვენ ძირითადად გჭირდებათ 10.5 მმ სისქის ნივთები, რომელთა განთავსება შეგიძლიათ Wii Remote– ის ქვეშ, როდესაც ის წინა მხარეს მდებარეობს. მე რეალურად ვიყენებ ჯართიან პლაივუდს პლასტმასის დაზოგვის მიზნით.

ჩართეთ თქვენი LED- ები და დარწმუნდით, რომ თქვენი ჟოლოს PI ან სხვა კომპიუტერი გამოჩნდება ტელევიზორში. შეაერთეთ კლავიატურა (ეს არ იმუშავებს ssh– ით) ან გამოიყენეთ VNC. შემდეგ გაუშვით:

python3 ~/lightgun/lightgun.py -M

თუ ყველაფერი კარგად მიდის, თქვენ მიიღებთ სრულ ეკრანზე ჩვენებას, რომელიც მოგთხოვთ დააჭიროთ 1+2 Wii დისტანციურ დისტანციას. გააკეთე ეს. შუქი ანათებს Wii დისტანციურ მოწყობილობაზე, შემდეგ კი 1 და 4 შუქები დარჩება. თქვენ ასევე იხილავთ პატარა მწვანე ოთხკუთხედს ეკრანის ზედა ნაწილში, ხედი Wii დისტანციური კამერით. მიუთითეთ 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– ის ზედა ნაწილში, ან შეგიძლიათ შეცვალოთ 3D დასაბეჭდი ფაილები რკინის სანახაობებისთვის ამის კომპენსაციისთვის (მაგრამ კომპენსაცია მხოლოდ იმუშავებს ერთი მანძილი ტელევიზიამდე). მე თვითონ მივედი პროგრამული უზრუნველყოფის გასწორებაზე.

დააჭირეთ HOME Wii Remote– ზე კალიბრაციის გასასვლელად და შეინახეთ ყველა მონაცემი ~/.wiilightgun დირექტორიაში.

ნაბიჯი 6: ტესტირება და გამოყენება

ტესტირება და გამოყენება
ტესტირება და გამოყენება
ტესტირება და გამოყენება
ტესტირება და გამოყენება
ტესტირება და გამოყენება
ტესტირება და გამოყენება

თქვენ ალბათ გსურთ სცადოთ თქვენი მსუბუქი იარაღი ახლა. უბრალოდ გაუშვით ტერმინალური ემულატორი (ან სკრიპტი):

python3 ~/lightgun/lightgun.py -t

თქვენ უნდა დააჭიროთ 1+2 ღილაკს ერთდროულად და ამის შემდეგ თუ ყველაფერი კარგად იქნება, სანამ lightgun.py მუშაობს, მსუბუქი თოფი მიბაძავს ორ ღილაკზე აბსოლუტურ მაუსს. ტრიგერის ღილაკი არის მაუსის ღილაკი 1, ხოლო A ღილაკი არის მაუსის ღილაკი 2. დააჭირეთ ctrl-c გასასვლელად.

ახლა თქვენ გჭირდებათ მხოლოდ თქვენი ემულატორების და/ან თამაშების კონფიგურაცია აბსოლუტურ მაუსთან მუშაობისთვის. სამწუხაროდ, ეს ყოველთვის არ იქნება ადვილი.

ერთი სახალისო რამ, რაც თქვენ შეგიძლიათ სცადოთ, არის ჩემი მოდელი iminurnamez's duck-duck-shoot:

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 სკრიპტი ასევე შეიძლება გამოყენებულ იქნას ზოგადი Wii დისტანციური თამაშებისთვის Retroarch– ით. უბრალოდ დაამატეთ -o ვარიანტი და მსუბუქი თოფის ფუნქციები გამორთული იქნება, სამაგიეროდ Wii Remote იმუშავებს ჰორიზონტალურად, სამი ღილაკი არის 1, 2 და B შესაბამისად. Lightgun.py- ს რუკებში არის სხვა რეტროარქთან დაკავშირებული ფუნქციები, რომლებსაც კოდის წაკითხვით აღმოაჩენთ. მაგალითად, მინუს ღილაკი მოქმედებს როგორც ცვლა და dpad– თან ერთად აკონტროლებს შენახვას და ჩატვირთვას (ზემოთ/ქვემოთ = შეინახეთ შენახვის ნომერი; მარცხნივ = აღდგენა; მარჯვნივ = შენახვა).

ნაბიჯი 7: იარაღის სახელური და მიზანი

იარაღის სახელური და მიზანი
იარაღის სახელური და მიზანი
იარაღის სახელური და მიზანი
იარაღის სახელური და მიზანი
იარაღის სახელური და მიზანი
იარაღის სახელური და მიზანი

თქვენ შეგიძლიათ გამოიყენოთ Wii Remote თავისთავად, როგორც იარაღი, დაათვალიეროთ ზედა ნაწილი. თქვენ ასევე შეგიძლიათ შეიძინოთ ერთ -ერთი კომერციული იარაღის გარსი ამისთვის. მაგრამ იმის გამო, რომ ორიგინალ Wii Remote– ს არ შეეძლო გამოეყენებინა როგორც თვალსაჩინო იარაღი, გარსაცმები, როგორც წესი, არ მოდიოდა რკინის სანახაობებით და რკინის სანახაობები მნიშვნელოვნად აუმჯობესებდა სიზუსტეს.

მე შევიმუშავე მარტივი სამგანზომილებიანი 3D- დასაბეჭდი სისტემა: სლაიდ-სახელური, რომელიც ზის ტრიგერის უკან (ასე გამოიყურება ვარსკვლავური მოგზაურობის ორიგინალური სერიის ფაზერზე) და სლაიდ-სანახაობები. დასაბეჭდი ფაილები აქ არის. თუ გსურთ პლასტმასის დაზოგვა ხის ჯართის ხარჯზე, ასევე შეგიძლიათ გააკეთოთ ის, რაც მე გავაკეთე და იმის ნაცვლად, რომ მთლიანი სახელური დაბეჭდოთ, დაბეჭდოთ მხოლოდ ის ნაწილი, რომელიც უჭირავს Wiimote- ს, ამოჭერით ხის ნაჭერი და დააკაკუნეთ.

მხედველობისთვის ყურადღება გაამახვილეთ ღირსშესანიშნაობებზე. გაასწორეთ წინა მხედველობის მუწუკი უკანა მხედველობის მუწუკებს შორის ისე, რომ საჰაერო სივრცე ორივეზე იყოს თანაბარი და სამივე მუწუკი თანაბრად მაღალი იყოს. შემდეგ გაასწორეთ სამიზნის შუა ნაწილი მუწუკების ზედა ნაწილთან.

შენიშვნა: მუწუკების სიმაღლე ოდნავ უთანასწოროა, წინა მხედველობის მუწუკი ოდნავ დაბალია, რათა მხედველობის მუწუკების სიმაღლის კომპენსაცია თავად მოახდინოს, როდესაც მათ გასწვრივ ხედავთ 2,5 მეტრ მანძილზე (ჩემი მანძილი ტელევიზიამდე). თუ ტელევიზორთან მნიშვნელოვნად განსხვავებული მანძილი გაქვთ, შეგიძლიათ განათავსოთ ის OpenSCAD ფაილებში. თუმცა, ეს კორექტირება შეიძლება იყოს პრინტერის ტოლერანტობის ქვემოთ. ასევე, თუ თქვენ არ გააკეთეთ პროგრამული უზრუნველყოფის ვერტიკალური კორექტირება, შეგიძლიათ პროგრამის ღირსშესანიშნაობების კიდევ რამდენიმე კორექტირება დაამატოთ extraSightAdjust რაღაც -8 -ზე (მილიმეტრებში).

ნაბიჯი 8: კალიბრაცია III (სურვილისამებრ): კარგი მორგება

თუ გსურთ კიდევ უფრო მეტი სიზუსტე, შეგიძლიათ აწარმოოთ:

python3 ~/lightgun/lightgun.py -d

(დემოსათვის) და დააკვირდით, შეესაბამება თუ არა ღირსშესანიშნაობები ჯვარედინ თმას. თუ არა, გამოდით და ხელით შეცვალეთ ~/.wiilightgun/wiimotecalibration და ოდნავ შეცვალეთ კამერის ცენტრის x და y კოორდინატები, რათა დაარეგულიროთ მხედველობა. მაგალითად, ჩემი იარაღი ისროდა ოდნავ მარჯვნივ, ასე რომ მე საბოლოოდ შევცვალე x კოორდინატი 529 -დან 525 -მდე. ალბათ ყველას რიცხვი განსხვავებული იქნება.

ნაბიჯი 9: დანართი: ალგორითმი

დანართი: ალგორითმი
დანართი: ალგორითმი

თაგვის ემულაციის კოდი მუშაობს შემდეგნაირად.

  • პროცესის ღილაკების დაჭერა.
  • მიიღეთ მონაცემები კამერიდან და დაარეგულირეთ კამერის ცენტრირებული კალიბრაცია.
  • თუ კამერაზე ჩანს სამზე ნაკლები LED:

    შეინახეთ მაუსის ბოლო პოზიცია

  • თუ სამი ან ოთხი LED ნათურა ჩანს:

    • გამოიყენეთ Wiimote აქსელერომეტრის მონაცემები Wiimote ორიენტაციის მისაღებად და განსაზღვრეთ რომელი LED კამერის სურათი რომელ ფიზიკურ LED- ს შეესაბამება.
    • თუ ოთხი LED ნათურა ჩანს:

      • გამოთვალეთ ჰომოგრაფია LED კამერის სურათებსა და LED ადგილებს შორის (ეკრანის კოორდინატებში).
      • გამოიყენეთ ჰომოგრაფია იმის დასადგენად, თუ რომელი ეკრანის მდებარეობა შეესაბამება კამერის ხედვის ველის ცენტრს.
      • გააკეთეთ Y- კორექტირება, რათა დაარეგულიროთ ვირტუალური იარაღის ლულის ცენტრი მხედველობის ხაზის ქვემოთ. ეს არის გარკვეულწილად ალგორითმი, მაგრამ მუშაობს.
      • დააყენეთ მაუსის პოზიცია ეკრანის მორგებულ ადგილას.
    • თუ სამი LED ნათურა ჩანს:

      • გამოიყენეთ OpenCV P3P პრობლემის გადასაჭრელად LED კამერის სურათებსა და ფიზიკურ LED ადგილებს შორის. ეს ქმნის ოთხამდე გადაწყვეტას.
      • წარმატების შემთხვევაში:

        • თუ ჩვენ გვაქვს წინა წარმატებული ადგილმდებარეობის გაანგარიშება, ავირჩიოთ გამოსავალი, რომლის წყალობითაც დაკარგული LED იქნება ყველაზე ახლოს ამ LED- ის ბოლო დაკვირვებულ ან გამოთვლილ პოზიციასთან.
        • თუ ჩვენ არ გვაქვს წინა წარმატებული ადგილმდებარეობის გაანგარიშება, შეარჩიეთ გამოსავალი, რომელიც საუკეთესოდ პროგნოზირებს ამაჩქარებლის სათაურს.
        • გამოიყენეთ საუკეთესო გამოსავალი იმის გამოსათვლელად, თუ სად უნდა წავიდეს მეოთხე LED.
        • გააკეთეთ დანარჩენი, როგორც ოთხი LED შემთხვევაში.
      • თუ არ არის წარმატებული:

        შეინახეთ მაუსის ბოლო პოზიცია

გირჩევთ: