สารบัญ:

Wiimote Light Gun ที่แม่นยำสำหรับ Raspberry PI: 9 ขั้นตอน (พร้อมรูปภาพ)
Wiimote Light Gun ที่แม่นยำสำหรับ Raspberry PI: 9 ขั้นตอน (พร้อมรูปภาพ)

วีดีโอ: Wiimote Light Gun ที่แม่นยำสำหรับ Raspberry PI: 9 ขั้นตอน (พร้อมรูปภาพ)

วีดีโอ: Wiimote Light Gun ที่แม่นยำสำหรับ Raspberry PI: 9 ขั้นตอน (พร้อมรูปภาพ)
วีดีโอ: EZ-BoxBot Tutorial Step 3 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 อินฟราเรดสี่ดวงในตัวเครื่องที่พิมพ์ 3 มิติอย่างง่าย ซึ่งสามารถติดกาวที่ด้านบนและด้านล่างของตัวทีวีและเสียบเข้ากับที่ชาร์จ USB นอกจากนี้ ในกรณีที่คุณไม่มีโครงปืน Wii ฉันมีที่จับแบบ 3D แบบพิมพ์และสถานที่ที่คุณสามารถติดเข้ากับ Wii Remote ได้ (แต่เพื่อเป็นการประหยัดพลาสติก ฉันได้สร้างไฮบริดระหว่างไม้กับพลาสติกที่พิมพ์ 3 มิติ)

ซอฟต์แวร์ที่ใช้หลามนั้นสร้างยากกว่าฮาร์ดแวร์และปัจจุบันเป็นเฉพาะ Linux เท่านั้น มันปรับเทียบ LED และ Wii Remote จากนั้นใช้การคำนวณโฮโมกราฟฟีเพื่อจำลองเมาส์แบบสัมบูรณ์ที่ทำงานได้ดีในโปรแกรมจำลอง fceumm NES ของ Retroarch (และอาจเป็นอีมูเลเตอร์อื่นๆ) บน Raspberry PI 3B+ ของฉัน

เสบียง

  • รีโมท Wii
  • ไฟ LED อินฟราเรด 940nm 5 มม. สี่ดวง
  • สาย USB เก่าพร้อมปลั๊ก A ที่ใช้งานได้
  • Raspberry PI 3 หรือคอมพิวเตอร์ Linux อื่นๆ ที่รองรับ Bluetooth
  • เครื่องพิมพ์ 3 มิติและเส้นใย (อุปกรณ์เสริม)

ขั้นตอนที่ 1: ห่วงโซ่ LED อินฟราเรด

ห่วงโซ่ LED อินฟราเรด
ห่วงโซ่ LED อินฟราเรด
ห่วงโซ่ LED อินฟราเรด
ห่วงโซ่ LED อินฟราเรด

รับสาย USB แบบเก่าที่มีเต้ารับชายแบบ A ที่ใช้งานได้ (โดยปกติสายชาร์จโทรศัพท์ของฉันจะหักที่ปลายไมโคร USB ดังนั้นฉันจึงมีสายที่เหลือที่มีซ็อกเก็ตชายแบบ A ที่ใช้งานได้).. ที่จริงแล้วก็ยังใช้ได้ถ้าสายดาต้า แตกตราบใดที่สายไฟทำงาน ตัดปลายอีกด้าน ตามทฤษฎีแล้ว สายสีแดงควรเป็น +5V และสีดำควรเป็นสายกราวด์ แต่ให้ตรวจสอบด้วยมัลติมิเตอร์ (เสียบเข้ากับเครื่องชาร์จ แล้วตรวจสอบแรงดันไฟฟ้าระหว่างสายสีแดงและสีดำ)

เนื่องจากไฟ LED อินฟราเรดมีแรงดันตกประมาณ 1.2-1.3V ฉันจึงบัดกรีสี่ตัวในอนุกรมลูปกับสาย USB ตรวจสอบให้แน่ใจว่าสายไฟที่คุณบัดกรีนั้นยาวพอที่จะใส่ไฟ LED ที่ด้านล่างของทีวีและสองเส้นที่ด้านบน โดยมีพื้นที่แนวนอนที่เหมาะสมระหว่าง LED (ประมาณ 10 นิ้วหรือมากกว่านั้น)

แม่นยำยิ่งขึ้นในการสร้างลูป LED:

  • ประสานด้านลบ (แคโทด, ขาสั้นกว่า, มีขอบแบน) ของ LED ตัวแรกกับสาย USB +5V
  • เชื่อมด้านบวกของ LED ตัวแรก (ขั้วบวก ขายาว ขอบมน) เข้ากับด้านลบของ LED ตัวที่สอง
  • ทำซ้ำเพื่อเข้าร่วม LED ตัวที่สองกับตัวที่สามและตัวที่สามกับตัวที่สี่
  • จากนั้นเชื่อมต่อด้านบวกของ LED ดวงที่สี่ด้วยสายเข้ากับสาย USB กราวด์

ในการทำให้ทุกอย่างเรียบร้อยยิ่งขึ้น คุณสามารถใช้ท่อหดด้วยความร้อนเมื่อคุณทำการเชื่อมต่อ มิฉะนั้น ให้ใช้เทปพันสายไฟเพื่อหลีกเลี่ยงการลัดวงจร

ตรวจสอบให้แน่ใจว่าคุณไม่มีไฟฟ้าลัดวงจร จากนั้นเสียบที่ชาร์จ USB และตรวจสอบว่ามีการปล่อยแสงอินฟราเรดโดยดูที่ LED ด้วยกล้องของโทรศัพท์ (กล้องโทรศัพท์หลายตัวมีความไวแสงอินฟราเรด)

ขั้นตอนที่ 2: แนบกับ TV

ติดทีวี
ติดทีวี
ติดทีวี
ติดทีวี
ติดทีวี
ติดทีวี

ตอนนี้ ติดไฟ LED สองดวงที่ด้านล่างของทีวีและอีกสองดวงที่ด้านบน ระยะห่างแนวนอนควรประมาณสิบนิ้ว ถ้ามันมากเกินไป คุณอาจมีปัญหากับระยะการมองเห็นของกล้อง Wii Remote ในการจับภาพทั้งหมด แต่ถ้าพวกมันอยู่ใกล้เกินไป สัญชาตญาณทางเรขาคณิตของผมบอกว่า คุณจะมีความแม่นยำต่ำกว่า

สำหรับการทดสอบ ฉันติดเทปไฟ LED ด้วยเทปไฟฟ้า จากนั้นสำหรับการเชื่อมต่อแบบถาวร ฉันออกแบบและพิมพ์คลิป LED เล็กๆ สี่อันเรียบร้อย (ไฟล์อยู่ที่นี่) ซึ่งฉันติดกาวไว้กับทีวี คุณควรทำให้ไฟ LED อยู่ใกล้กับระนาบของจอแสดงผลทีวีมากที่สุด โดยที่ขอบจอไม่ให้บังไว้จากตำแหน่งที่คุณจะถ่ายทำ

ขั้นตอนที่ 3: ติดตั้งซอฟต์แวร์

ปัจจุบันซอฟต์แวร์เป็นแบบ Linux เท่านั้น การตั้งค่าต่อไปนี้ออกแบบมาสำหรับ Raspberry PI 3 พร้อม Raspbian Stretch ระบบ Linux อื่น ๆ จะต้องมีการเปลี่ยนแปลงบางอย่าง ในรุ่นก่อนหน้านี้ คุณจะต้องใช้ดองเกิล Bluetooth และคุณจะต้องเรียกใช้สิ่งนี้จากบรรทัดคำสั่งด้วย:

sudo get-apt ติดตั้งบลูทูธ

ขั้นตอน A: 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 restart

ขั้นตอน B: cwiid

ต่อไป คุณจะต้องใช้แพ็คเกจ cwiid ที่แก้ไขของฉัน ที่นี่จะมีขนดกเล็กน้อยตามอุดมคติแล้วคุณจะต้องสร้างมันขึ้นมาบน Raspberry PI ของคุณ แต่ฉันต้องสารภาพว่าฉันไม่ได้ติดตามว่าคุณต้องติดตั้งแพ็คเกจใดเพื่อให้มันใช้งานได้ มีสามตัวเลือกสำหรับการทำเช่นนี้

ตัวเลือก B1: สร้างตัวเอง

ซีดี ~

git clone https://github.com/arpruss/cwiid-1 autoconf./configure make -C libcwiid sudo make -C libcwiid ติดตั้ง make -C python sudo make -C python ติดตั้ง

น่าเสียดายที่มีโอกาสค่อนข้างดีที่คุณจะพลาดบางสิ่งที่จำเป็นสำหรับการสร้างสิ่งนี้ และ./configure จะบ่น คุณสามารถดูทุกสิ่งที่มันบ่นและเรียกใช้ sudo apt install ได้ทั้งหมด

ตัวเลือก B2: ใช้ไบนารีของฉัน

ซีดี ~

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: ไลบรารีหลาม

สุดท้าย รับสิ่งสนับสนุนสำหรับสคริปต์ lightgun python ของฉัน:

sudo pip3 ติดตั้ง uinput numpy pygame opencv-python

sudo apt-get ติดตั้ง libatlas-base-dev sudo apt-get ติดตั้ง libjasper-dev sudo apt-get ติดตั้ง libqtgui4 sudo apt-get ติดตั้ง python3-pyqt5

ขั้นตอนที่ D: lightgun.py

สุดท้าย รับสคริปต์ lightgun python ของฉัน:

ซีดี ~

โคลน git

หากทุกอย่างเป็นไปด้วยดี ตอนนี้คุณมี ~/lightgun.py ซึ่งคุณสามารถใช้ปรับเทียบ lightgun ได้

ขั้นตอนที่ 4: การปรับเทียบ ตอนที่ 1: การจัดตำแหน่งกล้องให้อยู่ตรงกลาง

ส่วนการสอบเทียบ I: การจัดตำแหน่งกล้องให้อยู่ตรงกลาง
ส่วนการสอบเทียบ I: การจัดตำแหน่งกล้องให้อยู่ตรงกลาง
ส่วนการสอบเทียบ I: การจัดตำแหน่งกล้องให้อยู่ตรงกลาง
ส่วนการสอบเทียบ I: การจัดตำแหน่งกล้องให้อยู่ตรงกลาง
ส่วนการสอบเทียบ I: การจัดตำแหน่งกล้องให้อยู่ตรงกลาง
ส่วนการสอบเทียบ I: การจัดตำแหน่งกล้องให้อยู่ตรงกลาง

มีสองด้านในการสอบเทียบ ประการแรกคือการปรับเทียบศูนย์กลางของกล้องใน Wiimote แต่ละเครื่อง ซึ่งต้องใช้กล้องถ่ายภาพ LED สองภาพรอบๆ หน้าจอทีวีของคุณ ภาพหนึ่งโดยให้รีโมตด้านขวาหงายขึ้น และอีกภาพหนึ่งคว่ำลง

เพื่อหลีกเลี่ยงไม่ให้กดปุ่มเมื่อคุณวาง Wii Remote ไว้ด้านหน้า และเพื่อให้ Wii Remote มีระดับความสูงที่สม่ำเสมอ คุณสามารถพิมพ์ 3D พิมพ์เครื่องมือสอบเทียบที่ฉันรวมไว้ที่นี่ โดยทั่วไปคุณต้องการสิ่งที่หนา 10.5 มม. ซึ่งคุณสามารถวางไว้ใต้ Wii Remote เมื่อวางไว้ด้านหน้า ที่จริงฉันใช้เศษไม้อัดเพื่อประหยัดพลาสติก

เปิดไฟ LED ของคุณและตรวจสอบให้แน่ใจว่า Raspberry PI หรือคอมพิวเตอร์เครื่องอื่นของคุณแสดงบนทีวี เชื่อมต่อแป้นพิมพ์ (ใช้ไม่ได้กับ ssh) หรือใช้ VNC จากนั้นเรียกใช้:

python3 ~/lightgun/lightgun.py -M

หากทุกอย่างเป็นไปด้วยดี คุณจะได้รับการแสดงผลแบบเต็มหน้าจอโดยขอให้คุณกด 1+2 บน Wii Remote ทำอย่างนั้น. ไฟจะกะพริบบนรีโมท Wii จากนั้นไฟ 1 และ 4 จะติดสว่าง คุณจะเห็นสี่เหลี่ยมสีเขียวเล็กๆ ที่ด้านบนของหน้าจอ พร้อมมุมมองจากกล้อง Wii Remote ชี้ Wii Remote ไปที่ LED และหากทุกอย่างเป็นไปด้วยดี คุณจะเห็น LED สี่ดวงที่หมายเลข 1 ถึง 4

ตอนนี้ คุณจำเป็นต้องค้นหาพื้นผิวที่แข็งแรงและมีขอบที่แหลมคม เช่น โต๊ะกาแฟ ที่คุณสามารถชี้ไปที่หน้าจอทีวี และนั่นทำให้ Wii Remote มองเห็น LED ทั้งหมดโดยที่ Wii Remote วางชิดขอบ เริ่มต้นด้วยการจัดตำแหน่ง Wii Remote ให้ด้านขวาขึ้น โดยให้ด้านของ Remote ชิดกับขอบพื้นผิว ตรวจสอบให้แน่ใจว่ามองเห็น LED ทั้งสี่ดวง จากนั้นกด SPACE บนแป้นพิมพ์ของคุณ (หรือแนบ Nunchuck แล้วกด C หากสะดวกกว่า) จากนั้นคุณจะได้รับแจ้งให้หมุน Wii Remote ตอนนี้ ตรวจสอบให้แน่ใจว่ายกขึ้นจากพื้นผิวของคุณ 10.5 มม. โดยใช้เครื่องมือสอบเทียบหรืออย่างอื่น และใกล้กับตำแหน่งเดิมมากที่สุด (เช่น จัดชิดขอบเดียวกันของพื้นผิวของคุณ) กด SPACE อีกครั้ง

หากทุกอย่างเป็นไปด้วยดี คุณจะไปที่ขั้นตอนการปรับเทียบ LED ใช่ มันซับซ้อน! แต่คุณจะมีปืนไฟที่แม่นยำมาก นั่นเป็นเพียงราคา

หมายเหตุ: ถ้าเช่นฉันคุณมี Wii อยู่ใต้ทีวี Wii จะต้องปิดด้วยเหตุผลสองประการ: ประการแรกถ้า Wii เปิดอยู่ก็จะเชื่อมต่อกับ Wiimote และประการที่สองไฟ LED อินฟราเรดของแถบเซ็นเซอร์จะรบกวน โครงการนี้. ด้วยเหตุผลที่คล้ายกัน ในขณะที่คุณใช้ Wii คุณควรถอดปลั๊กไฟ LED รอบๆ ทีวีออก

ขั้นตอนที่ 5: การปรับเทียบ ขั้นตอนที่ II: LEDs

ขั้นตอนการสอบเทียบ II: LEDs
ขั้นตอนการสอบเทียบ II: LEDs
ขั้นตอนการสอบเทียบ II: LEDs
ขั้นตอนการสอบเทียบ II: LEDs

ตอนนี้ คุณต้องบอกซอฟต์แวร์ว่าไฟ LED อยู่ที่ใดบริเวณขอบทีวี คุณจะเห็นหน้าจอการปรับเทียบแสดงลูกศรสี่ลูกศร หนึ่งในนั้นถูกเลือก (สว่าง) และสามลูกศรเป็นสีเทารอบๆ ขอบทีวี คุณใช้ +/- เพื่อเปลี่ยนเพื่อเปลี่ยนลูกศรที่คุณกำลังปรับ

สำหรับลูกศรทั้งสี่รอบขอบ ให้ทำดังนี้

  1. กดซ้าย/ขวาบน Wiimote เพื่อเลื่อนลูกศรจนกว่าจะชี้อย่างแม่นยำที่สุดเท่าที่จะทำได้ไปยัง LED ที่เกี่ยวข้อง
  2. กดขึ้น/ลงบน Wiimote เพื่อเปลี่ยนความยาวของลูกศรจนกว่าความยาวของลูกศรจะตรงกับระยะห่างระหว่าง LED และขอบของจอทีวี กล่าวคือ ความยาวของลูกศรต้องเท่ากับระยะทางจากปลายลูกศรถึง LED

เมื่อลูกศรทั้งสี่ของคุณถูกต้อง (และอาจจะเร็วกว่านั้น) คุณจะเห็นเครื่องหมายกากบาทสีแดงเมื่อคุณชี้ Wiimote ไปที่หน้าจอ คุณสามารถตรวจสอบได้ว่านี่คือที่ที่ควรจะเป็น (จำไว้ว่าคุณต้องอยู่ไกลพอที่ Wiimote จะได้เห็นไฟ LED ทั้งหมด สิ่งสำคัญคือต้องไม่มีแหล่งกำเนิดอินฟราเรดอื่นในขอบเขตการมองเห็น ครั้งหนึ่งฉันเคยมีปัญหาเพราะแสงแดดสะท้อนจากหัวสกรูบน ชั้นวางทีวี)

สุดท้าย มีลูกศรที่ห้าซึ่งจะแสดงขึ้นเมื่อคุณกด + จากลูกศร LED ที่สี่หรือ - จากลูกศรแรกเท่านั้น (และโดยค่าเริ่มต้นจะมีความยาวเป็นศูนย์ ดังนั้นจึงเป็นเพียงพิกเซล) ลูกศรนี้ปรับระยะที่อยู่เหนือกล้องของ Wii Remote ที่จะบันทึกช็อต ปัญหาคือ: คุณจะมองเห็นพื้นผิวด้านบนของ Wii Remote แต่จริงๆ แล้วกล้องนั้นอยู่ต่ำกว่าพื้นผิวนั้น ตรงกลางสี่เหลี่ยมสีดำด้านหน้า Wii Remote หากเราบันทึกภาพที่กล้องกำลังชี้อยู่ ภาพเหล่านั้นจะถูกบันทึกไว้ใต้พื้นผิวด้านบนของ Wii Remote ประมาณ 8 มม. คุณสามารถตรวจสอบได้โดยสังเกตว่ากล้องจะซ่อนจุดศูนย์กลางของเส้นกากบาทไว้

คุณสามารถอยู่กับสิ่งนี้หรือคุณสามารถขยายลูกศรที่ห้านี้ให้ซอฟต์แวร์จัดตำแหน่งช็อตด้วยด้านบนของ Wii Remote หรือคุณสามารถปรับไฟล์ที่พิมพ์ได้ 3 มิติสำหรับฉากเหล็กเพื่อชดเชยสิ่งนี้ (แต่การชดเชยจะใช้ได้เท่านั้น ระยะหนึ่งไปยังทีวี) ฉันไปสำหรับการจัดตำแหน่งซอฟต์แวร์ด้วยตัวเอง

กด HOME บน Wii Remote เพื่อออกจากการปรับเทียบและบันทึกข้อมูลทั้งหมดลงในไดเร็กทอรี ~/.wiilightgun

ขั้นตอนที่ 6: ทดสอบและใช้งาน

ทดสอบและใช้งาน
ทดสอบและใช้งาน
ทดสอบและใช้งาน
ทดสอบและใช้งาน
ทดสอบและใช้งาน
ทดสอบและใช้งาน

คุณอาจต้องการลองปืนเบาของคุณตอนนี้ เพียงเรียกใช้ในเทอร์มินัลอีมูเลเตอร์ (หรือสคริปต์):

python3 ~/lightgun/lightgun.py -t

คุณจะต้องกดปุ่ม 1+2 พร้อมกัน และหลังจากนั้นหากทุกอย่างเป็นไปด้วยดี ตราบใดที่ lightgun.py ทำงานอยู่ lightgun จะจำลองเมาส์แบบสัมบูรณ์แบบสองปุ่ม ปุ่มทริกเกอร์คือปุ่มเมาส์ 1 และปุ่ม A คือปุ่มเมาส์ 2 กด ctrl-c เพื่อออก

ตอนนี้คุณต้องกำหนดค่าอีมูเลเตอร์และ/หรือเกมเพื่อใช้งานเมาส์แบบสัมบูรณ์เท่านั้น น่าเสียดายที่มันไม่ง่ายอย่างนั้นเสมอไป

สิ่งที่สนุกอย่างหนึ่งที่คุณอาจลองคือ mod ของเป็ดเป็ดยิงของ iminurnamez:

ซีดี ~

โคลน git https://github.com/arpruss/duck-duck-shoot cd duck-duck-shoot python play_game.py

สำหรับเกม NES ฉันใช้ libretro fceumm core ใน Retroarch ไปที่เมนูตัวเลือก และกำหนดค่า Zapper ให้เป็นหน้าจอสัมผัส (การกำหนดค่าเป็นเมาส์ใช้งานไม่ได้จริง เนื่องจาก fceumm คาดว่าจะมีการเคลื่อนไหวแบบสัมพัทธ์มากกว่าเมาส์ในตำแหน่งที่แน่นอน)

หากคุณเริ่มเกมด้วยสคริปต์ คุณสามารถแก้ไขส่วนที่เริ่มเกมหรือโปรแกรมจำลองเพื่อพูดว่า:

python3 ~/lightgun/lightgun.py -t -B 30 "คำสั่งให้เริ่มเกม"

จากนั้นในช่วง 30 วินาทีแรกของการดำเนินการของเกม (ด้วยเหตุนี้จึงมีตัวเลือก -B 30) คุณสามารถเชื่อมต่อ lightgun ของคุณโดยกด 1+2 ค้างไว้

อย่างไรก็ตาม สคริปต์ lightgun.py ยังสามารถใช้สำหรับการเล่นเกม Wii Remote ทั่วไปด้วย Retroarch เพียงเพิ่มตัวเลือก -o แล้วฟังก์ชัน lightgun จะถูกปิด และ Wii Remote จะทำงานในแนวนอนแทน โดยมีปุ่มสามปุ่มคือ 1, 2 และ B ตามลำดับ มีฟังก์ชันที่เกี่ยวข้องกับ Retroarch อื่นๆ ในการแมปของ lightgun.py ซึ่งคุณจะพบได้โดยการอ่านโค้ด ตัวอย่างเช่น แป้นลบทำหน้าที่เป็นกะ และร่วมกับ dpad ควบคุมการบันทึกและการโหลด (ขึ้น/ลง = เปลี่ยนหมายเลขบันทึก; left=restore; right=save)

ขั้นตอนที่ 7: ด้ามปืนและการเล็ง

ด้ามปืนและเล็ง
ด้ามปืนและเล็ง
ด้ามปืนและเล็ง
ด้ามปืนและเล็ง
ด้ามปืนและเล็ง
ด้ามปืนและเล็ง

คุณสามารถใช้ Wii Remote ได้ด้วยตัวเองเป็นปืนโดยเล็งไปที่ด้านบน คุณยังสามารถซื้อปลอกปืนเชิงพาณิชย์อันใดอันหนึ่งได้ แต่เนื่องจากรีโมท Wii ดั้งเดิมไม่สามารถใช้เป็นปืนที่มองเห็นได้ ปลอกหุ้มจึงมักไม่มาพร้อมกับเหล็กฉาก และฉากเหล็กช่วยเพิ่มความแม่นยำอย่างมาก

ฉันออกแบบระบบการพิมพ์ 3 มิติแบบสามส่วนอย่างง่าย: ที่จับแบบสไลด์ที่อยู่ด้านหลังไกปืน (ดังนั้นจึงดูเหมือนเฟสเซอร์ของ Star Trek Original Series) และสถานที่ท่องเที่ยวแบบสไลด์ ไฟล์ที่พิมพ์ได้อยู่ที่นี่ หากคุณต้องการประหยัดพลาสติกโดยใช้เศษไม้ คุณยังสามารถทำสิ่งที่ฉันทำและแทนที่จะพิมพ์ที่จับทั้งหมด ให้พิมพ์เฉพาะส่วนที่ยึด 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 สี่ดวง
      • หากไม่สำเร็จ:

        รักษาตำแหน่งเมาส์สุดท้าย

แนะนำ: