[[Tutorial using ROS for ver.3]]

* UNDER CONSTRUCTION [#e505a109]
* UNDER CONSTRUCTION [#g20367bd]
* UNDER CONSTRUCTION [#i3f16a16]
* UNDER CONSTRUCTION [#u7e79004]
* UNDER CONSTRUCTION [#v187cbbc]
* UNDER CONSTRUCTION [#z41d367f]


#contents

* 概要 [#me21a0b1]

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

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

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

#ref(CleanupUsingCloudAndVR_Overview.png)




* 前提条件 [#r10a7b3e]

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

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

クラウドには[[Photon Realtime>https://www.photonengine.com/en-US/Realtime]]を使用しますが、インターネット接続時に以下のページのポート番号を使用します。~
ポートが使用可能かどうかを事前に確認してください。~
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

クラウドを使用する場合とローカルサーバを使用する場合の環境構築方法は、[[環境構築>#Environments]]にて説明します。


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

- Windows環境~
[[SIGVerseアセットを使用するための基本的な要件>Tutorial for ver.3#SystemRequirements]]以外にも、[[Oculus Riftを使用するための要件>https://support.oculus.com/248749509016567/]]も必要です。
- Oculus Rift~
Oculus Riftは、Oculus Rift CV1及びOculus Rift Sにて動作確認済みです。~
[[Oculus Software>https://www.oculus.com/setup/]]をWindowsにインストールし、Oculus Riftを使用するための基本的な環境を整えてください。


** ロボット(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. Oculus Utilitiesのインポート [#k0ec0826]

Oculus UtilitiesをUnityプロジェクトにインポートする必要があります。。

+以下のリンクから Oculus Utilities for Unity ver.1.28.0 をダウンロードします。~
https://developer.oculus.com/downloads/package/oculus-utilities-for-unity-5/1.28.0/
+ダウンロードしたzipファイルを解凍します。
+UnityでSIGVerseプロジェクトを開きます。
+Unityメニューの[Assets]-[Import Package]-[Custom Package...]をクリックします。
+解凍したフォルダ中の"OculusUtilities.unitypackage"を選択します。
+[Import]ボタンをクリックします。
+"Update Oculus Utilities Plugin"画面で[Yes]ボタンを押下します。
+"Restart Unity"画面で[Restart]ボタンを押下します。

//+Unityの[Console]タブに"Multiple plugins with the same name 'ovrplugin'..."エラーが発生するので、修正します。~
//参考1:https://developer.oculus.com/downloads/package/oculus-utilities-for-unity-5/~
//'''* If you have updated your OVRPlugin version from Utilities, you may see a spurious error message when the Editor first launches saying “Multiple plugins with the same name 'ovrplugin'”. Please disregard.'''~
//参考2:https://forum.unity.com/threads/multiple-plugins-with-the-same-name-error.466447/~

//++ [Project]タブの"Assets/OVR/Plugins/1.28.0/Win/OVRPlugin.dll"を選択します。
//++ [Inspector]タブの[Select platforms for plugin]のチェックを全て外します。
//++ [Apply]ボタンを押下します。
//#ref(OVRPluginFixError.png)


//Import Oculus Utilities for Unity
//Download Oculus Utilities for Unity ver.1.28.0 from the following link.
//https://developer.oculus.com/downloads/package/oculus-utilities-for-unity-5/1.28.0/
//Unzip the downloaded file.
//Open this project with Unity.
//Click [Assets]-[Import Package]-[Custom Package...].
//Select and open "OculusUtilities.unitypackage".
//Click [Import] button.
//Click [Yes] on "Update Oculus Utilities Plugin" window.
//Click [Restart] on "Restart Unity" window.



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

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

#ref(SIGVerseSettingsOculusPUN.png)



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

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

クラウドに接続するには[[PUN(Photon Unity Networking)>https://www.photonengine.com/en-US/PUN]]を使用します。~
PUN環境構築手順は次の通りです。

+ [[Photonの公式サイト>https://www.photonengine.com/]]にサインインします。
+ アプリケーションIDを取得します。
++ サインイン後のダッシュボードで、[新しくアプリを作成する]ボタンを押下します。
++ [Photonの種別]を"Photon PUN"にし、アプリケーション名を設定します。(アプリケーション名は例えば"CleanupVR"など。)
++ [作成する]ボタンを押下します。
++ ダッシュボードのアプリ一覧にPUNのアプリが追加されていることを確認し、"アプリケーションID"をメモします。~
(IDは36桁でクリックすると全桁表示されます。)
#ref(PhotonAppId.png)
+ UnityプロジェクトにPUN2アセットをインポートします。
++ UnityでSIGVerseプロジェクトを開きます。
++ Unity Asset Storeの[[PUN2のページ>https://assetstore.unity.com/packages/tools/network/pun-2-free-119922]]にアクセスします。
++ [Open in Unity(Unityで開く)]ボタンを押下すると、Unityの[Asset Store]タブにPUN2が表示されるので、Importします。~
このとき、''"Photon/PhotonLibs/WebSocket/websocket-sharp.dll"のチェックボックスを外してください。''websocket-sharp.dllはSIGVerseアセットの中に既に含まれており重複してしまうからです。
#ref(PUN2ExcludeWebsocket-sharp.png)
++ [PUN Wizzard]が開かれるので"AppId"の欄に前述の"アプリケーションID"を入力し、[Setup Project]ボタンを押下します。~
(AppIdは、[Window]-[Photon Unity Networking]-[PUN Wizzard]-[Locate PhotonServerSettings]からも設定できます。"App Id Realtime"にAppIdを設定します。)
#ref(PunWizardCloud.png)
次のような[PhotonServerSettings]情報が開かれます。
#ref(PhotonServerSettingsForCloud.png)
+ Unityメニューの[Assets]-[Reimport All]をクリックします。
+ [Reimport]ボタンを押下してリビルドします。


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

ローカルネットワークにPhoton Serverを立てて、クラウドの代わりにすることもできます。

+ [[Photonの公式サイト>https://www.photonengine.com/]]にサインインします。
+ ライセンスファイルを取得します。
++ [[Photon Serverのページ>https://www.photonengine.com/en-US/Server]]で[TRY FREE LICENSE]をクリックします。
++ [DOWNLOAD FREE]をクリックしてライセンスファイルを取得します。~
(ライセンスファイルは"メールアドレス.Photon-vX.free.100-ccu.license"という名前です。)
+ Photon Serverをインストールします。
++ [[Photon Serverのページ>https://www.photonengine.com/en-US/sdks#server-sdkserverserver]]にアクセスします。
++ "Download SDK"の右のバージョン番号をクリックして、実行ファイルをダウンロードします。
++ 実行ファイルをダウンロードし、インストールしたいディレクトリに展開します。
++ 展開したフォルダの"Photon-OnPremise-Server-SDK_vxxxxxxx\deploy\bin_Win64"をエクスプローラで開きます。
++ 前述のライセンスファイルを配置します。例えば次の図のようになります。
#ref(PhotonServerFolder.png)
+ Photon Serverを起動します。(''Windowsを再起動した後などはPhoton Serverも起動する必要があります。'') &aname(LaunchPhotonServer);
++ インストールしたフォルダの中のPhotonControl.exeをダブルクリックしてアプリを起動します。~
(タスクバーにアプリアイコンが現れます)
++ WindowsタスクバーのPhotonControlアイコンをクリックして、[Game Server IP Config]で適切なサーバのIPアドレスを選択します。
#ref(PhotonServerIP.png)
++ [LoadBalancing (MyCloud)]-[Start as application]をクリックしてPhoton Serverを起動します。
++ [LoadBalancing (MyCloud)]-[Run TestClient (LoadBalancing]をクリックすると動作確認が出来ます。
+ UnityプロジェクトにPUN2アセットをインポートします。
++ UnityでSIGVerseプロジェクトを開きます。
++ Unity Asset Storeの[[PUN2のページ>https://assetstore.unity.com/packages/tools/network/pun-2-free-119922]]にアクセスします。
++ [Open in Unity(Unityで開く)]ボタンを押下すると、Unityの[Asset Store]タブにPUN2が表示されるので、Importします。~
このとき、''"Photon/PhotonLibs/WebSocket/websocket-sharp.dll"のチェックボックスを外してください。''websocket-sharp.dllはSIGVerseアセットの中に既に含まれており重複してしまうからです。
#ref(PUN2ExcludeWebsocket-sharp.png)
++ [PUN Wizzard]が開かれるので、[Skip]ボタンを押下します。
#ref(PunWizardLocalServer.png)
++ [PhotonServerSettings]が開かれるので以下の設定を行います。
--- [User Name Server]のチェックを外す
--- [Server]にPhoton ServerのIPアドレスを入力する
--- [Port]に"5055"を入力する。
#ref(PhotonServerSettingsForLocalServer.png)
+ Unityメニューの[Assets]-[Reimport All]をクリックします。
+ [Reimport]ボタンを押下してリビルドします。





* 実行手順 [#s9ea839c]

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

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

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



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

** 起動手順 [#vafd19d3]

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

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

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

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

** 実行 [#v04386d7]

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

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


Oculus Touchの操作方法は次の通りです。

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

Windows 
#ref(HSRCleanupVRHuman.png)





* ロボット(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/SampleScenes/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)

Windows (Pointing)
#ref(HSRCleanupVRRobotWindowsPointing.png)


Front page   New List of pages Search Recent changes   Help   RSS of recent changes