2014年3月26日水曜日

Ubuntu12.04 LTS に PlayStation(R)3 DUALSHOCK 3 を Bluetooth を使って繋ぐ

お久しぶりです (-0-)/

このブログを開設してから最初の方は勢いがあったものの、最近は全然更新していませんでしたorz
 やっぱり、当番制にして更新しないとダメなようですね....

間が開きましたが、ロボットの開発は着実に行ってます!!
今回は、ロボットをコントローラで動かせたらいいなぁ....と思って、
まずはコントローラをパソコンに繋ぐ方法を調べてやってみました!
相変わらずぐーぐる先生の素晴らしさを知った今日この頃でした。

それでは、本題に入ります。
尚、本記事を読んで行われた処理や事故に対し、
当方は一切の責任を負いませんのであらかじめご了承ください。

★開発環境
  ・パソコン
    OS Linux Ubuntu 12.04 LTS  64bit
    Kernel 3.8.0-37-generic

  ・Bluetooth (受信機)
    Logitech 株式会社 LBT-UAN04C2BK

  ・コントローラ
    PlayStation(R)3 DUALSHOCK3 

★手順
  そもそも、パソコンとコントローラを繋ぐには方法が二つあります。
  それは、有線で繋ぐ方法と無線で繋ぐ方法です。
  何を当たり前のことを...と思うかもしれませんが、設定の大変さが全然違うので、
  まずは有線のやり方から紹介します。

  ・有線で繋ぐ場合
    USBポートにコントローラをぶっ挿す。
    以上です。めっちゃ簡単です。
    因みに、ちゃんと認識しているかは、

    /dev/input/js0   (他にもコントローラとか挿さってたら、js0->js1 or js2 ...etc)  
    
    があれば認識できてます!   

  有線で繋ぐのはめっちゃ簡単でしたね。
  でも、ロボットを"無線"で動かすことに意義があるんです。もう少し掘り下げましょう。
   今回使用したPCには残念ながら内臓のBluetoooth受信機が無かったため、
  上記のような受信機をUSBポートに挿して 使用しています。
  送信機にあたるコントローラはPlayStation(R)3のコントローラを使用しているため、
  Bluetoothでの通信が可能です。
  さて、ここまで準備ができたら、必要なライブラリを入れていきましょう!
  
  まず、Bluetoothの使用環境を整えます。
  
  $ sudo apt-get update
  $ sudo apt-get install bluetooth bluez-utils bluez-compat bluez-hcidump
  $ sudo apt-get install libusb-dev libbluetooth-dev

   できたら、BluetoothモジュールをUSBポートに挿して、(Bluetooth の電源を入れて)
  次のコマンドにより、Bluetoothが起動していることを確かめましょう。

  $ /etc/init.d/bluetooth status

  確認できたら、今度はコントローラの認識環境を整えていきましょう!

  $ sudo  apt-add-repository ppa:falk-t-j/qtsixa
  $ sudo apt-get update
  $ sudo apt-get install sixad

  ここまでできたら、ペアリングと呼ばれる、
  通信の際の機器のアドレス設定的な事を行います。
  方法は、まずコントローラをパソコンにUSBで繋ぎ、以下のコマンドを実行します。

  $ sudo sixpair

  ここで、以下のような結果が帰ってきたらペアリング成功です!
  失敗したと言う方は、エラーコードでググってみてください。
  するとQtAxiAのFAQサイトにひっかかると思うので、
  それぞれの指示にしたがってください。
  
  Current Bluetooth master: xx:xx:xx:xx:xx:xx
  Setting master bd_addr to: xx:xx:xx:xx:xx:xx

  この設定は一度うまくいったらあとはする必要はありません。
  ここまでできたら、もうあと少し!
  以下のコマンドを実行し 、パソコンからコントローラを外して、
  PSボタンを押してください!


   $ sudo sixad --start

  実行したら、PSボタンを押すように指令が出ますので、確認後押してください。
  コントローラがブルブルっと震え、
  4つのLEDのうち、どれか1つだけが光ったら成功です。
  おめでとうございます!!!
  一応、/dev/input/js0 が認識されているか確認しておきましょう。
  因みに、終了したいときはCntrl+Cで終了します。
   さらに、次回以降、パソコンの起動時に、接続を行いたいときは、
  
  $ sudo sixad --boot-yes

  と入力しておけば、おっけいです。

★ おわりに
  一通り説明しましたが、間違いも多々あるかと思います。
  何か間違いを発見した方は、是非、コメントにてお知らせください。
  次回は、接続したコントローラの情報をC言語を用いて取得する記事を書きます!

★ 参考サイト
  工作と小物のがらくた部屋 様
  ask Ubuntu 様