Windows10のWSL2にROS2をインストールする

![SS 192.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/565043/a41cd967-f549-8677-1efa-2e99bf69518d.png) さいごに悶絶が待っている。

#やること
**Windows10**の**WSL2**に**ubuntu20.04**を入れ、その上に**ROS2(foxy)**をインストールします。
さらにXserverを入れることでRVIZ2やgazeboも動くようにします。
すでに他のサイトで方法が丁寧に紹介されていますが、2021年9月現在の近道としてメモに残します。自分も成功できた方法が掲載されているサイトを閲覧すべき順に紹介します。

#Dockerを使う場合
Dockerを使う場合は@Tiryohさんの記事が大変参考になります。手元でも動作確認ができました。すごい。

https://qiita.com/Tiryoh/items/ed7eecfac2ca9c7bf09d

#Dockerを使わない場合
今回はあえてDockerを使わず、Windows10がまっさらな状態からインストールする方法を試してみました。
**WSLを入れる → GUIを使えるようにする → ROS2を入れる → ROS2アプリを入れる**
といった手順で進めていきます。

#必要なもの
- windows10のPC(今回の例では64bit版)

####（自分用メモ）
<details><summary>自分用のメモですすみません。Mac用キーボードの設定です。</summary><div>
#### ▼ キーボードのコマンドキーを使えるようにする
https://www.secret-base.org/entry/Apple-keyboard-Windows10#AutoHotkey%E3%81%8C%E6%B1%BA%E5%AE%9A%E7%89%88

[らいちのヒミツ基地](https://www.secret-base.org/)さんのサイトを参考にそのまま実行します。

#### ▼ コマンドキー＋スペースでIMEの切り替えができるようにする

IMEの設定から「キーの割り当て」の各キーに好みの機能を与えるをオン。設定はデフォルトでOK。ほとんどMacと同じ操作感になります。
Mac用キーボードのテンキーが効かない場合は、再起動することでテンキーも使えるようになるようです。

（なぜここにこの内容を載せているかというと、USB使いたさにカーネルをいぢって失敗しWINDOWSの再インストールをしたりするからです。）

</div></details>


# STEP1 :WSL2を導入する

https://astherier.com/blog/2020/07/install-wsl2-on-windows-10-may-2020/

[AsTechLog](https://astherier.com/blog/)さんの上記サイトを参考に以下の項目を実施します。

- 「システム要件の確認」
- 「WSL2をインストールする」
- 「Linuxディストリビューションのインストール」

#####ポイント：
- Ubuntu 20.04 LTSをインストールしました。
- カーネルのアップデートが必要なれどリンク先で該当の「wsl_update_x64.msi」が見つからないという場合は、以下の直リンクでDLできるかもしれません。
https://wslstorestorage.blob.core.windows.net/wslblob/wsl_update_x64.msi

- ubuntuを起動できたら、ubuntuのウィンドウのメニューバーを右クリックしてオプションを開き、「Ctrl+Shift+C/Vをコピー/貼り付けとして使用する」にチェックを入れておくと便利です。


# STEP2 :Xserverを導入する

https://astherier.com/blog/2020/08/run-gui-apps-on-wsl2/

そのままではGUIに対応していないので、使えるようにします。
同じく[AsTechLog](https://astherier.com/blog/)さんの上記サイトを参考に以下の項目を実施します。

- 「Windows側にXサーバーをインストール」
- 「Ubuntu側にGUIアプリをインストール」
- 「GUIアプリの起動を試してみる」

#####ポイント：
ここまでできたらxeyesの表示ができることを確認します。
いったんPCを再起動し、改めてubuntuからxeyesが実行できるかを確認します。


# STEP3 :ROS2を導入する

https://demura.net/education/lecture/20536.html

いよいよROS2を導入します。[demura.net](https://demura.net/)さんの上記サイトを参考に以下の項目を実施します。

- 「準　備」
- 「ROS2 のインストール」
- 「環境設定」
- 「アプリのインストール」
- 「テスト」


#####ポイント：
- テストの時、「source /opt/ros/foxy/setup.bash」を入力しなくてもROS2は動いているようです。環境設定のところで「~/.bashrc」を登録したのが効いているのでしょう。


# STEP4 :RVIZ2を導入する

https://index.ros.org/r/rviz/

上記公式サイトを参考に以下の項目を実施します。
・「Build」

```
$rviz2
```

とすると起動のテストができます。

# STEP5 :python3.8のインストール

https://qiita.com/syu-kwsk/items/5ba485edabd19fb99d4d

@syu-kwsk さんの記事を参考に以下の項目を実施します。

- update.shを実行
- python3.8をinstall

#####ポイント：

- ここで```python3 --version```を実行し、3.8が確認できればOKです。（pythonを初めて入れる場合。複数ある場合は「デフォルトを変更する」を試す）

- pipが遅くなる場合は[こちらの記事](https://astherier.com/blog/2020/08/install-pip3-on-wsl2/)に改善のヒントが ありそうです

# STEP6 :gazeboのインストール

http://gazebosim.org/tutorials?tut=ros2_installing

上記公式サイトを参考に以下の項目を実施します。

- 「Install from debian packages (on Ubuntu)」
→$ sudo apt install ros-foxy-gazebo-ros-pkgs　のみ実行

- Testing Gazebo and ROS 2 integration
→4番はたぶん飛ばして大丈夫。
→7番はgeditがなければnanoやvimを使うが、内容の確認なので飛ばしても大丈夫。

#####ポイント：

これでgazeboのデモをテストできます。
publishingの命令で模型がノコノコと動き出すはずです。


# WSL＋ROS2のいかんともしがたいところ
なんと**WSL2はUSBデバイスに対応しておらず**、たとえばUSBカメラなどはそのままでは使えません。カーネルを調整する方法もあるようですが手元では失敗しました。。。
一方**WSL1は**USBデバイスには対応しているようですが、**GUIに対応していない**という課題があります。
Windows10に直接ROS2を入れる方法もありますが、**Linuxのコマンドが使えない**ため、ubuntu用のアプリを導入するところからしていまいちわかりません。

**３種類も導入方法があるのに**、どれも一長一短で惜しい感じです。
WSL2のバージョンアップに期待してます。


# ニュース : USB導入の成功事例（2021.1014追記）

https://zenn.dev/pinto0309/articles/0723ae46501beb

USBカメラ導入の成功事例が共有されていました。すごい。（まだ試していません）


# おまけ

ちなみにwindowsにWSLを経由せずROS2を導入する方法については、以下にメモを残しておきました。

https://qiita.com/Ninagawa_Izumi/items/b593af8857995c228cde