2019年4月29日月曜日

UbuntuでIntel RealSense T265を動かしてみた


背景

RealSenseとはIntelが開発している深度や位置情報を取得できるカメラのシリーズ名です。
T265とは、2019年4月に発売された、魚眼レンズ付きカメラ2つを使って自己位置推定を行うRealSenseです。

どのような使い方が出来るか気になったので、買って試してみました。
備忘録を兼ねて、試した内容を共有します。

使ったもの

RealSense T265


今回試すカメラです。

ステレオ魚眼カメラとジャイロセンサを利用して自己位置推定をしてくれます。
ステレオカメラですが、深さの計算はしてくれないようです。

Intelのオンラインストアスイッチサイエンスで購入できます。

今回はIntelのオンラインストアで購入しました。
購入額は 本体$199 + 送料$24 + 税金と手数料約2000円(配達時にDHLから請求されました)、合計約28000円でした。

githubの製品情報ページはこちらです。

IntelRealSense/librealsense/doc/t265.md

Ubuntu18.04をインストールしたPC


UbuntuというLinuxのディストリビューションをインストールしたPCでプログラムを試します。

Ubuntuのダウンロードページはこちらです。

Download Ubuntu Desktop

RealSenseのライブラリをインストール

RealSenseの開発情報は、下記のページから辿れます。

Get Started with Intel RealSense

RealSenseのライブラリlibrealsenseという名前でgithubで公開されています。

IntelRealSense/librealsense

Linux用のインストール手順があるので、それに従ってインストールしました。

IntelRealSense/librealsense/doc/distribution_linux.md

Ubuntu18.04で実行したコマンドはこちらです。
(バージョンが上がると下記のコマンドではインストールできなくなると思うので、インストール手順は上記のページを参考にして、下記のコマンドは雰囲気だけ参考にしてください。)
sudo apt-key adv --keyserver keys.gnupg.net --recv-key F6E65AC044F831AC80A06380C8B3A55A6F3EFCDE || sudo apt-key adv --keyserver hkp://keyserver.ubuntu.com:80 --recv-key F6E65AC044F831AC80A06380C8B3A55A6F3EFCDE
sudo add-apt-repository "deb http://realsense-hw-public.s3.amazonaws.com/Debian/apt-repo bionic main" -u
sudo apt install librealsense2-dkms librealsense2-utils librealsense2-dev

サンプルアプリケーションを動かしてみる

librealsense2-utilsをインストールしたらrealsense-viewerが実行できるようになります。

T265をPCに接続して下記のコマンドを実行します。
realsense-viewer

操作画面が表示されます。


3Dモード(画面右上)でトラッキングを有効(画面左側)にすると、T265での自己位置推定結果を表示できます。



T265を移動すると、推定される自己位置も移動します。








2Dモードにすると、T265から取得できる、左右のカメラの白黒画像、加速度、ジャイロ、現在の推定位置と姿勢、それぞれを表示できます。


ROSのラッパーをインストールして、サンプルプログラムを動かしてみる

ROSとはロボットのプログラムを使いやすくしてくれるフレームワークです。
realsenseのROSのラッパーがあるので、それをインストールしてT265用のプログラムを実行してみます。

IntelRealSense/realsense-ros

(ROS2用のラッパー(intel/ros2_intel_realsense)もありますが、自分がまだROS2に不慣れなので、今回はROS1用だけ試します。)

動作確認にはROSのmerodicを利用しました。

readmeではkinetic用と記載されていますが、merodicでもcatkin_makeしてrs_t265.launchを実行できました。
(demo_t265.launchは実行できるものの、エラーが発生してrviz上に情報が表示されませんでした。)

コードを配置してビルドしてROSに読み込ませます。
2019.10.27に試したときはddynamic_reconfigureが無いとビルドが失敗したので、それも一緒に配置します。(aptでインストールするddynamic_reconfigureではビルドできませんでした。)
cd [catkin work space]/src
git clone https://github.com/IntelRealSense/realsense-ros.git
git clone https://github.com/pal-robotics/ddynamic_reconfigure.git
cd ../
catkin_make
source devel/setup.bash

rs_t265.launchを実行します。
(USBハブを挟むと動作が不安定になることがあったので、不安定な場合はPCにT265を直接接続するのが良いと思います。)
roslaunch realsense2_camera rs_t265.launch

上記のコマンド実行後に確認できるtopicはこちらです。
rostopic list
/camera/accel/imu_info
/camera/accel/sample
/camera/fisheye1/camera_info
/camera/fisheye1/image_raw
/camera/fisheye2/camera_info
/camera/fisheye2/image_raw
/camera/gyro/imu_info
/camera/gyro/sample
/camera/odom/sample
/camera/realsense2_camera_manager/bond
/camera/tracking_module/parameter_descriptions
/camera/tracking_module/parameter_updates
/diagnostics
/rosout
/rosout_agg
/tf
/tf_static

別のターミナルで推定された位置を配信している/tfの内容を確認します。
rostopic echo /tf
---
transforms: 
  - 
    header: 
      seq: 0
      stamp: 
        secs: 1556510463
        nsecs: 115720272
      frame_id: "camera_odom_frame"
    child_frame_id: "camera_pose_frame"
    transform: 
      translation: 
        x: 0.333742678165
        y: 0.438069999218
        z: -0.696598947048
      rotation: 
        x: 0.0623288042843
        y: 0.0751170888543
        z: 0.578197062016
        w: -0.81003755331
---

ROSで推定された位置を確認できました。

pyrealasense2をインストールして、pythonのサンプルプログラムを動かしてみる

pythonとはビルドせずに動かせるプログラミング言語のひとつです。
pyrealsense2というlibrealsense2のpythonラッパーがあるので、それをインストールしてサンプルプログラムを動かしてみます。
2が付いていないpyrealsenseはv1のSDK用なので、2が付いている方を利用します。

IntelRealSense/librealsense/wrappers/python

python3とpython3のパッケージマネージャーであるpipはaptコマンドでインストールできます。
sudo apt install python3-pip

librealsense2-devをインストールしたPCに、下記のコマンドでpyrealsense2をインストールできます。
pip3 install pyrealsense2

T265用のサンプルプログラムがgithubにあるので、tmpディレクトリにダウンロードして動かしてみます。
cd /tmp
wget https://raw.githubusercontent.com/IntelRealSense/librealsense/master/wrappers/python/examples/t265_example.py
python3 t265_example.py


位置、速度、加速度を取得できました。
たまにT265が認識されないことがありましたが、USBを抜き差ししたら認識されました。
Frame #49
Position: x: 0.000111191, y: -0.000166429, z: 0.000447679
Velocity: x: -0.00280558, y: -0.000483674, z: -0.00434761
Acceleration: x: -0.0514255, y: 0.0337114, z: -0.0892147

魚眼ステレオカメラの画像を処理して視差を計算してみる

T265は深さを計算してくれないものの、視差計算に利用できる魚眼カメラ2個からの白黒画像を扱えるので、それをキャリブレーション(画像の歪みを取る処理)無しで利用して大まかに深さを計算するプログラムを作ってみました。

OpenCVを利用するので、pipでインストールしてください。
pip3 install opencv-python

OpenCVとpyrealsense2をインストールしたPCで下記ようなコマンドを実行すると、/tmpディレクトリにプログラムをダウンロードして実行できます。
cd /tmp
wget -O t265_stereo_depth.py https://gist.githubusercontent.com/asukiaaa/07508c5242e1bdce57e789574ba26f5f/raw
python3 t265_stereo_depth.py

魚眼カメラの画像の中央の白で囲んだ部分の視差を計算しています。


ステレオカメラとして精度良く作られているためか、キャリブレーションをしなくてもまあまあ視差が取れました。



「q」を入力するとプログラムが終了します。

まとめ

RealSenseT265についてこれらのことが分かりました。

これらの情報が取得できます。
  • 加速度
  • 角速度
  • 左右の魚眼レンズ付きカメラの白黒画像
  • 推定した自己位置 <- これがT265の売り
上記の情報はサンプルアプリケーション(realsense-viewer)で確認できます。

Ubuntu18.04上のROSとpythonで動かせることを確認できました。
他のツールとの連携はREADMEのWhat’s included in the SDKを参照してください。

標準機能では視差は計算してくれないものの、ステレオカメラとしての精度が良いため、ステレオカメラの画像から視差を計算することで、まあまあ使えそうな視差情報を取得できました。

共有する情報は以上です。

変更履歴

2019.10.27
インストールコマンドを最新版に更新しました。
ros用のrealsenseのラッパーのurlが変わっていたので、更新しました。
realsense-rosのインストールにddynamic_reconfigureが必要になっていたので、cloneコマンドを追加しました。

2 件のコメント :

匿名 さんのコメント...

デプスはこちらのパッケージを利用すればいいのではないでしょうか
http://wiki.ros.org/depth_image_proc?distro=kinetic

ご存知でしたら失礼いたします

Asuki Kono さんのコメント...

情報ありがとうございます。
しかし、提案されている「デプスは」が何を示しているのかよく分からなかったのですが「point cloudで表示したい場合」を意味していますか?
depth_image_procはステレオカメラの視差の計算を行ってくれるのではなく、取得した深度と対応する2次元画像を与えると、point cloudで情報を表示してくれるものと認識しました。
t265はkinectやD435やXtionのように深さを計れるセンサはついていないので、depth_image_procを使うにしても自前で視差の計算を行う必要があると思いました。