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だけが受信できない。
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トピックにメッセージを送るときだけ受信できていない。
半日試行錯誤したあとで以下の情報にたどりついた。
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