| librealsense (Intel RealSense SDK) 使い方 | 
    
            
        
            | 
                2017-04-16 - 2018-09-01 (update)             | 
              | 
            
                                             | 
        
    
 
                 
    
        
    
        
            
            
            
         
        
*RealSense とは
 Intel製の3Dセンサーです.いくつか機種があり,計測範囲や計測原理などが異なります.
{{small:Intelの販売サイト:[link:https://click.intel.com/realsense.html]}} 
[img:5dbg]
{{small:図1 RealSenseSR300を使った撮影結果 左からカラー画像,距離画像,距離画像を別視点から可視化した結果}}
                        
*librealsense とは
RealSenseから撮影データを取得するためのクロスプラットフォームなC++のライブラリです.
{{small:GitHub:[link:https://github.com/IntelRealSense/librealsense] }} 
{{small:ver2.x から Intel RealSense SDK と呼称が変わっています。ver2.x では Dシリーズを扱うことができます。}} 
**対応デバイス
・ver1.x : R200,F200,SR300,LR200,ZR300
・ver2.x : SR300, Dシリーズ
**対応プラットフォーム
・Ubuntu 14.04 and 16.04 LTS (GCC 4.9 toolchain)
・Windows 8.1 and Windows 10 (Visual Studio 2015 Update 2)
・Mac OS X 10.7+(Clang toolchain)
 ・Ostro
**API-How-To (公式の使い方ガイド)
{{small:[link:https://github.com/IntelRealSense/librealsense/wiki/API-How-To] }} 
*librealsense ver1.x 使い方(例:Windows)
librealsense ver1.x の使い方について,簡単に説明します.(ver2.xの使い方は,この次に説明します.)
**1.PCのUSB3.0ポートにReal Senseを繋げる
繋げるだけで自動的にドライバがインストールされます.
{{small:ドライバのインストールが完了するまで大体1分くらいかかります}} 
{{small:未確認ですが,インストール後にPCの再起動が必要かもしれません}} 
**2.librealsenseのダウンロード
下記URLからlibrealsenseのZipファイルをダウンロードしてください.
{{small:GitHub:[link:https://github.com/IntelRealSense/librealsense] }} 
{{small:ver1.xをダウンロードしたい場合、Branchのtagから ver1.12.1 辺りを選択する必要があります。}} 
**3.サンプルプログラムを動かす 
・librealsense.vc12 or vc14のフォルダ内にあるrealsense.slnを起動させます.
Visual Studio が立ち上がって,プロジェクトの一覧が表示されるはずです.
・一覧からcpp-config-uiという名前を見つけて起動させます.
{{small:名前にカーソルを合わせて右クリックし「スタートアッププロジェクトに設定」→「デバッグなしで開始」}} 
cpp-config-uiでは,RealSenseの各種パラメータを操作しながら画像を取得できます.
**4.自作のプログラムからlibrealsenseを動かす場合の準備
ヘッダファイルとライブラリファイルの場所を開発環境に設定する必要があります.
・追加のインクルードディレクトリの設定
{#
#include "librealsense/rs.hpp"
#}
上記のように,プログラムからlibrealsenseのヘッダファイルを読み込めるように,開発環境にパスを設定する必要があります.パスはプロジェクトのプロパティから設定できます.
{{small:プロジェクトを右クリック→「構成プロパティ,全般,C/C++,追加のインクルードディレクトリ」}} 
・libファイルの設定 realsense.lib
オブジェクトファイルのリンク時に必要になります.
libファイルはlibrealsenseをコンパイルした後にlibrealsense/bin内に生成されます.
libファイルは追加の依存ファイルとしてプロジェクトのプロパティから設定できます.{{small:プロジェクトを右クリック→「構成プロパティ,リンカー,入力,追加の依存ファイル」}} 
・dllファイルの設定 realsense.dll
プログラムの起動時に必要になります.
環境パスに場所を指定しておくか,カレントディレクトリに配置しておけば読み込むことができます.
・プロジェクトの一覧で参考になるプログラム
cpp-tutorial-1-depthは,距離画像だけを取得してその内容をコンソールに表示するサンプルコードです.数十行程度の短いコードですので,分かりやすいと思います.
**サンプルコード①
距離画像を表示するだけの簡単なサンプルコードです.
プログラムを動かすには,librealsenseとは別にOpenCVの準備も必要です.
{#
#include "opencv2/opencv.hpp"
#include "librealsense/rs.hpp"
int main(){
    rs::context ctx;
    // set realsense id
    rs::device *dev = ctx.get_device(0);
    if (dev == NULL) {
        printf("could not find realsense\n");
        return 0;
    }
    // enable depth
    dev->enable_stream(rs::stream::depth, 640, 480, rs::format::z16, 30);
    
    dev->start();
    // -> mm scale
    const double scale = dev->get_depth_scale() * 1000.0;
    int key = 0;
    cv::Mat img(480, 640, CV_8UC1);
    const double nearPlane = 100.0;
    const double farPlane = 1500.0;
    // 27 = 'ESC' key
    while ((key = cv::waitKey(1)) != 27) {
        dev->wait_for_frames();
        const uint16_t *ptr = (const uint16_t*)(dev->get_frame_data(rs::stream::depth));
        // convert to image
        for (int i = 0; i < img.size().area(); i++) {
            const double depth = scale * ptr[i];
            img.data[i] = (unsigned char)((1.0 - (depth - nearPlane) / (farPlane - nearPlane)) * 255);
        }
        cv::imshow("realsense", img);
    }
    dev->stop();
    cv::destroyAllWindows();
    return 0;
}
#}
**サンプルコード② (C++)
ライブラリ:[link:simplesp]
サンプルコード:simplesp/sample/xx/rscapture
①と同じく,距離画像を表示するだけの簡単なサンプルコードです.
*librealsense ver2.x 使い方(例:Windows)
librealsense ver2.x の使い方について,簡単に説明します.
**1.PCのUSB3.0ポートにReal Senseを繋げる
繋げるだけで自動的にドライバがインストールされます.
{{small:ドライバのインストールが完了するまで大体1分くらいかかります}} 
{{small:未確認ですが,インストール後にPCの再起動が必要かもしれません}} 
**2.librealsenseのダウンロード
下記URLからlibrealsenseのZipファイルをダウンロードしてください.
{{small:GitHub:[link:https://github.com/IntelRealSense/librealsense] }} 
**3.サンプルプログラムを動かす 
・cmakeを使って、プロジェクトファイルを作成します
ver2.x以降、プロジェクトファイルは自分で作成する必要があります.
例えば,cmakeでVisual Studio を選択した場合、librealsense2.slnというファイルが作成されます.
これを起動すると、Visual Studio が立ち上がって,プロジェクトの一覧が表示されるはずです.
・一覧からrealsense-viewerという名前を見つけて起動させます.
{{small:名前にカーソルを合わせて右クリックし「スタートアッププロジェクトに設定」→「デバッグなしで開始」}} 
realsense-viewerでは,RealSenseの各種パラメータを操作しながら画像を取得できます.
**4.自作のプログラムからlibrealsenseを動かす場合の準備
ヘッダファイルとライブラリファイルの場所を開発環境に設定する必要があります.
・追加のインクルードディレクトリの設定
{#
#include "librealsense2/rs.hpp"
#}
上記のように,プログラムからlibrealsenseのヘッダファイルを読み込めるように,開発環境にパスを設定する必要があります.パスはプロジェクトのプロパティから設定できます.
{{small:プロジェクトを右クリック→「構成プロパティ,全般,C/C++,追加のインクルードディレクトリ」}} 
・libファイルの設定 realsense2.lib
オブジェクトファイルのリンク時に必要になります.
libファイルはlibrealsenseをコンパイルした後に生成されます.
{{small:生成される場所は,cmakeの設定によって異なると思うので,検索などして探してください.}} 
libファイルは追加の依存ファイルとしてプロジェクトのプロパティから設定できます.{{small:プロジェクトを右クリック→「構成プロパティ,リンカー,入力,追加の依存ファイル」}} 
・dllファイルの設定 realsense2.dll
プログラムの起動時に必要になります.
環境パスに場所を指定しておくか,カレントディレクトリに配置しておけば読み込むことができます.
・プロジェクトの一覧で参考になるプログラム
rs-captureは,カラー画像と距離画像を表示するサンプルコードです.数十行程度の短いコードですので,分かりやすいと思います.
**サンプルコード①
距離画像を表示するだけの簡単なサンプルコードです.
プログラムを動かすには,librealsense2とは別にOpenCVの準備も必要です.
{#
#include "opencv2/opencv.hpp"
#include "librealsense2/rs.hpp"
int main(){
    rs2::pipeline pipe;
    rs2::pipeline_profile profile = pipe.start();
    rs2::device dev = profile.get_device();
    if (dev.query_sensors().size() == 0) {
        printf("could not find realsense\n");
        return 0;
    }
    rs2::sensor sensor = dev.query_sensors()[0];
    rs2::depth_sensor depth_sensor = sensor.as<rs2::depth_sensor>();
    // -> mm scale
    const double scale = depth_sensor.get_depth_scale() * 1000.0;
    int key = 0;
    cv::Mat img(480, 640, CV_8UC1);
    const double nearPlane = 100.0;
    const double farPlane = 1500.0;
    
    // 27 = 'ESC' key
    while ((key = cv::waitKey(1)) != 27) {
        rs2::frameset data = pipe.wait_for_frames();
        rs2::depth_frame depth = data.get_depth_frame();
        const uint16_t *ptr = (const uint16_t*)(depth.get_data());
        // convert to image
        for (int i = 0; i < img.size().area(); i++) {
            const double depth = scale * ptr[i];
            img.data[i] = (unsigned char)((1.0 - (depth - nearPlane) / (farPlane - nearPlane)) * 255);
        }
        cv::imshow("realsense2", img);
    }
    pipe.stop();
    cv::destroyAllWindows();
    return 0;
}
#}
        
 
        
>> ご意見・ご質問など お気軽にご連絡ください.info