LoginSignup
3
1

More than 3 years have passed since last update.

RealSense T265の位置情報を使って、VR空間を移動する

Posted at

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

実装

ROSでRealSenseT265を使うとnav_msgs/Odometryの型のデータが/camera/odom/sampleというtopic名で出力されます。
ROS# v1.6では、Odometryを受信するOdometorySubscriberがすでに用意されているので、これを使用します。

Odometryの受信

  1. RosConnectorのInspectorウィンドウを開く
  2. Assets/RosSharp/Scripts/RosBridgeClient/RosCommuncationにあるOdometorySubscriberをドラッグ&ドロップする
  3. Topicに/camera/odom/sampleと入力する

RealSense T265に合わせて、移動できるようにする

RealSense T265から受信したOdometryを使って移動するオブジェクトを作成し、その上にOculusQuest2のカメラを置くことで、VR空間を移動できるようにします。

  1. Hierarchyウィンドウで右クリックし、3D Object->Cubeを作成し、名前をRC-Carとする
  2. 作成した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
  3. Hierarchyウィンドウで、OVRCameraRigRC-Carの下にドラッグ&ドラッグする
  4. 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
  5. Hierarchyウィンドウで、PlaneRotatorRC-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

ビルド

通常の手順でUnityアプリをビルドしOculusQuest2にデプロイします

launchファイルの作成

ROSのRealSense用のノードやRosBridgeをまとめて動かすために、以下のlaunchファイルを作成しました。
rosbridge_websocket/addressのIPアドレスは、実行環境に合わせて変更してください。

t265_test.launch
<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を置いてみた動画です。
realsense-unity.gif

参考

3
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
3
1