複数台のパソコンでROSを取り扱う際の通信でハマった事の覚書
前提条件
使用PC:3台(ここではmaster, client1, client2で説明する)
使用OS:全てUbuntu 16.04 LTS
使用ROSバージョン:Kinetic
非WAN接続のルータに全て有線接続。DHCP設定は192.168.1.xxx。
masterでroscore起動
masterで/publish/master, client1で/publish/client1, client2で/publish/client2をそれぞれ1Hzでpublishしている。
#現象
ROS公式チュートリアル: http://wiki.ros.org/ROS/Tutorials/MultipleMachines
に従って実行したところ、全てのPCでrostopic listが見れるもののclient1でpublishしたtopicのみ他のPCでechoできない状況に陥る。
#先に結論
専門家では無いので詳しい理由は分からないが、
IPアドレス群をクラスC(192.168.x.x)からクラスB(172.30.x.x)に、
サブネットマスクを255.255.255.0から255.255.128.0にすると解決する。
#現象詳細
rostopic listの結果
master | client1 | client2 |
---|---|---|
/rosout /rosout _agg /publish/master /publish/client1 /publish/client2 |
/rosout /rosout _agg /publish/master /publish/client1 /publish/client2 |
/rosout /rosout _agg /publish/master /publish/client1 /publish/client2 |
rostopic echo /publish/master 及び rosotpic hz /publish/masterの結果
master | client1 | client2 |
---|---|---|
◯ | ◯ | ◯ |
rostopic echo /publish/client1 及び rosotpic hz /publish/client1の結果
master | client1 | client2 |
---|---|---|
✖ | ◯ | ✖ |
rostopic echo /publish/client2 及び rosotpic hz /publish/client2の結果
master | client1 | client2 |
---|---|---|
◯ | ◯ | ◯ |
#結論に至った経緯
ルータのDHCP設定192.168.1.xで作業。WANには繋がず。
export設定の精査 → 変化なし
初心に戻りROS公式のNetworkSetupの手順を追う。
それぞれのPC同士でping → 問題なし
netcatを用いた通信 → client1をlistenerにした時のみ通信できない事が発覚。
client1から他PCへのssh → 通る
他PCからclient1へのssh → 通らない
ufwを用いたclient1の全ポート開放 → 変化なし
ルータの変更2台 → 変化なし
ルータのDHCP設定を192.168.2.xや192.168.10.xに変更 → 変化なし
事務所のwifiを経由して接続を試みる → 通信成功
この時のネットワーク設定は
IPv4 Address: 172.30.122.xx
Ipv4 Subnet Mask: 255.255.128.0
Ipv4 Default Gateway: 172.30.0.1
上記設定を自分のルータに反映させる → 通信成功
#最終的な設定
ルータのIPアドレス: 172.30.0.1
サブネットマスク: 255.255.128.0
DHCP設定: 172.30.0.2~172.30.0.254
デフォルトゲートウェイ: 172.30.0.1
それぞれのPCの.bashrc末尾に以下書き込み
export ROS_HOSTNAME=(自分のIPアドレス)
export ROS_MASTER_URI=http://(masterのIPアドレス):11311
export ROS_IP=(自分のIPアドレス)
#おわりに
サブネットマスクは255.255.255.0のままでも良かった気がするが、折角うまくいっているので、このままの設定にしている。
問題の本質は分からないが、この方法で解決している人は見つからないので同じようにハマっている人は一度お試しあれ。
#解決を試す中で参考にしたサイト
export設定の精査(ROS_MASTER_URI,ROS_IP,ROS_HOSTNAME)で参考にしたサイト
ROS 複数台での通信時の問題点:clientからmasterへと情報送信できない
Running ROS across multiple machines [closed]
ROS remote master: can see topics but no data
ROSが配信する情報を別のPCのROSで確認する方法
ROS 複数のPCを使ってノードを走らせる場合。
ポート開放で参考にしたサイト
Ubuntuのポート開放方法(ファイアウォールを設定する)
Ubuntu 80/tcpのポート開放が出来ない