LoginSignup
4
3

More than 1 year has passed since last update.

Windows10 Pro(21H1)上のWSL2(Ubuntu18.04 ROS Melodic)とUbuntu18.04(ROS Melodic)でネットワーク接続し、共通のroscoreを使用する方法

Last updated at Posted at 2022-05-11

はじめに

Windows10 Pro(21H1)で使用しているWSL2を用いたUbuntu環境のネットワーク構成では、外部ネットワークに接続されているUbuntuと接続できない。
出来たとしても、片側のメッセージのみ可能などとの記事もあった。
WSL2で使用する仮想ネットワークと外部ネットワーク接続をするために以下の環境で確認を行った内容を記述します。

環境

  • エディション:Windows 10 Pro
  • バージョン:21H1
  • OSビルド:19043.1645

概要

Windows10の内部で仮想ネットワークに接続されているWSL2と外部ネットワークに接続されているUbuntuを接続させます。
双方向でのTopicの送受信をさせます。
そのため、下記の図の順でネットワークの構成を変更させます。

以下、コマンドで設定している内容は下記の図のIPアドレスを参考にしています。
各自のIPアドレス環境に置き換えて、設定を行ってください。

ネットワーク構成、変更図

変更前
:arrow_down: :arrow_down: :arrow_down: 変更後1 :arrow_down: :arrow_down: :arrow_down:
スライド19.JPG
:arrow_down: :arrow_down: :arrow_down: 変更後2(最終型) :arrow_down: :arrow_down: :arrow_down:
スライド20.JPG

Hyper-Vを有効にする

・Windows ボタンを右クリックし、[アプリと機能] を選択します
・右側の関連する設定にある [プログラムと機能] を選択します
・[Windows の機能の有効化または無効化] を選択します
・[Hyper-V] を選択して、[OK] をクリックします
enable_role_upd.png

Hyper-Vマネージャーの設定

  1. ネットワークの設定を行うため、Hyper-Vマネージャーを「管理者として実行」して起動します。
    スライド6.JPG
  2. 「仮想スイッチマネージャー」を選択します。
    スライド7.JPG
  3. 「仮想スイッチ」の「WSL」を選択します。
    スライド8.JPG
  4. 「仮想スイッチのプロパティ」の「接続の種類」を「外部ネットワーク」にして適用を選択します。
    スライド9.JPG
    以上の設定を行うことで、ネットワーク構成が、下の図のように変更されます。
    物理NICが仮想NICに変更されます。
    スライド19.JPG

2022/05/28追記
適用ボタンを押した際に、下記のポップアップが表示される場合は、Hyper-Vマネージャーを「管理者として実行」していないので、Hyper-Vマネージャーの設定から再度設定してください。
スライド10 - コピー.JPG

2022/05/28追記
適用ボタンを押した際に、下記のポップアップが表示される場合
スライド10.JPG
下記のネットワークのプロパティ設定になっている可能性があるため、「Hyper-V拡張可能仮想スイッチ」のチェックを外して再度、Hyper-Vマネージャーの設定から再度設定してください。(※画像はチェックが入っていますが、上記ポップアップが表示された場合は外してください)
スライド15.JPG
「ウインドウズ」アイコンを右クリックし、「ネットワーク接続」を選択する
スライド13.JPG
「アダプターのオプションを変更する」を選択する
スライド14.JPG
該当するイーサネットを右クリックし、「プロパティ」を選択する
スライド15.JPG
「Hyper-V拡張可能仮想スイッチ」のチェックを外して「OK」を選択する

WSL2内のeth0のネットワークアドレスを設定

WSL2のターミナルにて下記のコマンドを入力することにより、下の図のようなネットワーク構成に変わり、WSL2のターミナルから外部ネットワークに接続されているUbuntuマシンにping疎通確認ができます。また、UbuntuマシンマシンからWSL2のeth0へのping疎通確認も可能となります。なお、Firewallの設定は不要です。

wsl2
sudo ifconfig eth0 192.168.11.20
ip -4 a show eth0
wsl2出力結果
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

スライド20.JPG

ROS環境設定

WSL2が外部ネットワークと接続できるようになったため、ここでは、ROS1/2における環境設定の手順について記述します。なお、例として、ネットワーク構成は下図を元にしています。
※vEthernet(WSL)については、Windows起動毎に異なるアドレスが割り振られるため、毎回環境設定が必要となる。
スライド20.JPG

ROS1環境設定

ROS1の開発環境において記述する。roscoreをUbuntuマシンで動かす前提で記載していますが、WLS2側でroscoreを動かすことも可能です。
まずはWSL2のターミナルで、下記のコマンドにて環境変数の設定をします。

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マシンは、下記の環境変数の設定をします。

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のターミナルで必要となります。

wsl2
export DISPLAY=192.168.11.18:0.0

あとは、通常の使用方法(ros2 runやroslaunch)でノードを起動すると、相互でTopicのやり取りができます。

4
3
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
4
3