Unity + Oculus Quest2 + ROS2 + 箱庭でロボットを動かす(1/3)

# 概要
TOPPERS/箱庭では，ROS2 で Unity ロボット制御できるようにしていましたが，これが VR 空間上で体験・操作できるようになりました！

ちなみに，こんな感じのことができます！！

https://twitter.com/kanetugu2020/status/1491954460389969920

この体験をいろんな方と共有したく，これから 3 回に分けてインストール手順を説明していきたいと思います．

以下，記事の構成です．

* 1 回目：TOPPERS/箱庭に Oculus でダイブできるにようになる(本記事)
* 2 回目：[VR 空間で移動してモノをつかめるようになる](https://qiita.com/kanetugu2018/items/0d57cf85f334cac39419)
* 3 回目：[タッチセンサを追加して，VR 空間のロボットを動かせるようになる](https://qiita.com/kanetugu2018/items/9dfbd2cff1ebbc27ba37)

なお，今回のトライでは，こちらの記事に助けられました（感謝，感謝）

https://framesynthesis.jp/tech/unity/oculusquest/

# 環境構成
将来的にクロスプラットフォーム対応していく予定ですが，今回の構成は以下の通りです(インストールされていることを前提で話を進めます)．

## PC 側
* OS：Windows 10 home(proでもよいが，11 は不明)
* WSL2：Ubuntu 20.04.3 LTS
* Unity：2021.2.1f1
* Unity Hub：3.0.1

## Oculus 側

* ハード：Oculus Quest2
* リンクケーブル：[oculus quest 2用 ケーブル](https://www.amazon.co.jp/dp/B08NJ2KX52)

# 手順サマリ

1. PC に Oculus Link をインストールする
* TOPPERS/箱庭をインストールする
* TOPPERS/箱庭の Unity プロジェクトを起動する
* Oculus Integarion をインポートする
* XR Plug-in Management を有効化する
* 箱庭にダイブするためのキャラクタを配置する
* レッツ ダイブ！

# PC に Oculus Link をインストーする

Oculus Link のインストール方法はこちらをご参照ください

https://support.oculus.com/articles/headsets-and-accessories/oculus-link/connect-link-with-quest-2/?locale=ja_JP


# TOPPERS/箱庭をインストールする

まず，WSL2/Ubuntu20.0.4 を起動し，以下のプロジェクトを作成します(Cドライブ直下にプロジェクトを作成)．

```
$ mkdir /mnt/c/project
$ cd /mnt/c/project
```

次に，TOPPERS/箱庭リポジトリをクローンします．

```
$ git clone --recursive https://github.com/toppers/hakoniwa-ros-samples.git
$ git checkout vr-robo-parts
```

こちらから，`Plugin.tar.gz` をダウンロードします．

https://github.com/toppers/hakoniwa-ros-samples/releases/tag/v1.3.0

ダウンロードしたファイルを，`/mnt/c/project/ros2/unity/robo-parts/Assets/`以配下に配置して展開します．

```
$ cd /mnt/c/project/ros2/unity/robo-parts/Assets/
$ tar xzvf Plugin.tar.gz
```

成功すると，必要なプラグインが展開されます．

```bash
$ ls ros2/unity/robo-parts/Assets/Plugin
Google.Protobuf       Grpc.Core.Api.meta  System.Buffers       System.Runtime.CompilerServices.Unsafe
Google.Protobuf.meta  Grpc.Core.meta      System.Buffers.meta  System.Runtime.CompilerServices.Unsafe.meta
Grpc.Core             Hakoniwa.dll        System.Memory
Grpc.Core.Api         Hakoniwa.dll.meta   System.Memory.meta
```

# TOPPERS/箱庭の Unity プロジェクトを起動する

Unity Hub を起動して，「開く」をクリック

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/244147/0a7f67ab-d33e-9fd8-3731-808d3f1192c9.png)

エクスプローラ上で，先ほどインストールしたTOPPERS/箱庭のUnityプロジェクトのルートフォルダを指定します．今回の場合はこちらです．

```
C:\project\hakoniwa-ros-samples\ros2\unity\robo-parts
```

Unityが起動したら，プロジェクトビューから「Scenes」を選択して，`Toppers_Course`というシーンをダブルクリック．

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/244147/60d4a0cc-6026-0060-f66d-ec2aa17abae5.png)

成功するとこんな風景が見えます．

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/244147/d8697da2-1f57-61c4-1b9f-f302eccbb547.png)


# Oculus Integarion をインポートする
ここから Oculus の Unity 設定になります．

まずは，`Oculus Integration` を以下からインストールしましょう．

https://assetstore.unity.com/packages/tools/integration/oculus-integration-82022

上記からインストールを始めるとUnity側で以下のような画面が表示されますので，`Import`をクリック．途中，色々聞かれますが，基本的にはアップグレードしていく方向で選択します．以下，細かな選択画面で悩みそうなところだけ，ピンポイントに選択箇所を示していきます．


![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/244147/f6113b61-25f6-a4ae-9f81-65ce360f6e25.png)

`OpenXR Backend`は，`Use OpenXR`を選択．


![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/244147/ed393c42-ccd5-569d-faab-0c1690be3c66.png)

迷わず，`Restart`を選択．

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/244147/1531b5f8-d2d4-b328-49dd-7125f18eb968.png)

インストール成功すると，プロジェクトビューのAssets配下にOculusができています．

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/244147/ba30a36a-ad42-1cc1-4b91-14e4f5088dce.png)

# XR Plug-in Management を有効化する

ここから，Unityプロジェクトの設定に移ります．

Unityメニューの [Edit] -> [Project Setttings...] をクリック．
画面左の`XR Plug-in Management`をクリックし，`Install XR Plugin Management` をクリック．

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/244147/6affbcf7-4191-9b1f-fa98-d05b5dbfa65e.png)

インストール完了後，以下の`Oculus` をチェックしましょう．

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/244147/afdaa26e-65f2-5f53-8a20-5ea5f7c1f403.png)


# 箱庭にダイブするためのキャラクタを配置する
ここまでくれば，あとは Oculus から Unity にダイブするためのキャラクタを配置するだけです．

以下の要領で，キャラクタを配置してください．

![demo99.gif](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/244147/5ebdb4af-4c5a-6522-5b63-567ac8034d4d.gif)

# レッツ ダイブ！
以上で，設定終了です．

では，ダイブしましょう．

まずは，Oculus　と　PC　をリンクケーブルで接続して，Oculusを装着してください．

うまく行くと，以下のようなバーが出てきますので`デスクトップ`をクリック．

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/244147/3a180285-baef-ded1-b844-0c8a530452f5.png)

そうすると，パソコン側のデスクトップ画面がこんな感じで表示されます．

![OculusScreenshot1644571672.jpeg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/244147/b21992f8-0713-1a5c-76c9-97fd70d48100.jpeg)

あとは，いつものように，Unityのシミュレーション開始ボタンをクリックすると，以下のように VR 空間にダイブし，ロボットが見えます！

![OculusScreenshot1644571696.jpeg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/244147/bdd3af4a-a7c6-06ab-53ee-b715984427e8.jpeg)

実際に自分がダイブした風景はこんな感じです．

https://twitter.com/kanetugu2020/status/1492073682940080130


[次回](https://qiita.com/kanetugu2018/items/0d57cf85f334cac39419)は，ここに右手と左手を追加して，モノをつかめるようにします！乞うご期待ください！！

# お知らせ：箱庭もくもく会

TOPPERS箱庭WGでは，もくもく会を不定期に開催しています．
本記事の内容を実際に試してみたい方や試してみたけど詰まっている方は，ぜひご参加ください．画面共有しながら参加者同士でサポートしたり，一緒に新しい機能を実装したりと”もくもく”しましょう．

https://hakoniwa.connpass.com/