ROSによる遠隔操作サンプル

ここではROSを用いて遠隔操作を行うサンプルについて紹介します。

ROS環境のセットアップ

ROS環境のセットアップ方法について ROSとの連携 にまとめていますので、そちらの説明に従って必要なROSパッケージのインストール(ビルド)を行ってください。

なお、 Choreonoidのインストール で示したように、WRS2018のシミュレーションを実行するにあたってはChoreonoidのオプション機能がいくつか必要となります。具体的にはCMakeで設定する以下のオプションになります。

  • BUILD_WRS2018
  • BUILD_COMPETITION_PLUGIN
  • BUILD_AGX_DYNAMICS_PLUGIN
  • BUILD_AGX_BODYEXTENSION_PLUGIN
  • BUILD_SCENE_EFFECTS_PLUGIN
  • BUILD_MULTICOPTER_PLUGIN
  • ENABLE_INSTALL_RPATH_USE_LINK_PATH

これにROS環境で必要な CMakeオプションの設定 を加えてCatkinのビルド設定をします。また、 ros_catkin_build_type については通常は(デバッグするのでなければ)リリースモード(Release)にしておきます。

Ubuntu 20.04 (ROS Noetic) の場合は以下のように設定します。

catkin config --cmake-args -DBUILD_WRS2018=ON -DBUILD_COMPETITION_PLUGIN=ON -DBUILD_AGX_DYNAMICS_PLUGIN=ON -DBUILD_AGX_BODYEXTENSION_PLUGIN=ON -DBUILD_SCENE_EFFECTS_PLUGIN=ON -DBUILD_MULTICOPTER_PLUGIN=ON -DBUILD_CHOREONOID_EXECUTABLE=OFF -DENABLE_INSTALL_RPATH_USE_LINK_PATH=ON -DCMAKE_BUILD_TYPE=Release

Ubuntu 18.04 (ROS Melodic) 以前の環境の場合は、Pythonのバージョン2を使う必要があるので、 -DUSE_PYTHON3=OFF を追加して、以下のようにします。

catkin config --cmake-args -DBUILD_WRS2018=ON -DBUILD_COMPETITION_PLUGIN=ON -DBUILD_AGX_DYNAMICS_PLUGIN=ON -DBUILD_AGX_BODYEXTENSION_PLUGIN=ON -DBUILD_SCENE_EFFECTS_PLUGIN=ON -DBUILD_MULTICOPTER_PLUGIN=ON -DBUILD_CHOREONOID_EXECUTABLE=OFF -DUSE_PYTHON3=OFF -DENABLE_INSTALL_RPATH_USE_LINK_PATH=ON -DCMAKE_BUILD_TYPE=Release

遠隔操作サンプルの実行

ROSを用いた遠隔操作のサンプルは、 シミュレーションサンプル で紹介したサンプルに "-ROS" のサフィックスをつけた名前で提供しています。

例えばタスクT1についてAizuSpiderやDoubleArmV7のモデルに対して、以下のようなスクリプトがあります。

  • T1M-AizuSpiderSS-ROS.py
  • T1M-AizuSpiderSA-ROS.py
  • T1L-DoubleArmV7S-ROS.py
  • T1L-DoubleArmV7A-ROS.py

シミュレーションサンプル で説明したのと同じ要領で、ROS版のサンプルを読み込んでください。サンプルはCatkinワークスペース内のdevel以下に格納されているものを使用します。例えば

cd (ワークスペースディレクトリ)/devel/share/choreonoid-1.8
rosrun choreonoid_ros choreonoid WRS2018/script/T1M-AizuSpiderSS-ROS.py

などとします。

遠隔操作用のノードやツールも起動しておく必要があります。まず操作をゲームパッドで行うため、ゲームパッドを接続した上で、choreonoid_joyパッケージのノードを以下のように起動します。

rosrun choreonoid_joy node

これでゲームパッドの状態がトピックとして配信されるようになります。

これはROSのjoyパッケージと同様の機能を果たすものなのですが、軸やボタンのマッピングがChoreonoid標準になるという点が異なります。対応しているゲームパッドであれば、機種によらず軸やボタンのマッピングが同じになります。Choreonoidのサンプルはこのマッピングで作られているため、それらを動かす際にはこのchoreonoid_joyを使うのがよいです。

次にカメラ画像の表示をできるようにしましょう。これはいろいろなやり方があるかと思いますが、ここでは rqt_image_view ツールを使うことにします。以下のようにしてこれを起動してください。

rosrun rqt_image_view rqt_image_view

このツールの左上にどのトピックの画像データを表示するか指定するコンボボックスがありますので、そこで表示したいカメラ画像を指定します。AizuSpiderの場合、 "/AizuSpider/FRONT_CAMERA/image" を選択してください。

以上で準備は完了です。Choreonoid上でシミュレーションを開始してください。うまくいけば、rqt_image_view上にAizuSpiderのカメラ画像が表示されます。また、ゲームパッドでロボットを操作できるようになります。

DoubleArmV7のサンプルも同様に実行することができます。DoubleArmV7の場合、カメラ画像のトピックは "/DoubleArmV7/FRAME_FRONT_CAMERA/image" を選択してください。

注釈

本サンプルでは上述のトピックに対応するカメラ画像のみがシミュレートされています。他のカメラの画像もシミュレートしたい場合は、 視覚センサのシミュレーション を参照の上、 "GLVisionSimulator" アイテムの設定を行ってください。ただしシミュレート対象のカメラを増やすと、シミュレーションが遅くなる可能性があります。

PC2台を用いた遠隔通信

シミュレーション側と操作側を別々のPCとする場合、シミュレーション用のPCでChoreonoidのシミュレーションプロジェクトを起動し、遠隔操作用のPCでchoreonoid_joyノードとrqt_image_viewを起動します。

2つのPC間でROSノードが通信できるようにするため、共通のROSマスターを使用する必要があります。

概要としては、ROSマスターを設置するホスト(PC)を決め、そちらでroscoreを起動します。そしてもう一方のPCでは、環境変数 ROS_IPに自身のIPアドレスを、ROS_MASTER_URI にマスターのアドレスを設定しておきます。

例えば、

  • シミュレーション用PCをマスターとする
  • シミュレーション用PCのIPアドレス: 192.168.0.10
  • 操作用PCのIPアドレス: 192.168.0.20

という構成の場合は、シミュレーション用PCでroscoreを起動し、操作用PCでは、

export ROS_IP=192.168.0.20
export ROS_MASTER_URI=http://192.168.0.10:11311

とします。(ホスト名でアドレスが引けるようになっている場合は、IPアドレスではなくホスト名で指定してもOKです。)

設定が完了したら、シミュレーション用PCのChoreonoidでシミュレーションを開始します。すると遠隔操作用PCのrqt_image_viewにカメラ画像が表示され、遠隔操作用PCに接続されているゲームパッドでロボットの操作ができるようになるはずです。