wsl2上のROS2で外部pcと通信する方法

# 初めに
今回は、wsl2上にubuntu22.04とROS2を導入し、外部のpcをトピック通信を行う。

# 条件
* 外部pc側にはROS2を導入済み
* 外部pcのIPアドレスは固定済み

# wsl2にubuntuを導入する。
* windows PowerShellを管理者として実行
* 以下のコードを打ち込み、インストール開始
```
wsl --install
```
* インストール後、ubuntuのユーザー名と新しいパスワードを打ち込んで終了。再起動する。

# wsl2にROS2を導入する
* localeの設定
```
locale  # check for UTF-8

sudo apt update && sudo apt install locales
sudo locale-gen en_US en_US.UTF-8
sudo update-locale LC_ALL=en_US.UTF-8 LANG=en_US.UTF-8
export LANG=en_US.UTF-8

locale  # verify settings
```
* sourceのセットアップ
```
sudo apt install software-properties-common
sudo add-apt-repository universe
sudo apt update && sudo apt install curl -y

sudo curl -sSL https://raw.githubusercontent.com/ros/rosdistro/master/ros.key -o /usr/share/keyrings/ros-archive-keyring.gpg

echo "deb [arch=$(dpkg --print-architecture) signed-by=/usr/share/keyrings/ros-archive-keyring.gpg] http://packages.ros.org/ros2/ubuntu $(. /etc/os-release && echo $UBUNTU_CODENAME) main" | sudo tee /etc/apt/sources.list.d/ros2.list > /dev/null
```
* ros2のインストール

```
sudo apt update
sudo apt upgrade
sudo apt install ros-humble-desktop
```
* 環境変数のセットアップ

```
echo "source /opt/ros/humble/setup.bash" >> ~/.bashrc
source .bashrc
```

# wsl2のmirrormodeの設定
* cmdを開いて、以下のコマンドでwslを更新します。
```
wsl --update
wsl --update --pre-release
```
* c:/User/<ユーザー名>の中の.wslconfigに(なければ作ってください)以下のように書き換えてネットワークをミラーモードに変更する。

```
[wsl2]
networkingMode=mirrored
dnsTunneling=true
firewall=true
autoProxy=true
```
* ファイルを保存したらwsl2を再起動。
```
wsl --shutdown
```

# ファイアウォールに規則を追加
* ファイアウォールの影響で外部pcをトピック通信できないので設定を変更する。
* コントロールパネル＞システムとセキュリティ＞Windows Defender　ファイアウォール＞詳細設定 を開く。
![スクリーンショット 2024-08-22 165717.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3531353/2661f1de-ac36-0f1e-b411-ad10132aeb4d.png)

* 左上にある受信の設定を選択、新しい規則を選択
![スクリーンショット 2024-08-22 170016.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3531353/db278cdb-e3cd-7d01-4ee0-687ae939b90d.png)
* カスタムを選択して次に進む
![スクリーンショット 2024-08-22 170249.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3531353/fd687388-e02f-a1d2-9782-d0420153b856.png)
* すべてのプログラムを選択して次に進む
![スクリーンショット 2024-08-22 170305.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3531353/67e23442-54e9-a559-e545-b9f8bfb5bab2.png)

* 通信プロトコルをUDPに変更して次へ進む
![スクリーンショット 2024-08-22 170329.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3531353/0943928f-bdab-b10d-086d-8df1be8c75eb.png)
* どちらの項目も「これらのIPアドレス」に変更し、「追加」のボタンからwsl2のIPアドレスと外部pcのIPアドレスを各々入力する
![スクリーンショット 2024-08-22 .png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3531353/9e175a27-3ce1-5ae6-e5a9-8672339fa941.png)
* 「接続を許可する」を選択して次に進む。
![スクリーンショット 2024-08-22 170359.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3531353/7d134d81-57e7-8009-a9c1-8bfd70472381.png)
* プロファイルはデフォルトのままでよい
![スクリーンショット 2024-08-22 170413.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3531353/403f22ee-64ec-87d8-e4d0-e51a1d716ab6.png)
* 最後に適当に名前を付けておしまい
![スクリーンショット 2024-08-22 170442.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3531353/ca7e20f3-50ba-6936-dba7-5539fa2e2830.png)

# 参考文献
* https://qiita.com/akinami/items/2200d2c49a43a183f14d
* https://learn.microsoft.com/ja-jp/windows/wsl/networking