Windows11にROS2をインストールしてみた

# 1. はじめに
　「ROSやROS2を用いたロボット開発をする環境にはUbuntuが必須」とか「WSL2のUbuntuじゃなくて、普通にUbuntuの環境ないんじゃロボット開発は無理ですねえ」なんて言う言葉を先日約2名の方から言われました。まあ、そうでしょうね、、、言いたいことはわかります。。。
 　でもうちで用意できるPCはWindowsだけなんだよなあ。。Ubuntu入れるのは面倒な許可いるし、なんとかならないかなあとここ数日間思案に暮れていました。。
　しかしROS2はWindowsに対応しているということはROSの公式サイトにも言われていることです。それに[[1]](#参考記事やサイト)、[[2]](#参考記事やサイト)、[[3]](#参考記事やサイト)の記事でもWindowsの環境にてROS2環境を構築している事例もありますから、できないことではないでしょう。
　ただ、ROSの公式サイトでは「ROS2をWindowsにインストールする場合はWindows10のみをサポートしている」という記載があり、それに対して自分の環境はWindows11、、そして自分のレベルはROS/ROS2初心者。。そんな中で仮想環境も使わずにROS2の環境を構築できるのか？まずはやってみよう!!と試行したのが本記事の内容になります。

# 2. 実行環境
- CPU: CORE i7 7th Gen
- メモリ: 32GB
- GPU: GeForce RTX 2070
- OS: Window11 22H2

# 3.手順
手順は[[2]](#参考記事やサイト)の記事である[ROS学習用資料](https://tomson784.github.io/ros_practice/ROS2/install_windows.html)にほぼ沿って行いました。しかし私の環境に合わせて変えたところもありますので、どのような手順を踏んだか記載していきたいと思います。

# 3.1 chocolateyのインストール
[ROS学習用資料](https://tomson784.github.io/ros_practice/ROS2/install_windows.html)の記載の通り「管理者権限でwindows powershellを開き、以下を実行」しました。
```:管理者権限のwindows powershell
Set-ExecutionPolicy Bypass -Scope Process -Force; iex ((New-Object System.Net.WebClient).DownloadString('https://chocolatey.org/install.ps1'))
```
# 3.2 Pythonのインストール
[ROS学習用資料](https://tomson784.github.io/ros_practice/ROS2/install_windows.html)の記載の通り「Chocolateyを利用してPythonをインストール」しました。
```:管理者権限のwindows powershell
choco install -y python --version 3.8.3
```
また[ROS学習用資料](https://tomson784.github.io/ros_practice/ROS2/install_windows.html)の記載の通り「C:\python38にインストールされていることを確認」もします。

# 3.3 Visual C ++再配布パッケージのインストール
[ROS学習用資料](https://tomson784.github.io/ros_practice/ROS2/install_windows.html)の記載の通り「コマンドプロンプトで以下を入力してインストール」しました。私の方では管理者権限で開いたpowershellで以下を実行しました（特段理由はありません、本当にうっかりでやりました）。
```:管理者権限のwindows powershell
choco install -y vcredist2013 vcredist140
```

# 3.4 OpenSSLのインストール
## 3.4.1 インストーラーのダウンロード
[ROS学習用資料](https://tomson784.github.io/ros_practice/ROS2/install_windows.html)の記載の通り「以下のURLからWindows用のOpenSSLのインストーラーをダウンロードする。 サイト内でWin64 OpenSSL v1.1.1LのEXEを選択する。(2021年11月現在)」としたかったのですが、以下のサイトでWin64 OpenSSL v1.1.1Lがなかったため、***Win64 OpenSSL v1.1.1wのEXE***をダウンロードしました。そして[ROS学習用資料](https://tomson784.github.io/ros_practice/ROS2/install_windows.html)の記載と同じように「インストーラーをすべてのオプションをデフォルトで実行し、インストール」しました。

ダウンロード先のURL：[https://slproweb.com/products/Win32OpenSSL.html](https://slproweb.com/products/Win32OpenSSL.html)

## 3.4.2 環境変数の設定
[ROS学習用資料](https://tomson784.github.io/ros_practice/ROS2/install_windows.html)の記載では「コマンドプロンプトを開き以下を実行する。」とあったのですが、私の方では管理者権限で開いたpowershellで以下を実行しました（これも特段理由はありません）。
```:管理者権限のwindows powershell
setx -m OPENSSL_CONF "C:\Program Files\OpenSSL-Win64\bin\openssl.cfg"
```

## 3.4.3 OpenSSLをPATH環境変数に追加する
[ROS学習用資料](https://tomson784.github.io/ros_practice/ROS2/install_windows.html)の記載の通り、以下の手順で環境変数を追加しました。
- 1.設定を開き、｢環境変数｣で検索して｢環境変数を編集｣を選択する。
- 2.｢Path｣を選択し、編集をクリックする。
- 3.新規をクリックし、C:\Program Files\OpenSSL-Win64\bin\ を追加する。

# 3.5 Visual Studio 2019のインストール
[ROS学習用資料](https://tomson784.github.io/ros_practice/ROS2/install_windows.html)の記載の通り、「以下のURLからMicrosoftのアカウントにログイン後Visual Studio Community 2019 をダウンロード」しました。

[https://my.visualstudio.com/Downloads?q=visual%20studio%202019&wt.mc_id=o~msft~vscom~older-downloads](https://my.visualstudio.com/Downloads?q=visual%20studio%202019&wt.mc_id=o~msft~vscom~older-downloads)

また[ROS学習用資料](https://tomson784.github.io/ros_practice/ROS2/install_windows.html)の「インストールの詳細が表示されるため、｢C++によるデスクトップ開発｣を選択し、インストールする。」という記述のところも踏襲してインストールしました。

# 3.6 OpenCVのインストール
## 3.6.1 ダウンロード
[ROS学習用資料](https://tomson784.github.io/ros_practice/ROS2/install_windows.html)の記載の通り、「以下のURLからダウンロードして C:\opencv に解凍」しました。
[https://github.com/ros2/ros2/releases/download/opencv-archives/opencv-3.4.6-vc16.VS2019.zip ](https://github.com/ros2/ros2/releases/download/opencv-archives/opencv-3.4.6-vc16.VS2019.zip )

## 3.6.2 環境変数の設定
[ROS学習用資料](https://tomson784.github.io/ros_practice/ROS2/install_windows.html)の記載では「コマンドプロンプトを開き以下を実行する。」とあったのですが、私の方では管理者権限で開いたpowershellで以下を実行しました（これも特段理由はありません）。
```:管理者権限のwindows powershell
setx -m OpenCV_DIR C:\opencv
```
## 3.6.3 OpenSSLをPATH環境変数に追加する
[ROS学習用資料](https://tomson784.github.io/ros_practice/ROS2/install_windows.html)の記載の通り、以下の手順で環境変数を追加しました。
- 1.設定を開き、｢環境変数｣で検索して｢環境変数を編集｣を選択する。
- 2.｢Path｣を選択し、編集をクリックする。
- 3.新規をクリックし、C:\opencv\x64\vc16\bin を追加する。

# 3.7 依存関係のインストール
[ROS学習用資料](https://tomson784.github.io/ros_practice/ROS2/install_windows.html)の記載の通り、以下の手順で依存関係のインストールをしました。

- 1.　CMaKeのインストール
 [ROS学習用資料](https://tomson784.github.io/ros_practice/ROS2/install_windows.html)の記載の通り、以下のコマンドを実行し「CMaKeをインストールする。」します。
    ```:管理者権限のwindows powershell
    choco install -y cmake
    ```
<br> 

- 2.　環境変数の追加
[ROS学習用資料](https://tomson784.github.io/ros_practice/ROS2/install_windows.html)の記載の通り、「設定を開き、環境変数に以下のPATHを追加する。　C:\Program Files\CMake\bin」を実行します。
 手順は上記と同じですが、示します。
    - 設定を開き、｢環境変数｣で検索して｢環境変数を編集｣を選択する。
    - ｢Path｣を選択し、編集をクリックする。
    - 新規をクリックし、C:\Program Files\CMake\bin を追加する
    
<br> 

- 3.　ファイルのダウンロードと保存
[ROS学習用資料](https://tomson784.github.io/ros_practice/ROS2/install_windows.html)には「以下のURLから下記のファイルをダウンロードし、任意の箇所に置く。」とありますが、私はとりあえずCドライブ直下に適当な名前のファイルを作成しその中にダウンロードしたファイルをまとめて保存しました。
　　
  ダウンロード先のURL:[https://github.com/ros2/choco-packages/releases/tag/2020-02-24](https://github.com/ros2/choco-packages/releases/tag/2020-02-24)

  ダウンロードしたファイル
  　・asio.1.12.1.nupkg
　・bullet.2.89.0.nupkg
　・cunit.2.1.3.nupkg
　・eigen-3.3.4.nupkg
　・tinyxml-usestl.2.6.2.nupkg
　・tinyxml2.6.0.0.nupkg
　・log4cxx.0.10.0.nupkg 
    
<br> 

- 4.　[ROS学習用資料](https://tomson784.github.io/ros_practice/ROS2/install_windows.html)には「管理者権限でコマンドプロンプトを開き、Path to downloadsをファイルを置いたディレクトリ名に変更して実行する。」とありますが、私は管理者権限で開いたpowershell上で以下のコマンドを実行しました。（もちろん<PATH\TO\DOWNLOADS>の部分のディレクトリ名はファイル保存先に変更しています）
    ```:管理者権限のwindows powershell
    choco install -y -s <PATH\TO\DOWNLOADS> asio cunit eigen tinyxml-usestl tinyxml2 log4cxx bullet
    ```
    
<br> 

- 5.　必要パッケージのインストール
[ROS学習用資料](https://tomson784.github.io/ros_practice/ROS2/install_windows.html)の記載の通り、以下のコマンドを実行しました。
    ```:管理者権限のwindows powershell
    python -m pip install -U catkin_pkg cryptography empy ifcfg lark-parser lxml netifaces numpy opencv-python pyparsing pyyaml setuptools rosdistro
    python -m pip install -U pydot PyQt5
    choco install graphviz
    ```
    
<br> 

- 6.　環境変数の追加
[ROS学習用資料](https://tomson784.github.io/ros_practice/ROS2/install_windows.html)の記載の通り、「設定を開き、環境変数に以下のPATHを追加する。　C:\Program Files (x86)\GraphvizX.XX\bin」を実行します。
 手順は上記と同じですが、示します。
    - 設定を開き、｢環境変数｣で検索して｢環境変数を編集｣を選択する。
    - ｢Path｣を選択し、編集をクリックする。
    - 新規をクリックし、C:\Program Files (x86)\GraphvizX.XX\bin を追加する。

# 3.8 ROS2のインストール
## 3.8.1 ダウンロード
[ROS学習用資料](https://tomson784.github.io/ros_practice/ROS2/install_windows.html)の記載では「1.以下のURLからWindows用の最新パッケージをダウンロードする。(2021年11月現在はros2-foxy-20211013-windows-release-amd64.zip)」となっていましたが、私はros2-humble-20231122-windows-release-amd64.zipをダウンロードしました。

  ダウンロード先のURL:[https://github.com/ros2/ros2/releases](https://github.com/ros2/ros2/releases)

## 3.8.2 ファイルの解凍
[ROS学習用資料](https://tomson784.github.io/ros_practice/ROS2/install_windows.html)の記載の通り、「C:\dev\ros2に解凍」しました。

## 3.8.3 環境変数の設定
[ROS学習用資料](https://tomson784.github.io/ros_practice/ROS2/install_windows.html)の記載では「ros2_windowsという名前のファイルの中にlocal_setup.batが入っているため、ファイルを外に取り出すor下記のパスに\ros2-windowsを追加する作業が必要。」として以下のコマンドを実行すると記載されています。
```
call C:\dev\ros2\local_setup.bat
```
この部分について、私は以下のコマンドを実行しました
```:管理者権限のwindows powershell
call C:\dev\ros2\ros2-windows\local_setup.bat
```
これを実行したところ以下の警告は出ましたが、次のステップに進むには特に問題ありませんでした。
"[rti_connext_dds_cmake_module][warning] RTI Connext DDS environment script not found (\resource\scripts\rtisetenv_x64Win64VS2017.bat). RTI Connext DDS will not be available at runtime, unless you already configured PATH manually."

## 3.8.4 動作確認
[ROS学習用資料](https://tomson784.github.io/ros_practice/ROS2/install_windows.html)の記載の通り、「コマンドプロンプトを開いて以下を実行」をしてみたところ、
```
call C:\dev\ros2\local_setup.bat
ros2 run demo_nodes_cpp talker
```
ModuleNotFoundError: No module named 'packaging'というエラーが出ましたが、[[4]](#参考記事やサイト)の記事を参考にpowershellのコマンドを実行したら、エラーは出なくなりました。
```:管理者権限のwindows powershell
pip install packaging
```

これが解消したら再度、[ROS学習用資料](https://tomson784.github.io/ros_practice/ROS2/install_windows.html)の記載の通り、以下のコマンドを別々のターミナルで実行します。
```:ターミナル(1) talker
call C:\dev\ros2\local_setup.bat
ros2 run demo_nodes_cpp talker
```
```:ターミナル(2) listener
call C:\dev\ros2\local_setup.bat
ros2 run demo_nodes_py listener
```

そして実行した結果が以下になります。
左の画面でtalkerが出したメッセージを、右の画面のlistenerが受信している様子が確認できました。
![taker_lister.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3581920/db3a7cdd-302f-5a95-e694-62dcd7f2da76.png)

# まとめ
上記の手順にてWindows11 22H2の環境下においてROS2をインストールできたと考えられます。今後はここで構築した環境でロボットシミュレーションができるかなどの検証をやっていきたいと思います。

👆
この記事で構築した環境においてシミュレーション上のロボットを動かした件を[Windows11環境下においてIsaac Sim+ROS2を試してみる　ロボット回転編](https://qiita.com/bebebefu/items/cae6f99e1bbec35c5405)にてまとめました。

# 参考サイト
[1][Windows上でUnityとROS2を連携させる (1) ~環境構築編~](https://qiita.com/sfc_nakanishi_lab/items/40ab94a2f19f375f42db)
[2][ROS学習用資料](https://tomson784.github.io/ros_practice/ROS2/install_windows.html)
[3][ROS2.0をWindows10にインストールする](https://qiita.com/matryorobotics/items/beab21d4cf3199b1f6ff)
[4][【Selenium】急にModuleNotFoundError: No module named 'packaging'が起きた](https://qiita.com/syoshika_/items/5577b5f57ad78ddc0792)