ホーム > プログラミング > Xtion

Xtionのアーカイブ

Raspberry PiでMono+OpenNIを動かして、XtionのデータをWireless LAN経由でJitterに突っ込む

XtionとかKinectで色々遊んでると、USBの取り回しがめんどくなってくる。というわけで、小型安価な1board PCであるRaspberry Piを使って無線化してみた。
前にRaspberryPi上でMonoを動かすことはできていたので、試しにC#で書く。遅いのは知ってる。
最初はUser detectionまでやろうかと思ったが、OpenNIのMiddlewareであるNITEがUser detectionを担当しているらしく、NITEはOpen sourceでは無いらしく、諦めた。CortexAなど用のARMバイナリを配布している人は居たが、RaspberryPi用は見つからなかった。方法があれば誰か教えて下さい。
というわけでUser detectionは諦め、とりあえずDepth情報のみをNetworkで投げてみることにした。

ついでに、プロトコルをJitterに合わせることで、Max/MSPで簡単に受信できるようにした。
Jitterで流れている情報はRGBXなフォーマットなので、とりあえずGBにDepthの2byteをそのまま埋める。手抜き。

紆余曲折を経たが、基本的にHard-float coreを使わなければOK。ちゃんと動いた。
xtionjitter
無線LANとXtionを駆動するので、Self-powerのUSB hubは必須。Raspberry Pi本体の電源もHubから取れた。
コンパクトに無線化できたので、余ってたプラダンでガワを作って三脚に設置してみた。
xtionraspberrypi
VNCで無線LANからGUI操作できるので、外にはUSB hubの電源だけが出る感じ。5V – 2AのAC Adapterなので、USB Mobile Batteryとか使えば完全無線化できる気がする。こんど買ってこよう。

裏からの図。青いLEDが光ってるのがUSB Hub。緑に光ってるのが無線LANアダプタ。
RaspberryPi本体のUSBにUSB Hubと無線LANアダプタ、USB HubにRaspberryPiの電源のMicroUSBとXtionが刺さっている。
xtionraspberrypi_back

おまけ
xtionjitter_neko

Raspberry PiでXtion+OpenNIを動かす

買って久しく眠っているRaspberry Piですが、以前から挑戦してみようと思ってたOpenNIのビルドとKinect互換デバイスXtionの認識に挑戦しました。
思い立った頃はあんまやってる人がいなかったけど、結婚とかしているうちにやりたい亊そのまんまな資料を公開している人が居た!
この通りにやって難なくできました。難なくとは言ってもビルドにはかなりの時間がかかりましたが。
サンプルのSimpleViewerも動きますが、かなり重いので、表示系は使っちゃダメな感じ。
とはいえ、4000円弱の名刺サイズのLinuxボードで3次元データが撮れるのは熱い!

というか、同じことやってた人、色々おもしろそうな亊やっているようです。
http://mewgen.com/
そろそろ何か形にしたいなー

この辺をやるにはPCLの勉強が必須な気がする。まあそのうち手をつけよう。。

XtionによるSkeleton Trackingの弱点

Xtionによる、というかOpenNIによるのかな?
ライブでの利用を想定して、プロジェクタ画面との位置関係の算出をしようとゴニョゴニョしていたけど、どうもうまくいかない。
結論から言うと、骨格認識の精度が悪い。KinectとかXtionとかは、Motion detectするために、Realtime性重視のアルゴリズムになっているらしく、Frame rateは速いが、その分精度はよくないらしい。
特に後ろ姿の認識や、壁の近くでの認識率が非常に良くない。手や頭の座標精度というよりは、手や頭が在るかどうかの認識が出来なかったり、柱を誤認識したりする。
まあ、もともとゲームなどの用途だし、しょうがないか。。3D点群の座標自体の精度は思ったよりよさそうなのに、残念。
横向きに撮るなどして精度改善を狙おう。

Kinect互換デバイスXtion Proで遊んでる

Xtionで色々遊んでいます。
とりあえず、ジェスチャー認識で色々やってみてたりする人がたくさん居る中で、新しくて使えそうなことをやりたかったので、ちょっと数学を使う分野に手を出してみている。
やりたい事は、プロジェクターとのカップリング。プロジェクターで映像が映せるとこに持って行って、適当に設置して、ちょっとキャリブレーションするだけでスクリーンの位置を認識して、なんかスクリーンの前に立つ人とのインタラクションする。
Xtionでとった3次元空間から平面っぽいところを認識して、人がプロジェクターの映像の四隅を指さしたりすることで、プロジェクター画面の座標と3次元座標を対応付ける予定。

いつか書いた開発環境についてはVisual Studio on WindowsとMonoDevelop on Linuxを横断して、Dropboxでプロジェクトファイルごと同期しながら書いてる。特に安物ノートPCのUbuntu上でこれほど簡単に空間認識できるのはヤバい。
後はMacの動作確認をしたい所。

Kinect互換デバイス購入して開発環境作った

Kinect hackっぽいことをしてみようと思っています。
数年前に流行りましたが、今ではもはやHackでも何でもなく、Microsoftから公式SDKも公開されている。

Hardware

とりあえずKinect sensorを買っても良かったんですが、互換デバイスであるXtionを買うことにしてみた。
本家Kinectとの違いは以下の通り。機能は多少犠牲になるが、モバイル性能重視でXtionにした。

  • バスパワー駆動。USBケーブル1本で接続完了!
  • 小さい。Kinectの半分ぐらいに見える。
  • 普通のカメラが無く、RGB画像は撮れない。Depth画像のみ。
  • チルトモーターが無い。本家は首がモーターで上下に傾くらしい。

Software library

とりあえずOpenNIをいじっている。本家KinectだとKinect SDKがいいかもしれない。
OpenNIは骨格認識の際に、上半身だけとかでも認識できるらしい。ライセンス的にもOpenNIの方がよさそう。何よりLinux対応の良さが重要。

Development Environment

開発に使うOSと開発環境(開発言語)は迷うところ。
KinectやXtionを使う人はメディアアート界隈の人が多くて、openFrameworksなどからプラグイン経由で使ってる人とかが多いのかな?
MaxとかjitterとかopenFrameworksとか、そのへんの仕組みは面白そうだし、cross platformなのも魅力だが、変化が激しいし、コードを書くのに慣れた人には逆にとっつきにくい。

で、結局いつものパターンで開発言語はC#を使いたい。慣れてるから。現在、LinuxなMobile PCとWindowsなDesktopを使っているので、両方に対応したい。てことでMonoDevelopってことになる。
Xtionは情報が少なくて、特にMonoで動かす事例があんまり無い。公式にもLinuxでの対応言語にC#は無い。
最悪C++でいいや!と思って買っちゃったが、WindowsでビルドできたプロジェクトをLinuxでも普通にビルド&実行できた。
(落としてきたまんまのサンプルのバイナリは動かなかったが、理由は追っていない。)

ホーム > プログラミング > Xtion

カレンダー
« 2018 年 7月 »
S M T W T F S
1 2 3 4 5 6 7
8 9 10 11 12 13 14
15 16 17 18 19 20 21
22 23 24 25 26 27 28
29 30 31        
最近の反応
メタ情報

ページの上部に戻る