jsk-ros-pkg / jsk_common

common programs for jsk-ros-pkg
43 stars 81 forks source link

[jsk_tools] add rossetclient #1746

Open sktometometo opened 2 years ago

sktometometo commented 2 years ago

add rossetclient command to set ROS_IP and ROS_HOSTNAME.

Currently we have rossetip commands to set ROS_IP. But this command does not support to set ROS_HOSTNAME to hostname or FQDN like rossetip fetch1075.jsk.imi.i.u-tokyo.ac.jp.

rossetclient command has almost the same behavior but it set ROS_HOSTNAME to argument when argument is not ip address, nor network device.

k-okada commented 2 years ago

what is your assumption? 1) the robot run with DHCP address? or 2) robot changes network configuration from local netwrork to LTE/5G or wired connection to wireless connection during operation? 1) robot should have static IP address 2) please consider PR2 network settings, (with why we stop using this..) https://www.clearpathrobotics.com/assets/downloads/pr2/pr2_manual_r321.pdf

The reason we only rely on ROS_IP is we had MANY trouble on ROS_HOSTNAME, and rely on FQDN is always cause trouble and very hard to find the problem.

sktometometo commented 2 years ago

https://github.com/knorth55/jsk_robot/pull/273 での使用のために追加しました。

現在、Fetchはネットワーク監視スクリプトの挙動によりたまにNetworkManagerの再起動が行われ、このときにIPアドレスを一時的に持たない状態になり、ROS_IPの設定ではROSノードが通信できない状態になるらしいです。(この問題の詳細については @iory @708yamaguchi @tkmtnt7000 が詳しいようです。) これに対処するために、自動起動のROSノードはROS_HOSTNAMEをfetch1075などホスト名に設定して起動されています。これで通常時は133に接続されているロボットはfetchへ名前解決ができ、fetchのNetworkManager再起動時もFetch体内のノードは自分自身へ名前解決できるというコンセプトのようです。

一方、この方法だと、fetch上のアクセスポイントへ接続している際にfetch1075では名前解決出来ないので、ROSの通信を行うことができません。そのためにこの使い方をしているときにはFetch体内のROSノード立ち上げの際にROS_IPを10.42.0.1に設定するか、ROS_HOSTNAMEをfetch1075.localに設定したいです。

この設定を簡単に切り替えるために、一つの変数を受け取って、ROS_IPだけでなくROS_HOSTNAMEを設定したいときも適切に設定するためのコマンドとしてこのPRを用意しました。

k-okada commented 2 years ago

ちゃんとわかっていないけど,NetworkManagerに依存せずに /etc/network/interaces に直書きする,というのはダメなのかな。

-- ◉ Kei Okada

2022年6月29日(水) 12:45 Koki Shinjo @.***>:

knorth55/jsk_robot#273 https://github.com/knorth55/jsk_robot/pull/273 での使用のために追加しました。

現在、Fetchはネットワーク監視スクリプトの挙動によりたまにNetworkManagerの再起動が行われ、このときにIPアドレスを一時的に持たない状態になり、ROS_IPの設定ではROSノードが通信できない状態になるらしいです。(この問題の詳細については @iory https://github.com/iory @708yamaguchi https://github.com/708yamaguchi @tkmtnt7000 https://github.com/tkmtnt7000 が詳しいようです。)

これに対処するために、自動起動のROSノードはROS_HOSTNAMEをfetch1075などホスト名に設定して起動されています。これで通常時は133に接続されているロボットはfetchへ名前解決ができ、fetchのNetworkManager再起動時もFetch体内のノードは自分自身へ名前解決できるというコンセプトのようです。

一方、この方法だと、fetch上のアクセスポイントへ接続している際にfetch1075では名前解決出来ないので、ROSの通信を行うことができません。そのためにこの使い方をしているときにはFetch体内のROSノード立ち上げの際にROS_IPを10.42.0.1に設定するか、ROS_HOSTNAMEをfetch1075.localに設定したいです。

この設定を簡単に切り替えるために、一つの変数を受け取って、ROS_IPだけでなくROS_HOSTNAMEを設定したいときも適切に設定するためのコマンドとしてこのPRを用意しました。

— Reply to this email directly, view it on GitHub https://github.com/jsk-ros-pkg/jsk_common/pull/1746#issuecomment-1169501778, or unsubscribe https://github.com/notifications/unsubscribe-auth/AADYNXBB6TPOCXKKX7ZZEATVRPBCRANCNFSM52CHCC7A . You are receiving this because you commented.Message ID: @.***>

sktometometo commented 2 years ago

ネットワークの設定を固定するならNetworkManager要らないのですが、73B2内で使うのと73B2外で使うので設定を変えていて、簡単に設定を切り替えるのにNetworkManagerを使用しています。

k-okada commented 2 years ago

これは,本当に長い戦いの歴史があるんだけど,外部PCから使っている人がhostnameを使う場面で,結局DNSが引けていない,間違えている,,,,等の問題が頻出して,結局rossetipが生まれた,という経緯かと思います。 体内で,状況を管理できる自動起動ノードがhostnameを使うのはアリだとおもいますが,一般ユーザがこれをつかってトラブルになることを考えると,自動起動時にROS_HOSTNAMEをセットするのが良いと思います。