Please ask about problems and questions regarding this tutorial on answers.ros.org. Don't forget to include in your question the link to this page, the versions of your OS & ROS, and also add appropriate tags. |
複数のマシン上でROSを実行する
Description: このチュートリアルは、どのように2つのマシンでROSのシステムを起動するかを説明します。つまり、ひとつのマスターで複数のマシンを管理するためのROS_MASTER_URIの使い方を説明します。Tutorial Level: INTERMEDIATE
Next Tutorial: Defining Custom Messages
Contents
概要
ROSは分散コンピューティングができるように設計されてます。よくできているnodeは、ネット上のどこで実行されているかなどに関係なく、実行時に利用できる資源に合うように計算を移転することができます。(ただし、例えばハードウェアの一部とのみ通信するようなドライバノードはハードウェアが直接接続されているマシンで実行しなくてはなりません)。複数のマシンでROSシステムを展開するのは簡単です。以下のことを念頭に置いておいてください。
- 必要なマスターは一つのみです。どこで実行するかを決めてください。
すべてのnodeは、同じマスターを使うようにROS_MASTER_URIを通して設定しなくてはなりません。
すべてのマシンすべてのポートのペアの間に完全に双方向な接続がなくてはなりません。( ja/ROS/NetworkSetupをご覧ください).
それぞれのマシンは、全てのほかのマシンが名前解決できる名前によって自分をアドバタイズする必要があります。(ja/ROS/NetworkSetupをみてください).
2つのマシンにまたがるTalker / listener
marvinとhalの2つのマシンの間でtalker / listenerのシステムを実行したいとします。これらは、マシンのホスト名です。例えば、marvinにログインするときなどにアドレスを指定するときに使う名前です。以下のように使うものです:
ssh marvin
halでも同様です。
マスターを起動する
マスターを起動するマシンを一つ選ばなくてはなりません。ここではhalに割り当てたいと思います。まず初めのステップはマスターを起動することです。:
ssh hal roscore
listenerを起動する
hal上でリスナをスタートします。今さきほど起動したマスターを使うためにROS_MASTER_URIを設定します:
ssh hal export ROS_MASTER_URI=http://hal:11311 rosrun rospy_tutorials listener.py
talkerを起動します
次に、marvin上で、talkerを起動します。そして、halでマスタは起動しているのでROS_MASTER_URIも設定します。:
ssh marvin export ROS_MASTER_URI=http://hal:11311 rosrun rospy_tutorials talker.py
ほら見て: marvinのtalkerからhalのlistenerがメッセージを受け取っているのがわかると思います。
talker / listenerの起動の順番は関係ないことに注意です。:nodeはどの順番に起動してもかまいません。ただマスターのみどのnodeよりもはやく起動されなくてはなりません。
変更: 反対向きにする
さて、メッセージの流れる方向を反対向きにしてみましょう。hal上でマスターは実行したままにしておいて、talkerとlistenerを殺してください。そしたら、今とめた二つを反対のマシンで実行してください。
まずlisternerをmarvinで:
ssh marvin export ROS_MASTER_URI=http://hal:11311 rosrun rospy_tutorials listener.py
そしたらtalkerをhalで実行します。:
ssh hal export ROS_MASTER_URI=http://hal:11311 rosrun rospy_tutorials talker.py
うまくいかないときは
上記の一連の流れで何かうまく行かないことがあれば、ネットワークの設定に問題があるときが多々あります。ja/ROS/NetworkSetupで、設定要求とトラブルシューティングのtipsをご覧ください。