ROS2でPC間通信ができなくて困ったので、その解決方法を残しておきます。
環境
OS:Ubuntu 22.04.4 LTS
ROS2:Humble
IPアドレスの設定
IPv4アドレスを固定し、IPv6は無効にします。
ここではGUIで設定する方法を紹介します。
IPv4アドレスを固定する
IPv6アドレスを無効にする
環境変数の設定
環境変数を確認する(設定前)
環境変数の確認
printenv | grep ROS
次のような表示を確認できます。
(表示例)
ROS_VERSION=2
ROS_PYTHON_VERSION=3
ROS_LOCALHOST_ONLY=1
ROS_DISTRO=humble
環境変数を設定する
-
ROS_DOMAIN_ID
はノードを共有したいPCで同じ値を指定します -
ROS_DOMAIN_ID
のデフォルト値は0
です -
ROS_DOMAIN_ID
として安全に使用できる値の範囲は0 ~ 101
です -
ROS_LOCALHOST_ONLY
を0
にすると、ネットワークにノードが公開されます -
ROS_LOCALHOST_ONLY
を1
にすると、ローカルホストのみにノードが公開されます
環境変数の設定
export ROS_DOMAIN_ID=1
export ROS_LOCALHOST_ONLY=0
.bashrc
に書き込むと、次回以降はターミナルを開いた際に自動で実行されます。
環境変数の設定(.bashrc)
echo "export ROS_DOMAIN_ID=1" >> ~/.bashrc
echo "export ROS_LOCALHOST_ONLY=0" >> ~/.bashrc
ROS2 Jazzy以降はROS_LOCALHOST_ONLY
が非推奨になりました。
代わりにROS_AUTOMATIC_DISCOVERY_RANGE
を使用します。
-
ROS_AUTOMATIC_DISCOVERY_RANGE
をSUBNET
にすると、ネットワークにノードが公開されます -
ROS_AUTOMATIC_DISCOVERY_RANGE
をLOCALHOST
にすると、ローカルホストのみにノードが公開されます
環境変数の設定
# export ROS_LOCALHOST_ONLY=0 に相当
export ROS_AUTOMATIC_DISCOVERY_RANGE=SUBNET
環境変数の設定(.bashrc)
# echo "export ROS_LOCALHOST_ONLY=0" >> ~/.bashrc に相当
echo "export ROS_AUTOMATIC_DISCOVERY_RANGE=SUBNET" >> ~/.bashrc
環境変数を確認する(設定後)
環境変数の確認
printenv | grep ROS
次のような表示を確認できます。
(表示例)
ROS_VERSION=2
ROS_PYTHON_VERSION=3
ROS_DOMAIN_ID=1
ROS_LOCALHOST_ONLY=0
ROS_DISTRO=humble
まとめ
とりあえずIPv6は無効にしておきましょう。
ROSを活用されるみなさんの助けになれば幸いです。
参考記事
更新履歴
-
2024/09/11
・投稿
・微修正