[Tips] ODROID-X2(Android)+OpenNI2でXtionを動かした

前々回前回と2日間かけて取り組んでいたXtionをAndroid上で動かすことがやっと出来ました。
色々はまって試行錯誤した挙句、OSアップデートしたらすんなり動くという…orzな展開になりましたが、一応、もし同じ環境で動かそうという方がいれば、ということで情報まとめておきます。

まず、一番基本となった参考情報は、最初から変わらずこちらのページです。
http://www.hirotakaster.com/archives/2013/01/android-42jelly-bean-and-openni-21-beta.php

そして、まずはじめに結論から言っておきますと、前提条件さえしっかりそろっていれば、上のページの通りにやるだけで、しっかりと動きました…orz

では、順を追って詳細を。
まず、先のページではPandaboardという開発ボードを使っていますが、私は韓国のHardkernelというメーカーが出しているODROID-X2という開発ボードを使いました。
公式ページはこちら。
http://www.hardkernel.com/
日本ではこちらのサイトで購入できるようです。
http://www.unipos.net/find/product_item.php?id=202&gclid=COaOgLvpu7gCFQZfpgodSGIA5g

ということで、当初、ボードの違いなどもあったりして、先のページに書いてあったことをそのまま試しても全く動かず。
うんうんうなりながらほかの情報を探してみると、同じ方のブログでこちらのページを発見。
http://www.hirotakaster.com/archives/2011/12/openni-on-android-with-pandaboard-linaro-android-part2.php
これを見ると、OpenNIのほかに、Sensorのドライバを別にビルドしなければいけないという記載になっていました。

なのでドライバが足りなかったのか!と、この例に倣ってでは、Sensorをビルドしようとすると、ヘッダファイルが見つからないだのなんだのと色々なエラーが。
どうもOpenNIからOpenNI2になったタイミングでいろいろ変わったようで、OpenNIを改めてDLしてきてテスト。
ビルドはうまくいき、ドライバも生成できたにもかかわらず、やっぱり動いてくれない。
さらによくよくOpenNI2の公式サイトを見ると、OpenNIからOpenNI2に変わったタイミングで、Sensorのドライバとして作成していた各種ファイルはOpenNI2に取り込まれていたようで、libPS1080.soなどがそれだという記載を発見。

ということで試行錯誤してどうしてもうまくいかなかったのですが、ふと、最初のページを見ると、OSのバージョンが「Android 4.2(Jelly Bean)」となっている。
私がその時点で使っていたのは、ODROID-X2を購入した際、一緒に注文したSDカードに入っていたAndroid4.0.2(ICS)だったので、もしや、と思って、メーカーサイトから新しいバージョンのOSのバイナリイメージをDLしてきてSDカードに焼いて、もう一度OpenNI2を使ってテストしたところ、あっさりうまくいきました。

OpenNI2のWEBページには公式にAndroidに対応したという記載もあるし、こんな風に、ODROID-Xで動かしている人の情報も見つけていたので、できないわけはない、と思っていたのですが、思いのほか苦戦しました。

そこまで深く掘り下げて調べたわけでは無いですが、恐らくポイントとしては、各ツールやOSのバージョンの問題で、
・Android4.1(JerryBean)以上
・OpenNI2以上
という組み合わせになっていれば、動きそうな感じでした。
注意点としては、これらの作業はクロスコンパイル作業となるため、Linux上で(Windos+Cygwinでもできるのかな?試していないのでわかりません…)実行する必要があるということと、Androidアプリ開発環境のEclipse側には、SDKだけでなく、NDKの開発環境を入れておく必要がある、ということでしょうか。
NDKの開発環境を整えるにはこちらのページが参考になるかと思います。

このほか、私の方で唯一変更した点としては、PandaboardとODROID-X2ではシステムの構成が若干異なることから、ファイルの置き場所を変えました。
まず、出来上がった

[taedoo@localhost Final]$ tar tf OpenNI-android-2.2.tar
OpenNI-android-2.2/
OpenNI-android-2.2/libPS1080.so
OpenNI-android-2.2/PS1080.ini
OpenNI-android-2.2/OpenNI.ini
OpenNI-android-2.2/libOpenNI2.so
OpenNI-android-2.2/EventBasedRead
OpenNI-android-2.2/SimpleRead
OpenNI-android-2.2/libPSLink.so
OpenNI-android-2.2/libusb.so
OpenNI-android-2.2/libOniFile.so
OpenNI-android-2.2/MultipleStreamRead


これらのファイルは /sdcard 内に送り込んでみたのですが、どうやら /sdcard 内は、実行権限が与えられない形で mount されているようで、 root で ./SimpleRead を実行しても、パーミッションエラーが発生しました。(chmodやってみてもパーミッションは変更できず。)
なので、一番最初のブログを参考に、 /system/ 配下に openni というディレクトリを作り、 *.ini と SimpleRead を格納して実行してみるも、 libPS1080.so が見つからない、というエラーが。
その際、ファイルパスの表示が ./OpenNI2/libPS1080.so という記載になっていたので、 /system/openni/OpenNI2/ というディレクトリをさらに下層に作成し、 lib*.so ファイルをすべて格納したところ、うまく実行できました。
adb shell から ./SimpleRead を実行すれば、コンソール上に数字の羅列を受け取ることが出来るようになっているので、これでとりあえず動いているかどうかを確認することが出来ます。

また、 /system/lib 配下に入れていた lib*.so ファイルは、一応、そのままにしています。
削除して動くかどうかはまだ試せていないのですが、アプリから実行する際には必要そうな気がしたので。

ということで、これがアプリを実行した時の画像です。
画像

こちらに動画もアップしてます

あ、ちなみに、ODROID-X2に関していうと、SDカードの中身をいろいろ調べたのですが、boot関連のファイルの一部に「for Kinect」というコメントでUSB関連の定義をしてある部分を発見。
どうも最初から外部接続機器の1つとしてKinectが想定されたつくりになっているようで、特に機器的な制限がないのであれば、ODROID-X2+Xtionは、モーションキャプチャ系のシステム構築するには動かしやすい組み合わせなのかもしれません。何も意識しなくても、最初からrootもとれていますしね。

ということで、何とか動かせる環境が整ったので、あとはアプリを作りこんで何をやるか。
NITEなどと組み合わせて、なんか面白い物が作れたらいいな~ということで、今日のところはこの辺で。

ではでは。




キネクト ハッカーズマニュアル
ラトルズ
西林 孝 + 小野 憲史 共著

amazon.co.jpで買う
Amazonアソシエイト by キネクト ハッカーズマニュアル の詳しい情報を見る / ウェブリブログ商品ポータル




この記事へのコメント

この記事へのトラックバック

テーマ別記事