2013年3月12日火曜日

Raspberry Pi でJoystick (Xboxワイヤレスコントローラ)

 さて、今回は、Raspberry Pi でJoystick を使えないか、調べて見ることにしました。と言っても、自分はゲームは殆どやらないので、今回もJoystick(ゲームパッド)を使って、Raspberry Piでゲームをやろうというわけではありません。
 じゃあ、なぜ、Raspberry Pi でJoystick を試そうと思ったかというと・・・、そこにRaspberry Pi と JoyStick (今回はXbox 360 Wireless Controller for Windows )があったから・・・。

 で、Google先生の案内で、ネット上を徘徊していると、このようなものを発見、Linux でXboxのコントローラを動かすためのドライバってことで、まさに、これじゃないですか。というわけで、試しに Raspberry Pi 上で

   sudo apt-get install xboxdrv

おっ、インストール出来た。マニュアル を参照したんですが、使い方が今ひとつ理解できず、コンソールの1つで

   sudo xboxdrv

で、起動して、別のコンソールで自分のプログラムを走らせて、動作確認しました。本当は、ドライバなりサービスとして組み込むと、勝手に /dev/input/js* とかが出来て使えるようになると思うんですが、今回は方法がわからず、片方のコンソールでxboxdrvを実行することで、/dev/input/js0 ができるので、そこに自分のプログラムでアクセスする、という方法を取りました。


 Xbox Controller のワイヤレスアダプタをRaspberry Pi のUSBに接続して、


 Xbox Contoroller のアナログ軸を操作すると、Raspberry Pi の GPIO のTxピンに操作量に対応したコマンドを送出するような、そんなプログラムを試しに作って見ました。参考にしたのは、xboxdrv のソースについてきたサンプルコードです。

 で、UARTのTxピンに操作量に対応したコマンドを送出して、その先に何をつなぐかというと、ROBO XEROのサーボをつないでみようと思います。ROBO XEROのサーボは通常のPWM幅でのアナログ的なコントロールの他、TTLレベルでシリアル通信でコマンドを送ることでのコントロールも可能です。FutabaのRS303等のサーボの相当品(コマンド互換)と思われます。サーボを始めとするROBO XEROの情報はROBOMICさんのブログが大変参考になります。ROBO XEEROユーザの方は必見だと思います。



 さて、ROBO XEROのサーボをRaspberry Pi に接続するには3.3VのIOを5Vに変換する必要があります。そこで、以前に作ったアダプタを使いましたが、トランジスタなどで簡単なスイッチ回路を構成してもいいでしょう。


 今回は動かすサーボが1個で、負荷もなしなので、アダプタ経由でRaspberry PiのGPIOコネクタの5Vを電源として使用しました。


 こんな感じでTxをサーボの信号線、+5VとGNDをそれぞれ配線して、


 コントローラのアナログスティックのX軸に応じてサーボの位置が変わります。
 相変わらず纏まっていない汚いソースですが、参考程度にここにおいてあります。なお、UART通信をはじめて使うには設定が必要です。