2014年3月7日金曜日

Raspberry Piにジョイスティックを

最近はSTM32F1ネタばっかりでしたが
ちょっと違うネタも扱おうと思います

調べ物をしていて「どうやらLinuxでジョイスティックを使うのは簡単のようだ」ということで
じゃぁやってみよう という自然な流れでLinuxからジョイスティックを読んでみました

仮想のUbuntuを起動するのは面倒というこれまた自然な流れでRasPi上で試しています

ソースコードは
http://d.hatena.ne.jp/aki-yam/20130729/1375097014
を参考にしました

使用したジョイスティックは箱○の有線コントローラです

RasPiのUSBポートに突き刺したらドライバとかも必要なく簡単に認識してくれました

上記ブログのコードを動かしてみたところ
Joystick: Microsoft X-Box 360 pad
axis    : 8
buttons : 11
として認識され、操作も出力されています

8軸11スイッチのコントローラで
軸0:左スティック左右(左が- 右が+)
軸1:左スティック上下(上が- 下が+)
軸2:左トリガ(開放状態が- 引いた状態で+)
軸3:右スティック左右
軸4:右スティック上下
軸5:右トリガ
軸6:Pad左右(左が- 右が+)
軸7:Pad上下(上が- 下が+)

ボタン0:A
ボタン1:B
ボタン2:X
ボタン3:Y
ボタン4:LB
ボタン5:RB
ボタン6:Back
ボタン7:Start
ボタン9:Xboxロゴ
ボタン10:左スティック
ボタン11:右スティック

という感じの配置です
ジョイスティックの値は符号付き16bitで、Padは0か-32768か32767の3種類しかありません

Padは上下が-であれば上 +であれば下
左右が-であれば左 +であれば右
で、斜めは両方のANDで検出できます(上下が-で左右が+なら右上 など)

また、トリガについてですが これは左右で1軸ずつ用意されているようです
以前にC#のDirectX.DirectInputで遊んだ時は左右のトリガで1軸でした(左を引くと- 右を引くと+ 両方引くと0 みたいな)
この実装の場合 例えば飛行機のゲームを作る場合、トリガをラダーに割り当て、両方のトリガを引くとブレーキ みたいな動作ができません
しかし左右のトリガで2軸だとこのような実装ができるので便利です


ということで、RasPiで箱○コントローラを読むことができるようになったので
足が生えて歩きまわるようなロボットの制御とかに使えそうです
RasPiにXBeeを接続すればロボットを遠隔で制御できるようになります
また操作対象にもRasPiを搭載し、無線LANの11n等でリンクすれば、対象のカメラで写した画像をこちら側に表示したりもできそうです(もっとも、そこまで行くと両方共ノートPCとかを使ったほうが便利ですが。。。)

0 件のコメント:

コメントを投稿