aeroTAP 3D USBカメラ用 OpenNI2ドライバーの試作 (PCL編)
aeroTAP 3D USBカメラ用 OpenNI2ドライバーの試作 (PCL編)
OpenNI2ドライバーの試作にあたり、各種アプリケーションでのテストを行ったので、設定方法などと共に紹介します。
今回は、PCL(Windows x86環境)です。PCLの入手をインストール手順は、下記のサイトを参照してください。非常に大変です。既に準備されている場合は、そのまま使えると思います。
実行結果
準備するもの
1. PCL環境
サンプルコードのpcl_openni2_viewerを使います。
C:\pcl-master/build フォルダーにビルド環境を作成しました。
2. OpenNI2ドライバーのダウンロード
http://www.aerotap.com/developer.html からOpenNI2ドライバをダウンロードします。
設定方法
1. OpenNi2ドライバーのコピー
OpenNI2ドライバのx64フォルダーのファイルを、PCL OpenNI2ドライバフォルダーにコピーします。
C:\pcl-master/build/bin/openNi2/drivers
実行方法
1. pcl_openni2_viewerをビルドして、実行します。
カラー画像と、3D画像が表示されます。
aeroTAP イヤホン ワイヤレスネックレスヘッドセット BL スタイリッシュで軽量なネックレス型 通勤、スポーツ、どんなシーンでもずっと纏っていられます 片耳 両耳 水色
- 出版社/メーカー: 株式会社ネクステッジテクノロジー
- メディア: エレクトロニクス
- この商品を含むブログを見る
aeroTAP 3D USBカメラ用 OpenNI2ドライバーの試作 (RTAB-Map編)
aeroTAP 3D USBカメラ用 OpenNI2ドライバーの試作 (RTAB-Map編)
OpenNI2ドライバーの試作にあたり、各種アプリケーションでのテストを行ったので、設定方法などと共に紹介します。
今回は、RTAB-map(Windows環境)です。RTAB-Mapの入手は、下記のサイトから行えます。
実行結果
準備するもの
1. RTAB-mapのダウンロード
https://github.com/introlab/rtabmap/releases からWindows x64版をダウンロードし、インストールします。
2. OpenNI2ドライバーのダウンロード
http://www.aerotap.com/developer.html からOpenNI2ドライバをダウンロードします。
設定方法
1. OpenNi2ドライバーのコピー
OpenNI2ドライバのx64フォルダーのファイルを、RTABMapフォルダーのOpenNI2/Drivers フォルダーにコピーします。
実行方法
1. RTABmap.exeを実行します。
2. デバイスを選択します。メニューから[Detection]>[Source]>[More Options...]を選択します。
3. デバイスの詳細を設定
下の画面の内容を設定し、[Test]ボタンをクリックすると、カラー画像と、深度画像が表示されたら、設定は問題ありません。
4. メイン画面に戻り、キャプチャを開始します。
メニューから[File]>[New Database]を選択し、新しいデータベースを作成します。‘
カメラを手に持って、撮影準備をします。
次に、[Start]ボタンをクリックすると開始されます。
カメラをゆっくり移動したり、回転させながらマップを作成します。
停止ボタンをクリックして完了です。
ヒント
操作方法の詳細は、https://github.com/introlab/rtabmap/wiki/Kinect-mapping
カメラをあまり早く動かすと、レジストレーションが見つからない警告(赤いフラッシュ)がでます。最後の位置に戻って、慎重に取り直してください。
Skanect での利用
本格的な3Dスキャナーソフトウェアとして、Skanectがあります。同様にOpenNI2ドライバを登録することで使えます。無料版もあるのでトライして見てください。
ただ、現在のaeroTAP 3D USBカメラでは、精度不足で細かな凹凸は計測できません。
aeroTAP 3D USB GSなら十分なスキャン結果が得られますのでこうした利用には、GSを期待してください。
aeroTAP イヤホン ワイヤレスネックレスヘッドセット BL スタイリッシュで軽量なネックレス型 通勤、スポーツ、どんなシーンでもずっと纏っていられます 片耳 両耳 水色
- 出版社/メーカー: 株式会社ネクステッジテクノロジー
- メディア: エレクトロニクス
- この商品を含むブログを見る
Raspberry Pi2/3で3Dセンサーを動かす(3/3)
Raspberry Pi2に3Dセンサーを接続することができたので、もう少し3Dぽく表示する方法を紹介します。
3D 点群の表示には、ofVboMeshを使います。
ZDTableの入手
センサーからのDepthMapの情報 8bitを距離データ(mm)に変換するためのテーブルを予め準備します。
ExportZDTable.exeをaeroTAP3D USBカメラを接続したWindows環境で実行します。
ExportZDTable.exe /VGA
ExportZDTable.exe /QVGA
ExportZDTableは、下記サイトからダウンロードできます。
*WVGA対応版のaeroTAP 3D USBカメラは、直接 shareEDGEまでお問い合わせください。通常版では、対応していません。
準備
サンプルコードをダウンロードします。
http://www.aerotap.com/Help.SDK/sample/meshFrom3DCamera.zip
また、今回は、examples/3d/meshFromCamera を使います。
/home/pi/openframeworks/examples/3d/meshFromCameraを/home/pi/openframeworks/apps/myApps/meshFrom3DCameraとしてコピーします。
cp -r -v /home/pi/openframeworks/examples/3d/meshFromCamera /home/pi/openframeworks/apps/myApps/
1. ビルドできることを確認
cd /home/pi/openframeworks/apps/myApps/meshFrom3DCamera
make && make run
*3Dセンサーからのカラー画像を使って表示されていることを確認
2. サンプルコードで上書き
cp -v-r /home/pi/meshFrom3DCameraExample/* ./
3. ZDTableを準備
サンプルコードに含まれているものは、他のカメラのデータのため、ご利用のカメラから予めカメラから抽出したZDTableをbin/dataフォルダーに上書きコピーします。
zdTable_VGA.txt
zdTable_QVGA.txt
4. ビルドと実行
マウスで、グリグリと3D描画を動かすことができます。24FPS程度出ています。
コードの解説
threadedCam()
3Dセンサーからのデータの読み込み、ZDTableの読み込みを行っています。
RGBデータを取得
unsigned char *threadedCam::getImage(int cam)
距離データを取得
unsigned char *threadedCam::getDepth(int cam){
ここで得られる距離データは、mmに変換された値です。
3D点群への変換
LocalLengthを使って、xx,yyを距離(mm)へと変換します。FocalLengthは、センサーの種類、解像度により異なります。
float zz = (float)pDepth[p]; float zz = (float)pDepth[p];
float xx = (float)(x - tCam.camWidth/2)*zz / nFocalLengthW;
float yy = (float)(y - tCam.camHeight/2)*zz / nFocalLengthH;
ofVec3f tmpVec(xx, yy, -zz);
*表示するために、奥行きの符号を変更しています。
点群をVBOに保存
myVbo.setVertex(pp, tmpVec);
myVbo.setVertex(pp, tmpVec);
myVbo.setColor(pp, sampleColor);
高速化/表示変更
#define POINT_STEP 2
の値を大きくすると、サンプリングが荒くなり、点群数が減ります。
#define POINTSIZE 2
の値を大きくしると点の描画が大きくなります。
考察
今回、単純にカラー画像を、生の深度データをそのままVboMeshに割り当てて表示しています。単純というのは、本気で表示するには、深度データの加工が必要です。
例えば、ノイズの除去(Outlier処理)、アップサンプリング(穴埋め)、平滑化などの処理が必要です。
Raspberry piでこれらをリアルタイムで処理するには、パワー不足かもしれませんが、スケールを荒くしたり、距離フィルターを入れたりすることで点群数を少なくすることである程度実用可能な速度が出ると思いますので、挑戦してみてください。
Windows版の3Dビューアは、こちら(3D Viewer)にありますので参考にしてください。
aeroTAP イヤホン ワイヤレスネックレスヘッドセット BL スタイリッシュで軽量なネックレス型 通勤、スポーツ、どんなシーンでもずっと纏っていられます 片耳 両耳 水色
- 出版社/メーカー: 株式会社ネクステッジテクノロジー
- メディア: エレクトロニクス
- この商品を含むブログを見る
Raspberry Pi2/3で3Dセンサーを動かす(2/3)
前回で、Raspberry Pi2でopenframeworksを実行できる環境を作成しました。
3Dセンサー( aeroTAP 3D USBカメラ)を接続して、サンプルプログラムを実行してみます。
準備
詳細スペックは、こちら
サンプルコードのダウンロード
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もそこそこ十分出ています。
コード解説
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 点群表示してみます。
Raspberry Pi2/3で3Dセンサーを動かす(1/3)
Raspberry Pi2でUSBカメラの性能を見ていたら、そこそこの性能が出ていたので驚きました。
少し集中して勉強しましたので、誰かのお役に立てばと思い、手順を残します。
ここでの手順は、Ubuntu + openFrameworks でも同じように動作します。
ゴール
Raspberry Pi2にaeroTAP 3D USBカメラ( 3Dセンサー)を接続して、リアルタイムで3D描画(VboMesh)します。
準備
Raspberry Pi2の環境を作成します。Raspberry Pi3も同様、Raspberry Pi3は電源を入れたままにしていると、時々Low Batteryの警告が出ているのでRaspberru Pi2をメインすることにしました。
描画には、openframeworksを使います。ただ、バージョンは、v0.10.0です。v0.9.8は、Raspberry Pi環境では pocoライブラリのバージョン違いのためかビルドできませんでした。悪戦苦闘している中、v0.10.0を試すと、あっさりできたのでv0.10.0がお勧めです。
MicroSDカードは、16GB以上を推奨。8GBでは、作成したアプリのビルドでフルになってしまいました。
Raspberry Pi2起動イメージの作成 ( Windows 環境から)
Raspberry Pi2のイメージは、2018-06-27-raspbian-stretchを使います。
下記サイトを参照しながら、起動用SDカードを作成します。
https://openframeworks.cc/ja/setup/raspberrypi/raspberry-pi-getting-started/
RPi Easy SD Card Setup - eLinux.org
1. Formatterをダウンロードし、SDカードをフォーマット
https://www.sdcard.org/downloads/formatter_4/eula_windows/
2. イメージライター(ImageWriter)でSDカード書き込み
https://www.sdcard.org/downloads/formatter_4/eula_windows/
ダウンロードした、Raspberry pi2イメージを選択して、書き込みます。
3. カードをRaspberry Pi2に差して、起動!
Raspberry Pi2初期設定
1. 起動後、guiでパスワード設定、ロケール情報、WiFi設定を行う。(アップデートはここではスキップ)。
2. 再起動
3. guiが起動したら、ターミナルを開く
4. sudo raspi-config とタイプして、各種基本設定を行う。
- SSHの設定
メニューから 5 Interfacing Options > P2 SSH
- ファイルシステムの拡張
メニューから 7 Advanced Options >A1 Expand Filesystem
- メモリー分割
メニューから7 Advanced Options >A3 Memory Split > 64 > <ok>
- コンソールの起動
メニューから 3 Boot Options >B1 Console
5. Escで終了して、ターミル画面に戻る
6. rootのパスワードを設定
root password
sudo passwd root
7. OSのアップデート
sudo apt-get clean
sudo apt-get updates
udo apt-get upgrade
8. 再起動
sudo reboot
openframeworksの準備 ( WindowsからSSHで接続して )
後の作業は、Puttyなどから、SSHで接続して作業すると楽です。
1. openframeworks v0.10.0 aemv6 のダウンロードと初期設定
wget https://openframeworks.cc/versions/v0.10.0/of_v0.10.0_linuxarmv6l_release.tar.gz --no-check-certificate
mkdir openFrameworks
tar vxfz of_v0.10.0_linuxarmv6l_release.tar.gz -C openFrameworks --strip-components 1
cd openframeworks/scripts/linux/debian
sudo ./install_dependencies.sh
sudo ./install_codec.sh
make Release -C /home/pi/openframeworks/libs/openFrameworksCompiled/project
*すべてエラーがなく終了することを確認
2 環境確認
cd /home/pi/openFrameworks/examples/graphics/polygonExample
make
make run
*サンプルプログラムが実行できることを確認
3. サンプルプログラムのビルド
cd /home/pi/openframeworks/scripts/linux
./buildAllRPIExamples.sh
aeroTAP イヤホン ワイヤレスネックレスヘッドセット BL スタイリッシュで軽量なネックレス型 通勤、スポーツ、どんなシーンでもずっと纏っていられます 片耳 両耳 水色
- 出版社/メーカー: 株式会社ネクステッジテクノロジー
- メディア: エレクトロニクス
- この商品を含むブログを見る
aeroTAP 3D USBをPCLで使う (1) PCL環境作成
aeroTAP 3D USBカメラをPCLで使うために、PCL1.8.0 32bit環境を作成する手順についてのメモです。
ネットに様々な例があったが、最新版の構築に関する文献がなかったのでメモしておきます。
環境
Windows 10 Home 64Bit ( 2016update)
GForce GT 730 ( cuda用に必要)
事前準備
Visuak Studio 2015 Update3のインストール
MSSDK (for Windows 10)インストール
CMAKE 3.7.1インストール
cuda_8.0.61_win10.exe インストール
Opencv 2.4.9 (Cmakeでビルド)
WindowsMPI SDK 7.1.12437.25 インストール
Kinect SDK KinectSDK-v2.0_1409-Setupをインストール ( Kinfuをビルドするため)
OpenNI2 インストール
参考文献
https://gist.github.com/UnaNancyOwen/59319050d53c137ca8f3#file-pcl1-8-0-md
Boost 1.63.0
参考文献通りに、Boost 1.63.0 をビルドとインストールwith Visual Studio
*文献になないが、mpi.jamの編集が必要( mpiのパス)
eigen-3280
インストールのみ
flann-1.8.4-src
ビルドとインストール
qhull-2015.2
ビルドとインストール
VTK-7.0.0
ビルドとインストール
* 文献にある通り、VTK_RENDERING_BACKGROUND OpenGL2->OpenGLの設定変更が必要
OpenCV ビルド (2.4.9を選択)
PCLのビルド前に
PCLのビルドを行う前に、環境変数の設定(文献参照)を確認し、PCを再起動します。
WITHに下記をチェック
-- WITH_CUDA
-- WITH_OPENGL
-- WITH_OPENNI2
-- WITH_PNG
-- WITH_QHULL
-- WITH_VTK
BUILDに下記をチェック
PCLビルドとインストール
文献通りビルドとインストール( VCを管理者権限で実行すること)
完成までに遭遇した問題
実際環境作成には、相当時間がかかりました。問題の一つは、Visual Studioのバージョン選択。
VC 2010, 2012,2015と試したが、結局2015で成功。ただし、VC1025で環境作成する前に、VC2010,2012など全てをアンインストールする必要があった。
バージョンの違うVCでコンパイルされたlibが影響して、最終的に、PCLのビルドでLinkエラーが発生する。
kinfuビルドは、結局kinfu_appのプロジェクトは生成されなかったので、toolsフォルダのものを元にkinfu_appをビルドした。
aeroTAP イヤホン ワイヤレスネックレスヘッドセット BL スタイリッシュで軽量なネックレス型 通勤、スポーツ、どんなシーンでもずっと纏っていられます 片耳 両耳 水色
- 出版社/メーカー: 株式会社ネクステッジテクノロジー
- メディア: エレクトロニクス
- この商品を含むブログを見る