Jetson NanoでBlutooth接続してPS4コントローラを使ってみます。
ロボットなどの制御はラズパイがよく使われますが、エッジでAIをどうこうしようとするとJetsonの出番になることもあります。
なので、JetsonとPS4コントローラの組み合わせもやってみます。
Nano は素の状態ではWi-FiもBluetooth も使えません、イーサネット有線接続の一択です。
Wi-Fi はアダプタを調達すればOK。Bluetoothも同様です。
よく使われるものにIntelのM.2のWi-Fi・Bluetoothのコンボカードをセットするやり方がありますが、ヒートシンクを外したりいろいろ面倒です。USBアダプタの方が簡単だし安上がりです。
OSイメージは以下を使ってみます(Ubuntu 18.04.6 LTS Desktop)。
JetPack 4.6(For Jetson Nano 2GB Developer Kit)
PLANEX の Bluetooth USBアダプター Ver.4.0を使ってみます(Amazonで1000円くらい)。
アダプターをUSBポートに挿入しておきます。
OSのインストール終了後、起動してメニュから 設定ー>Bluetooth マネージャーを開きます。
PS4コントローラが発見されるようにSHAREボタンとPSボタンを同時に長押しすると、LEDが白く点滅します。
検索をクリック
PS4コントローラが検出されました。
右クリックして、ペアリングとトラスト(信頼する)を実行。
以上でOKです。
再起動して試してみます。
PS4コントローラのPSボタンをクリック。
青白くLEDインジケータが点滅。
接続すると薄い青紫で点灯します、これでOK。
以下で確認
1 |
ls -al /dev/input |
Joystick端末として認識されています。
Pythonでキー入力の取得
PS4コントローラ用のライブラリをインストールしておきます。for Linux なのでラズパイでもJetsonでも使えます。
pipを使うので未インストールの場合は以下を実行
1 |
sudo apt install python3-pip |
ライブラリをインストール
1 |
sudo pip3 install pyPS4Controller |
キー検出用のPythonコード
/dev/input/js0の後ろの番号は上記で確認したJoystick端末の番号と対応しています。
1 2 3 4 5 6 7 8 |
from pyPS4Controller.controller import Controller class MyController(Controller): def __init__(self, **kwargs): Controller.__init__(self, **kwargs) controller = MyController(interface="/dev/input/js0", connecting_using_ds4drv=False) controller.listen() |
コードはキー入力を待ち受けているので、何かキーをクリックすれば検出されます。
左右のスティックから取れるデータはこんな感じ。
イベント名やレンジはプラットフォーム、メーカーやタイプで異なっているかもしれません。要確認。
イベント名
ふつうはこう。
でも、こうなっている場合もあるようです。
数値データのレンジ
他のボタンのイベントなどはライブラリをご参照ください。
Appendix
PS4コントローラはいろいろな名前がついています。
Bluetoothマネージャーで見るとWireless Controller ですが、lsでデバイスを調べるとjs*(joystick)で出てきますし、有線接続してlsusbでUSBデバイス名を見るとDualshock 4(DS4)で出てきます。
Leave a Reply