Help us understand the problem. What is going on with this article?

同一ネットワーク内で複数人がROS2を使用する場合

ROS2関係トップページへ

問題提起

ROS2はネットワーク内で自動的にnodeを発見し,構成する.そのため同一ネットワーク内であれば複数のPCでnodeを実行させて分散処理することが容易にできる.

一方,同一ネットワークで複数人が「それぞれの目的」に従ってROS2のプログラムを作成してnodeを実行させると以下のような問題が生じる.特に研究室で.

  • Aさんがシミュレーション用の音声処理をnode名"processing"で作成.データをtopic名double resultで公開
  • Bさんがラズパイに接続している距離センサをnode名"processing"で作成.データをtopic名double resultで公開
  • Cさんが画像処理をnode名"processing"で作成.データをtopic名double resultで公開

結果,Aさんの処理結果がCさんのものとして使われたりするかもしれない...

解決方法

上記のような問題に対して,以下の解決方法がある.ここでは最初の方法を推奨する.

  1. ROS_DOMAIN_IDを設定
  2. node名・topic名などの命名規則を設定

ROS_DOMAIN_IDの設定

ROS_DOMAIN_IDに数値を設定すると,同一の値が設定されたところ(terminal)同士でしかノードなどを見ることが出来なくなる.よって他の人のノードなどに左右されないし,他の人に影響を与えない.

設定の仕方

下記はterminalから直接設定しているが,.bashrcに記述するのが最もよい

$ export ROS_DOMAIN_ID=1

値の範囲

ROS_DOMAIN_IDで設定できる値の範囲は0~65532まで.例えば2000000とか与えてros2 node listとやると,エラーメッセージが出て範囲を教えてくれる.

ROS_DOMAIN_ID=0はどうも「全体に見える値」のような気がする.検証としては,以下のとおり.

  • 実験設定

    • 端末A,端末B,端末Cを用意
    • 端末A,端末Bで同じROS_DOMAIN_IDを設定
    • 端末CではROS_DOMAIN_IDを設定せず
    • 端末Aでnodeを実行
    • 端末B,Cでros2 node listを実行し,端末Aのノードが表示されるか確認
  • ROS_DOMAIN_ID=1で設定した場合(ただしくは0以外で何通りか実験)

    • 端末B : 端末Aのノードが表示される
    • 端末C : 端末Aのノードが表示されない
  • ROS_DOMAIN_ID=0で設定した場合

    • 端末B : 端末Aのノードが表示される
    • 端末C : 端末Aのノードが表示される

まとめ

基本的に.bashrcの中に以下を記述しましょう.値は管理者に相談して決めましょう.

.bashrc
export ROS_DOMAIN_ID=1

参考

Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
Comments
No comments
Sign up for free and join this conversation.
If you already have a Qiita account
Why do not you register as a user and use Qiita more conveniently?
You need to log in to use this function. Qiita can be used more conveniently after logging in.
You seem to be reading articles frequently this month. Qiita can be used more conveniently after logging in.
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
ユーザーは見つかりませんでした