RealSense T265の位置情報を使って、VR空間を移動する
OculusQuest2, ROSなどを使ってARラジコンを作っているのですが、今回ラジコンの移動に合わせてOculusQuest2上のVR空間を移動できるようにしたいと考えました。
そこで、ラジコンの位置をRealSense T265で取得し、それをROSを使ってOculusQuest2に送ることでVR空間を移動できるようにしました。
なお今回実装をするにあたり、OculusQuest2でROS#が、RaspberryPi4でRealsenseT265がすでに動く状態となっていることを前提としています。
それぞれの動かし方については以下の記事を参照してください。
デバイス、環境
- Raspberry Pi4 Model B
- Ubuntu Server 18.04
- ROS melodic
- Oculus Quest 2
- Unity
- ROS# v1.6
- RealSense T265
実装
- Ubuntu Server 18.04
- ROS melodic
- Unity
- ROS# v1.6
ROSでRealSenseT265を使うとnav_msgs/Odometryの型のデータが/camera/odom/sampleというtopic名で出力されます。
ROS# v1.6では、Odometryを受信するOdometorySubscriberがすでに用意されているので、これを使用します。
Odometryの受信
- RosConnectorのInspectorウィンドウを開く
-
Assets/RosSharp/Scripts/RosBridgeClient/RosCommuncation
にあるOdometorySubscriber
をドラッグ&ドロップする - Topicに
/camera/odom/sample
と入力する
RealSense T265に合わせて、移動できるようにする
RealSense T265から受信したOdometryを使って移動するオブジェクトを作成し、その上にOculusQuest2のカメラを置くことで、VR空間を移動できるようにします。
- Hierarchyウィンドウで右クリックし、3D Object->Cubeを作成し、名前をRC-Carとする
- 作成したCubeの大きさを実際のラジコンと同じ大きさにする。また、位置を後輪軸の中心が原点になるように位置を調整する。
- 自分は以下のようにしましたが、VR空間を移動したいだけならデフォルト値で大丈夫です
- Position x : 0, y : 0, z : 0.08
- Rotation x : 0, y : 0, z : 0.08
- Scale x : 0.26, y : 0.21, z : 0.33
- 自分は以下のようにしましたが、VR空間を移動したいだけならデフォルト値で大丈夫です
- Hierarchyウィンドウで、
OVRCameraRig
をRC-Car
の下にドラッグ&ドラッグする -
OVRCameraRig
の位置をラジコン上のカメラ位置と一致するようにTransformを設定する- Position x : 0, y : 0.17, z : 0.08
- Rotation x : 0, y : 0, z : 0.08
- Scale x : 1, y : 1, z : 1
- Hierarchyウィンドウで、
PlaneRotator
をRC-Car
の下にドラッグ&ドラッグする- 「Oculus GoにRaspiのカメラ画像を表示する&姿勢を取得する」の記事で、ヘッドセットの向きに合わせてカメラ画像の位置を動かすために、PlaneRotatorを実装しました。それも一緒に移動するようRC-Carの下に移動します。
- Position x : 0, y : 0, z : 0
- Rotation x : 0, y : 0, z : 0
- Scale x : 1, y : 1, z : 1
- 「Oculus GoにRaspiのカメラ画像を表示する&姿勢を取得する」の記事で、ヘッドセットの向きに合わせてカメラ画像の位置を動かすために、PlaneRotatorを実装しました。それも一緒に移動するようRC-Carの下に移動します。
ビルド
通常の手順でUnityアプリをビルドしOculusQuest2にデプロイします
launchファイルの作成
ROSのRealSense用のノードやRosBridgeをまとめて動かすために、以下のlaunchファイルを作成しました。
rosbridge_websocket/address
のIPアドレスは、実行環境に合わせて変更してください。
<launch>
<include file="$(find rosbridge_server)/launch/rosbridge_websocket.launch" />
<param name="rosbridge_websocket/address" value="192.168.4.8"/>
<include file="$(find realsense2_camera)/launch/rs_t265.launch" />
</launch>
実行
Raspi側
launchファイルを実行します
roslaunch t265_test.launch
OculusQuest側
アプリの提供不明から、開発したアプリを実行します。
結果
RealSense T265を動かして、それに合わせてカメラが移動すれば成功です。
以下の動画はカメラの移動が分かりやすいように、cubeを置いてみた動画です。
参考
Author And Source
この問題について(RealSense T265の位置情報を使って、VR空間を移動する), 我々は、より多くの情報をここで見つけました https://qiita.com/hiro-han/items/186bc6204b3b5a78a0cf著者帰属:元の著者の情報は、元のURLに含まれています。著作権は原作者に属する。
Content is automatically searched and collected through network algorithms . If there is a violation . Please contact us . We will adjust (correct author information ,or delete content ) as soon as possible .