Kinect勉強会 vol.3 いってきた。

Kinect勉強会に行ってきたので、書き留めておきます。
今回は品川インターシティの日本マイクロソフト本社のセミナールームでした。
@hagino3000さん曰く、MSのUGSS(コミュニティ支援サービス)で気軽に借りられたとか。

  • エントリ

@harino3000さんの「キネクトハッカーズマニュアル」の解説です。
画像処理初心者、C++初心者、Kinect知らん人、チームラボ入社希望者が対象だそうです(笑)。
トピック:ジェスチャを使ったPCの操作、深度画像をつかった衝突判定、ユーザー検出機能をつかったWEBアプリ。
「〜マニュアル」争奪じゃんけん大会も。毎回、皆さん太っ腹です。

キネクト ハッカーズマニュアル

キネクト ハッカーズマニュアル

日本マイクロソフト太田さんによる解説。
KinectSDKの概要。ライセンスについては何気ちょっと時間さいてた。MSのUXチームはメインC#でやってる。
組み方(C#ベース)。「直感的に組めるよ」っていうコンセプト。ユーザー7人までのトラッキング
"HelloWorld"的なデモ:単色深度画像。複数人もトラッキングしている。
WindowsPhone7との連携デモ:「守衛さん、誰か来ましたよ」。WP7のPushNotificationを用いる。ネットワークの都合で動かず。残念。

  • NUI x Buissiness

@kaorun55さんのKinect商用利用に関する経験談と考察。
イノベーション:「イノベーション」とは「未来には普通にあるものを作ること」だ。NUIはいままでPCを使っていなかったユーザーも使える可能性。これが議論のベース。
ライセンスの問題。ライセンスの復習:Kinect機器=「XBOX以外のデバイスに接続してはいけない」。「デモンストレーションには可」by MSR。この状況でどうするか.. XtionPROを使う。商用利用可=Xtion+OpenNI(MS以外)が「文句を言われない」組み合わせ。XtionにWEBカメラを取り付けてみた:スペックつらい。フレームが合わない。XtionPROLiveが出ます。これでカメラ画像+深度画像をつかって開発ができる。
開発するときの課題。言語:C/C++はハードル高い。NUI:ジェスチャによるパワポ操作でも疲れる。画面が3Dだと馴染むのではないか。
品質の課題。テストはどのように行うか。ONIファイルでデータを流し込む。
でもKinect開発は楽しい。大変だけど、NUIの可能性は魅力的。「未来の普通を先取りしよう」。

  • 最強のNUIをつくる

@nekonomicsさんのLT。Kinectをコントローラとして用いるデモ。ジェスチャでMacのウィンドウ上をかーびぃが動き回るデモ。PC2台(センサーPC:Win+メインPC:Mac)で実施。「NUIはPCと相性がよくない」。
Kinectは"NUI養成ギブス"である。

  • ProccessingでKinect簡単プログラミング

@ksasaoさんのLT。Processingはプログラミング言語。とにかく簡単に記述できるのが身上なので、とっつきにくい初心者に向いてる。ProcessingはArduino等のデバイスでも軽快に動作。

@hirotakasterさん(SIPropの人。じつは昔ちょっとお世話になったな..)のLT。
beegleboard-xM+AndroidからシリアルでKondoAnimalを制御。人に追従して移動する。人追従はシンプルで顔検出して前方4方向のいずれかに向かう。顔検出はOpenCVでやっている模様。

  • 疑問点・所感

太田さん曰く、MSのKinectSDKによって取得できる深度バッファの上位3bitがトラッキングしているユーザーの数(上限7人)。MSRは7人が上限だと仕様を割り切っているのか。それとも後から4bitに仕様変更があるのだろうか。怖いのでハッキリしてほしい。
今日は話題に登らなかったが、MSのKinectSDKには音声認識機能(英語のみ)がついている。NUIにとって音声は欠かせない。身体が疲れるのはKinectのモーションセンサー機能のみを使っているからで、深度情報を使っているかぎりその課題は半永久的に消えない。NUIは音声も含めた大きな概念であることを議論に含めてほしい。
XtionPROにカメラを取り付けるという試みが紹介されてたけど、キャリブレーションしてないからカメラと深度画像の座標が一致しないのは当然。正確に言えば、高剛性のKinectも出荷状態でズレているし経年とともに徐々にズレるはず。物理的にカメラと赤外線センサーが異なる座標上に位置している以上、至近でのズレは否めないが、ステレオキャリブレーションのようなことをすれば、これらは一致する。
そういえば最初にAndroidOpenCVをバインドしたのも日本Androidの会の人だったなぁ。。
思った以上にC/C++への風当たりが強いことが気にかかった。私は短いプログラマ人生のほとんをC++で食べてきたし、OpenCVも長くなってきたので、なんの違和感もないが、毎回勉強会で指摘される点。OpenCVやロボットの世界もまだまだC/C++なのでやめるわけにはいかないが、ずっと気にかかっている。画像や3Dポリゴンを扱うコーディングはどの言語がコーディングしやすいのか、答えが必要。OpenCVはその答えをPythonとしている。MSはC#。OGREはC/C++。さてさて、俺は??
私はKinectを精密センサーとして活用しようとしているので、NUIについて語れる論を持ち合わせていないが、@nekonomicsの仰った「究極のNUIは空気が読める」は至言だと思う。それは世界中のコミュニケーションロボットが目指しているものだから。

Xbox 360 Kinect センサー

Xbox 360 Kinect センサー

自宅をSLAMったー(3)

前回、ビューしたものに色をつけました。
SLAM構築に用いたkinect-3d-slamを、座標とテクスチャ情報を出力するよう改修しました。

  • モチーフ

被写体の部屋はこんな感じです。
ゴチャゴチャしてて申し訳ないのですが、ゴチャゴチャしてないと形状特徴がなくてフレーム間のマッチングに失敗するようになってしまいます。

  • センシング

で、SLAMをやってるときの画面はこんな感じ。
データの構築とカメラ位置の推定を同時に行っているのがよく分かります。

  • 見る

ビューするとこんな感じ。ノートPCなのでモッサリ。
Ubuntuから移すときに画質が劣化してしまったようです。

  • まとめ

今回は移動ロボットの自己位置推定に用いられるSLAMデータなので点群が最終的なアウトプットです。
形状復元しようとすると、点群をポリゴンにする処理が必要。そちらを目指していこうかな。

自宅をSLAMったー(2)

前回、mrpt-appsのkinect-3d-slamで適当に三次元形状データを撮ったわけですが、出力されたtxtをビューできなかったので、PCL(PointCloudLibrary)に食わせて、ビューしてみました。
以前からPCLには興味があったのですが、手つかずだったので勉強のつもりで。
@otlさんエントリの真似をしただけなので、大したこともないのですが、書き留めておきます。

  • インストール

@otlさんの手順そのままですが一応。

$ sudo add-apt-repository ppa:v-launchpad-jochen-sprickerhof-de/pcl
$ sudo apt-get update
$ sudo apt-get install libpcl-1.1-dev

簡単だ..

  • ビルド

ソースコードも@otlさんのをコピってテキストを読むように修正して..
で、コンパイル。@otlさんはcmakeを使ってました。私は勉強のために自分でMakefileを書いてみました。

SRC = \
	main.cpp
DST = sample

prefix  = /usr
INCPATH = $(prefix)/include
LIBPATH = $(prefix)/lib 

OPT = \
	-lpcl_common -lpcl_io -lpcl_visualization
CC  = g++ -O

CFLAGS  = \
	-I$(INCPATH)/pcl-1.1 \
	-I$(INCPATH)/eigen3 \
	-I$(INCPATH)/vtk-5.4
LDFLAGS = -L. -L$(LIBPATH) 

all:
	$(CC) $(SRC)  -o $(DST) $(CFLAGS)  $(LDFLAGS) $(OPT)

行列ライブラリのEigenとビューアー用のvtkのインクルードパスを記述する必要があります。
CMakeはこれを吸収してくれるのだから便利だな。使い方をちゃんと覚えなくては。

  • 実行



点群が綺麗にビューできました。

  • まとめ・課題

かけた時間は約2時間。「OpenGLわかんねー、ひ〜」とか言いながらビューアを書いてたのが馬鹿らしくなります。
描画できましたが、テクスチャが反映されていないのが課題です。kinect-3d-slam側で出力するのよう修正してみようかな。

自宅をSLAMったー。


この動画がやりたかったわけですが、できるらしいので、Kinectを使って、自宅で環境地図を作ってみました。
Mobile Robot Programming Toolkit (MRPT)のkinect-3d-slamの(強引な)動かし方を書き留めておきます。

  • 実行環境

ThinkPad x201 (Intel Core i5)
Ubuntu 11.04 (32bit?)
XBOX Kinect Sensor

  • 事前準備

事前にインストールしておくべきモジュールが以下。KinectOpenCVOpenGL等いろいろ使うから多い。

$ sudo apt-get install libwxgtk2.8-dev libftdi-dev libglut3-dev
$ sudo apt-get install zlib1g-dev libusb-1.0-0-dev
$ sudo apt-get install libdc1394-22-dev libavformat-dev libswscale-dev
$ sudo apt-get install libhighgui-dev libcvaux-dev
$ sudo apt-get install libgtest-dev libeigen2-dev

※ 公式サイトによれば、libeigen3-devを入れろとありますが、Ubuntu11.04のパッケージマネージャからは取得できませんので、とりあえず、libeigen2-devを入れてみます。問題あったらごめんなさい。
自分でソースをコンパイルする人は以下も。

$ sudo apt-get install build-essential pkg-config cmake

手順はオフィシャル(後掲)にも載ってます。

  • インストール

リポジトリ最新のパッケージを取得する。リポジトリのパッケージをあてないと実行エラーになります。

$ sudo add-apt-repository ppa:joseluisblancoc/mrpt
$ sudo apt-get update
$ sudo apt-get install libmrpt-dev mrpt-apps

  • 実行

そのままkinect-3d-slamを実行するとエラーになります。
どうやらアクセス権を設定しないとダメらしい。手っ取り早くsudo実行。

$ kinect-3d-slam
libusb couldn't open USB device /dev/bus/usb/002/005: Permission denied.
libusb requires write access to USB device nodes.
...
$ sudo kinect-3d-slam

動いたーーー。



部屋の出窓です。木製のブラインドなので変な色だし、本が雑然と置かれていてお恥ずかしい。
キャリブレーションされてないので、微妙にテクスチャと点群がずれている。
ゆっくり動かさないとNG。
特徴となる形状を5-6個(だったかな?)視野におさめておかないと、SLAMが崩れてしまうので注意。

  • 課題

SLAMで構築した点群データは、実行ファイルがある/usr/bin下に吐かれるpoint_cloud.txtとして出力されるのですが、mrpt-appsの中にはビューアがないので現在探し中。テクスチャ情報も捨てられてるっぽいし.. どうするかな..

  • まとめ

手順だけ見ると誰でも簡単にできますね。私のような怠け者にはいい世の中になりました。
計測結果をビューできてから記事をアップしたかったのですが、時間がなかったので中途半端な状態です。ご容赦ください。

  • 参考サイト

MRPTinGNU/Linuxrepositories
CompilingMRPT

Kinect開発環境OnUbuntu 構築失敗

UbuntuKinect開発環境を構築したかったけど失敗したという報告。
古めですが、tuedaさんのエントリを参考にしました。
ThinkPad x100e はAMDだけど動作報告(@niryuu氏)があるのでやってみたかった。

環境

  • ThinkPad x100e Ubuntu10.10
  • OpenNI Stable Build for Ubuntu 10.10 x86 (32-bit) v1.1.0.37
  • PrimeSense NITE Stable Build for Ubuntu 10.10 x86 (32-bit) v1.3.1.3
  • avin2-SensorKinect-28738dc

事前に入れてたもの

  • mode-complete

情報源はここ

  • libusb-dev / freeglut3-dev

情報源はここ

OpenNIをインストール

OpenNI-Bin-Linux32-v1.1.0.37.tar.bz2を解凍して

./install.sh

avin2/SensorKinectドライバをインストール

avin2-SensorKinect-28738dc.tar.gzを解凍して

cd Platform/Linux-x86/Build/
make
sudo make install

NITEをインストール

NITE-Bin-Linux32-v1.3.1.3.tar.bz2を解凍。
設定ファイルを書き換えて

cd Nite-1.3.1.3/
sudo ./install.sh

サンプル実行失敗

cd Samples/Bin/
./SampleSceneAnalysis
Illegal instruction

エラー終了している模様。いったんIRプロジェクタは光るのに残念だなぁ。
"Illegal instruction"はNITEのSSE3命令によるものだとか。
ふつうにいくとx100eのAMDプロセッサは非対応のはずですが@niryuu氏による動作報告もある。ネット上の情報も乏しい。
今回はめげてますがいつか解決したい。

Xbox 360 Kinect センサー

Xbox 360 Kinect センサー

Kinect勉強会 Vol.2 に参加

ちょっと遅くなりました。
第二回Kinect勉強会に参加しました。簡単に書き留めておきます。
ハッカソンや勉強会はインスパイアされたり勉強になったりしていいですね〜。面白かったです。
今回はMSの人が偵察に来てました。やはりKinectハッカーの動きは気になる模様。
KinectSDKのリリース遅れはHQあるいはMSRの都合でいかんともしがたいらしく、申し訳なさそうにしてました。

ちょっと深いOpenNIとNITEの話(でも初心者歓迎!!)

Kinectセンサープログラミング」を書いた@kaorun55さんの講演。
OpenNI/NITEの最新情報や書籍の内容の軽い紹介のあと、OpenNIのメリットの話に。
近々登場するはずのKinect SDK for Windowsが出た後も、非Windowsユーザーは依然としてOpenNIを使うことになる。
ASUSから出たXtion(エクシオン)も登場。とても小さくて、ドライバ/ミドルウェアのインストールが簡単ということで注目を集めました。買おうか迷い中。たぶん買うけど。
なんとKinect本(↓)を5冊無料で参加者に進呈してました。秀和システム太っ腹〜。

KINECTセンサープログラミング

KINECTセンサープログラミング

OpenCVKinect

チームラボ斎藤さんの講演。
Kinect登場以前にチームラボさんが距離センサーとOpenCVを使ってゴリゴリ作ってたシステムの紹介。
Kinectあればよかったねっていう話でした。会場にはOpenCV界隈の人もチラホラいましたが、多くの人が「CV..??」な人が多かったようです。
チームラボミラーはKinectを使用してハンドジェスチャでバーチャル試着ができるシステム。今どきっぽいなぁ。
SKyViewはARDroneの画像をSURF+RANSAC(OpenCV)でスティッチングしてパノラマ画像を作るもの。PhotoSynthですね。

NUIとKinect

勉強会の主催者@hagino3000さんの講演。
NaturalUserInterfaceの定義から入ってMSRとPrimeSenseの姿勢推定の違いなど突っ込んだ話も。ためになる。
手の形状をグレースケール画像化してOpenCV機械学習させて認識するデモも。
NITEで慣れてしまった人も多いのか会場の反応はイマイチでした。@hagino3000さんは「知ってれば誰でもできますよ」ふうに言ってましたが、誰でもサラッとできる類の技ではないのでスゴいと思いました。
片手でドラッグアンドドロップもあり、@hagino3000さんの技術力には感心させられることばかりです。

LightningTalk

node.jsに飛ばしてリアルタイムに距離/姿勢情報を配信するデモやWiiハックなど面白い試みが紹介されました。
個人でやったワークが多く盛り上がってました。
自分もなんか作ったら紹介してみたいなと思いましたが、プレゼンが下手なので無理ですね。。

May, 15, Sun. ベイスターズが粘れ

IT

フルハイでさえまだ浸透しきってないけど、ディスプレイ技術は進化し続けてますねー。3Dの次はこれか〜?

aidiaryさん、またなんか始めるぞ〜。楽しみ。

ロボット

興味深いです。Kinectで検知した人間の動きを文字表現するのって難しいし、国際標準も聞いたことないし。
これから深度センサーが普及する中で課題になるであろう問題。

ユビキタスだー。

三次元の軌道推定って高度なはずですけど、東大以外でもバリバリやられてるんですね.. すごいな。

見てて楽しい。

その他

これは面白すぎる。半分くらいはIT企業の新入社員が知るべきことでもあるかも。

中学受験の記事。気になってしまいました。