ブログ@kaorun55

HoloLensやKinectなどのDepthセンサーを中心に書いています。

Intel RealSenseをMax OSやLinuxでも使える librealsense を使ってみた

Intel RealSenseをMax OSやLinuxでも使える librealsense が公開されていました。公式のSDKではないようですが、Intel RealSense labの実験的プロジェクトということです。準公式くらいでしょうか(位置づけは不明です)。

2016/01/31更新:公式から「公式じゃないよ」とのアナウンス。

github.com

2015年にIntel RealSenseをMac OSやLiunxでも動かせるようにというアナウンスがあったので、それが実現した形です。もちろん、Windowsでも動かせます。

f:id:kaorun55:20160123102151j:plain

リポジトリの説明は「Cross-platform camera capture for Intel® RealSense™ F200, SR300 and R200」となっており、Intel RealSenseのF200、R200および今年発売予定の前面型SR300をクロスプラットフォームで動作させるライブラリになります。

ライセンスは「Apache License Version 2.0」とのことで利用については特に問題ないかと思います。

現状では、Color、IR、Depthストリームの取得のみで、公式SDKのようなコンピュータービジョン系の機能はありません。OpenCVやOpenGL、PCLとの連携はできるので、上の層はそれらを使うことがメインになるでしょうか。イメージとしてはOpenNIになります。

librealsense独自の機能として、1アプリケーションから複数のRealSenseセンサーにアクセスできます。現状で4台までの同時動作は確認しており、この4台でのF,Rの内訳はなんでも良いようです。

概要

リポジトリのREADMEから概要を抜き出します。

対応デバイス

  1. RealSense R200
  2. RealSense F200
  3. RealSense SR300

対応プラットフォーム

  1. Windows 8.1 (Visual Studio 2013 Update 5)
  2. Ubuntu 14.04.03 LTS x64 (GCC 4.9 toolchain)
  3. Mac OS X 10.7+ (Clang toolchain)

インストールについて

  • Linux はV4L2(video4linux2) 経由でカーネルスペースからUVC デバイスとしてアクセスする
  • Linux とMac OS X は libuvc (とlibusb)経由でユーザースペースから UVC デバイスとしてアクセスする
  • Windows 8.1以降は Windows Media Foundation 経由でカーネルスペースから UVC デバイスとしてアクセスする

インストール手順はこちらを参照してください

librealsense/installation.md at master · IntelRealSense/librealsense · GitHub

Max OSとWindowsでビルド、実行しましたが、非常に簡単です。

Mac OSではlibusbとglfw3をインストールしたあとに、サンプルプロジェクトをXCodeでビルドすれば動きました。

Windowsについては、コードを取得してVisual Studioでビルドすれば、すぐに利用可能です(ドライバなどのインストールはおそらく不要です)。DCM(Depth Camera Manager)および公式のIntel RealSense SDKも不要です。

機能概要及びサンプルプロジェクト

プロジェクトを開くと次のような構成になっています。Libraryフォルダにある「realsense」がライブラリ本体になります。インタフェースはCおよびC++になってます。C APIが提供されているので、C#やUnityなどほかの言語や環境にも持って行きやすいかと思います。

最初は「C++ Tutorials」および「Examples」を見ればよいでしょう。

f:id:kaorun55:20160125143027p:plain

C++ TutorialsはColor、Depth、IRストリームの取得、表示および、PointCloud(点群)の取得、表示となっています。自分が知っている中では初めてAPIから直接PointCloudが取り出せるライブラリです(いままではDepthデータからCameraデータ(PointCloud)に変換していた)。

Examplesはlibrealsenseの機能紹介となっています。

cpp-alignimages

Color座標とDepth座標の位置合わせです。Depth座標にあわされたColorデータと、Color座標にあわされたDepthデータが表示されます。

f:id:kaorun55:20160125144448p:plain

cpp-capture

Color、Depth、IRデータの表示です。右下はF200では無表示、R200のIR画像が入ります(R200はIRのステレオのため)。

f:id:kaorun55:20160125144606p:plain

cpp-config-ui

Intel RealSenseカメラの設定を変更します。

f:id:kaorun55:20160125144745p:plain

面白いのがIRレーザーの強さを変えられます。0にするとレーザーが照射されなくなるので、Depthは取得できず、IR画像もほぼ黒くなります。

f:id:kaorun55:20160125144900p:plain

cpp-enumerate-devices

Intel RealSenseカメラの解像度とフレームレートを表示します。

f:id:kaorun55:20160125145024p:plain

cpp-headless

起動30フレーム後のColor、Depth、IRの画像をPNGファイルに保存します。

f:id:kaorun55:20160125145453p:plain

cpp-multicam

複数のIntel RealSenseセンサーを動かします。センサーの向きによっては、DepthデータがIRの干渉でうまく取れなくなるため、先ほどのIRレーザーの強さを変えることで複数台のセンサーからDepthデータを取り出せます。

f:id:kaorun55:20160125145530p:plain

cpp-pointcloud

PointCloud(点群)表示のサンプルです。マウスで回転させると立体的に表示されることがわかります。librealsenseではDepthデータからX,Y,Zの点群を取り出せます。そこにColorのRGBを合わせる方法は「cpp-tutorial-3-pointcloud」を参考にしたほうがよさそうです。こちらの色情報はOpenGLにテクスチャーとして渡しているようです。

f:id:kaorun55:20160125145715p:plain

cpp-restart

ストリームデータの再起動の方法を示します。

f:id:kaorun55:20160125145853p:plain

所感

Windows以外のMax OS、Linuxで動くこと、軽量なこと、インストールが簡単であることから、非常に楽しいライブラリです。SDKにない機能として、1アプリ複数センサーもできるので、これまで以上に利用の幅が広がります。

USB 3.0接続がネックですが、今年はUSB 3.0の搭載されたスヒックPCの予定もありますので、バスパワーで動作するRealSenseセンサーとともにバッテリーで動作するDepthセンサー環境ができるようになるでしょう。

 

手軽かつ、いまの公式SDK環境に干渉することもないので、Intel RealSenseセンサーを持っている人は、一度試してみることをオススメします。

 

  • WindowsのNUCにF200を4台接続して動かした(USB 3.0のハブに4つつながってます)

f:id:kaorun55:20160123101946j:plain

  • R200の画角に広げて、カメラのデータをつなげてみた

f:id:kaorun55:20160123132749j:plain