Tutorial using ROS for ver.3
概要 †
人間とロボットが同じ仮想空間にログインし、人間がロボットに対して指差しでCleanup指示を出します。
人間側は、Windows+VRデバイス(Oculus Rift)を使用して仮想空間にログインします。
ロボット側は、Windows+Ubuntu(ROS:Robot Operating System)を使用して仮想空間にログインします。
遠隔地の人間とロボット(ROS)がインターネット経由で繋がれ、同じ仮想空間でコミュニケーションを取ることが出来ます。
前提条件 †
共通の前提条件 †
人間とロボットの共通の前提条件としてネットワークを使用します。
クラウドにはPhoton 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
またライセンス認証のためにPhoton Serverが動いているPCはインターネットに接続している必要があります。
※ウイルス対策ソフトが通信を遮ぎらないように注意してください。
クラウドを使用する場合とローカルサーバを使用する場合の環境構築方法は、環境構築にて説明します。
人間(VR)側の前提条件 †
ロボット(ROS)側の前提条件 †
- Windows環境とUbuntu環境
詳細はこちらを参照。
環境構築 †
環境構築手順は、人間(VR)側とロボット(ROS)側で共通です。
クラウドを使用する場合は、4a.クラウド環境を構築してください。
ローカルサーバを使用する場合は、4b.ローカルサーバ環境を構築してください。
1. Photonアカウントの作成 †
まずPhotonのアカウントを作成する必要があります。
以下の手順で作成してください。
- Photonの公式サイトにアクセスします。
- ページ右上のサインインからPhotonのアカウントを作成します。
2. Oculus Utilitiesのインポート †
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]ボタンを押下します。
3. OculusとPUNライブラリの使用 †
- [SIGVerse]-[SIGVerse Settings]からSIGVerse設定画面を開きます。
- [Define symbols Settings]の[Use Oculus]と[Use PUN]にチェックを入れます。
#ref(): File not found: "SIGVerseSettingsOculusPUN.png" at page "(HSR)クラウドとVRを使用したCleanupタスクの実行"
4a. クラウド環境の構築 †
Photon Cloudのフリープランでは同時に20人まで接続可能です。詳細は次のページを参照してください。
https://www.photonengine.com/en-US/Realtime/pricing
クラウドに接続するにはPUN(Photon Unity Networking)を使用します。
PUN環境構築手順は次の通りです。
- Photonの公式サイトにサインインします。
- アプリケーションIDを取得します。
- サインイン後のダッシュボードで、[新しくアプリを作成する]ボタンを押下します。
- [Photonの種別]を"Photon PUN"にし、アプリケーション名を設定します。(アプリケーション名は例えば"CleanupVR"など。)
- [作成する]ボタンを押下します。
- ダッシュボードのアプリ一覧にPUNのアプリが追加されていることを確認し、"アプリケーションID"をメモします。
(IDは36桁でクリックすると全桁表示されます。)
- UnityプロジェクトにPUN2アセットをインポートします。
- UnityでSIGVerseプロジェクトを開きます。
- Unity Asset StoreのPUN2のページにアクセスします。
- ページ右上からUnityアカウントにサインインします。
- [Open in Unity(Unityで開く)]ボタンを押下すると、Unityの[Asset Store]タブにPUN2が表示されます。
- 一部のライブラリのチェックを外します。
"Photon/PhotonLibs/WebSocket/websocket-sharp.dll"のチェックボックスを外してください。websocket-sharp.dllはSIGVerseアセットの中に既に含まれており競合してしまうからです。
#ref(): File not found: "PUN2ExcludeWebsocket-sharp.png" at page "(HSR)クラウドとVRを使用したCleanupタスクの実行"
- [Import]ボタンをクリックします。
- [PUN Wizzard]が開かれるので"AppId"の欄に前述の"アプリケーションID"を入力し、[Setup Project]ボタンを押下します。
#ref(): File not found: "PunWizardCloud.png" at page "(HSR)クラウドとVRを使用したCleanupタスクの実行"
次のような[PhotonServerSettings]画面が開かれます。
(この画面は[Window]-[Photon Unity Networking]-[PUN Wizzard]-[Locate PhotonServerSettings]からも開けます。AppIdは"App Id Realtime"に設定されます。)
- Unityメニューの[Assets]-[Reimport All]をクリックします。
- [Reimport]ボタンを押下してリビルドします。
4b. ローカルサーバ環境の構築 †
ローカルネットワークにPhoton Serverを立てて、クラウドの代わりにすることもできます。
- Photonの公式サイトにサインインします。
- ライセンスファイルを取得します。
- Photon Serverのページで[TRY FREE LICENSE]をクリックします。
- [DOWNLOAD FREE]をクリックしてライセンスファイルを取得します。
ライセンスファイルは"メールアドレス.Photon-vX.free.100-ccu.license"という名前です。
- Photon Serverをインストールします。
- Photon Serverのページにアクセスします。
- "Download SDK"の右のバージョン番号をクリックして、実行ファイルをダウンロードします。
- ダウンロードしたファイルを実行し、インストールしたいディレクトリに展開します。
- 展開したフォルダの"Photon-OnPremise-Server-SDK_vxxxxxxx\deploy\bin_Win64"をエクスプローラで開きます。
- 前述のライセンスファイルを配置します。例えば次の図のようになります。
#ref(): File not found: "PhotonServerFolder.png" at page "(HSR)クラウドとVRを使用したCleanupタスクの実行"
- Photon Serverを起動します。(Windowsを再起動した後などはPhoton Serverも起動する必要があります。)
- bin_Win64フォルダの中のPhotonControl.exeをダブルクリックしてアプリを起動します。
(Windowsタスクバーにアプリアイコンが現れます)
- WindowsタスクバーのPhotonControlアイコンをクリックして、[Game Server IP Config]で適切なサーバのIPアドレスを選択します。
#ref(): File not found: "PhotonServerIP.png" at page "(HSR)クラウドとVRを使用したCleanupタスクの実行"
- [LoadBalancing (MyCloud)]-[Start as application]をクリックしてPhoton Serverを起動します。
- [LoadBalancing (MyCloud)]-[Run TestClient (LoadBalancing]をクリックすると動作確認が出来ます。
- UnityプロジェクトにPUN2アセットをインポートします。
- UnityでSIGVerseプロジェクトを開きます。
- Unity Asset StoreのPUN2のページにアクセスします。
- ページ右上からUnityアカウントにサインインします。
- [Open in Unity(Unityで開く)]ボタンを押下すると、Unityの[Asset Store]タブにPUN2が表示されます。
- 一部のライブラリ以外をImportします。
"Photon/PhotonLibs/WebSocket/websocket-sharp.dll"のチェックボックスを外してください。websocket-sharp.dllはSIGVerseアセットの中に既に含まれており重複してしまうからです。
#ref(): File not found: "PUN2ExcludeWebsocket-sharp.png" at page "(HSR)クラウドとVRを使用したCleanupタスクの実行"
- [PUN Wizzard]が開かれるので、[Skip]ボタンを押下します。
#ref(): File not found: "PunWizardLocalServer.png" at page "(HSR)クラウドとVRを使用したCleanupタスクの実行"
- [PhotonServerSettings]が開かれるので以下の設定を行います。
- [Use Name Server]のチェックを外す
- [Server]にPhoton ServerのIPアドレスを入力する
- [Port]に"5055"を入力する。
- Unityメニューの[Assets]-[Reimport All]をクリックします。
- [Reimport]ボタンを押下してリビルドします。
実行手順 †
人間(VR)側として実行する場合は、こちらの手順に従って実行してください。
ロボット(ROS)側として実行する場合は、こちらの手順に従って実行してください。
どちらから先に実行しても問題ありませんが、ローカルサーバを使用する場合は、先にPhoton Serverを起動してください。
人間(VR)側の実行手順 †
起動手順 †
* ローカルサーバを使用する場合は、先にPhoton Serverを起動してください。
Windows側の起動手順 †
- Oculus Riftを接続し使用できる状態にしてください。
- こちらを参考に[Assets/SIGVerse/SampleScenes/HSR/HsrCleanupVR(.unity)]シーンを開始します。
- [Human]ボタンを押下して、人間としてログインしてください。
- ロボットがログインしていない場合は、ロボットがログインするのを待ちます。
Windows (Login Screen)
実行 †
ヒューマンアバターを操作して、ロボットにCleanup指示を出してください。
基本的には次のような流れになります。
- 把持対象を指差しながら"Pick it up!"というメッセージをロボットに送信する。
- 届け先を指差しながら"Clean up!"というメッセージを送信する。
Oculus Touchの操作方法は次の通りです。
- 中指トリガーを引くと、アバターの手が指差し姿勢になります。
- AまたはXボタンを押下すると、"Pick it up!"というメッセージをロボットに送信します。
- BまたはYボタンを押下すると、"Clean up!"というメッセージをロボットに送信します。
- 左スティックを倒すと、アバターが倒した方向に移動します。
- 右スティックを押下すると、"Good!"というメッセージをロボットに送信します。
- 左スティックを押下すると、"Bad!"というメッセージをロボットに送信します。
Windows
ロボット(ROS)側の実行手順 †
起動手順 †
* ローカルサーバを使用する場合は、先にPhoton Serverを起動してください。
まずUbuntu側を起動します。その後 Windows側を起動してください。
Ubuntu側の起動手順 †
新しいターミナルを開き、以下のコマンドを実行します。
$ roslaunch sigverse_hsr_teleop_key teleop_key.launch
rvizも起動する場合は、以下のコマンドを実行します。
$ roslaunch sigverse_hsr_teleop_key teleop_key_with_rviz.launch
Windows側の起動手順 †
- こちらを参考に[Assets/SIGVerse/SampleScenes/HSR/HsrCleanupVR(.unity)]シーンを開始します。
- [Robot]ボタンを押下して、ロボットとしてログインしてください。
- 人間がログインしていない場合は、人間がログインするのを待ちます。
Windows (Login Screen)
実行 †
Ubuntu側の teleop_key.launch のターミナル上でHSRをキー操作することが出来ます。
ロボットを操作して机の上にあるオブジェクトの中から1つを把持し、人間が指さした場所に運んでください。
※操作方法の詳細はターミナルの表示を確認してください。
終了する際は、Unity側を停止させてからROS側を終了してください。
Ubuntu側
Windows側 (Logged in)
Windows側 (Pointing)
#ref(): File not found: "HSRCleanupVRRobotWindowsPointing.png" at page "(HSR)クラウドとVRを使用したCleanupタスクの実行"