[[Tutorial using ROS for ver.3]]

#contents

* 概要 [#me21a0b1]

人間とロボットが同じ仮想空間にログインし、人間がロボットに対して指差しでCleanup指示を出します。

人間側は、Windows+VRデバイスを使用して仮想空間にログインします。~
ロボット側は、Windows+Ubuntu(ROS:Robot Operating System)を使用して仮想空間にログインします。

遠隔地の人間とロボット(ROS)がインターネット経由で繋がれ、同じ仮想空間でコミュニケーションを取ることが出来ます。

#ref(CleanupUsingCloudAndVR_Overview.png)




* 前提条件 [#Prerequisites]

** 共通の前提条件 [#ofa841b3]

人間とロボットの共通の前提条件としてネットワークを使用します。

クラウドには[[Photon Unity Networking>https://www.photonengine.com/en-US/PUN]]を使用しますが、インターネット接続時に以下のページに記載されているポート番号を使用します。~
ポートが使用可能かどうかを事前に確認してください。~
https://doc.photonengine.com/en-us/realtime/current/connection-and-authentication/tcp-and-udp-port-numbers

クラウドの代わりに、ローカルネットワークにPhoton Serverを立てて使用することも可能です。~
Photon ServerはWindowsにのみ対応しています。~
https://doc.photonengine.com/en-us/server/current/operations/requirements

※ウイルス対策ソフトが通信を遮ぎらないように注意してください。


** 人間(VR)側の前提条件 [#s38cc158]

*** Windows環境 [#t7291fa4]
[[SIGVerseアセットを使用するための基本的な要件>Tutorial for ver.3#SystemRequirements]]が必要です。

*** VRデバイス [#i335da85]
VRデバイスが動くシステム要件を満たす必要があります。 ~
''Oculus Quest 2'' 及び ''VIVE Cosmos'' にて動作確認済みです。 ~
これら以外のVRデバイスの場合は、SteamVRバインディングを行う必要があるかもしれません。 ~
https://valvesoftware.github.io/steamvr_unity_plugin/tutorials/SteamVR-Input.html#binding-actions

また[[Steam>https://store.steampowered.com/about/]]と[[SteamVR>https://store.steampowered.com/app/250820/SteamVR/]]をPCにインストールする必要があります。 ~
公式サイトからインストーラをダウンロードしてインストールしてください。

Oculusの場合は[[Oculusソフトウェア>https://www.oculus.com/setup/]]もインストールする必要があります。また[[Oculus Link>https://support.oculus.com/articles/headsets-and-accessories/oculus-link/index-oculus-link]]も必要です。~
VIVEの場合は[[VIVEソフトウェア>https://www.vive.com/us/setup/]]もインストールする必要があります。

** ロボット(ROS)側の前提条件 [#y682edd3]

- Windows環境とUbuntu環境~
詳細は[[こちら>Tutorial using ROS for ver.3#SystemRequirements]]を参照。





* 環境構築 [#Environments]

環境構築手順は、人間(VR)側とロボット(ROS)側で共通です。

クラウドを使用する場合は、[[4a.クラウド環境>#PhotonCloud]]を参照してください。~
ローカルサーバを使用する場合は、[[4b.ローカルサーバ環境>#PhotonServer]]を参照してください。


** 1. Photonアカウントの作成 [#CreatePhotonAccount]

まずPhotonのアカウントを作成する必要があります。~
以下の手順で作成してください。

+ [[Photonの公式サイト>https://www.photonengine.com/]]にアクセスします。
+ Photonのアカウントを作成します。


** 2. Unityアセットのインポート [#k0ec0826]

必要なUnityアセットをインポートしてください。~
インポートの詳細手順は以下のリンクを参照ください。~
https://docs.unity3d.com/Manual/upm-ui-import.html

*** SteamVR Pluginのインポート [#o711db4c]

+ 以下のページにアクセスします。 ~
https://assetstore.unity.com/packages/tools/integration/steamvr-plugin-32647
+ アセットをダウンロードし、インポートします。~
バージョン''2.7.3''で動作確認済みです。
+ [Edit]-[Project Settings...]をクリックします。
+ [XR Plug-in Management]-[Plug-in Providers]の[OpenVR Loader]にチェックを入れます。~
※[Oculus]など別のものにチェックを入れた場合はそちらのチェックは外してください。 ~
※[Initialize XR on Startup]にはチェックを''入れない''でください。


*** PUN 2 - FREE (Photon Unity Networking)のインポート [#ebd05099]

+ 以下のページにアクセスします。 ~
https://assetstore.unity.com/packages/tools/network/pun-2-free-119922
+ アセットをダウンロードし、インポートします。~
バージョン''2.40''で動作確認済みです。~
但し、インポート時に以下のチェックは外します。他ライブラリと衝突するためです。
-- Photon/PhotonLibs/WebSocket/websocket-sharp.dll
-- Photon/PhotonUnityNetworking/Demos
-- SteamVR
#ref(ImportPUN.png)
+[PUN Setup]ウィンドウでは、[Skip]してから[Close]してください。


** 3. SteamVRとPUNライブラリの使用 [#y0decaa9]

+ [SIGVerse]-[SIGVerse Settings]からSIGVerse設定画面を開きます。
+ [Define symbols Settings]の[Use SteamVR]と[Use PUN]にチェックを入れます。

#ref(SIGVerseSettingsSteamVRPUN.png)



** 4a. クラウド環境の構築 [#PhotonCloud]

Photon Cloudのフリープランでは同時に20人まで接続可能です。詳細は次のページを参照してください。~
https://www.photonengine.com/ja-JP/pun/pricing

クラウド環境構築手順は次の通りです。

+ [[Photonの公式サイト>https://www.photonengine.com/]]にサインインします。
+ アプリケーションIDを取得します。
++ サインイン後のダッシュボードで、[新しくアプリを作成する]ボタンを押下します。
++ [Photonの種別]を"Photon PUN"にし、アプリケーション名を設定します。(アプリケーション名は例えば"CleanupVR"など。)
++ [作成する]ボタンを押下します。
++ ダッシュボードのアプリ一覧にPUNのアプリが追加されていることを確認し、"アプリケーションID"をメモします。~
(IDは36桁でクリックすると全桁表示されます。)
#ref(PhotonAppId.png)
+ PUNの設定を行います。
++ UnityでSIGVerseプロジェクトを開きます。
++ [Window]-[Photon Unity Networking]-[PUN Wizard]をクリックします。
++ [Locate PhotonServerSettings]をクリックします。
++ [Server/Cloud Settings]-[App Id PUN]の欄に前述の"アプリケーションID"を入力します。
#ref(PhotonServerSettingsForCloud.png)
+ Unityメニューの[Assets]-[Reimport All]をクリックします。
+ Unityメニューの[Assets]-[''Reimport All'']をクリックします。
+ [Reimport]ボタンを押下してリビルドします。

** 4b. ローカルサーバ環境の構築 [#PhotonServer]

ローカルネットワークに[[Photon Server>https://doc.photonengine.com/ja-jp/server/current/getting-started/photon-server-in-5min]]を立てて、クラウドの代わりにすることもできます。

+ [[Photonの公式サイト>https://www.photonengine.com/]]にサインインします。
+ Photon Serverをインストールします。
++ [[Photon Serverのページ>https://www.photonengine.com/en-US/sdks#server-sdkserverserver]]にアクセスします。
++ "Download SDK"の右のバージョン番号をクリックして、zipファイルをダウンロードします。
++ ダウンロードしたファイルをインストールしたいディレクトリに展開します。
++ 以下ページにアクセスし、"100 CCU"ライセンスのライセンスファイルをダウンロードします。 ~
https://dashboard.photonengine.com/selfhosted
++ ダウンロードしたライセンスファイル([Mail Address].Photon-vX.free.100-ccu.license)をPhotonサーバフォルダの"\deploy\bin_Win64"フォルダにコピーします。
++ 外部のマシンにサービスを提供する場合は、GameServer.xml.config のPublicIPAddressを設定してください。 ~
(ローカルマシン上でのみの利用の場合には以下の設定は行わないでください) ~
\deploy\LoadBalancing\GameServer\bin\GameServer.xml.config のPublicIPAddressを設定してください。 ~
PublicIPAddressをブランクにするとIPアドレスは自動で認識されます。 詳細は以下URLを参照してください。~
https://doc.photonengine.com/en-us/server/current/applications/loadbalancing/application#deploying_a_game_server
+ Photon Serverを起動します。(''Windowsを再起動したらPhoton Serverも再度起動する必要があります。'') &aname(LaunchPhotonServer);
++ "\deploy\bin_Win64"フォルダの中のPhotonControl.exeをダブルクリックしてアプリを起動します。~
(Windowsタスクバーにアプリアイコンが現れます)
++ [LoadBalancing (MyCloud)]-[Start as application]をクリックしてPhoton Serverを起動します。
+ PUNの設定を行います。
++ UnityでSIGVerseプロジェクトを開きます。
++ [Window]-[Photon Unity Networking]-[PUN Wizard]をクリックします。
++ [Locate PhotonServerSettings]をクリックします。
++ 以下の設定を行います。
--- [Use Name Server]のチェックを外す
--- [Server]にPhoton ServerのIPアドレスを入力する
--- [Port]に"5055"を入力する。
#ref(PhotonServerSettingsForLocalServer.png)
+ Unityメニューの[Assets]-[Reimport All]をクリックします。
+ [Reimport]ボタンを押下してリビルドします。





* 実行手順 [#Execution]

人間(VR)側として実行する場合は、[[こちら>#human_execution]]の手順に従って実行してください。

ロボット(ROS)側として実行する場合は、[[こちら>#robot_execution]]の手順に従って実行してください。

どちらから先に実行しても問題ありませんが、ローカルサーバを使用する場合は、先に[[Photon Serverを起動>#LaunchPhotonServer]]してください。

*** 注意 [#d64ca1c1]
VMwareを使用して1つのPCで人間側とロボット側を実行しようとするとアプリが落ちるかもしれません。 ~
ビルドした実行ファイルでロボット側を動かす場合でもVRを使用しようとするためです。(2021/07/15現在) ~
https://github.com/ValveSoftware/unity-xr-plugin/issues/80

解決するためには、ロボット側はUnityエディタ上で実行するか、boot.configの"xrsdk-pre-init-library=XRSDKOpenVR"を削除する必要があると思われます。


* 人間(VR)側の実行手順 [#human_execution]

** 起動手順 [#vafd19d3]

''* ローカルサーバを使用する場合は、先に[[Photon Serverを起動>#LaunchPhotonServer]]してください。''

*** Windows側の起動手順 [#t197903c]

+ SteamVRやVRソフトウェアを起動してVRデバイスを使用できる状態にしてください。
+ [[こちら>Tutorial using ROS for ver.3#open_scene]]を参考に[Assets/SIGVerse/ExampleScenes/HSR/HsrCleanupVR(.unity)]シーンを開始します。
+ [Human]ボタンを押下して、人間としてログインしてください。
+ ロボットがログインしていない場合は、ロボットがログインするのを待ちます。

Windows (Login Screen)
#ref(HSRCleanupVRLogin.png)

** 実行 [#v04386d7]

ヒューマンアバターを操作して、ロボットにCleanup指示を出してください。

基本的には次のような流れになります。
+ 把持対象を指差しながら"Pick it up!"というメッセージをロボットに送信する。
+ 届け先を指差しながら"Clean up!"というメッセージを送信する。


VRコントローラの操作方法は次の通りです。

- トリガーを引くと、アバターの手が指差し姿勢になります。
- 手前のボタンを押下すると、"Pick it up!"というメッセージをロボットに送信します。(Oculus Touchの場合はAまたはXボタン)
- 奥のボタンを押下すると、"Clean up!"というメッセージをロボットに送信します。(Oculus Touchの場合はBまたはYボタン)
- 左スティックを倒すと、アバターが倒した方向に移動します。
- 右スティックを押し込むと、"Good!"というメッセージをロボットに送信します。
- 左スティックを押し込むと、"Bad!"というメッセージをロボットに送信します。

Windows (細部は最新版とは異なる場合があります)
#ref(HSRCleanupVRHuman.png)

''参考動画''
#youtube(XhcOVdM-6OI)



* ロボット(ROS)側の実行手順 [#robot_execution]

** 起動手順 [#vafd19d3]

''* ローカルサーバを使用する場合は、先に[[Photon Serverを起動>#LaunchPhotonServer]]してください。''

まずUbuntu側を起動します。その後 Windows側を起動してください。

*** Ubuntu側の起動手順 [#qd09b4ab]

新しいターミナルを開き、以下のコマンドを実行します。
 $ roslaunch sigverse_hsr_teleop_key teleop_key.launch

rvizも起動する場合は、以下のコマンドを実行します。
 $ roslaunch sigverse_hsr_teleop_key teleop_key_with_rviz.launch


*** Windows側の起動手順 [#t197903c]

+ [[こちら>Tutorial using ROS for ver.3#open_scene]]を参考に[Assets/SIGVerse/ExampleScenes/HSR/HsrCleanupVR(.unity)]シーンを開始します。
+ [Robot]ボタンを押下して、ロボットとしてログインしてください。
+ 人間がログインしていない場合は、人間がログインするのを待ちます。

Windows (Login Screen)
#ref(HSRCleanupVRLogin.png)


** 実行 [#v04386d7]

Ubuntu側の teleop_key.launch のターミナル上でHSRをキー操作することが出来ます。

ロボットを操作して机の上にあるオブジェクトの中から1つを把持し、人間が指さした場所に運んでください。

※操作方法の詳細はターミナルの表示を確認してください。

終了する際は、Unity側を停止させてからROS側を終了してください。

Ubuntu側(細部は最新版とは異なる場合があります)
#ref(HSRCleanupVRRobotUbuntu.png)

Windows側 (Logged in)(細部は最新版とは異なる場合があります)
#ref(HSRCleanupVRRobotWindows.png)

''参考動画''
#youtube(QE4zfDnHjn8)

Front page   Edit Diff Backup Upload Copy Rename Reload   New List of pages Search Recent changes   Help   RSS of recent changes