2014年5月2日金曜日

Arduinoでヘッドマウントディスプレイ用のヘッドトラッカーを作る

きっかけ

Furlan氏のOculusRiftライクなHMDを自作する記事を見て、真似して作ってみたはいいものの、ヘッドトラッカーだけ無い状態だった。 氏の記事ではHillcrest Freespace FSRK-USB-2 IMUを買えとあるが、どうやらもう売ってないみたいだし、そもそも売っていたとしても高すぎる。 そうして、自作することにした。

目的

安価な部品でヘッドトラッカーを作成する。このヘッドトラッカーはUSBでPCと接続し向きを変えることによってマウスカーソルを動かすことができるものである。HMDに設置し、マウスで視点が動かせるようなゲームなどで使用することを想定している。

必要な部品

  • Arduino UNO R3(もしくはUSBシリアル通信のチップがAtmega16u2であるような同等品)
  • Amazonで売ってるが、ebayの互換品のほうが安い。

    USBシリアル通信のチップの背面を見て、Atmega16u2と書いてあればOK。

  • MPU6050モジュール
  • Amazonebayで買える。

  • ブレッドボード
  • 小さいものでOK。とりあえずAmazonで買える。

  • ジャンパーコード
  • 5本必要。Amazonでやっぱり買える。

  • USBケーブル
  • 用意したArduinoと接続できるタイプのもの

  • 段ボール
  • Amazonの箱とかでOK

  • ガムテープ
  • ダクトテープやビニールテープでもOK

必要な工具など

  • ハンダこて
  • ハンダ
  • PC

作り方

Arduinoの開発環境を整える。公式サイトでダウンロードできる。

Arduinoに以下のスケッチを書き込む

github: okdshin/HeadTrackerSketch

dfu-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;
の値を変えてください。

参考にしたサイト

Gyroscopes and Accelerometers on a Chip

Turning your Arduino Uno R3 into an USB mouse

0 件のコメント:

コメントを投稿