はじめに
Windows10 Pro(21H1)で使用しているWSL2を用いたUbuntu環境のネットワーク構成では、外部ネットワークに接続されているUbuntuと接続できない。
出来たとしても、片側のメッセージのみ可能などとの記事もあった。
WSL2で使用する仮想ネットワークと外部ネットワーク接続をするために以下の環境で確認を行った内容を記述します。
環境
- エディション:Windows 10 Pro
- バージョン:21H1
- OSビルド:19043.1645
概要
Windows10の内部で仮想ネットワークに接続されているWSL2と外部ネットワークに接続されているUbuntuを接続させます。
双方向でのTopicの送受信をさせます。
そのため、下記の図の順でネットワークの構成を変更させます。
以下、コマンドで設定している内容は下記の図のIPアドレスを参考にしています。
各自のIPアドレス環境に置き換えて、設定を行ってください。
ネットワーク構成、変更図
Hyper-Vを有効にする
・Windows ボタンを右クリックし、[アプリと機能] を選択します
・右側の関連する設定にある [プログラムと機能] を選択します
・[Windows の機能の有効化または無効化] を選択します
・[Hyper-V] を選択して、[OK] をクリックします
Hyper-Vマネージャーの設定
- ネットワークの設定を行うため、Hyper-Vマネージャーを「管理者として実行」して起動します。
- 「仮想スイッチマネージャー」を選択します。
- 「仮想スイッチ」の「WSL」を選択します。
- 「仮想スイッチのプロパティ」の「接続の種類」を「外部ネットワーク」にして適用を選択します。
以上の設定を行うことで、ネットワーク構成が、下の図のように変更されます。
物理NICが仮想NICに変更されます。
2022/05/28追記
適用ボタンを押した際に、下記のポップアップが表示される場合
下記のネットワークのプロパティ設定になっている可能性があるため、「Hyper-V拡張可能仮想スイッチ」のチェックを外して再度、Hyper-Vマネージャーの設定から再度設定してください。(※画像はチェックが入っていますが、上記ポップアップが表示された場合は外してください)
「ウインドウズ」アイコンを右クリックし、「ネットワーク接続」を選択する
「アダプターのオプションを変更する」を選択する
該当するイーサネットを右クリックし、「プロパティ」を選択する
「Hyper-V拡張可能仮想スイッチ」のチェックを外して「OK」を選択する
WSL2内のeth0のネットワークアドレスを設定
WSL2のターミナルにて下記のコマンドを入力することにより、下の図のようなネットワーク構成に変わり、WSL2のターミナルから外部ネットワークに接続されているUbuntuマシンにping疎通確認ができます。また、UbuntuマシンマシンからWSL2のeth0へのping疎通確認も可能となります。なお、Firewallの設定は不要です。
sudo ifconfig eth0 192.168.11.20
ip -4 a show eth0
4: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc mq state UP group default qlen 1000
inet 192.168.1.20/24 brd 192.168.1.255 scope global eth0
valid_lft forever preferred_lft forever
ROS環境設定
WSL2が外部ネットワークと接続できるようになったため、ここでは、ROS1/2における環境設定の手順について記述します。なお、例として、ネットワーク構成は下図を元にしています。
※vEthernet(WSL)については、Windows起動毎に異なるアドレスが割り振られるため、毎回環境設定が必要となる。
ROS1環境設定
ROS1の開発環境において記述する。roscoreをUbuntuマシンで動かす前提で記載していますが、WLS2側でroscoreを動かすことも可能です。
まずはWSL2のターミナルで、下記のコマンドにて環境変数の設定をします。
export DISPLAY=192.168.11.18:0.0
export ROS_MASTER_URI=http://192.168.11.10:11311
export ROS_IP=192.168.11.20
Ubuntuマシンは、下記の環境変数の設定をします。
export ROS_MASTER_URI=http://192.168.11.10:11311
export ROS_IP=192.168.11.10
あとは、通常の使用方法(rosrunやroslaunch)でノードを起動すると、相互でTopicのやり取りができます。
また、rqtのTopic MonitorでTopicの内容がWindows(wsl2)とLinux双方でやりとりできていることが確認できると思います。
ROS2環境設定
ROS2(Galacticで確認)の開発環境において記述します。
X Window Systemの設定のみWSL2のターミナルで必要となります。
export DISPLAY=192.168.11.18:0.0
あとは、通常の使用方法(ros2 runやroslaunch)でノードを起動すると、相互でTopicのやり取りができます。