Docker上のROS2(galactic)でteleop_twist_joy

docker-compose.yamlに以下のような設定を書きます.

services:
  ros2_galactic:
    build: .
    container_name: ros2_galactic

    network_mode: host   # --net=host

    # 重要:デバイスアクセス許可
    privileged: true

    volumes:
      # 入力デバイス全体をマウント
      - /dev/input:/dev/input

    # 個別にデバイスを指定する場合(より安全)
    devices:
      - /dev/input/js0:/dev/input/js0

で,以下,それぞれターミナルを用意して実行.

ros2 run joy joy_node
ros2 topic list; ros2 topic echo /joy
ros2 run teleop_twist_joy teleop_node
ros2 topic echo /cmd_vel

Logitech Gamepad F310を使っているのですが,標準だと,

button 5 = RB
Linear axis x on 5 = RT
Angular axis yaw on 2 = LT

という割り当てになっているみたいです.
大変押しにくいです.
そこで,teleopを以下に変更

ros2 run teleop_twist_joy teleop_node \
  --ros-args \
  -p require_enable_button:=true \
  -p axis_linear.x:=1 \
  -p axis_angular.yaw:=3

これで,
 前後が左のアナログスティックの前後の軸,
 回転が右のアナログスティックの左右の軸
に対応します.
なお,F310ではなくX-Box 360として認識されると動きません.
その場合,/dev/input/event??を確認して,どの番号に対応しているのかを見つける必要があります.
その上で,ros2 run joy joy_nodeの部分に対して,環境変数を設定します.
以下の例は,/dev/input/event7に割り当てがあったときです.

export SDL_GAMECONTROLLERCONFIG=""
export SDL_JOYSTICK_DEVICE=/dev/input/event7
ros2 run joy joy_node

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です

*