Πίνακας περιεχομένων:

Ακριβές Wiimote Light Gun για Raspberry PI: 9 βήματα (με εικόνες)
Ακριβές Wiimote Light Gun για Raspberry PI: 9 βήματα (με εικόνες)

Βίντεο: Ακριβές Wiimote Light Gun για Raspberry PI: 9 βήματα (με εικόνες)

Βίντεο: Ακριβές Wiimote Light Gun για Raspberry PI: 9 βήματα (με εικόνες)
Βίντεο: Джордж Дайсон о рождении компьютеров 2024, Νοέμβριος
Anonim
Ακριβές Wiimote Light Gun για Raspberry PI
Ακριβές Wiimote Light Gun για Raspberry PI
Ακριβές Wiimote Light Gun για Raspberry PI
Ακριβές Wiimote Light Gun για Raspberry PI

Κανονικά, το Wii Remote που χρησιμοποιείται ως ελαφρύ όπλο δεν είναι αρκετά ακριβές για ρετρό παιχνίδια όπως το NES Duck Hunt, επειδή το Wii Remote στην πραγματικότητα δεν επιλέγει το σημείο της τηλεόρασης στο οποίο είναι στραμμένο. Δεν μπορεί! Το Wii Remote έχει μια κάμερα υπέρυθρων στο μπροστινό του μέρος που βλέπει τη γραμμή των υπέρυθρων LED στη γραμμή αισθητήρων, αλλά δεν μπορεί να γνωρίζει πόσο μακριά (ή σε ποια κατεύθυνση) βρίσκεται η τηλεόραση από τη γραμμή ή πόσο μεγάλη είναι η τηλεόραση. Οι εξομοιωτές και τα παιχνίδια λειτουργούν γύρω από αυτό, δείχνοντας διασταυρωμένα μαλλιά ή άλλο δείκτη στόχευσης, αλλά αυτό δεν είναι μια ακριβής εμπειρία λήψης στόχων.

Για να λειτουργήσει το Wii Remote ως ακριβές πιστόλι που μπορείτε να δείτε για να επιλέξετε έναν στόχο σε μια τηλεόραση απαιτούνται τέσσερις υπέρυθρες λυχνίες LED διατεταγμένες σε γνωστό τετράπλευρο μοτίβο (όχι ευθεία) στο ίδιο επίπεδο με την τηλεόραση. Στη συνέχεια, το Wii Remote βλέπει τα τέσσερα LED και η εικόνα της κάμερας μπορεί να χρησιμοποιηθεί για τον υπολογισμό μιας ομογραφίας που μας επιτρέπει να καταλάβουμε πού δείχνει η κάμερα.

Το υλικό για αυτό το έργο είναι απλό. Υπάρχουν τέσσερις υπέρυθρες λυχνίες LED σε απλές θήκες με 3D εκτύπωση που μπορούν να κολληθούν στο πάνω και κάτω μέρος του περιβλήματος της τηλεόρασης και να συνδεθούν σε φορτιστή USB. Επιπλέον, σε περίπτωση που δεν διαθέτετε θήκη όπλου Wii, έχω μια απλή λαβή με 3D εκτύπωση και αξιοθέατα που μπορείτε να προσαρτήσετε στο τηλεχειριστήριο Wii (αν και για εξοικονόμηση πλαστικού, έκανα το δικό μου υβρίδιο μεταξύ ξύλου και πλαστικού 3D εκτύπωσης).

Το λογισμικό που βασίζεται σε python ήταν πιο δύσκολο να κατασκευαστεί από το υλικό και είναι προς το παρόν μόνο για Linux. Βαθμονομεί τις λυχνίες LED και το Wii Remote και στη συνέχεια χρησιμοποιεί υπολογισμούς ομογραφίας για να μιμηθεί ένα απόλυτο ποντίκι που λειτουργεί αρκετά καλά στον εξομοιωτή fceumm NES της Retroarch (και πιθανώς σε άλλους εξομοιωτές) στο Raspberry PI 3B+μου.

Προμήθειες

  • Τηλεχειριστήριο Wii
  • Τέσσερα υπέρυθρα LED 940nm 5mm
  • Παλιό καλώδιο USB με βύσμα τύπου Α που λειτουργεί
  • Raspberry PI 3 ή άλλος υπολογιστής Linux με υποστήριξη Bluetooth
  • Τρισδιάστατος εκτυπωτής και νήματα (προαιρετικά)

Βήμα 1: Αλυσίδα υπέρυθρων LED

Υπέρυθρη αλυσίδα LED
Υπέρυθρη αλυσίδα LED
Υπέρυθρη αλυσίδα LED
Υπέρυθρη αλυσίδα LED

Αποκτήστε ένα παλιό καλώδιο USB με ανδρική πρίζα τύπου Α (συνήθως τα καλώδια φόρτισης του τηλεφώνου μου σπάνε στο τερματικό micro USB, οπότε έχω υπολείμματα καλωδίων με αρσενική πρίζα τύπου Α). Στην πραγματικότητα, είναι εντάξει αν τα καλώδια δεδομένων είναι σπασμένο όσο λειτουργούν τα καλώδια ρεύματος. Κόψτε το άλλο άκρο. Θεωρητικά, το κόκκινο καλώδιο πρέπει να είναι +5V και το μαύρο πρέπει να είναι γειωμένο, αλλά ελέγξτε το με ένα πολύμετρο (συνδέστε το σε φορτιστή και, στη συνέχεια, ελέγξτε την τάση μεταξύ του κόκκινου και του μαύρου καλωδίου).

Δεδομένου ότι οι υπέρυθρες λυχνίες LED έχουν πτώση τάσης 1,2-1,3V, μόλις κόλλησα τέσσερις από αυτές σε σειρά βρόχου στο καλώδιο USB. Βεβαιωθείτε ότι τα καλώδια που συγκολλάτε είναι αρκετά μακριά ώστε να μπορείτε να τοποθετήσετε LED στο κάτω μέρος της τηλεόρασης και δύο στο επάνω μέρος, με αξιοπρεπή οριζόντιο χώρο μεταξύ των LED (περίπου 10 ίντσες περίπου).

Πιο συγκεκριμένα για να φτιάξετε το βρόχο LED:

  • συγκόλληση της μείον πλευράς (κάθοδος, μικρότερο πόδι, με επίπεδη άκρη) του πρώτου LED στο καλώδιο USB +5V
  • ενώστε τη θετική πλευρά του πρώτου LED (άνοδος, μακρύτερο πόδι, με στρογγυλή άκρη) στη μείον πλευρά του δεύτερου LED
  • επαναλάβετε για να ενώσετε το δεύτερο LED στο τρίτο και το τρίτο στο τέταρτο
  • Στη συνέχεια, συνδέστε τη θετική πλευρά του τέταρτου LED με ένα καλώδιο στο καλώδιο USB γείωσης.

Για να κάνετε τα πράγματα πιο καθαρά, μπορείτε να χρησιμοποιήσετε σωλήνες συρρίκνωσης θερμότητας όταν κάνετε τις συνδέσεις. Διαφορετικά, χρησιμοποιήστε ηλεκτρική ταινία για να αποφύγετε τα σορτς.

Βεβαιωθείτε ότι δεν έχετε βραχυκύκλωμα. Στη συνέχεια, συνδέστε το σε φορτιστή USB και ελέγξτε ότι εκπέμπει υπέρυθρο φως κοιτάζοντας τα LED με κάμερα τηλεφώνου. (Πολλές κάμερες τηλεφώνου είναι ευαίσθητες στην υπέρυθρη ακτινοβολία.)

Βήμα 2: Προσάρτηση στην τηλεόραση

Προσάρτηση στην τηλεόραση
Προσάρτηση στην τηλεόραση
Προσάρτηση στην τηλεόραση
Προσάρτηση στην τηλεόραση
Προσάρτηση στην τηλεόραση
Προσάρτηση στην τηλεόραση

Τώρα, συνδέστε δύο από τις λυχνίες LED στην κάτω πλευρά της τηλεόρασης και δύο στην επάνω πλευρά. Η οριζόντια απόσταση πρέπει να είναι περίπου δέκα ίντσες. Αν είναι πάρα πολύ, ενδέχεται να έχετε προβλήματα με το οπτικό πεδίο της κάμερας Wii Remote να τα καταγράφει όλα. Αλλά αν είναι πολύ κοντά, τότε η γεωμετρική διαίσθησή μου λέει ότι θα έχετε χαμηλότερη ακρίβεια.

Για δοκιμή, έβαλα τις λυχνίες LED με ηλεκτρική ταινία και, στη συνέχεια, για μόνιμη σύνδεση, σχεδίασα και εκτύπωσα τέσσερα τακτοποιημένα μικρά κλιπ LED (τα αρχεία είναι εδώ) τα οποία κόλλησα εν θερμώ στην τηλεόραση. Πρέπει να κάνετε τις λυχνίες LED να είναι όσο το δυνατόν πιο κοντά στο επίπεδο της οθόνης της τηλεόρασης, χωρίς το πλαίσιο να τα αποκρύπτει από τη θέση όπου θα τραβήξετε.

Βήμα 3: Εγκατάσταση λογισμικού

Προς το παρόν το λογισμικό είναι μόνο για Linux. Η παρακάτω ρύθμιση έχει σχεδιαστεί για το Raspberry PI 3 με Raspbian Stretch. Άλλα συστήματα Linux θα απαιτήσουν κάποιες αλλαγές. Σε παλαιότερα μοντέλα θα χρειαστείτε ένα dongle Bluetooth και θα πρέπει να το εκτελέσετε και από μια γραμμή εντολών:

sudo get-apt εγκατάσταση bluetooth

Βήμα Α: udev

Στη συνέχεια, δημιουργήστε ένα αρχείο στο /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 επανεκκίνηση

Βήμα Β: cwiid

Στη συνέχεια, θα χρειαστείτε το τροποποιημένο πακέτο μου cwiid. Εδώ γίνεται λίγο τριχωτό καθώς ιδανικά θα πρέπει να το χτίσετε στο Raspberry PI σας, αλλά πρέπει να ομολογήσω ότι έχω χάσει τα ίχνη των πακέτων που πρέπει να εγκαταστήσετε για να λειτουργήσει. Υπάρχουν τρεις επιλογές για να γίνει αυτό.

Επιλογή Β1: Φτιάξτε τον εαυτό σας

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

Δυστυχώς, υπάρχει μια πολύ καλή πιθανότητα να χάσετε ένα σωρό πράγματα που χρειάζονται για τη δημιουργία αυτού και./configure θα παραπονεθείτε. Μπορείτε να δείτε όλα τα πράγματα για τα οποία παραπονιέται και να εκτελέσετε sudo apt install σε όλα αυτά.

Επιλογή Β2: Χρήση των δυαδικών μου αρχείων

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

Βήμα Γ: βιβλιοθήκες python

Τέλος, λάβετε στοιχεία υποστήριξης για το σενάριο μου python lightgun:

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

Τέλος, αποκτήστε το σενάριο μου python lightgun:

cd

git clone

Εάν όλα πήγαν καλά, τώρα έχετε το ~/lightgun.py το οποίο μπορείτε να χρησιμοποιήσετε για να βαθμονομήσετε το ελαφρύ όπλο.

Βήμα 4: Βαθμονόμηση Μέρος Ι: Κεντράρισμα της κάμερας

Βαθμονόμηση Μέρος Ι: Κεντράρισμα της κάμερας
Βαθμονόμηση Μέρος Ι: Κεντράρισμα της κάμερας
Βαθμονόμηση Μέρος Ι: Κεντράρισμα της κάμερας
Βαθμονόμηση Μέρος Ι: Κεντράρισμα της κάμερας
Βαθμονόμηση Μέρος Ι: Κεντράρισμα της κάμερας
Βαθμονόμηση Μέρος Ι: Κεντράρισμα της κάμερας

Υπάρχουν δύο όψεις στη βαθμονόμηση. Το πρώτο είναι να βαθμονομήσετε το κέντρο της κάμερας σε κάθε Wiimote. Αυτό απαιτεί τη χρήση της κάμερας για τη λήψη δύο εικόνων των LED στην οθόνη της τηλεόρασής σας, μία με το απομακρυσμένο δεξιό μέρος προς τα πάνω και την άλλη με την ανάποδη.

Για να αποφύγετε να πατήσετε τα κουμπιά όταν τοποθετείτε το Wii Remote στο μπροστινό του μέρος και για να κάνετε το Wii Remote να έχει σταθερή ανύψωση, μπορείτε να εκτυπώσετε 3D το εργαλείο βαθμονόμησης που συμπεριέλαβα εδώ. Βασικά χρειάζεστε πράγματα που έχουν πάχος 10,5 mm και μπορείτε να τα βάλετε κάτω από το τηλεχειριστήριο Wii όταν βρίσκεται μπροστά. Στην πραγματικότητα χρησιμοποίησα λίγο κόντρα πλακέ για να εξοικονομήσω πλαστικό.

Ενεργοποιήστε τα LED και βεβαιωθείτε ότι το Raspberry PI ή άλλος υπολογιστής εμφανίζεται στην τηλεόραση. Συνδέστε ένα πληκτρολόγιο (αυτό δεν θα λειτουργήσει μέσω ssh) ή χρησιμοποιήστε VNC. Στη συνέχεια εκτελέστε:

python3 ~/lightgun/lightgun.py -M

Εάν όλα πάνε καλά, θα έχετε μια οθόνη πλήρους οθόνης που σας ζητά να πατήσετε 1+2 στο Wii Remote. Κάνε αυτό. Τα φώτα θα αναβοσβήνουν στο Wii Remote και έπειτα τα φώτα 1 και 4 θα παραμείνουν αναμμένα. Θα δείτε επίσης ένα μικρό πράσινο ορθογώνιο στο επάνω μέρος της οθόνης, με θέα από την κάμερα Wii Remote. Στρέψτε το τηλεχειριστήριο Wii στα LED και αν όλα πάνε καλά, θα δείτε τα τέσσερα LED, αριθμημένα από 1 έως 4.

Τώρα πρέπει να βρείτε μια συμπαγή επιφάνεια με μια αιχμηρή άκρη, όπως ένα τραπεζάκι σαλονιού, που μπορείτε να δείξετε στην οθόνη της τηλεόρασης και που επιτρέπει στο Wii Remote να βλέπει όλες τις λυχνίες LED με το Wii Remote ευθυγραμμισμένο με την άκρη. Ξεκινήστε ευθυγραμμίζοντας το Wii Remote με τη δεξιά πλευρά προς τα πάνω, με την πλευρά του τηλεχειριστηρίου ευθυγραμμισμένη με την άκρη της επιφάνειας, βεβαιωθείτε ότι εμφανίζονται και τα τέσσερα LED. Στη συνέχεια, πατήστε το πλήκτρο SPACE στο πληκτρολόγιό σας (ή επισυνάψτε ένα Nunchuck και πατήστε το C αν είναι πιο βολικό). Στη συνέχεια, θα σας ζητηθεί να περιστρέψετε το τηλεχειριστήριο Wii. Τώρα, βεβαιωθείτε ότι είναι υψωμένο 10,5 mm από την επιφάνειά σας, χρησιμοποιώντας το εργαλείο βαθμονόμησης ή κάτι άλλο, και σε κοντινή απόσταση με την ίδια θέση όπως πριν (π.χ., ευθυγραμμισμένο με την ίδια άκρη της επιφάνειάς σας). Πατήστε ξανά 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. Αλλά η κάμερα βρίσκεται στην πραγματικότητα κάποια απόσταση κάτω από αυτήν την επιφάνεια, στη μέση του μαύρου ορθογωνίου στο μπροστινό μέρος του τηλεχειριστηρίου Wii. Εάν καταγράψαμε τις λήψεις όπου δείχνει η κάμερα, θα καταγράφονταν περίπου 8 mm κάτω από την επάνω επιφάνεια του τηλεχειριστηρίου Wii. Μπορείτε να το ελέγξετε σημειώνοντας ότι καθώς βλέπετε κατά μήκος της πάνω επιφάνειας, το κέντρο των σταυροειδών μαλλιών κρύβεται από την κάμερα.

Μπορείτε να ζήσετε με αυτό, ή μπορείτε να αυξήσετε αυτό το πέμπτο βέλος για να ευθυγραμμίσετε τις λήψεις με το επάνω μέρος του τηλεχειριστηρίου Wii ή μπορείτε να προσαρμόσετε τα εκτυπώσιμα αρχεία 3D για τα σιδερένια αξιοθέατα για να αντισταθμίσετε αυτό (αλλά η αντιστάθμιση θα λειτουργήσει μόνο για μια συγκεκριμένη απόσταση από την τηλεόραση). Πήγα μόνος μου για την ευθυγράμμιση λογισμικού.

Πατήστε HOME στο Wii Remote για έξοδο από τη βαθμονόμηση και αποθηκεύστε όλα τα δεδομένα στον κατάλογο ~/.wiilightgun.

Βήμα 6: Δοκιμή και χρήση

Δοκιμή και χρήση
Δοκιμή και χρήση
Δοκιμή και χρήση
Δοκιμή και χρήση
Δοκιμή και χρήση
Δοκιμή και χρήση

Μάλλον θέλετε να δοκιμάσετε το ελαφρύ όπλο σας τώρα. Απλώς τρέξτε σε έναν εξομοιωτή τερματικού (ή σενάριο):

python3 ~/lightgun/lightgun.py -t

Θα χρειαστεί να πατήσετε τα κουμπιά 1+2 ταυτόχρονα, και μετά από αυτό αν όλα πάνε καλά, όσο το lightgun.py λειτουργεί, το ελαφρύ όπλο θα μιμηθεί ένα απόλυτο ποντίκι δύο κουμπιών. Το κουμπί σκανδάλης είναι το κουμπί του ποντικιού 1 και το κουμπί Α είναι το κουμπί του ποντικιού 2. Πατήστε ctrl-c για έξοδο.

Τώρα χρειάζεται μόνο να διαμορφώσετε τους εξομοιωτές ή/και τα παιχνίδια σας για να λειτουργούν με ένα απόλυτο ποντίκι. Δυστυχώς, αυτό δεν θα είναι πάντα τόσο εύκολο.

Ένα διασκεδαστικό πράγμα που μπορείτε να δοκιμάσετε είναι το mod μου του 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 Remote με Retroarch. Απλώς προσθέστε την επιλογή -o και οι λειτουργίες lightgun θα απενεργοποιηθούν και αντί αυτού το Wii Remote θα λειτουργήσει οριζόντια, με τα τρία κουμπιά να είναι 1, 2 και B αντίστοιχα. Υπάρχουν άλλες συναρτήσεις που σχετίζονται με το Retroarch στις αντιστοιχίσεις lightgun.py τις οποίες θα ανακαλύψετε διαβάζοντας τον κώδικα. Για παράδειγμα, το πλήκτρο μείον λειτουργεί ως μετατόπιση και μαζί με το dpad ελέγχει την αποθήκευση και τη φόρτωση (πάνω/κάτω = αλλαγή αριθμού αποθήκευσης, αριστερά = επαναφορά, δεξιά = αποθήκευση).

Βήμα 7: Λαβή όπλων και στόχος

Λαβή όπλων και στόχος
Λαβή όπλων και στόχος
Λαβή όπλων και στόχος
Λαβή όπλων και στόχος
Λαβή όπλων και στόχος
Λαβή όπλων και στόχος

Μπορείτε να χρησιμοποιήσετε το Wii Remote από μόνο του ως όπλο, βλέποντας το πάνω μέρος. Μπορείτε επίσης να αγοράσετε ένα από τα εμπορικά περιβλήματα όπλων για αυτό. Αλλά επειδή το αρχικό τηλεχειριστήριο Wii δεν ήταν ικανό να χρησιμοποιηθεί ως ορατό όπλο, τα περιβλήματα τείνουν να μην έρχονται με σιδερένια αξιοθέατα και τα σιδερένια σημεία βελτιώνουν σημαντικά την ακρίβεια.

Σχεδίασα ένα απλό σύστημα τριών τμημάτων με δυνατότητα εκτύπωσης 3D: μια χειρολαβή που τοποθετείται ακριβώς πίσω από τη σκανδάλη (οπότε μοιάζει λίγο με ένα φακελάκι της αρχικής σειράς Star Trek) και διαφάνειες. Τα εκτυπώσιμα αρχεία είναι εδώ. Εάν θέλετε να εξοικονομήσετε πλαστικό σε βάρος του παλιοσίδερου, μπορείτε επίσης να κάνετε αυτό που έκανα και αντί να εκτυπώσετε ολόκληρη τη λαβή, να εκτυπώσετε μόνο το μέρος που κρατά το 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 (σε συντεταγμένες οθόνης).
      • Χρησιμοποιήστε την ομογραφία για να υπολογίσετε ποια θέση οθόνης αντιστοιχεί στο κέντρο του οπτικού πεδίου της κάμερας.
      • Κάντε την προσαρμογή Υ για να προσαρμόσετε το κέντρο της εικονικής κάννης όπλου κάτω από την οπτική γωνία. Αυτός είναι ένας κάπως kludgy αλγόριθμος αλλά λειτουργεί.
      • Ρυθμίστε τη θέση του ποντικιού στην προσαρμοσμένη θέση οθόνης.
    • Εάν είναι ορατές τρεις λυχνίες LED:

      • Χρησιμοποιήστε το OpenCV για να λύσετε το πρόβλημα P3P μεταξύ των εικόνων της κάμερας LED και των φυσικών τοποθεσιών LED. Αυτό δημιουργεί έως και τέσσερις λύσεις.
      • Εάν είναι επιτυχής:

        • Εάν είχαμε προηγούμενο επιτυχημένο υπολογισμό θέσης, επιλέξτε τη λύση που κάνει το LED που λείπει να είναι πιο κοντά στην τελευταία παρατηρημένη ή υπολογισμένη θέση αυτού του LED.
        • Εάν δεν έχουμε προηγούμενο επιτυχημένο υπολογισμό θέσης, επιλέξτε τη λύση που προβλέπει καλύτερα την επικεφαλίδα του επιταχυνσιόμετρου.
        • Χρησιμοποιήστε την καλύτερη λύση για να υπολογίσετε πού πρέπει να πάει το τέταρτο LED.
        • Κάντε τα υπόλοιπα όπως στην περίπτωση των τεσσάρων θήκων LED.
      • Εάν δεν είναι επιτυχής:

        Διατηρήστε την τελευταία θέση του ποντικιού

Συνιστάται: