はじめに
ROS 2のジョイスティック(Joystick Drivers)でデバイス名を指定する方法を紹介する。デフォルトでは /dev/input/js0 などのデバイス番号で選択されるが、USBの抜き差しや接続順によって番号が変わる場合がある。そのため、安定して特定のコントローラを利用したい場合はデバイス名による指定が有効である。
動作確認環境
- ROS 2 Humble
- ros-humble-joy
- ros-humble-joy-linux
方法
ROS 2でジョイスティックを利用する方法は、以下の2つがある。それぞれについて、デバイス名を指定する方法を紹介する。
2つの違いは、ジョイスティックのデバイスの扱い方法にある。joy は SDL2 を使用しており、XInput やゲームパッドのマッピングに対応している。joy_linux は Linux の /dev/input/js* を直接扱う実装である。詳細は公式ドキュメントを参照。
joy
ros2 run joy joy_node --ros-args -p device_name:="your_device_name"
- device_name:="your_device_name"
- デバイス名を指定する(※)
- 詳細は公式ドキュメントを参照
※デバイス名は、以下のスクリプトで確認する。
awk '
/^N:/ {name=$0}
/^H:/ && /js[0-9]/ {print name}
' /proc/bus/input/devices | sed 's/^N: Name="//;s/"$//'
Logicool F710(XInputモード)の場合は以下のようになる。
Logitech Gamepad F710
上記コントローラを指定する場合は以下のようなコマンドとなる。
ros2 run joy joy_node --ros-args -p device_name:="Logitech Gamepad F710"
joy_linux
ros2 run joy_linux joy_linux_node --ros-args -p dev_name:="your_device_name"
- dev_name:="your_device_name"
- デバイス名を指定する(※)
- 詳細は公式ドキュメントを参照
デバイス名は、以下のコマンドで確認できる。
ros2 run joy joy_enumerate_devices
Logicool F710(XInputモード)の場合は以下のようになる。
ID : GUID : GamePad : Mapped : Joystick Device Name
-------------------------------------------------------------------------------
0 : 030000006d04000019c2000011010000 : true : true : Logitech F710 Gamepad (XInput)
ros2 run joy_linux joy_linux_node --ros-args -p dev_name:="Logitech F710 Gamepad (XInput)"
デバイス名指定時の注意点
joy、joy_linuxパッケージともに、デバイス名の指定には以下を注意すること。
- デバイス名は完全一致である必要がある
- スペースを含むため必ずダブルクォートで囲む
- XInputモードとDirectInputモードで名前が異なる場合がある
まとめ
ROS 2のジョイスティック(Joystick Drivers)でデバイス名を指定する方法を紹介した。デフォルトでは /dev/input/js0 などのデバイス番号で選択されるが、USBの抜き差しや接続順によって番号が変わる場合がある。そのため、安定して特定のコントローラを利用したい場合は、本記事で紹介したデバイス名による指定が有効なので参考にしてほしい。
参考