ROSでPS4コントローラ(DualShock4)から値を拾う

まえがき

※この記事ではVirtualBoxを使用していますが、Ubuntuネイティブ環境を激しく推奨します。無理して仮想環境使うよりもRaspberry Piの方が絶対いいと思います。
この次にサーボを動かそうと思い、痛感しました。

今までコマンドラインから色々動かしていましたが、もっと直感的に動かしたい!
コントローラーで!
元ゲーマー、SONY信者としてはPS4のコントローラで!
って思ってググったらすぐ出てきました。

(708) 362-7181が、それはもうわかりやすく解説して下さっています。

自分のやったことを残しておきたいので、8102353469をなぞりながら設定していきたいと思います。
VartualBox環境でROSを勉強してる人の参考にもなればと思います。(ROS的に全く推奨されないと思いますが笑)

と、いうことでPS4コントローラDualShock4(以下DS4)を使って数値を取りたいと思います!

使用環境

  • Ubuntu16.04.4(MacBook Proで仮想環境構築)
    MacOS 10.13.5
    VirtualBox 5.2.12 r122591 (Qt5.6.3)
  • ROS Kinetic
  • ワイヤレスコントローラー(DUALSHOCK®4)

有線で使う

まずは公式チュートリアルにも載っている、有線でのジョイスティック操作。

1. rodのパッケージjoyをインストール

余談ですが、ROS公式にはsudo apt-getと載っています。
他の色んなLinuxの記事でもapt-getが大多数ですが、Ubuntu14の頃からaptが推奨されているそうです。

2. ジョイスティックを接続

DS4をUSBでPCに接続
VirtualBoxを使ってる方は、デバイスの追加をしましょう。
USBデバイス追加

3. USB認証されているかチェック

usb認識確認
DS4接続前後でなにやら項目が増えています。
公式にはjs0が増えたね!みたいに書いてありましたが、何故かjs2, js3が増えています。

4. ジョイスティックの数値を取得(早いッ!)

もうジョイスティックの数値が取れるみたいです。
謎の技術感がスゴイです。。。jstestはrosjoyと一緒に入ったのかな?
とりあえず言われるがままにjs3を試してみました。

ds4_log

最後の部分でパッドを触っていますが、マウスの如く認識されています。
マウスカーソル等は出てこないので、操作はできないですが、自前で頑張ればちゃんと数値は取れそうです(頑張るとは言っていない)
-32767〜32767の範囲で数値を拾っているみたいですね。
すべて拾ってるとは思いませんが、65534段階ということは、かなり精密な操作まで拾ってくれる?

ちなみに、sudo jstest /dev/input/js2とすると傾き、角速度の6軸センサーの値が取れました。
6axis sensor

5. ジョイスティックのパーミッション確認、変更

ジョイスティックがROS joyノードにアクセスできるか、パーミッションを確認します。

If XX is rw: the js device is configured properly.@公式チュートリアル
ということで、どうやら「他ユーザー」のアクセス権限にrwがないといけないらしい
上の結果を見ると、権限が足りてないので、権限を変更

6. Joyノードの起動

まずはいつもの

次にJoyノードを立ち上げます。
これは上のコマンドの場所とは別ターミナルを開くか、別セッションを作って打ち込んでください
すると、こんな感じのログが出るので、これでひとまず準備OK

更に新しいターミナルを立ち上げ、コマンドを打つと。。。

joy_node

やりました!
これでとりあえず、ROSを使って値を取得することができました!
だから何ができるの?という感じですが、
次回はこの数値を使ってサーボを動かしたいと思います!