Mục lục:

Súng ánh sáng Wiimote chính xác cho Raspberry PI: 9 bước (có hình ảnh)
Súng ánh sáng Wiimote chính xác cho Raspberry PI: 9 bước (có hình ảnh)

Video: Súng ánh sáng Wiimote chính xác cho Raspberry PI: 9 bước (có hình ảnh)

Video: Súng ánh sáng Wiimote chính xác cho Raspberry PI: 9 bước (có hình ảnh)
Video: Lightgun retrogaming with MiSTer and a Wiimote 2024, Tháng mười một
Anonim
Súng bắn ánh sáng Wiimote chính xác cho Raspberry PI
Súng bắn ánh sáng Wiimote chính xác cho Raspberry PI
Súng bắn ánh sáng Wiimote chính xác cho Raspberry PI
Súng bắn ánh sáng Wiimote chính xác cho Raspberry PI

Thông thường, Điều khiển từ xa Wii được sử dụng như một khẩu súng ánh sáng không đủ chính xác cho các trò chơi cổ điển như NES Duck Hunt, vì Điều khiển từ xa Wii trên thực tế không chọn điểm trên TV mà nó hướng vào. Nó không thể! Điều khiển từ xa Wii có một camera hồng ngoại ở phía trước của nó, có thể nhìn thấy dòng đèn LED hồng ngoại trên thanh cảm biến, nhưng nó không thể biết được TV cách vạch này bao xa (hoặc theo hướng nào) hoặc TV lớn bao nhiêu. Trình giả lập và trò chơi giải quyết vấn đề này bằng cách hiển thị các đường chéo hoặc chỉ báo nhắm mục tiêu khác, nhưng đó không phải là trải nghiệm bắn mục tiêu chính xác.

Để làm cho Điều khiển từ xa Wii hoạt động như một khẩu súng ánh sáng chính xác mà bạn có thể ngắm cùng để chọn mục tiêu trên TV, yêu cầu bốn đèn LED hồng ngoại được sắp xếp theo hình tứ giác đã biết (không phải là một đường thẳng) trên cùng một mặt phẳng với TV. Sau đó, Wii Remote sẽ nhìn thấy bốn đèn LED và hình ảnh của máy ảnh có thể được sử dụng để tính toán đồng nhất cho phép chúng tôi tìm ra vị trí máy ảnh đang hướng đến.

Phần cứng cho dự án này rất đơn giản. Có bốn đèn LED hồng ngoại trong vỏ được in 3D đơn giản có thể được dán vào đầu và cuối của vỏ TV và cắm vào bộ sạc USB. Ngoài ra, trong trường hợp bạn không có vỏ súng Wii, tôi có một tay cầm và ống ngắm in 3D đơn giản mà bạn có thể gắn vào Điều khiển từ xa Wii (mặc dù để tiết kiệm nhựa, tôi đã làm cho tôi một loại lai giữa gỗ và nhựa in 3D).

Phần mềm dựa trên python khó tạo hơn phần cứng và hiện chỉ dành cho Linux. Nó hiệu chỉnh đèn LED và Điều khiển từ xa Wii, sau đó sử dụng tính toán đồng nhất để mô phỏng một con chuột tuyệt đối hoạt động khá tốt trong trình giả lập NES fceumm của Retroarch (và có thể là một số trình giả lập khác) trên Raspberry PI 3B + của tôi.

Quân nhu

  • Điều khiển từ xa Wii
  • Bốn đèn LED hồng ngoại 940nm 5mm
  • Cáp USB cũ có đầu cắm loại A hoạt động được
  • Raspberry PI 3 hoặc máy tính Linux khác có hỗ trợ Bluetooth
  • Máy in 3D và dây tóc (tùy chọn)

Bước 1: Chuỗi đèn LED hồng ngoại

Chuỗi đèn LED hồng ngoại
Chuỗi đèn LED hồng ngoại
Chuỗi đèn LED hồng ngoại
Chuỗi đèn LED hồng ngoại

Nhận một cáp USB cũ có ổ cắm nam loại A còn hoạt động (thường thì cáp sạc điện thoại của tôi bị đứt ở đầu micro USB, vì vậy tôi có các cáp còn lại với ổ cắm nam loại A đang hoạt động).. Thực ra, ngay cả khi cáp dữ liệu vẫn ổn. bị hỏng miễn là các đường dây điện hoạt động. Cắt bỏ đầu còn lại. Về lý thuyết, cáp màu đỏ phải là + 5V và cáp màu đen nên được nối đất, nhưng hãy kiểm tra nó bằng đồng hồ vạn năng (cắm nó vào bộ sạc, sau đó kiểm tra điện áp giữa dây màu đỏ và màu đen).

Vì đèn LED hồng ngoại có điện áp giảm khoảng 1,2-1,3V, tôi chỉ hàn bốn trong số chúng trong vòng lặp nối tiếp với cáp USB. Đảm bảo rằng các dây bạn hàn đủ dài để bạn có thể đặt các đèn LED ở dưới cùng của TV và hai ở trên cùng, với một khoảng cách ngang giữa các đèn LED (khoảng 10 inch hoặc hơn).

Chính xác hơn để tạo vòng lặp LED:

  • Hàn mặt trừ (cực âm, chân ngắn hơn, với cạnh phẳng) của đèn LED đầu tiên với dây USB + 5V
  • nối mặt cộng của đèn LED đầu tiên (cực dương, chân dài hơn, có cạnh tròn) với mặt trừ của đèn LED thứ hai
  • lặp lại để nối đèn LED thứ hai với đèn LED thứ ba và đèn LED thứ ba đến đèn thứ tư
  • sau đó kết nối mặt cộng của đèn LED thứ tư bằng dây với dây USB nối đất.

Để làm cho mọi thứ gọn gàng hơn, bạn có thể sử dụng ống co nhiệt khi bạn thực hiện các mối nối. Nếu không, hãy sử dụng băng dính điện để tránh quần đùi.

Đảm bảo rằng bạn không bị đoản mạch. Sau đó cắm nó vào bộ sạc USB và kiểm tra xem nó có phát ra ánh sáng hồng ngoại hay không bằng cách nhìn vào đèn LED của camera điện thoại. (Nhiều camera điện thoại nhạy cảm với tia hồng ngoại.)

Bước 2: Gắn vào TV

Đính kèm vào TV
Đính kèm vào TV
Đính kèm vào TV
Đính kèm vào TV
Đính kèm vào TV
Đính kèm vào TV

Bây giờ, hãy gắn hai trong số các đèn LED vào mặt dưới của TV và hai đèn ở phía trên. Khoảng cách theo chiều ngang nên là khoảng 10 inch. Nếu quá nhiều, bạn có thể gặp vấn đề với trường nhìn của máy ảnh Wii Remote khi chụp tất cả chúng. Nhưng nếu chúng quá gần, thì trực giác hình học của tôi nói rằng bạn sẽ có độ chính xác thấp hơn.

Để thử nghiệm, tôi dán các đèn LED bằng băng dính điện, sau đó để kết nối lâu dài, tôi thiết kế và in bốn clip LED nhỏ gọn gàng (tệp ở đây) mà tôi dán nóng vào TV. Bạn nên đặt đèn LED càng gần mặt phẳng của màn hình TV càng tốt, không để viền che khuất chúng khỏi vị trí bạn sẽ quay.

Bước 3: Cài đặt phần mềm

Hiện tại, phần mềm này chỉ dành cho hệ điều hành Linux. Thiết lập sau được thiết kế cho Raspberry PI 3 với Raspbian Stretch. Các hệ thống Linux khác sẽ yêu cầu một số thay đổi. Trên các mẫu trước đó, bạn sẽ cần một khóa Bluetooth và bạn cũng sẽ cần chạy điều này từ một dòng lệnh:

sudo get-apt cài đặt bluetooth

Bước A: udev

Tiếp theo, tạo một tệp trong /etc/udev/rules.d/wiimote.rules chứa một dòng:

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

Bạn có thể làm điều đó, chẳng hạn, bằng trình soạn thảo văn bản hoặc bằng cách nhập nội dung sau vào dòng lệnh:

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

Và sau đó khởi động lại udev:

khởi động lại sudo /etc/init.d/udev

Bước B: cwiid

Tiếp theo, bạn sẽ cần gói cwiid đã sửa đổi của tôi. Ở đây nó có một chút lông vì lý tưởng bạn cần phải xây dựng nó trên Raspberry PI của mình, nhưng tôi phải thú nhận rằng tôi đã mất dấu những gói nào bạn cần cài đặt để làm cho nó hoạt động. Có ba tùy chọn để làm điều này.

Tùy chọn B1: Tự xây dựng

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

Thật không may, rất có thể bạn đang thiếu một loạt các thứ cần thiết để xây dựng cái này và./configure sẽ phàn nàn. Bạn có thể xem xét tất cả những thứ nó phàn nàn và chạy sudo apt install trên tất cả chúng.

Tùy chọn B2: Sử dụng mã nhị phân của tôi

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 thực hiện cài đặt

Bước C: thư viện python

Cuối cùng, nhận công cụ hỗ trợ cho tập lệnh python lightgun của tôi:

sudo pip3 cài đặt 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

Bước D: lightgun.py

Cuối cùng, lấy tập lệnh python lightgun của tôi:

cd ~

git clone

Nếu mọi việc suôn sẻ, bây giờ bạn có ~ / lightgun.py mà bạn có thể sử dụng để hiệu chỉnh súng ngắn.

Bước 4: Hiệu chỉnh Phần I: Căn giữa máy ảnh

Hiệu chuẩn Phần I: Căn giữa Máy ảnh
Hiệu chuẩn Phần I: Căn giữa Máy ảnh
Hiệu chuẩn Phần I: Căn giữa Máy ảnh
Hiệu chuẩn Phần I: Căn giữa Máy ảnh
Hiệu chuẩn Phần I: Căn giữa Máy ảnh
Hiệu chuẩn Phần I: Căn giữa Máy ảnh

Có hai khía cạnh để hiệu chuẩn. Đầu tiên là hiệu chỉnh tâm của máy ảnh trên mỗi Wiimote. Điều này yêu cầu sử dụng máy ảnh để chụp hai hình ảnh của đèn LED xung quanh màn hình TV của bạn, một hình với điều khiển từ xa hướng lên bên phải và hình ảnh còn lại với điều khiển ngược.

Để tránh nhấn các nút khi bạn đặt Điều khiển từ xa Wii ở mặt trước và để Điều khiển từ xa Wii có độ cao phù hợp, bạn có thể in 3D công cụ hiệu chuẩn mà tôi đã đưa vào đây. Về cơ bản, bạn cần những thứ dày 10,5mm để có thể đặt dưới Điều khiển từ xa Wii khi nó nằm ở mặt trước. Tôi thực sự đã sử dụng một số ván ép phế liệu để tiết kiệm nhựa.

Bật đèn LED của bạn và đảm bảo rằng Raspberry PI hoặc máy tính khác của bạn đang hiển thị trên TV. Kết nối bàn phím (điều này sẽ không hoạt động qua ssh) hoặc sử dụng VNC. Sau đó chạy:

python3 ~ / lightgun / lightgun.py -M

Nếu mọi việc suôn sẻ, bạn sẽ nhận được màn hình toàn màn hình yêu cầu bạn nhấn 1 + 2 trên Điều khiển từ xa Wii. Làm điều đó. Đèn sẽ nhấp nháy trên Điều khiển từ xa Wii, sau đó đèn 1 và 4 sẽ sáng. Bạn cũng sẽ thấy một hình chữ nhật nhỏ màu xanh lá cây ở đầu màn hình, với chế độ xem từ máy ảnh Wii Remote. Hướng Điều khiển từ xa Wii vào các đèn LED và nếu mọi việc suôn sẻ, bạn sẽ thấy bốn đèn LED, được đánh số từ 1 đến 4.

Bây giờ bạn cần tìm một bề mặt chắc chắn có cạnh sắc nét, chẳng hạn như bàn cà phê, để bạn có thể chỉ vào màn hình TV và điều đó có thể cho phép Điều khiển từ xa Wii nhìn thấy tất cả các đèn LED với Điều khiển từ xa Wii được căn chỉnh theo cạnh. Bắt đầu bằng cách căn chỉnh điều khiển từ xa Wii lên phía trên, với cạnh của điều khiển từ xa được căn chỉnh so với cạnh bề mặt, đảm bảo tất cả bốn đèn LED đều được nhìn thấy. Sau đó nhấn SPACE trên bàn phím của bạn (hoặc gắn Nunchuck và nhấn C nếu điều đó thuận tiện hơn). Sau đó, bạn sẽ được nhắc xoay Điều khiển từ xa Wii. Bây giờ, hãy đảm bảo rằng nó được nâng lên 10,5 mm so với bề mặt của bạn, bằng cách sử dụng công cụ hiệu chuẩn hoặc thứ gì đó khác và ở gần cùng một vị trí như trước (ví dụ: được căn chỉnh theo cùng một cạnh của bề mặt của bạn). Nhấn SPACE một lần nữa.

Nếu mọi việc suôn sẻ, bây giờ bạn sẽ đến bước hiệu chỉnh đèn LED. Yup, điều này là phức tạp! Nhưng bạn sẽ có một khẩu súng lục rất chính xác. Đó chỉ là giá.

Lưu ý: Nếu giống như tôi, bạn có Wii dưới TV, Wii cần được tắt vì hai lý do: thứ nhất, nếu Wii đang bật, nó sẽ kết nối với Wiimote và thứ hai, đèn LED hồng ngoại của thanh cảm biến sẽ gây nhiễu. dự án này. Vì những lý do tương tự, trong khi sử dụng Wii, bạn nên rút phích cắm của các đèn LED xung quanh TV.

Bước 5: Hiệu chỉnh Bước II: Đèn LED

Hiệu chuẩn Bước II: Đèn LED
Hiệu chuẩn Bước II: Đèn LED
Hiệu chuẩn Bước II: Đèn LED
Hiệu chuẩn Bước II: Đèn LED

Bây giờ bạn cần cho phần mềm biết vị trí của các đèn LED xung quanh mép TV. Bạn sẽ thấy màn hình hiệu chuẩn hiển thị bốn mũi tên, một trong số chúng đã được chọn (sáng) và ba trong số chúng bị chuyển sang màu xám, xung quanh cạnh của TV. Bạn sử dụng +/- để chuyển sang thay đổi mũi tên bạn đang điều chỉnh.

Đối với mỗi trong số bốn mũi tên xung quanh cạnh, hãy thực hiện như sau:

  1. nhấn trái / phải trên Wiimote để di chuyển các mũi tên cho đến khi chúng hướng chính xác nhất có thể về phía đèn LED tương ứng;
  2. nhấn lên / xuống trên Wiimote để thay đổi độ dài của mũi tên cho đến khi độ dài của mũi tên khớp với khoảng cách giữa đèn LED và mép của màn hình TV; nói cách khác, chiều dài của mũi tên cần phải bằng khoảng cách từ đầu mũi tên đến đèn LED.

Khi bốn mũi tên của bạn đúng (và thậm chí có thể sớm hơn), bạn sẽ thấy hình chữ thập màu đỏ khi bạn trỏ Wiimote vào màn hình. Bạn có thể kiểm tra xem đây có phải là nơi cần thiết không. (Hãy nhớ rằng bạn cần ở đủ xa để Wiimote có thể nhìn thấy tất cả các đèn LED. Điều quan trọng nữa là không có nguồn hồng ngoại nào khác trong trường nhìn. Tôi đã từng gặp sự cố do ánh sáng mặt trời phản chiếu từ đầu vít trên Giá đỡ TV.)

Cuối cùng, có một mũi tên thứ năm, chỉ hiển thị khi bạn nhấn + từ mũi tên LED thứ tư hoặc - từ mũi tên đầu tiên (và theo mặc định, nó có độ dài bằng 0, vì vậy nó chỉ là một pixel). Mũi tên này điều chỉnh khoảng cách trên camera của Điều khiển từ xa Wii mà ảnh sẽ được đăng ký. Vấn đề là ở đây: bạn sẽ nhìn thấy dọc theo bề mặt trên cùng của Điều khiển từ xa Wii. Nhưng máy ảnh thực sự nằm ở khoảng cách nào đó bên dưới bề mặt đó, ở giữa hình chữ nhật màu đen ở phía trước của Điều khiển từ xa Wii. Nếu chúng tôi đăng ký các bức ảnh mà máy ảnh đang hướng vào, chúng sẽ được đăng ký khoảng 8 mm dưới bề mặt trên cùng của Điều khiển từ xa Wii. Bạn có thể kiểm tra điều này bằng cách lưu ý rằng khi bạn nhìn dọc theo bề mặt trên cùng, tâm của các ô chữ thập sẽ bị camera ẩn đi.

Bạn có thể sống với điều này hoặc bạn có thể phát triển mũi tên thứ năm này để phần mềm căn chỉnh các bức ảnh với phần trên của Điều khiển từ xa Wii hoặc bạn có thể điều chỉnh các tệp có thể in 3D cho các ống ngắm sắt để bù đắp cho điều này (nhưng bù trừ sẽ chỉ hoạt động đối với một khoảng cách cụ thể đến TV). Tôi đã tự mình căn chỉnh phần mềm.

Nhấn HOME trên Điều khiển từ xa Wii để thoát khỏi hiệu chuẩn và lưu tất cả dữ liệu vào thư mục ~ /.wiilightgun.

Bước 6: Kiểm tra và sử dụng

Kiểm tra và sử dụng
Kiểm tra và sử dụng
Kiểm tra và sử dụng
Kiểm tra và sử dụng
Kiểm tra và sử dụng
Kiểm tra và sử dụng

Bạn có thể muốn thử súng ánh sáng của mình ngay bây giờ. Chỉ cần chạy trong trình giả lập đầu cuối (hoặc một tập lệnh):

python3 ~ / lightgun / lightgun.py -t

Bạn sẽ cần nhấn các nút 1 + 2 cùng lúc và sau đó nếu mọi việc suôn sẻ, miễn là lightgun.py đang chạy, lightgun sẽ mô phỏng chuột tuyệt đối hai nút. Nút kích hoạt là nút chuột 1 và nút A là nút chuột 2. Nhấn ctrl-c để thoát.

Bây giờ bạn chỉ cần định cấu hình trình giả lập và / hoặc trò chơi của mình để hoạt động với một con chuột tuyệt đối. Thật không may, điều đó không phải lúc nào cũng dễ dàng như vậy.

Một điều thú vị mà bạn có thể thử là bản mod của tôi về trò bắn vịt của iminurnamez:

cd ~

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

Đối với các trò chơi NES, tôi sử dụng lõi libretro fceumm trong Retroarch. Chuyển đến menu Tùy chọn và định cấu hình Zapper thành màn hình cảm ứng. (Định cấu hình nó như một con chuột không thực sự hoạt động, vì fceumm mong đợi một chuyển động tương đối hơn là chuột ở vị trí tuyệt đối.)

Nếu bạn bắt đầu trò chơi của mình bằng một tập lệnh, bạn có thể chỉnh sửa phần bắt đầu trò chơi hoặc trình mô phỏng để nói:

python3 ~ / lightgun / lightgun.py -t -B 30 "lệnh để bắt đầu trò chơi"

Sau đó, trong 30 giây đầu tiên của trò chơi (do đó có tùy chọn -B 30), bạn có thể kết nối khẩu súng lục của mình bằng cách nhấn giữ 1 + 2.

Nhân tiện, tập lệnh lightgun.py cũng có thể được sử dụng để chơi trò chơi Wii Remote nói chung với Retroarch. Chỉ cần thêm tùy chọn -o và các chức năng lightgun sẽ bị tắt, thay vào đó, Điều khiển từ xa Wii sẽ hoạt động theo chiều ngang, với ba nút lần lượt là 1, 2 và B. Có các hàm khác liên quan đến Retroarch trong ánh xạ của lightgun.py mà bạn sẽ khám phá bằng cách đọc mã. Ví dụ: phím trừ hoạt động như một sự thay đổi và cùng với dpad điều khiển lưu và tải (lên / xuống = thay đổi số lưu; trái = khôi phục; phải = lưu).

Bước 7: Xử lý và ngắm súng

Tay cầm và ngắm súng
Tay cầm và ngắm súng
Tay cầm và ngắm súng
Tay cầm và ngắm súng
Tay cầm và Ngắm súng
Tay cầm và Ngắm súng

Bạn có thể sử dụng Điều khiển từ xa Wii như một khẩu súng, nhìn dọc theo phía trên. Bạn cũng có thể mua một trong những vỏ súng thương mại cho nó. Nhưng vì Điều khiển từ xa Wii ban đầu không có khả năng sử dụng như một khẩu súng ngắm, nên vỏ có xu hướng không đi kèm với ống ngắm bằng sắt và ống ngắm bằng sắt cải thiện đáng kể độ chính xác.

Tôi đã thiết kế một hệ thống có thể in 3D ba phần đơn giản: một tay cầm trượt nằm ngay phía sau trình kích hoạt (vì vậy nó trông hơi giống một chiếc phaser Star Trek Original Series) và các điểm tham quan dạng trượt. Các tệp có thể in được ở đây. Nếu bạn muốn tiết kiệm nhựa với chi phí là gỗ vụn, bạn cũng có thể làm những gì tôi đã làm và thay vì in toàn bộ phần tay cầm, hãy chỉ in phần giữ Wiimote và cắt ra một miếng gỗ và vặn nó vào.

Để ngắm nhìn, hãy tập trung mắt vào điểm tham quan. Căn chỉnh cản trước của cản trước giữa cản sau để không gian không khí trên cả hai đều bằng nhau và cả ba cản đều nhô cao như nhau. Sau đó, căn chỉnh giữa mục tiêu với đầu của các vết sưng.

Lưu ý: Chiều cao của các phần nhô ra hơi không bằng nhau, với phần cản của thị giác phía trước thấp hơn một chút, để bù lại chiều cao của các phần nhô ra khi bạn nhìn dọc theo chúng ở khoảng cách 2,5 mét (khoảng cách của tôi đến TV). Nếu bạn có khoảng cách đáng kể với TV, bạn có thể đưa khoảng cách đó vào tệp OpenSCAD. Tuy nhiên, điều chỉnh này có thể thấp hơn dung sai của máy in. Ngoài ra, nếu bạn không thực hiện điều chỉnh theo chiều dọc trong phần mềm, bạn có thể thêm một số điều chỉnh khác cho các điểm tham quan trong phần mềm bằng cách đặt extraSightAdjust thành khoảng -8 (tính bằng milimét).

Bước 8: Hiệu chuẩn III (Tùy chọn): Điều chỉnh tinh

Nếu bạn muốn chính xác hơn nữa, bạn có thể chạy:

python3 ~ / lightgun / lightgun.py -d

(cho bản demo) và xem xét cẩn thận xem các điểm tham quan có phù hợp với các đường chéo hay không. Nếu không, hãy thoát và chỉnh sửa thủ công ~ /.wiilightgun / wiimotecalibration, và điều chỉnh một chút tọa độ x và y của trung tâm camera để điều chỉnh khả năng nhìn. Ví dụ, súng của tôi đang bắn hơi sang bên phải, vì vậy tôi cuối cùng đã thay đổi tọa độ x từ 529 thành 525. Số của mọi người có thể sẽ khác nhau.

Bước 9: Phụ lục: Thuật toán

Phụ lục: Thuật toán
Phụ lục: Thuật toán

Mã mô phỏng chuột hoạt động gần giống như sau.

  • Xử lý các lần nhấn nút.
  • Nhận dữ liệu từ máy ảnh và điều chỉnh để hiệu chỉnh căn giữa máy ảnh.
  • Nếu có ít hơn ba đèn LED hiển thị trong máy ảnh:

    Giữ vị trí chuột cuối cùng

  • Nếu ba hoặc bốn đèn LED hiển thị:

    • Sử dụng dữ liệu gia tốc kế Wiimote để nhận hướng Wiimote và xác định hình ảnh máy ảnh LED nào tương ứng với đèn LED vật lý nào.
    • Nếu bốn đèn LED hiển thị:

      • Tính toán đồng nhất giữa hình ảnh máy ảnh LED và vị trí LED (trong tọa độ màn hình).
      • Sử dụng tính năng đồng nhất để tính toán vị trí màn hình tương ứng với tâm của trường xem máy ảnh.
      • Thực hiện điều chỉnh Y để điều chỉnh tâm của nòng súng ảo bên dưới đường ngắm. Đây là một thuật toán hơi khó hiểu nhưng nó hoạt động.
      • Đặt vị trí chuột vào vị trí màn hình đã điều chỉnh.
    • Nếu ba đèn LED hiển thị:

      • Sử dụng OpenCV để giải quyết vấn đề P3P giữa hình ảnh máy ảnh LED và vị trí đèn LED vật lý. Điều này tạo ra tối đa bốn giải pháp.
      • Nếu thành công:

        • Nếu chúng ta đã tính toán vị trí thành công trước đó, hãy chọn giải pháp làm cho đèn LED bị thiếu gần nhất với vị trí được tính toán hoặc quan sát cuối cùng của đèn LED đó.
        • Nếu chúng tôi không tính toán vị trí thành công trước đó, hãy chọn giải pháp dự đoán tốt nhất tiêu đề gia tốc kế.
        • Sử dụng giải pháp tốt nhất để tính toán vị trí của đèn LED thứ tư.
        • Thực hiện phần còn lại như trong trường hợp bốn đèn LED.
      • Nếu không thành công:

        Giữ vị trí chuột cuối cùng

Đề xuất: