USBの場合はすぐにつながるので無線の接続方法のメモ。
ds4rvのインストール
下記コマンドでpipでインストールするだけ
sudo pip install ds4drv
ds4rvの起動
下記コマンドで起動。ハードウェアを使うためsudoを使わないとだめ?
sudo ds4drv
無線の接続
PCのBluetoothが有効になっていることを確認してから、コントローラのPSボタンとSHEREボタンを同時に押す。長押ししたほうが良いかも。PS4のライトが白く点滅するが、速い点滅(速く2回点滅してから0.5秒ぐらい空けて速い点滅2回というパターン)になっていればOK。遅い点滅(2Hzくらいの一定間隔の点滅)のときは一回ボタンを離してから再度長押しして速い点滅になるか確認。
しばらくすると、sudo ds4drvを実行したターミナルに下記のような表示が出る。表示された番号でPS4ジョイスティックが認識されている。
ROS 1との接続 (Ubuntu20.04)
下記のコマンドでjoyをインストール
sudo apt install ros-noetic-joy
下記コマンドでROSノード立ち上げ
rosrun joy joy_node
/dev/input/js0ではない場合は下記のコマンドで実行
rosrun joy joy_node _autorepeat_rate:=10 _dev:=/dev/input/js1
__autorepeat_rate:=10は入力の変化がないときでも10Hzで送信するというオプション。
トピックで情報確認。
rostopic echo /joy
ROS 2との接続 (Ubuntu20.04:foxy, Ubuntu22.04:humbleならfoxyをhumbleに変更)
下記コマンドでインストール
sudo apt install ros-foxy-joy
有線であれば、USBを接続して下記コマンドを実行すればつながる
ros2 run joy joy_node
ROS 2は/dev/input/js0とか/dev/inputjs1に番号が変わっても自動で接続される。またautorepeatが自動デフォルトで設定されている。
トピックは下記で確認できる。
ros2 topic echo /joy
オプションで複数あるジョイスティックのデバイスの番号を修正したい場合は下記オプションをつければOK.
ros2 run joy joy_node --ros-args -p device:="/dev/input/js1"
複数あるジョイスティックを名前から選びたいときは下記コマンドでデバイス名を確認。これだとjs*の番号が変わっても安定して接続可能?
ros2 run joy joy_enumerate_devices
出てきた名前。たとえば「Sony Interactive Entertainment Wireless Controller」(長い)の場合は下記のコマンドで立ち上げる。
ros2 run joy joy_node --ros-args -p device_name:="Sony Interactive Entertainment Wireless Controller"
動作確認
USBの接続と無線の接続はボタンの配置が異なるので注意。細かくは書きません。。。ボタンを押してtopicの情報で確認してください。