0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

ROS 2で3Dconnexion SpaceMouseを使う方法

0
Posted at

はじめに

SpaceMouseとは、3Dconnexion社が販売している3Dマウスである。本記事では、SpaceMouse WirelessをROS 2で使う方法を紹介する。

動作確認環境

  • NVIDIA Jetson Orin 64GB (JetPack 6.2)
    • Ubuntu 22.04 aarch64 (arm64)
  • ROS 2 Humble

Jetsonを利用したので、Ubuntu 22.04 aarch64 (arm64)環境で試したが、x86_64環境でも同様に動作可能だと思われる。

方法

SpaceMouseの認識確認

SpaceMouse Wirelessは、有線接続と無線接続の両方が可能である。いずれかの方法でSpaceMouse WirelessをPCに接続しておく。

最新のSpaceMouse Wirelessでは、Bluetooth、USB有線、USBレシーバーによる無線接続が可能である。筆者が所有しているものは旧タイプでBluetooth接続に対応していないため、今回はUSB有線接続とUSBレシーバーによる無線接続のみ確認した。

USBの認識確認

lsusbコマンドでUSBの認識確認を行う。

有線接続、無線接続で認識のされ方が異なり、以下のようになる。

  • 有線接続の場合
    有線接続の場合
    Bus 001 Device 008: ID 256f:c62e 3Dconnexion SpaceMouse Wireless (cabled)
    
    • 3Dconnexion SpaceMouse Wireless(/dev/input/js0)として認識される
  • 無線接続の場合
    無線接続の場合
    Bus 001 Device 010: ID 256f:c62f 3Dconnexion SpaceMouse Wireless Receiver
    
    • 3Dconnexion SpaceMouse Wireless Receiver(/dev/input/js0)として認識される

jstest-gtkによる認識確認

jstest-gtkでSpaceMouseが認識するか確認する。

jstest-gtkのインストール

sudo apt update
sudo apt install jstest-gtk

jstest-gtkの起動

jstest-gtk
  • 有線接続の場合
    • image.png
    • image.png
  • 無線接続の場合
    • image.png
    • image.png

ボタンと軸の割り付けは以下のようになっている(有線接続と無線接続は同じ配列になっている)。

Axes/Buttons 符号
Axis 0 X軸(左右方向) 右方向が+
Axis 1 Y軸(前後方向) 後方向が+
Axis 2 Z軸(上下方向) 下方向が+
Axis 3 X軸周りの回転 X軸+方向に対して時計回りが+
Axis 4 Y軸周りの回転 Y軸+方向に対して時計回りが+
Axis 5 Z軸周りの回転 Z軸+方向に対して時計回りが+
Button 0 左側のボタン -
Button 1 右側のボタン -

image.png

ROS 2での利用方法

本記事では、以下のjoyノードとspacenavノードの2つの方法を紹介する。

項目 joyノード spacenavノード
概要 ゲームパッドとしてSpaceMouseを扱う汎用ノード SpaceMouse専用ノード
主な出力トピック /joy /spacenav/joy/spacenav/twist
メッセージ型 sensor_msgs/msg/Joy sensor_msgs/msg/Joygeometry_msgs/msg/Twist
軸配置 ジョイスティック形式 SpaceMouse向けに最適化
用途 ゲームパッドと同様のインタフェースで利用したい場合 ロボットの速度指令や6自由度操作に利用したい場合

本記事では、まずjoyノードによる利用方法を紹介し、その後、SpaceMouse専用のspacenavノードによる利用方法を紹介する。

【任意】DockerでROS 2環境を準備する場合

Dockerで、ROS 2環境を準備する。

Dockerイメージのダウンロード

docker pull ros:humble

Dockerコンテナを起動

docker run -it \
    --name ros_humble_spacenav_test \
    -v /dev:/dev \
    ros:humble bash
  • オプション
    • --name: コンテナ名(例:ros_humble_spacenav_test)
    • -v: マウントボリューム
      • -v /dev:/dev ※Spacenavのデバイスをホストと共有可能にするオプション

joyノードで利用する方法

joyノードを用いて、SpaceMouseのjoyトピックを出力する。

sudo apt update
sudo apt install ros-humble-joy

joyデバイス名の確認

以下のコマンドでjoyデバイス名を確認できる。または、jstest-gtkで表示されていたデバイス名を確認してもよい。なお、joyデバイス名の確認方法については、筆者の別記事を参照。

awk '
/^N:/ {name=$0}
/^H:/ && /js[0-9]/ {print name}
' /proc/bus/input/devices | sed 's/^N: Name="//;s/"$//'
  • 有線接続の場合
    3Dconnexion SpaceMouse Wireless
    
  • 無線接続の場合
    3Dconnexion SpaceMouse Wireless Receiver
    

joyノードの起動

ros2 run joy joy_node --ros-args -p device_name:="your_device_name"
  • 有線接続の場合
    ros2 run joy joy_node --ros-args -p device_name:="3Dconnexion SpaceMouse Wireless"
    
  • 無線接続の場合
    ros2 run joy joy_node --ros-args -p device_name:="3Dconnexion SpaceMouse Wireless Receiver"
    

joyトピックの確認

ros2 topic echo /joy

以下のようなトピックが確認できればOK。

---
header:
  stamp:
    sec: 1783632512
    nanosec: 908972950
  frame_id: joy
axes:
- 0.10378380864858627
- 0.221071258187294
- 0.0015307441353797913
- 1.0
- -0.2481202930212021
- -0.0
buttons:
- 0
- 0
---

軸とボタンは以下のような配置となっている。jstest-gtkとは軸の符号が変わっている箇所があるので注意する。

axes/buttons 符号
axes[0] X軸(左右方向) 左方向が+
axes[1] Y軸(前後方向) 前方向が+
axes[2] Z軸(上下方向) 上方向が+
axes[3] X軸周りの回転 X軸の+方向に対して時計回りが+
axes[4] Y軸周りの回転 Y軸の+方向に対して時計回りが+
axes[5] Z軸周りの回転 Z軸の+方向に対して時計回りが+
buttons[0] 左側のボタン -
buttons[1] 右側のボタン -

image.png

spacenavノード

spacenavノードは、SpaceMouse専用ノードであり、SpaceMouseの入力をgeometry_msgs/msg/Twistとして出力できる。

まず、以下でspacenavノードをインストールする。

sudo apt update
sudo apt install ros-humble-spacenav

spacenavノードの起動

spacenavノードを起動する前に、spacenavdをroot権限で起動しておく。

sudo spacenavd

続いて、別のターミナルでspacenavノードを起動する。

ros2 run spacenav spacenav_node

エラーなく起動すればOK。
もし、以下のようなエラーログが出る場合、spacenavdが正しく起動していないので、spacenavdを起動してから再度、spacenavノードを起動する。

connect failed: No such file or directory
[ERROR] [1783633193.528828976] [spacenav]: Could not open the space navigator device. Did you remember to run spacenavd (as root)?

joyトピックの確認

ros2 topic echo /spacenav/joy
---
header:
  stamp:
    sec: 1783691218
    nanosec: 685063078
  frame_id: ''
axes:
- 0.376953125
- -0.55078125
- -0.029296875
- 0.740234375
- 0.3828125
- 0.0
buttons:
- 0
- 0
---

軸とボタンは以下のような配置となっている。jstest-gtkやjoyノードとは、軸番号や符号が異なるので注意する。

axes/buttons 符号
axes[0] Y軸(前後方向) 前方向が+
axes[1] X軸(左右方向) 左方向が+
axes[2] Z軸(上下方向) 上方向が+
axes[3] Y軸周りの回転 Y軸の+方向に対して時計回りが+
axes[4] X軸周りの回転 X軸の+方向に対して時計回りが+
axes[5] Z軸周りの回転 Z軸の+方向に対して時計回りが+
buttons[0] 左側のボタン -
buttons[1] 右側のボタン -

image.png

twistトピックの確認

ros2 topic echo /spacenav/twist

以下のようなトピックが取得できればOK。

---
linear:
  x: 0.0
  y: 0.2734375
  z: 0.62109375
angular:
  x: -0.44921875
  y: 0.46484375
  z: 0.3359375
---

トピックの軸配置は以下のようになっている。

linear/angular spacenav軸 符号
linear.x 前後方向 前方向が+
linear.y 左右方向 左方向が+
linear.z 上下方向 上方向が+
angular.x X軸周りの回転 X軸の+方向に対して時計回りが+
angular.y Y軸周りの回転 Y軸の+方向に対して時計回りが+
angular.z Z軸周りの回転 Z軸の+方向に対して時計回りが+

image.png

まとめ

まとめ

SpaceMouse WirelessをROS 2で使用する方法として、joyノードとspacenavノードの2つを紹介した。

ゲームパッドと同様のインタフェースで入力を取得したい場合はjoyノード、並進・回転の6自由度入力をTwistとして利用したい場合はspacenavノードが適している。

SpaceMouseは6自由度の操作を直感的に行えるため、マニピュレータの手先操作、移動ロボットの速度指令、シミュレータ上のロボット操作などに有効な入力デバイスである。

参考

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?