Raspberry Pi2/3で3Dセンサーを動かす(2/3)

前回で、Raspberry Pi2でopenframeworksを実行できる環境を作成しました。

3Dセンサー( aeroTAP 3D USBカメラ)を接続して、サンプルプログラムを実行してみます。

 

aerotap.hatenablog.com

 

 

準備

aeroTAP 3D USBカメラ (Amazonで購入)

f:id:aerotap:20180822000227p:plain 詳細スペックは、こちら

 

サンプルコードのダウンロード

Linux サンプル ( Openframeworks)

 

http://www.aerotap.com/developer.html

cd ~

wget http://www.aerotap.com/Help.SDK/sample/videoGrabberExample.zip

unzip videoGrabberExample.zip

 

3Dセンサーらのデータ取得

 Linux環境では、aeroTAP 3D USBカメラは、UVC1.1カメラとして、/dev/video0と/dev/video1 として2つのでデバイスとして表れます。

video0には、カラー画像、video1から深度画像を得ることができます。

 

追記:

最近、改めて環境を作成するとOS上には、/dev/video0 /dev/video1 /dev/video2 /dev/video3 と見えるようなりました。

この場合には、video0は、カラー画像、video2が深度画像になるため、ソースコードの変更が必要になります。

/aeroTAP/aeroTAPLinuxCamera.cpp を開き

            m_hCamera2 = new ofxUvcCamera("/dev/video1", depthWidth, depthHeight);

行を

            m_hCamera2 = new ofxUvcCamera("/dev/video2", depthWidth, depthHeight);

*video1 をvideo2に変更

 

 

サンプルビルド手順

openframeworksのサンプルコードを利用します。

1.VideoGrabberSampleを使います

cd /home/pi/openframeworks/examples/video/videoGrabberSample

2. ビルドできることを確認

make && make run

*ESCキーで終了

3. ダウンロードしたサンプルを上書き

cd src

mkdir aeroTAP

cp -r -v /home/pi/videoGrabberExample/src/ ./

4. ビルドと実行

make 

make run 

aeroTAP3D USBカメラからのカラー画像と、深度画像が表示されていることが確認できます。FPSもそこそこ十分出ています。

 

f:id:aerotap:20180822124326p:plain

 

コード解説

aeroTAPLinux3DCamera( Color Width, Color Height, Depth Map width,Depth Map Height);

*重要: DepthMap widthの値は、Color Widthの半分を指定します。つまり、QVGA (320x240)カラー画像の場合は、160x240を指定します。得られるDepthMapのサイズは、カラー画像と同じ、320x240になります。

 

  aeroCam = new aeroTAPLinux3DCamera(camWidth,camHeight,camWidth/2,camHeight);

 

Yuv2RGB変換

得られたカラー画像をRGBに変換します。

unsigned char *pTrg= colorImg.getPixels().getData();
YUY2_to_RGB24(pColor, pTrg, camWidth, camHeight);

 

深度画像

深度画像(Disparity)は、8Bitデータです。実際の距離(mm)に変換するには、ZDTableを利用しますが、ここでは、そのまま表示しています。

ZDTableについては、次回を参照してください。

 

unsigned char *pDepth = aeroCam->getFrame(typeD);
depthMap.setFromPixels(pDepth,camWidth,camHeight,OF_IMAGE_GRAYSCALE);

 

 

次回は、ofVboMeshを使って3D 点群表示してみます。

 

 

aerotap.hatenablog.com