Windows11/WSL(Ubuntu20.04) - ROS2 Foxy VSCode Raspberry pi Pico micro-ROS Arduino言語

# 1. WSL Ubuntu 20.04.6 LTSをインストール

Microsoft StoreからUbuntu 20.04.6 LTSを検索しインストールする。詳細は以下の通り。

https://www.kkaneko.jp/tools/wsl/wsl2.html


# 2. Visual Studio Code + Remote WSL をインストール

https://zenn.dev/s_ryuuki/articles/4b9631674adea4

# 3. ROS2 Foxyのインストール
1. Visual Studio CodeからUbuntu20.04に接続
2. スタートメニューのClone Git Repositoryから```https://github.com/TriOrb-Inc/pio_microros_base.git```をクローン
3. VSCode上部のTerminalからターミナルを起動し、https://docs.ros.org/en/foxy/Installation/Ubuntu-Install-Debians.html の手順に従いROSをインストール
4. Python3をデフォルトにしておく：```sudo update-alternatives --install /usr/bin/python python /usr/bin/python3.8 0```

# 4. Raspberry pi Pico向けにmicro-ROS(Arduino言語)をビルド
1. venvをインストール：```sudo apt install python3-venv```
2. VSCodeのExtensionsからPlatformIO IDEを検索しインストール
    - インストールが完了後Reloadを促される
3. ビルド
    a. VSCode左側の蟻っぽいマークをクリック
    b. PlatformIOのProject TasksにBuildなどのメニューが出てくるまでしばらく待つ
    c. Buildが通ればOK
4. Windows PCにPicoを接続する
    ※既に何らかのソフトが書き込まれている場合はBOOTSELを押しながら接続
5. ファイルエクスプローラーから```\\wsl.localhost\Ubuntu-20.04\home\<Ubuntu User Name>\pio_microros_base\.pio\build\pico```を開き「firmware.uf2」をPicoへドラッグアンドドロップで書き込む
6. PicoのLEDが1秒周期で点滅するのが確認できればOK

# 5. WSLからPico（USB Serial）を認識できるようにする

https://learn.microsoft.com/ja-jp/windows/wsl/connect-usb
- 途中再起動が必要
- attachする際のコマンドは下記のような感じ：
```PS
usbipd wsl attach -d "Ubuntu-20.04" --busid 2-4
```

# 6. ROSトピックの受け取り
1. Ubuntu 20.04 on WLSのターミナルに戻る
2. 下記コマンドでDockerをインストールする
    ```bash
    sudo apt update
    sudo apt install -y ca-certificates curl gnupg lsb-release
    sudo mkdir -p /etc/apt/keyrings
    curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo gpg --dearmor -o /etc/apt/keyrings/docker.gpg
    echo "deb [arch=$(dpkg --print-architecture) signed-by=/etc/apt/keyrings/docker.gpg] https://download.docker.com/linux/ubuntu $(lsb_release -cs) stable" | sudo tee /etc/apt/sources.list.d/docker.list
    sudo apt update
    sudo apt install -y docker-ce docker-compose-plugin
    sudo service docker start
    sudo gpasswd -a $USER docker
    su $USER # Ubuntu user password required
    ```
3. Ubuntu上でPicoが認識できているかを確認する：```lsusb```で```Arduino RaspberryPi Pico```があればOK
4. Picoのdevice pathを確認する：```/dev/ttyACM0```もしくは```/dev/ttyUSB0```のどちらか存在する方がPico
5. ```docker run -it --rm -d --name micro-ros-agent -v /dev:/dev --privileged --net=host triorb/micro-ros-agent:galactic serial --dev /dev/ttyACM0 --baud 115200```でmicroROS-agentを起動する。```/dev/ttyACM0```の箇所は適宜変更する。
    ※バックグラウンドでAgentが起動した状態になる。**停止するときは```docker stop micro-ros-agent```**
6. ノードが認識され、トピックが届いているか確認：
    ```shell
    source /opt/ros/foxy/setup.bash
    ros2 node list && ros2 topic list
    ```
    以下のような表示になればOK
    ```
    <username>@<hostname>:~/pio_microros_base$ ros2 node list && ros2 topic list
    /pio_uros_base_node
    /cmd_topic
    /parameter_events
    /rosout
    /test1
    /test2
    ```

# 以上。あとは良しなにPicoのソフトを作る。

# 参考サイト
https://ar-ray.hatenablog.com/entry/2022/04/07/121653
https://qiita.com/ousagi_sama/items/b4eb3d9c6b337cbe1b05



# 以下、備忘録
WSLではなくWindowsでもcolcon buildが通るように格闘しましたが、時間切れにより断念。

## ROS2 Foxyのインストール

なお、大前提としてパッケージ管理ソフトChocolateyを入れる必要がある。ビジネス利用は有償だがライセンス費用は安い。
### Chocolateyインストール（PowerShell管理者）
```PS
Set-ExecutionPolicy Bypass -Scope Process -Force; [System.Net.ServicePointManager]::SecurityProtocol = [System.Net.ServicePointManager]::SecurityProtocol -bor 3072; iex ((New-Object System.Net.WebClient).DownloadString('https://chocolatey.org/install.ps1'))
```
### 以降、Foxyの公式マニュアルに従う
https://docs.ros.org/en/foxy/Installation/Windows-Install-Binary.html#install-python
- DDS implementations (optional)は一旦スキップで試す（micro-ROSビルド時にエラーになるかも。その時はこの注釈を変更する）
- ```python -m pip install```でライブラリーをインストールする前にpythonのバージョンが3.8.3であることを確認すること：```python -V```
    - 公式手順に従った場合はPowerShell再起動で3.8.3が標準になる
- ```python -m pip install```でライブラリーをインストールする前にpip自体をupgradeしておくこと：```python -m pip install --upgrade pip```

## micro-ROSのビルドテスト（on Windows + VisualStudioCode + PlatformIO）
### メモ
* ```FileExistsError:```が出る場合はmicro_ros_platformioのbuildフォルダを削除する：```rd /s /q .pio\libdeps\pico\micro_ros_platformio\build```
* ```RuntimeError: VisualStudioVersion is not set, please run within a Visual Studio Command Prompt.```が出る場合は。。。**これが解決できなかった**