Jetbot上のROSでホストPC(Ubuntu)のjoyトピックをSubscribeできないエラー

jetbotのUbuntu18.04にをホストPCのUbuntu20.04からJoyトピックをPublishしたい。

Jetbot側でUbuntu PCのトピックを受信できないエラーが発生した。
不思議なことに、

1)Ubuntu PCから/joyトピックに対してrospyから空のJoy()メッセージをPublishすると受信できる。すなわちUbuntu PCとJetbotの間では通信は確立している(後から考えると完全には確立していなかったのだが)。
2)rosrun joy joy_nodeしてGamepadから信号を送るとJetbot上で受信できない。このときローカルのUbuntu PC上で/joyをモニターすると値は出ている。すなわちUbuntu PC上のjoy_nodeドライバがおかしいわけではない。
3)turtlesimやstd_msgsを使用した自作のrospyではJetbot上でトピックは受信できる。joy_nodeだけが受信できない。

図にすると以下のような状況。UbuntuからjetbotにGamepadから/joyトピックにメッセージを送るときだけ受信できていない。
f:id:seinzumtode:20201130134859j:plain

半日試行錯誤したあとで以下の情報にたどりついた。
ros-users.122217.n3.nabble.com

/etc/hostsに通信先のドメインを指定する必要があるとのこと。これで名前解決できるようになる。このとき$ ping <向こうのホスト名>すると、名前解決できていることが確認できる。

最終的には以下のように設定したら動くようになった。

ホストUbuntu PC側(ROSマスター起動側、Joyデータ送信側)

/etc/hosts

192.168.1.39	jetbot-4-3 #←これを追加。通信対象のJetbotのホスト名とIP.

~/.bashrc

export ROS_MASTER_URI=http://192.168.1.61:11311
export ROS_IP=192.168.1.61
export ROS_HOSTNAME=ubuntu

Jetbot(Joyデータ受信側)

/etc/hosts

192.168.1.61 ubuntu #←これを追加。通信対象のホストPCのドメイン名とIP。

~/.bashrc

export ROS_MASTER_URI=http://192.168.1.61:11311
export ROS_IP=192.168.1.39
export ROS_HOSTNAME=jetson-4-3