BrickPi + LOGO Mindstorms EV3 をゲームコントローラーでコントロールする(前編)

Raspberry Pi + BrickPi + LOGO Mindstorms EV3 をジョイスティックコントローラで遠隔制御します。まあ、単純に Raspberry Pi に Bluethooth を接続して、これを Dualshock3 で使えるようにするだけなのですが。

image

工作と小物のがらくた部屋: Raspberry Pi で Dualshock3 (Bluetooth接続ゲームコントローラ)
http://junkroom2cyberrobotics.blogspot.jp/2013/03/raspberry-pi-dualshock3-bluetooth.html
RapiroをPS3のDUALSHOCK3で動かしてみる | Makuake(マクアケ)NOTE クラウドファンディングブログ
http://www.makuake.com/blog/crowdfunding/rapiro-dualshock/

USB 接続すれば簡単なのですが、遠隔操作をするとなると2つの方法があります。Bluetooth を使う方法と WiFi を使う方法ですね。ワイヤレスコントローラ (DUALSHOCK3) は 4千円ちょっとと結構な値段がするのですが(RasPi 以上という噂もw)、まあ初回の実験だし確実につなげておきたいのでこれにしました。SBDBTのPSコントローラ用ファーム更新!凄いですよ!いろいろなゲームパッドで無線・有線による操作が可能になりました: ROBOMIC(ブログ) を見ると SBDBT というのを使えば、普通のコントローラも無線化できそうなのでが、これは今度の課題で。

Bluethooth での接続手順は、先の2つのブログに書いてあるのですが、自分用に書き写しておきます。Bluetooth は PLANEX Bluetooth USBアダプター Ver.4.0+EDR/LE(省エネ設計)対応 BT-Micro4 を使っています。最初は他の人が RasPi で動作確認できたものを使うのが無難ですね。たぶん、大抵のものは動くとは思うのですが、無線LAN で失敗したので、先のブログの人が使っているものと同じものを購入しました。

■Bluethooth の準備

apt-get で bluethooth パッケージをインストールします。

sudo apt-get install bluetooth bluez-utils bluez-compat bluez-hcidump
sudo apt-get install libusb-dev libbluetooth-dev

うまく認識ができていると

/etc/init.d/bluetooth status

で確認ができます。

image

usb の状態は lsusb で確認が可能です。

lsusb 

image

Bus 001 Device 005: ID 0a12:0001 Cambridge Silicon Radio, Ltd Bluetooth Dongle (HCI mode) ってのが、Bluetooth の USB ドングルです。 Bus 001 Device 004 のほうは WiFi の USB ドングルです。ゲームコントローラで遠隔制御はするのですが、ログ出力は初期制御のために WiFi をつなげています。電流的にどうなんだろうなぁ、という心配もありますが。一応、問題なく動いています。

■QtSixA のインストール

QtSixA is the Sixaxis Joystick Manager をインストールします。Sixaxis/DualShock3 を Linux に割り当てられるそうなので、RasPi でも OK です。SourceForge からダウンロードするのですが、http://sourceforge.net/projects/qtsixa/files/QtSixA%201.5.1/ にある QtSixA-1.5.1-src.tar.gz が最新です(といえ、2011年10月に開発が止まっていますが)。

tar -xvf QtSixA-1.5.1-src.tar.gz
cd QtSixA-1.5.1/sixad
make
sudo make install

すると、Dualshock3 を受け入れる sixad ってのがビルド&インストールされます。QtSixA-* 直下で make をすると pyuic4 コマンドがないというエラーが出るので、sixad フォルダでビルドします。Raspberry Pi 用の Debian に qgis, python-qgis がないからみたいですね。これは特に不要で、sixad とペアリング用の sixpair のみが必要です。

cd QtSixA-1.5.1/utils
make
sudo make install

■Dualshock3 とペアリングする

Daulshock3 と Raspberry Pi を USB コードで接続して、sixpair を動かします。

sudo sixpair

image

うまくいくと Bluethooth の MAC IDが取れます(たぶん USB のほう)。初回だけ USB ケーブルをつないで、あとからは Dualshock3 コントローラの「PS」ボタンでペアリングができます。

■動作させる

sixad で bluetooth の待ち受けをして、Dualshock3 で PS ボタンを押します。

sixad -start

image

(たぶん)Dualshock3 の MAC が表示されて接続状態になります。

動作確認自体は、/dev/input/js0 を表示させることで、確認ができます。

sudo cat /dev/input/js0

image

ボタンを押したり、ジョイスティックを動かしたりすると信号が流れていくのがわかります。

動作確認自体は、意外に簡単! LinuxでジョイスティックをC++から使う方法 – akihiko’s tech note からサンプルコードをビルドして動かしています。/dev/input/js0 をオープンして中身を表示させます。

image

■sixad の終了

sixad 自体は Ctrl+C で終わらせるのですが、そのままでは bluetooth が解放されないようです。

image

sixad -stop で終了させると、Bluetooth が解放されます。

ただし、cat /dev/input/js0 を見ると、いつまでもデータが送られてくる(Dualshock3を傾けるとデータが入っているのがわかる)のでペアリング自体は続いてしまっているようです。仕方がないので、Bluetooth の USB ドングルを抜いて止めるのですが、なんかいい方法はないですかね?

で、お次は、/dev/input/js0 を読み込んで、EV3 のモーターを動かすプログラムを書きます。

カテゴリー: RaspberryPi パーマリンク