[[Tutorial using ROS for ver.3]] #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 Integrationのインポート [#k0ec0826] + 以下のリンクから、Oculus Integration for Unity ver.14.0 をダウンロードします。 ~ https://developer.oculus.com/downloads/package/unity-integration-archive/14.0/ + UnityでSIGVerseプロジェクトを開きます。 + Unityメニューの[Assets]-[Import Package]-[Custom Package...]をクリックします。 + "OculusIntegration_14.0.unitypackage"を選択します。 + [Import]ボタンをクリックします。 + "Update Spatializer Plugins"画面で[Upgrade]ボタンを押下します。 + "Restart Unity"画面で[Restart]ボタンを押下します。 + "Update Oculus Utilities Plugin"画面で[Yes]ボタンを押下します。 + "Restart Unity"画面で[Restart]ボタンを押下します。 + Consoleウィンドウにエラーが出ていないことを確認してください。 ** 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]]にアクセスします。 ++ ページ右上からUnityアカウントにサインインします。 ++ [Open in Unity(Unityで開く)]ボタンを押下すると、Unityの[Asset Store]タブにPUN2が表示されます。 ++ 一部のライブラリのチェックを外します。~ ''"Photon/PhotonLibs/WebSocket/websocket-sharp.dll"のチェックボックスを外してください。''websocket-sharp.dllはSIGVerseアセットの中に既に含まれており競合してしまうからです。 #ref(PUN2ExcludeWebsocket-sharp.png) ++ [Import]ボタンをクリックします。 ++ [PUN Wizzard]が開かれるので"AppId"の欄に前述の"アプリケーションID"を入力し、[Setup Project]ボタンを押下します。 #ref(PunWizardCloud.png) 次のような[PhotonServerSettings]画面が開かれます。 #ref(PhotonServerSettingsForCloud.png) (この画面は[Window]-[Photon Unity Networking]-[PUN Wizzard]-[Locate PhotonServerSettings]からも開けます。AppIdは"App Id Realtime"に設定されます。) + Unityメニューの[Assets]-[Reimport All]をクリックします。 + [Reimport]ボタンを押下してリビルドします。 ** 4b. ローカルサーバ環境の構築 [#PhotonServer] ローカルネットワークにPhoton Serverを立てて、クラウドの代わりにすることもできます。 + [[Photonの公式サイト>https://www.photonengine.com/]]にサインインします。 + Photon Serverをインストールします。 ++ [[Photon Serverのページ>https://www.photonengine.com/en-US/sdks#server-sdkserverserver]]にアクセスします。 ++ "Download SDK"の右のバージョン番号をクリックして、実行ファイルをダウンロードします。 ++ ダウンロードしたファイルを実行し、インストールしたいディレクトリに展開します。 + Photon Serverを起動します。(''Windowsを再起動した後などはPhoton Serverも再度起動する必要があります。'') &aname(LaunchPhotonServer); ++ "Photon-OnPremise-Server-SDK_vxxxxxxx\deploy\bin_Win64"フォルダの中のPhotonControl.exeをダブルクリックしてアプリを起動します。~ (Windowsタスクバーにアプリアイコンが現れます) ++ 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]]にアクセスします。 ++ ページ右上からUnityアカウントにサインインします。 ++ [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]が開かれるので以下の設定を行います。 --- [Use Name Server]のチェックを外す --- [Server]にPhoton ServerのIPアドレスを入力する --- [Port]に"5055"を入力する。 #ref(PhotonServerSettingsForLocalServer.png) (この画面は[Window]-[Photon Unity Networking]-[PUN Wizzard]-[Locate PhotonServerSettings]からも開けます。) + 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/ExampleScenes/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/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) Windows側 (Pointing) #ref(HSRCleanupVRRobotWindowsPointing.png)