きっかけ
Furlan氏のOculusRiftライクなHMDを自作する記事を見て、真似して作ってみたはいいものの、ヘッドトラッカーだけ無い状態だった。 氏の記事ではHillcrest Freespace FSRK-USB-2 IMUを買えとあるが、どうやらもう売ってないみたいだし、そもそも売っていたとしても高すぎる。 そうして、自作することにした。
目的
安価な部品でヘッドトラッカーを作成する。このヘッドトラッカーはUSBでPCと接続し向きを変えることによってマウスカーソルを動かすことができるものである。HMDに設置し、マウスで視点が動かせるようなゲームなどで使用することを想定している。
必要な部品
- Arduino UNO R3(もしくはUSBシリアル通信のチップがAtmega16u2であるような同等品)
- MPU6050モジュール
- ブレッドボード
- ジャンパーコード
- USBケーブル
- 段ボール
- ガムテープ
USBシリアル通信のチップの背面を見て、Atmega16u2と書いてあればOK。
小さいものでOK。とりあえずAmazonで買える。
5本必要。Amazonでやっぱり買える。
用意したArduinoと接続できるタイプのもの
Amazonの箱とかでOK
ダクトテープやビニールテープでもOK
必要な工具など
- ハンダこて
- ハンダ
- PC
作り方
Arduinoの開発環境を整える。公式サイトでダウンロードできる。
Arduinoに以下のスケッチを書き込む
github: okdshin/HeadTrackerSketchdfu-programmerをPCにインストールする。ここでダウンロードできる。
ArduinoをPCにUSBケーブルで接続し、リセットピンをジャンパーコードで3秒くらいショートさせて、Atmega16u2をリセットする。リセットピンの位置はここのStep1に図が載っている。
darran氏のページからArduino-mouse-0.1.hexをダウンロードする。
Arduino-mouse-0.1.hexが存在するディレクトリで次のコマンドを打ち込む
sudo dfu-programmer atmega16u2 erase sudo dfu-programmer atmega16u2 flash --debug 1 Arduino-mouse-0.1.hex sudo dfu-programmer atmega16u2 reset
ArduinoとPCを切り離す
MPU6050モジュールをハンダ付けして組み立てる。
ArduinoとMPU6050モジュールをジャンパーコードとブレッドボードで接続する。
完成である。
Arduinoを元に戻したり、スケッチを書き換えたい場合
ArduinoをPCにUSBケーブルで接続し、リセットピンをジャンパーコードで3秒くらいショートさせて、Atmega16u2をリセットする。
次のコマンドを打ち込む。ただしArduino-usbserial-uno.hexはarduino-1.0.5/hardware/arduino/firmwares/atmegaxxu2/arduino-usbserial直下にある。arduino-1.0.5の部分は適宜変えること。
sudo dfu-programmer atmega16u2 erase sudo dfu-programmer atmega16u2 flash --debug 1 Arduino-usbserial-uno.hex sudo dfu-programmer atmega16u2 reset
ちなみにArduino-usbserial-uno.hex自体はgithubでも中身が見られる。
ArduinoとPCを切り離す。
これでArduinoはスケッチを書き込める元の状態に戻る。
既知の問題
ゆっくり動かす分には大丈夫だが、ちょっとでも速く動かすと累積誤差がひどい。ソースコードを改善する必要がある。そのうちやる予定。というか誰かやってくれ。プルリク歓迎。
備考
マウスカーソルを動かす速度を変えたい場合はスケッチの800行目前後にある
float ratio = 10.0;の値を変えてください。
0 件のコメント:
コメントを投稿