robo8080のブログ

ロボット製作や電子工作など。

Kinect SDK V1.0を使ってみた。(Kinect for Xbox 360使用)

2012年02月25日 | Kinect SDK

Kinect SDK V1.0が公開されたのでさっそく使ってみた。

まず、ここからSDKをダウンロード。

インストーラーが1つなのでOpenNIに比べてインストールも簡単。

サンプルの”Kinect Explorer”もサクッと動いた。 

OpenNIだとなかなかこうはいかない。インストールでトラブル人が多いようだ。

 

まず、”Kinect Explorer”でSkeletonTrackingを試してみた。

simple-openniでやった時より安定している(ふらつかない)ような気がする。

 

ZOOM for Xbox 360 を使ってみた。椅子に座ったままでも全身が画面に入りやすくなる。

 

さて、SDKが使えるようになったので、サンプルのソースを読んでみる。

Kinect SDKはサンプルプログラムの数が少ない。

OpenNIはサンプルプログラムが多かったから、やりたいことがすぐ試せたんだが...

ここを参考にさせていただく。シンプルでわかり易い。

Kinect for Windows SDK で RGBカメラの画像を表示する(C# + WPF)

 

まずは、Kinect SDK + C# でDepthの3次元表示をやってみたい。

DirectXは使ったことないから、やはり使い慣れたOpenGLかな。

C# でOpenGLを使うにはOpenTKがよさそうだ。ここの説明がわかり易い。

 

どうもKinectでいろいろ実験するには、processing + simple-openniが一番簡単な気がする。

余計なことに煩わされずにやりたいことにすぐ到達できる。

いまのところ、Kinectを使ったアプリを配布するならKinect SDKで、自分で作って自分で使うだけならOpenNIの方が楽かな。

Kinect SDK + Processingが使えるようになれば状況が変わるかもしれないが...。

 

Kinect SDK API Referenceを読む。

Depthとカメラ画像を重ねて3次元表示したいのだが、OpenNIの"depthMapRealWorld()"みたいなAPIはないのかな...

"KinectSensor.MapDepthFrameToColorFrame()"を使えば同様のことが出来そうだ。

 

試行錯誤の末、Depthを使ったカメラ画像の切り出しがやっと出来た。

Depthとカメラ画像がちゃんと重なっているので指の形も分かる。が...表示が異様に遅い。

 

これを見ながらKinect SDKでのDepthデータの扱い方を勉強。

今日、一日中試行錯誤でやって来たことは間違っていなかったようだ。

Working with Depth Data (Channel 9)

 

SDKのサンプルに付属の"KinectWpfViewers"を使うと、ほとんどコードを書かなくても簡単にDepth表示やSkeleton表示ができることが分かった。

やり方は、ここの動画の最後の3分30秒ぐらいから ...(英語ですが、見てればわかります。)

 

あぁ~。OpenNI + Processingを使えば半日もかからなかったことが、Kinect SDK + C# だと4日掛かってもまだ先が遠い。

やりたいことにたどり着くまでにマスターしなければならないことが多すぎる!!

 

"KinectSensor.MapDepthFrameToColorFrame"を使うと表示がカクカクになってしまう。

処理が重いのかな~。

現象が出るのはrgb,depth共に640x480の時。depthが320x240ならOK。

色々調べてみるとデータ取得イベント内での処理が重くて、次のフレームデータ来るまでに終わらないのが原因のようだ。

データ取得イベント内でやっていた表示処理を外へ移すことにする。

 

さらに、Kinect SDK API Referenceを読む。

Tilt Motorを制御して首を振るときは、1秒に一回ぐらいにしろと書いてある。

Tilt Motorでトラッキングするのは無理か...。サーボモーターを外付けするかな。

やっと C#+OpenGL(OpenTK)の使い方がわかってきた。つぎは、Kinect SDKと組み合わせてDepthを3次元表示してみる。

 

ついに、Kinect SDK + C# + OpenGL(OpenTK)で、Depthを3次元表示出来るようになった。

 

動画はこちら。

Kinect SDK + C# + OpenGLで、Depthを3次元表示してみた。

 

次は、カメラ画像とDepthを3次元表示してみた。

 

 

さらに、Skeletonも3次元表示できるようにした。

 

 

動画はこちら。

Kinect SDK v 1.0 + C# + OpenGL(OpenTK)で、カメラ画像、Depth、スケルトンを3次元表示してみた。

 

―以上―

 

関連するリンク

ProcessingでKinectを使ってみた。

DOWNLOAD KINECT FOR WINDOWS SDK

simple-openni

Kinect for Windows SDK で RGBカメラの画像を表示する(C# + WPF)

OpenTK

OpenGL with C# (1) : 初期化

Working with Depth Data (Channel 9) 


2月23日(木)のつぶやき

2012年02月24日 | 日記
10:42 RT from Janetter
トラ技3月号のカメラモジュール、どちらも品切れになっている。割引きは3/10までみたい。日昇テクノロジー通販 csun.co.jp/SHOP/447490/84…
Simさんのツイート

11:28 from Janetter (Re: @okini3939
おもしろそう。 RT @okini3939 ダイセン電子工業の2モーターのロボットベース「eDES-2WD」なら、 #mbed のI2Cで簡単にコントロールできます。 センサーも付いてるのでライントレーサーや迷路脱出ロボットが作れる。 mbed.org/users/okini393…

11:41 from Tweet Button  [ 1 RT ]
おもしろそう。 --- 2方向同時に撮れるビデオカメラが6千円で販売中 / ユニークな動画撮影に?本来は車載用 akiba-pc.watch.impress.co.jp/hotline/201202… @watch_akibaさんから

by robo8080 on Twitter

2月22日(水)のつぶやき

2012年02月23日 | 日記
14:20 from Janetter (Re: @cpu4edu [ 1 RT ]
おもしろそう! RT @cpu4edu 公開講座的な用途にGPSロボットカーキット、ハード完成。ソフトはこれからコツコツ作ります。 r10.to/hCvz7d #r_blog

15:13 from Tweet Button  [ 5 RT ]
#mbed + トラ技カメラBの実験。 ブログにまとめてみました。 --- Robot No.8080のブログ blog.goo.ne.jp/roboz80/e/8387…

by robo8080 on Twitter

mbed + トラ技カメラBの実験。(その1)

2012年02月22日 | mbed LPC1768

トランジスタ技術2012年3月号の特集で使っていたカメラモジュールが面白そうだったので、mbedでも使えないか実験してみた。

特集で使っているカメラモジュールには頒布カメラAと、頒布カメラBの2種類ある。

カメラAは動作電圧が3.0Vまでで、外部から24MHzクロックを入れてやる必要がある。

カメラBは動作電圧3.3Vでクロック内蔵だから、外付け部品なしでmbedに直結出来そうだ。

さっそくトラ技カメラBを入手して配線。

  

 

色々調べてみたら、すでにmbed + トラ技カメラBを動かしてプログラムを公開している方がいたので、ありがたく使わせていただくことにした。

ここのプログラムをインポートして試してみたらすんなり動いた。

OV7670_with_AL422B_QQVGA_test

mbedとカメラBの配線は直結で良かったが、SCL端子は2.2Kの抵抗で3.3Vにプルアップが必要だった。

 

 

これで、とりあえずカメラから何らかのデータを取る所までは出来た。

今度はこれを表示してデータが正しいか確認してみる。

  

 

画像データをUSBシリアルモジュールでPCに送り、Processingで表示してみた。

 

 

動いた!!ちゃんとカメラ画像が表示された。(左はちょっと手振れ)

    

 

カメラ画像が取れるようになったので、今度はMARY OB基板(OLED)に表示してみる。

配線がすごいことになってる。(^_^;)

  

 

MARMEX_OB基板もライブラリが公開されているので使わせていただく。 

MARMEX_OB基板OLEDライブラリ (MARMEX_OB_oled)

なぜかMARMEX_OB基板OLEDライブラリは、mbedライブラリを最新版(Revision39)にすると動かない... 

以前使ったRevision28があったので入れ替えてみたら動いた。

(@nxpfanさんのところではRevision39でも問題なく動作するという報告を頂いたので、これは自分の環境だけの問題かもしれない。)

 

 

やっと、MARMEX_OB基板OLEDライブラリが動くようになったので、カメラ画像を表示してみた。

  

 

参考までに、私が実験した手順をメモしておきます。

【手順1】

mbedとトラ技カメラB、MARMEX_OB基板の配線。

ピン配置等は、トラ技の記事やカメラBの資料、MARMEX_OB基板の資料、後で出てくるソースファイルを参照してください。(手抜きですみません。)

カメラと接続するSCL端子を2.2Kの抵抗で3.3Vにプルアップする以外は直結でOKでした。

【手順2】以下の2つのプログラムをインポートする。

OV7670_with_AL422B_QQVGA_test

MARMEX_OB基板OLEDライブラリ (MARMEX_OB_oled)

 【手順3】

”OV7670_with_AL422B_QQVGA_test”を改造ベースにするので、必要に応じてプログラム名を変更しておく。

次に、”MARMEX_OB_oled__HelloWorld”から下図のように2つのファイルをコピーする。(Ctrlキーを押しながらドラッグ&ドロップ)

 

 【手順4】"main.cpp"へ下図赤枠のように追加する。

 

  【手順5】"main.cpp"へ下図赤枠のように追加する。

 

 

【手順6】

プログラムをコンパイルして実行ファイルをmbedへダウンロードし、mbedをリセットする。

シリアルターミナルから何かキーを入力すると、このようにMARMEX_OB基板にカメラ画像が表示される。

 

 

表示速度を調べるために、カメラ画像取得->OLED表示、を連続でやるように改造してみた。

表示速度は1fpsぐらいかな。OLEDへの表示をやらずに、カメラ画像取得だけなら2~3fpsぐらい(LEDの点滅を見た感じ)。

 

(その2)へつづく...