7.1.7-ROS の共通コンポーネントと機能

ROS における分散通信

ROS (Robot Operating System) は分散コンピューティング環境として設計されています。つまり、稼働中の ROS システムは複数のマシンに分散した複数のノードで構成され得るということです。構成によっては、任意のノードが任意のタイミングで他のノードと通信する必要があります。

これを実現するため、ROS には特有のネットワーク要件があります:

  1. すべてのマシン間で、すべてのポートで完全な双方向接続が必要です。
  2. 各マシンは他のすべてのマシンが解決できる名前で自身を通知しなければなりません。

実装手順

1. 準備

ROS を分散通信用に構成する前に、異なるコンピュータが同じネットワーク上にあることを確認します。理想的には各コンピュータに静的 IP アドレスが割り当てられるべきです。仮想マシンを使用している場合は、ネットワークアダプタの設定を「ブリッジモード」に変更し、同じネットワーク上で相互に通信できるようにします。

2. 設定ファイルの修正

各コンピュータで /etc/hosts ファイルを修正し、他のマシンの IP アドレスとホスト名を追加する必要があります。

  • ホストマシン上:

    スレーブマシンの IP アドレスとホスト名を追加します。

    plaintext
    <Slave_IP_Address>    <Slave_Hostname>
  • スレーブマシン上:

    ホストマシンの IP アドレスとホスト名を追加します。

    plaintext
    <Host_IP_Address>    <Host_Hostname>

/etc/hosts ファイルを更新したら、ping コマンドでマシン間の通信を確認します:

  • IP アドレスの確認: ifconfig または ip addr show を使用。
  • ホスト名の確認: hostname を使用。

3. ホストマシンの IP アドレスを構成

ホストマシン上で、~/.bashrc ファイルに次の行を追加して IP アドレスを構成する必要があります:

bash
export ROS_MASTER_URI=http://<Host_IP_Address>:11311
export ROS_HOSTNAME=<Host_IP_Address>

これらの行は、ROS_MASTER_URI をホストマシンの IP アドレスに設定し、master ノード (roscore) が動作している場所を ROS に伝えます。ROS_HOSTNAME は ROS が使用するマシンのホスト名を設定します。

4. スレーブマシンの IP アドレスを構成

各スレーブマシン上 (複数のスレーブが可能) でも、~/.bashrc ファイルを修正して以下を追加します:

bash
export ROS_MASTER_URI=http://<Host_IP_Address>:11311
export ROS_HOSTNAME=<Slave_IP_Address>

この設定により、各スレーブマシンはホストの ROS master を指し示し、ROS ネットワークに参加できます。

設定のテスト

1. ホストマシンで roscore を起動

ホストマシンで次を実行して ROS master ノードを起動します:

bash
roscore

このステップは重要です。ROS master ノードが ROS ネットワーク内の異なるノード間の通信を管理するためです。

2. ホストからスレーブへの通信をテスト

  • ホストマシン上: subscriber ノードを起動。
  • スレーブマシン上: publisher ノードを起動。

ノードが期待通りに通信できるか確認します。

3. スレーブからホストへの通信をテスト

  • スレーブマシン上: subscriber ノードを起動。
  • ホストマシン上: publisher ノードを起動。

再度、ノード間の通信が正常に機能していることを確認します。