ROS2 ローカルホストだけで実行する環境設定

ROS2 ローカルホストだけで実行する設定

ROS2 (Robot Operating System) を活用した開発で、デフォルト設定では通信内容を同じネットワーク内に垂れ流してしまいます。

混線させたり、負荷を掛けたり、情報漏洩してしまったりして周りに迷惑をかけないようにする設定Tipsを紹介します。

目次

通常の挙動

ROS2は、デフォルトの設定では、同一ネットワーク内にTOPIC通信を垂れ流すので、研究室や企業内などで実行する際には注意が必要です。

これに対し、通信をコントロールする仕組みはしっかりと準備されています。貢献者の方々に感謝します。

1つ目は、複数のROS2を同じネットワーク上に共存させるための仕組みがあります。
2つ目は、ネットワーク上に情報を配信せずに、ローカルホストからのアクセスのみに制限する仕組みがあります。
今回は、後者を中心に紹介したいと思います。

設定方法

今回、想定した環境は次のとおりです。
 
試験環境:
  • Ubuntu 20.04 LTS
  • ROS2 Foxy
 
まずは、試験環境は下記URLの通りに、セットアップしました。
さて、ここからが本番ですが、正直なところ、下記公式ドキュメント通りです。はい。
ポイントは、環境変数の「ROS_LOCALHOST_ONLY」を設定して終わりです。
 
公式文書はここ。
繰り返しになりますが、次の通りに設定します。

セットアップファイルを設定

ROS 2を有効にするには、新しいシェルを起動するたび以下のコマンドを実行する必要があります。
$ source /opt/ros/foxy/setup.bash

シェル起動時に自動設定

シェルを起動するたびにsetup.bashを実行するのは手間なので、起動時に.bashrcで実行するよう追記しておく。
$ echo "source /opt/ros/foxy/setup.bash" >> ~/.bashrc
 
これにより、シェルを起動した際に、ROS 2関連の環境変数が設定されます。

環境変数を確認

ここでは、どんな環境変数が設定されているのか、printenvで確認してみます。
$ printenv | grep -i ROS
 
実行結果は下記のようになりました。
ROS_DISTROやROS_VERSIONが設定されているはずです。
ROS_VERSION=2
ROS_PYTHON_VERSION=3
ROS_DOMAIN_ID=1
ROS_LOCALHOST_ONLY=0
ROS_DISTRO=foxy

環境変数「ROS_DOMAIN_ID」

複数のROS2を同じネットワーク上に共存させるための仕組みのようです。
ROS_DOMAIN_IDに数値を設定します。
 
ROS_DOMAIN_IDを設定すると、マルチキャストに使用するポートが変更されるようです。
詳細は下記URLに詳しく書かれています。
一時的に設定する際には、下記のようにexportするとよいです。
$ export ROS_DOMAIN_ID=<your_domain_id>
 
また、恒常的に設定したい場合は、先のsetup.bashと同様に、.bashrcに記載しておくとシェル起動時に自動設定されます。
$ echo "export ROS_DOMAIN_ID=<your_domain_id>" >> ~/.bashrc

環境変数「ROS_LOCALHOST_ONLY」

デフォルト状態では、ROS 2で配信される情報は同じネットワーク上の端末で受信することができます。
これは便利ですが、一方で、ネットワーク上に情報を配信せずに、ローカルホストからのアクセスのみに制限したい場合には、ROS_LOCALHOST_ONLYを1に設定します。
 
一時的に設定する際には、下記のようにexportするとよいです。
$ export ROS_LOCALHOST_ONLY=1
 
また、恒常的に設定したい場合は、.bashrcに記載しておくとシェル起動時に自動設定されます。
$ echo "export ROS_LOCALHOST_ONLY=1" >> ~/.bashrc

念のため、同じLAN上に接続された別のWindows PCから、ネットワークトラフィックを解析できるソフト「Wireshark」を使って、効果を確認してみました。ROS_LOCALHOST_ONLYの0 / 1に応じて、ちゃんとUDP通信がON/OFFされる状況を検証しました。

まとめ

ROS2を活用した開発で、ネットワーク上に情報を配信せずに、ローカルホストからのアクセスのみに制限したい場合には、ROS_LOCALHOST_ONLYを1に設定すればよい、というTipsをご紹介しました。

最後までお読み頂きありがとうございました。

この記事の内容が役に立ったと思ったらソーシャルメディアで共有してください。

よかったらシェアしてね!
  • URLをコピーしました!
  • URLをコピーしました!

この記事を書いた人

robossa代表 ユパ(神楽木 ゆうすけ)
雑食系エンジニアで、どんなことにも全力です。
本ブログでは、「ユパ」的モノの考え方、ワクワクするモノ、ヒラメイタ遊び、日々の楽しみ方を発信していきます。

コメント

コメントする

このサイトはスパムを低減するために Akismet を使っています。コメントデータの処理方法の詳細はこちらをご覧ください

目次