複数のPCを用いた分散処理

目的

ROSは容易に分散処理できるように設計されています.本演習では,複数のPCで計算する方法について学びます.

複数のPCで処理する方法

PCのリソースに合わせて計算量をコントロールする,すなわち起動するノードを適切にPCに割り振ることで,効率的に分散処理することが可能になります.プログラムを並列に処理するためには手間と技術が必要とされていますが,ROSを介することで容易に並列分散処理が可能です.

0. VB環境のネットワークの設定

VB環境でubuntuを動かしている人は,こちらのページを参考にしてネットワークの設定を行ってください.

1. マスターとスレーブの決定
複数のPCで処理する場合においても,roscoreで立ち上がるマスターは1つのみです.マスター以外のPCは,全てスレーブとなります.どのPCをマスター,どのPCをスレーブにするか決定しましょう.1チーム2人で構成されていますので,1人のPCはマスター,もう1人のPCをスレーブとしましょう.

2. ROS_IPの設定
ROS_IPは,自身のPCのIPアドレスを表します.まずはPCに割り当てられているIPアドレスを調べましょう.今回はipコマンドを使用します.ipコマンドを実行すると多くの情報が表示されて分かりにくいため,IPアドレスを抽出するオプションを使用します.


$ ip -br address

実行すると下記のように出力されます.

[yuu@T440p:~]$ ip -br address
lo               UNKNOWN        127.0.0.1/8 ::1/128 
ens33            UP             192.168.50.49/24 fe80::6803:490:8f6a:2ad2/64

“lo”はループバックアドレスと呼ばれる特殊なアドレスで,コンピュータ自身を示すIPアドレスです.上記の場合には,”lo”ではない”ens33″の”192.168.50.49″がルーターから割り当てられたローカルIPアドレスです.自身のコンピュータのIPアドレスを下記のように設定しましょう.

$ echo "export ROS_IP=192.168.50.49" >> ~/.bashrc

上記はIPアドレスが192.168.50.49の例です.自身のPCのIPアドレスを設定しましょう.

3. ROS_MASTER_URIの設定
ROS_MASTER_URIは,どのPCがマスターであるかを表す環境変数です.マスターとして使用するPCのIPアドレスを設定しましょう.ここでは,マスターのPCのIPアドレスが192.168.50.50とし,ROS_MASTER_URIを設定する方法を下記に示します.

$ echo "export ROS_MASTER_URI=http://192.168.50.50:11311" >> ~/.bashrc
$ source ~/.bashrc

IPアドレスのコロンの右側はポート番号です.以上で設定は終了です.

4. roscore
マスターとなるPCでroscoreを実行します.

$ roscore

マスターとしての役割を果たすPCは1台のみですので,スレーブとなるPCはroscoreを起動する必要はありません.以上で複数のPCで処理するための準備が整いました.

5. 確認
それでは,複数のPCで処理できることを確認してみましょう.ここでは,以前に使用したturtlesimを動かします.
まず,マスターのPCで下記を実行しましょう.

$ rosrun turtlesim turtlesim_node

次に,スレーブのPCで下記を実行しましょう.

$ rosrun turtlesim turtle_teleop_key

上記を実行後,スレーブのPCでマスターのPCで起動しているシミュレータ上のロボット(亀)を操作してみましょう.正しく設定されていればロボットを操作できます.ロボットが操作できることを確認後,マスターとスレーブで動かしていたノードを交換してみましょう.
ここでは,それほど計算量が多くないノードを動かしているため,複数のPCで並列に処理することの利点が感じ取れないかもしれません.しかしながら,このような簡単な設定で並列分散処理ができることは,とても大きな利点です.PCのリソースに合わせて計算量をコントロールし,ノードを設計すると良いでしょう.また,講義では1チーム2人でturtlebotを使用します.1つのPCをturtlebotに搭載し,もう1台のPCでプログラミング,デバック,実行をすると効率が良いです.

6. 設定の変更
接続するPCを変更する場合や,IPが変わった場合には,ホームディレクトリに存在する.bashrcを修正する必要があります.テキストエディターでホームディレクトリの.bashrcを開き,下記の行を探してください.

export ROS_IP=192.168.50.49
export ROS_MASTER_URI=http://192.168.50.50:11311

複数のPCを使用しない場合には,上記の2行を削除しましょう.IPが変更,もしくは接続先PCが変更の場合には,IPを変更してください.修正後は下記を実行しましょう.

$ source ~/.bashrc