2011年01月03日

OpenFrameworks x kinect x Android

The SIProp project's members finised to make "OpenFrameworks x kinect x Android" Development Environment and to run it on Android(armadillo & beagleboard).

Demo video



Special Thanks:

We used those OSSs. Thank you for great works!
OpenFrameworks
ofxKinect(Kinect for OpenFrameworks)
ofxAndroid(Android for OpenFrameworks)



SIProp members:
Hirotaka Niisato
masaxmasa





How to make:

1.Setup ofxAndroid's Development Environment

Please refer to the following site:

ofxAndroid setup manual
http://www.openframeworks.cc/setup/android-eclipse

If you can read Japanese & want to setup it on Windows, you should refer to this site.
http://blog.goo.ne.jp/tuninghigh/e/637821f5b76b370876e3092e860ce7db



2.Merge ofxKinect to ofxAndroid

2-1.Download & Setup to Eclipse

Please download soruce code from the following site:
https://github.com/ofTheo/ofxKinect


Next, Copy [ofxKinect directory]/src/ofxKinect/ to [ofxAndroid directory]/addons/ .

Final, Add include path to Eclipse's "(ofxAndroid's)addons" project.
Please run Eclipse and add the folloing place & path:

Place: Properties -> C/C++ General -> Pths and Symbols -> Includes tab(GNU C++)
Path: [ofxAndroid directory]/addons/src/ofxKinect/src/




2-2.Fix compile error

If ofxAndroid doesn't have ofxThread::waitForThread(bool) function.
Please add the following source:

[ofxAndroid directory]/addons/ofxThread/src/ofxThread.h

void waitForThread(bool stop = true);


[ofxAndroid directory]/addons/ofxThread/src/ofxThread.c


void ofxThread::waitForThread(bool stop){
if (threadRunning){
// Reset the thread state
if(stop){
threadRunning = false;
if(verbose)printf("ofxThread: stopping thread\n");
}

if(verbose)printf("ofxThread: waiting for thread to stop\n");
// Wait for the thread to finish
#ifdef TARGET_WIN32
WaitForSingleObject(myThread, INFINITE);
CloseHandle(myThread);
#else
if(pthread_self()==myThread) printf("ofxThread: error, waitForThread should only be called from outside the thread");
pthread_join(myThread, NULL);
#endif
if(verbose)printf("ofxThread: thread stopped\n");
myThread = NULL;
}else{
if(verbose)printf("ofxThread: thread already stopped\n");
}
}



2-3.Do customize source code for Android

Please remove the following code in ofxKinect::threadedFunction() function:

ofSleepMillis(20);


Please add the following code in [ofxKinect directory]/libs/lubusb/io.c file:


#define TIMESPEC_TO_TIMEVAL(tv, ts) \
do { \
(tv)->tv_sec = (ts)->tv_sec; \
(tv)->tv_usec = (ts)->tv_nsec / 1000; \
} while (0)



2-4.Create your application project

Please choose sample programs from the following directory:

[ofxAndroid directory]/apps/androidExamples/

And copy it to the following directory:

[NDK directory]/apps/

Final, export this project on Eclipse.




2-5.Build project

You must build JNI at first.
You execute the following commands:

cd [NDK directory]/apps/[your app directory]
[NDK directory]/ndk-build -B

And, you build android application on Eclipse.

*If you don't know how to use ofxKinect framework, please refer to "[ofxKinect directory]/src/testApp.cpp".




3.Change Android's configuration

Please add the following line to init.rc:

mount usbfs none /proc/bus/usb -o devmode=0666




4.Upgrade Android's kernel

libusb MUST neet "USB FS". And Kinect MUST neet "High Speed USB(USB2.0)".

Therefore, you check the following kernel options:
.config

CONFIG_USB_DEVICEFS=y
CONFIG_USB_EHCI_ARC_OTG_ALLOW_HS=y (only armadillo)



Appendix

If your device can not draw normal Z-camera image and RGB-camera image, you MUST need to build optimized kernel & userland.
I used the following optimization option for building kernel, userland & "OpenFrameworks x kinect x Android".

for armadillo

-O3 -march=armv6 -mtune=arm1136jf-s -mfpu=vfp -ffast-math -fno-math-errno -mfloat-abi=softfp -ftree-vectorize -fomit-frame-pointer -funroll-loops -fstrict-aliasing -funswitch-loops

for beagleboard

-O3 -ffast-math -fno-math-errno -march=armv7-a -mtune=cortex-a8 -mfloat-abi=softfp -mfpu=neon -ftree-vectorize -fomit-frame-pointer -funroll-loops -fstrict-aliasing -funswitch-loops





*Download
Full "OpenFrameworks x kinect x Android" Development Environment for Armadillo
Full "OpenFrameworks x kinect x Android" Development Environment for beagleboard
Only source code "OpenFrameworks x kinect x Android


Full "OpenFrameworks x kinect x Android" Development Environment has:

Android NDK crystax version for Linux
Android SDK for Linux
C/C++ Eclipse for Linux
ofxKinect(Kinect for OpenFrameworks)'s source codes
ofxAndroid(Android for OpenFrameworks)'s source codes
"OpenFrameworks x kinect x Android" 's source codes
sample program Eclipse's workspace

2010年04月18日

日経Linux2010年5月号より、連載開始しました

日経Linux2010年5月号より、連載開始しました。
連載タイトルは、

AndroidとBeagleBoardで 実践!組み込みLinuxの技 〜拡張現実感デバイスを作ろう〜

となっており、トラブルがなければ半年くらいの連載を予定しております。
また、共同執筆者として、demuyanこと出村 成和氏も参戦しております!

本連載では、本Blogにて以前に作成中だった「プロジェクター投影型AR」を、実際に完成まで導く物となります。
要するに、パティ・マース教授による「第六感」デバイスもどきのようなものを作っていくこととなります。
Talks パティ・マースによる 「第六感」デバイス のデモ

かなり、無謀な挑戦となっておりますので、生暖かく見守っておいて貰ればと思います。




そして、現在発売中の第1回目の記事は、いきなり全公開してしまいます!!!
導入記事ですので、これを読んでいただいて、「おっ。おもしろいかも」と思われた方は、第2回目からでも、購入していただければと思います。
さらに、すでに購入されてしまった方にも楽しんでいただけますように、あえて、校正前の第一次原稿の方を公開いたしました。雑誌の方に載っております物と、随分と校正が違いますので、合わせてお読みいただけると、『プロの校正にかかるとこうなるのか』などと楽しんでいただけるのではないかと考えております。

第1回目原稿

2010年02月01日

Gadget1にて、塚田たいちょー、ご講演!

いろいろなガジェットを集めて、いろいろなガジェット開発者の講演が聴ける、Gadget1が開催されます。
そして、そこにて、「Feel Sketch」の塚田たいちょーが、ご講演されます。

ご興味のある方は、ぜひぜひ、参加していただければと思います。


◆開催概要
名称:Gadget1 (ガジェットワン)
主催:Gadget1実行委員会
協賛:日本Androidの会、日本UNIXユーザ会、ほか

開催日:2010年2月6日(土)
時間 :10:00〜18:00(予定)、終了後に懇親会あり
場所 :オラクル青山センター
(地図:http://www.oracle.com/lang/jp/corporate/aoyama.html)
参加費:無料 (懇親会は1500円程度を予定)
定員 :200名

内容:ガジェットに関する総合カンファレンスです。
関連企業/団体による展示も行われます。
URL :http://gadget1.jus.or.jp/

参加申込方法:
下記URLから参加登録を行ってください。
http://gadget1.jus.or.jp/regist.html
懇親会の費用は当日現金払いのみとさせていただきます。(領収書あり)

問い合わせ先:Gadget1実行委員会
E-mail:info@gadget1.jus.or.jp

※ 詳しい情報は、http://gadget1.jus.or.jp/ にて発表していきます。

2009年12月21日

Feel Sketch を、OSSとして、公開しました

2009年9月ほどから、作成していたARアプリケーション

Feel Sketch

が、このたび、めでたくOSSとして公開となりました。こちら

どんなモノかは、こちらのムービーを見てもらうのが、一番速いかと思います。

name="allowscriptaccess" value="always"> allowfullscreen="true" width="425" height="344">




■詳細内容
●概要
日本Androidの会、2009年12月定例イベント塚田さんの発表資料を見ていただければと思います。


●なぜ、誕生したのか?

『すごいAR』 から、 『使えるAR』を目指して、作成されました。

そのため、本アプリには、Webにおけるブラウザのような役割を担う力はありません。
しかし、『もう一工夫』を加えることにより、

必ずや『明日から、案件に利用出来るARアプリ』を作成可能である

と考えております。

では、なぜ?このような『使えるAR』を目指したかといえば、ARがブラウザのようなインフラとしての地位を確立するには、まだ数年の年月が必要と思われます。
そして、その間も、『適切な投資』が続くようにするために、こちらのエントリーでも書いたように、『ARはお金になる』ということを示さねばなりません。

そこで、そこを埋めるためのARアプリの一つとして、本アプリは誕生いたしました。


そのため、本アプリは、これ単体で利用することは想定しておりません。

必ずや『明日から、案件に利用出来るARアプリ』を作成可能である

と書きましたように、「あなた」が考えるアプリに、一エッセンスを加えるためのアプリです。
そのために、1サービスや商品としてではなく、OSSとしての道を選んだのです。
これにより、新しい市場がどんどんと生まれ、ARエコシステムが作られていくと考えております。


いろいろなサービスや商品が登場し、いろいろな方が開発に参加してくれることを願っておりますので、よろしくお願いいたします。



■技術的内容
●概要
・オーサリングツール&ブラウザ
こちらの資料をご覧ください。




●利用ライブラリ
OpenCV
Zxing
stlport

このような素晴らしいLibraryを提供していただいて、ありがとうございます。




■開発チーム
●Android側Viewer & Core Library
Puppyチーム』が、実装を担当しております。

●オーサリングツール
jFD2の作者である山浦俊司氏が、実装を担当しております。

Feel Sketch を、OSSとして、公開しましたの続きを読む

2009年12月11日

Android + Arduino BT

Twitter上で、Android Bluetoothのexpert @esmasui と @Lionas が、このあたり から、Android + Arduino BT で、きゃっきゃっうふふ な企てをしているのを発見。

こちらの「Funnel Tap」の拡張として、面白いかも知れないと思い、その場で『Arduino BT(Bluetooth)』をクリック!クリック!

さっそく、届いたので、HT-03Aと接続出来るか、実験してみることに。
ただ、

※RFモジュールについての注意: 本モジュールは開発者・無線技術者向けのエンジニアリングサンプル製品です。 技術基準適合は受けておりませんので、電波暗室や電波障害を起こさない十分に広い敷地・建屋内で実験を行ってください この商品を製品として市場に販売することはできません。通信ICの評価、デバッグ、研究・開発用としてお役立てください。

のため、こちらの『電波暗袋』に入れて、実験実験。




■Arduino BT編
●PCのBluetooth SPP 経由でプログラムを書き込む

今回は、Arduino BT の サンプルプログラム01号 を、そのまま利用しました。
SPP的には、1.1秒ごとに「ciao」という文字列が送られてくると言うものです。




■HT-03A編
●ピアリング

設定⇒ワイヤレスの設定⇒Bluetooth

で、Arduino BTとのピアリングしておきます。
パスコードは12345です。


●Bluetooth用のコード一式の準備
Android 1.6ですので、 @esmasui せんせ作の「backport-android-bluetooth」を利用します。

しかし、Arduino BTが悪いの、Android 1.6が悪いのかわかりませんが、

IBluetoothDeviceCallback#onGetRemoteServiceChannelResult(String address, int channel)

にて、channelが、『-1』として返ってきてしまいます。
そこで、固定的にchannel番号を振ってしまうコードを追加しました。
(Android 2.0では、直っていると信じて・・・)

改造版のIBluetoothDeviceCallback(BluetoothDeviceクラス内で匿名関数として定義されています)の、
ソースコードはこちら
jarはこちら


●HT-03A to Arduino 通信サンプル
ただ単に、「Read」ボタンを押すと、SPP通信して、値を取り、表示するだけのサンプルアプリを作りましたので、ついでにアップしておきます。
とりあえずの動作確認用なので、エラー処理とか全然やっていません。

Eclipseのプロジェクト一式は、こちら

2009年12月09日

日本Androidの会の12月の定例イベント開催のお知らせ

先日のABC 2009 Fallには382名もの参加がありました。また、12/4に日本Androidの会の会員数が5000人!を突破しました。どれもこれも、活発にご参加してくれるみなさまのおかげです。どうもありがとうございます。

さて、2009年最後となる12月の定例イベントを12/21(月)に開催いたします。今回のテーマは「東のエデン」に出てくるエデンシステムでお馴染みのAR関係でまとめるつもりです。みなさまのお申し込みを心よりお待ちしております。

* 日時: 2009年12月21日(月曜日) 19:00 - 21:00(忘年会 21:30ごろ〜)
* 場所: 秋葉原ダイビル12F はこだて未来大(忘年会は秋葉原周辺)
* 定員: 80名(応募多数の場合は抽選となります)
* 参加費: 無料
* 主催: 日本Androidの会・早稲田大学
* 協力: はこだて未来大学
* 資料: 配布は行いません。ご了承ください。
* 講演者
o フリーランス 塚田 翔也さん
o 日本Androidの会 幹事 高橋 憲一、日本Androidの会 幹事 近藤 純司
o ブリリアントサービス 近藤 昭雄 (日本Androidの会 幹事)
o GClue 佐々木 陽 (日本Androidの会 幹事)

■コンテンツ詳細
●ARお絵かきツール「Feel Sketch」& Android版Browserの紹介
* 発表:フリーランス 塚田 翔也さん
* 概要:調整中

●Androidは「必ずやる」(仮)
* 発表:日本Androidの会 幹事 高橋 憲一、日本Androidの会 幹事 近藤 純司
* 概要:調整中

●感情世界を覗くウキウキView
* 発表:ブリリアントサービス 近藤 昭雄 (日本Androidの会 幹事)
* 概要:Android MarketにリリースされているARブラウザ「ウキウキView」の機能紹介とこれからの展望について話します。

●ar向けwidget framework droidget ar
* 発表:GClue 佐々木 陽 (日本Androidの会 幹事)
* 概要:ハードウェアと連携するwidgetの可能性に関して


●申込み
* 未会員の方は、先に日本Androidの会に入会してからお申し込みください。申し込みは下記URLから行なえます。
http://android-group.jp/index.php?%C6%FE%B2%F1%CA%FD%CB%A1

* 申し込みは以下受付フォームより、会に登録しているメールアドレスでお願いします。申し込み期限は12月16日(水)12時とします。なお、申し込み多数の場合は、早期に受付終了となる可能性があります。ご了承ください。
http://spreadsheets.google.com/viewform?hl=en&formkey=dDF5MWJtMjdUZGdQX1VMR2lGS0k2YWc6MA


●告知ページ
http://www.android-group.jp/index.php?%CA%D9%B6%AF%B2%F1%2F2009%C7%AF12%B7%EE%A4%CE%A5%A4%A5%D9%A5%F3%A5%C8

以上。

2009年12月03日

Funnel Tap


「Funnel Tap」

なるものを、作成してみました。
何かと言いますと、

Funnel I/O + XBee + 感圧センサー組み込み済みタップシューズ =タップダンスにおいて、タップに合わせて、MIDIから音を出す。

という、フィジカルコンピューティングデバイスの一種となります。

●構成図




■構成説明
●Funnel I/O + XBee

本家 を見ろってことで。<(_ _)>

というのもアレすぎるので、簡単に説明しますと、Funnel I/Oとは、アナログやデジタルの入出力(I/O)をお手軽に扱うことが出来るデバイスで、XBeeとは、そのFunnel I/OのI/Oの取得部分を無線化するためのデバイスです。

●圧力センサー
FSR(Force Sensing Registor)というセンサーを利用しています。これは、INTERLINK ELECTRONICS社が開発したPTF(Polymer thick film)を用い、感圧部に圧力を印加すると内部抵抗値が低下するセンサデバイスです。


・FSR402


・FSR406


これを、タップシューズの中に組み込んで、タップ時のインパクトを『抵抗値』から『電圧値』に変換して、Funnel I/Oにアナログ入力しています。


●完成写真




■なぜ作ったの?
なぜ、このようなモノを作ったかというと、
ブラスエンターテイメントの先駆者★最強の舞台芸術集団 the CRAZY ANGEL COMPANY』 の 永瀬泰一郎 氏 が、


タップダンス講演で、コンピューティングを組み合わせた変わったことやりたい!


と、相談を受けたのがきっかけであります。
そこで、「よし、わかった!」ということで、材料の確保と設計、簡単な電子工作のレクチャーだけしまして、

永瀬泰一郎 氏 が、ひとりで(!)完成させました!

まさに、歌って、踊れて、コードも書けて、半田も握れる。怪しい 素敵なイケメンです!
(つうことで、ぼくは、ほとんどなにもしてません。彼のかわりに、宣伝中です。(;^_^A アセアセ・・・)

こちら、今後のタップダンス講演で利用される予定ですので、ぜひ、the CRAZY ANGEL COMPANYの「出演予定・イベント Archive」をチェックしていただければと思います!
(来年3月くらいの講演予定と聞いております。)

今後は、加速度センサーを付けたりとかして、タップだけでピアノ並みの演奏が出来ることを目指しております!

2009年12月02日

ASCII.technologies 11月号の「AndroidとAR/VR技術の可能性」を公開しました

こちらのエントリーにて、ご紹介いたしましたASCII.technologies 11月号のAndroid特集の一記事として、寄稿いたしました「AndroidとAR/VR技術の可能性」を公開しました。

本文は、こちらより

みなさまの思考の一助となれば、幸いです。

2009年10月17日

日本Androidの会 四国支部 第3回勉強会 in 香川&四国GTUGキックオフで、講演します

日本Androidの会 四国支部 第3回勉強会 in 香川&四国GTUGキックオフで、講演してきます。
内容的には、ARについてとOESFでやっているAcademic Collaboration Program(ACP)についてです。



* 日時:2009/11/7(土)11:00 〜 17:00 (受付10:30〜、懇親会 17:00〜の予定)
* 場所:香川大学工学部 (林町キャンパス) 講義棟 2階 3201教室 (BCEC)
* 参加費:無料(懇親会費:未定)
* 主催:日本Androidの会 四国支部
* 共催:
o 電子情報通信学会四国支部 香川大学学生ブランチ KBIT
o 四国GTUG(Google Technology User Group)
* 定員:50名
* 講演者(敬称略・順不同):
o 瀬戸直喜(日本Androidの会 幹事・四国支部長/四国Google Technology User Group Manager)
o yukotan(四国GTUG)
o 二宮 宏(セーバー株式会社 代表取締役)
o Tam(四国GTUG)
o 今岡 通博(今岡工学事務所 代表)
o 今村謙之(日本Androidの会 事務局長、OESF 理事)


■自分のところだけ抜粋
●14:50 〜 15:20 AndroidでモバイルAR
内容:最近は、セカイカメラやlayerなどのモバイルする端末で動作するARアプリケーションが公開され、大きな注目が集まっています。このことから、やはり、ARはモバイルしてこそ真価を発揮するものと考えられます。

しかし、AR(拡張現実感)なアプリ開発環境やライブラリというと、ARToolkitやMMD(MikuMikuDance)など、デスクトップ向けしかない!

と、思っていませんか?
実は、Android向けにそれらのライブラリが用意されています。
そこで、本セッションでは、それらの紹介と使い方についてご紹介させていただきます

●15:20 〜 15:40 ACP・デバイスの紹介
内容:一般社団法人Open Embedded Software Foundation(OESF)は、Androidをベースと した組込みシステムの開発、構築等の事業に携わる企業により組織された市場の 発展と、各会員の事業の拡大を目指す組織です。
そして、OESFでは、さらなるAndroidの発展を目指すため、企業ベースで取り組 めない課題に挑戦、最新テクノロジーの応用、新たな発想、独創性のあるアイデ アを持って、Androidに関わる研究、開発等を目的とした教育機関の活動に向け て支援であるAcademic Collaboration Program(ACP)を開始いたしました。
本セッションでは、このACPについて概要を解説させていただきます。


●申込み
* http://atnd.org/events/1842
   上記より、お申し込みください。


●告知ページ
日本Androidの会 四国支部 第3回勉強会 in 香川&四国GTUGキックオフ

2009年09月21日

ASCII.technologies 11月号に「AndroidとAR/VR技術の可能性」を寄稿しました

ASCII.technologies 11月号のAndroid特集の一記事として、「AndroidとAR/VR技術の可能性」を寄稿いたしました。

タイトルのとおり、AR/VRのミライの可能性について、技術視点で語るという内容になっております。

実は、本特集では、ARの話題も取り上げられており、ビジネスの視点からの記事もあります。そのため、こちらはそれらの対となる存在として本記事を寄稿いたしました。
合わせて読んでいただくとAR/VRのミライ像がつかめるのではないかなと思っております。
ちなみに、ミライと言いましても、10年以上先のようなことは語っておりません。2〜3年くらいの『今から立ち上げれば、ちょうど波に乗れる』ミライのお話です。



内容について、ちょっとだけ書いてしまいますと、

インフラ指向拡張知覚感(Infrastructure Oriented Augmented Sensibility)

という筆者が定義した造語の世界とはどういうものだろう?という説明からそれがもたらすミライについて話が展開されていきます。
具体的には、

最近のモバイル出来る端末(Androidなど)の進化により、いろいろなセンサーデバイスがついてきた。これにより、人間の五感を取り入れることが出来ようになったAR/VR技術は、人間の知覚(sense)のようなモノへと昇華し、拡張知覚感(Augmented Sensibility)という方向になっていくだろう。(こちらのエントリーの品も、この拡張知覚感(Augmented Sensibility)といえるモノ) さらに、クラウドやWebの進化により、時間や空間の概念をも取り入れた膨大な情報処理が可能となった。、これにより、情報はコンテクスト化されようとしている。 これらの進化の系譜から、AR/VRとインターネットは、人間の生活に深く根ざした、インフラ指向拡張知覚感(Infrastructure Oriented Augmented Sensibility)として、交わるミライがくるだろう。

という感じです。
そして、それを、まとめた図が下記となっており、これの解説に記事が収斂していく感じとなります。
この詳細は、ぜひ、本誌でご確認いただければと思います。

※本図は、アスキーさんのご厚意により、事前公開させていただきました。



また、今回の著者名は、「SIPropプロジェクト 執筆チーム」としております。
こちらは、私が代表を勤めさせてもらっているOSS開発プロジェクトで、実は、現在、この世界を目指すべく、

・『デバイス』や『センサー』の動作原理やそれらから得られるデータを処理するためのアルゴリズムの調査 ・『デバイス』や『センサー』を使い倒したARゲーム『雷電4号』の制作

に鋭意取り組んでおります。
(実は、本寄稿の前半部でふんだんに出てくる『デバイス』や『センサー』の話も、こちらへの布石でもあったりします。)

もし、この世界に興味をもたれましたら、お声がけいただければと思います。ぜひとも、一緒に開発したいという方も、募集しております。

2009年09月02日

OpenCV Ver.1.1 For Android NDK

OpenCV Ver.1.1 を、とりあえず、 Android NDKで動くようにしてみました。
本当にとりあえずで、全然、テストしていません。人柱になりたい方どうぞ。


●非対応ライブラリ
 -3次元トラッキング
 -K近傍法

C++標準ライブラリ不足により、削除しました。
あまり、使用しないと思われましたので。




●独自ライブラリ
 -show系(表示系)
 -キャプチャ系

UIまわりが大きく違うため、Android独自の実装となっています。




●実装JNI
JNIは全く用意していません。
唯一あるものは、「OpenCV プログラミングブック 第2版 OpenCV 1.1対応」に出てくる輪郭検出のサンプルアプリのみです。
それ以外は、自分でJNIを書くか、Android NDK層で実装する必要があります。

ですが、OpenCVは基本的には、この形であまり問題がないと考えています。
OpenCVは、ライブラリ性が強いため、独立しているが組み合わせることにより威力を増す関数が多いためです。
そのため、下手にJNI化して、細かい単位でJava←→C間を行ったり来たりするより(しかも、たいていの場合は、巨大な画像データもやり取りする必要があり)、Android NDK層ならAndroid NDK層で実現したい機能を実装してしまう方が、よいと思われるからです。
現に、輪郭検出のサンプルアプリでも、6個以上の関数を利用して実現されており、単体の関数としてこのような機能が提供されているわけではありません。

どうしても必要な場合は、Processing向けのJNI実装がありますので、それを利用するのがよいと思われます。




●ダウンロード
 -OpenCVForAndroidNDK-0.1-src.zip

ソース一式です。BSDライセンスにしています。




●サンクス
 -Puppyチーム

に、お手伝いいただきました。ありがとうございました!><

2009年08月24日

Bullet For Android NDK

以前のエントリーで、手を付けはじめたGPGPU(CUDA)プログラミングですが、やはり、超並列演算のターゲットは

物理演算エンジン

だろうということで、そのライブラリである「Bullet」を、物理演算エンジンの内部構造勉強がてらAndroid NDKに移植してみました。
※普通のJavaからでも使えるはずです。

ちなみに、エミュレータでやってはいけないようです。
実機の100倍以上、遅いです。
そこは、注意してください。<(_ _)>

●動作画面
・ソースには、サンプルアプリを付けておきました。
 2つのボール(2D)が、下に並んでいる3つのボール(2D)に向けて、自由落下してくると言うデモです。
 ※本来は、3Dに対応しています。OpenGL/ESいじるのが面倒だったのでやめました。(w

・初期画面

・ちょっとずつ、落下

・激突

・飛び散る

・収束




●Android(Java)からの操作が可能なもの
・対応ワールド
 -DiscreteDynamicsWorld

・対応剛体
 -BoxShape
 -CapsuleShape
 -ConeShape
 -CylinderShape
 -SphereShape
 -StaticPlaneShape
 -TetrahedronShape

・対応ソルバ
 -SequentialImpulseConstraintSolver

・対応ジョイント
 -HingeConstraint
 -Point2PointConstraint

・対応付加力
 -applyForce
 -applyTorque
 -applyImpulse
 -activate操作

というところで、最低限のことができるというところですが、ジョイントも可能なのでラグドールも作成できるかと思います。



●ソース一式
BulletForAndroidNDK-0_7-src.zip

・ライセンスは、Bulletそのままで、BSDライセンスとなっております。

●APK
BulletJniSampleApp.apk




●おまけ
本当は、某雑誌記事用のネタだったのですが、これよりももっと良いモノが出来たので、こちらはお蔵入りとなりました。
ゆえに、公開しております。

2009年07月10日

深度を測る3Dカメラ

E3でマイクロソフトさんが、デモした新コントローラの詳細記事。

PLAYSTATIONもまた3DカメラのナチュラルUIへ向かう?
3DカメラがXbox 360を「マイノリティ・リポート」の世界へ近づける

なに〜〜〜。1〜2cm単位で、しかも、広範囲に深度が取れる、、、だと!

う〜ん、半年くらい前は、3Dカメラはこんな精度でずに、実用化はまだ先でしょうねって聞いたんだけどなぁ。
調査不足だったのか、マイクロソフトさんのがアレなのか、判断は難しいところですが、、、
(正直に言えば、最初見たときはただのコンセプトビデオだと思ってました。)

まぁ、世界的に力が入っている分野であることは間違いないので、個人的にはうれしい限りです。

しかし、超音波センサーでやってた おれ、乙 orz
つうか、ワンセット数十万くらいするらしいので、個人購入ムリなんで!だれか、おごって!!!(w

2009年06月22日

プロジェクター投影型AR と AR分野について

ARにおいては、『どこ』に『なに』を表示するか? という、オブジェクトを表示するための位置座標の特定がキモとなります。
例えば、ARToolkitでは、マーカーを用いることにより、マーカーのある場所が『表示位置』、マーカーの種類(資格の内部の図形)が『表示するオブジェクトの種類』を、現しているわけです。

しかし、ARToolkitなどのマーカーを利用したモノは、マーカーをどのようにばら撒くか?という問題があり、『実用化を考えた上』では、かなり厳しいのが現実です。(もちろん、はまる事例はあります。)
そこで、それの究極の解の一つとして、PTAMがあります。
(わかった気になれる解説は、こちら
まさに、人間の認識に近づけているもの(もとは、ロボットの技術らしいですし)なので、将来性は高いのですが、『一年以内の実用化』(なぜ、この条件かは、後述)は、難しそうな状況です。

ゆえに、みなさん、このあたりを解決するための手段をいろいろと考えられているわけです。
例えば、セカイカメラは、GPS+Wi-Fiによる三点測量 でやる方法などです。

そして、その一つの解決策として、タイトルにあるプロジェクター投影型AR(とでもいうべきもの)があります。
百聞は一見にしかずということで、実際に、MITで作成したものがあるようなので、見てみてください。
Talks パティ・マースによる 「第六感」デバイス のデモ


この方式の優れている点は、

・カメラとプロジェクターの位置が固定であるため、位置特定がしやすい
・そのうえで、マーカーとなりえるモノを含めて、リアル世界に投影できる

ところです。
(上記のビデオでは、電話をかけるシーンで利用されていますね。)


もちろん、この方法が唯一絶対というわけではなく、ほかの方法と組み合わせてやるべきものと思います。
(というか、問題点がまだまだ多い。出力(輝度)が低いので、認識はけっこう至難。)


ということで、これを作るための材料を、ちまちまと用意しております。
大雑把には、だいたい揃ったのでくっつけていくところなのですが、手がつけられなさそうなので、ひとまず、公開だけしておきます。
誰かがやってくれれば、儲けものという感じです。(w

●Android関連
 →モバイルしないと意味がないよね?ということで、Androidベースです。

BeagleBoard x DLP x Android
 →Android向けプロジェクター環境。Eneloopで動きます。
Armadillo-500 FX上のAndroidでカメラプレビューする方法
 →上記ボードには、USBが付いていますので、カメラはこの方法でつけます。

●AR関連
NyARToolkit2.2.0対応バージョンforAndroid
 →Android向けにARToolkitを。次は、OpenCVの移植の予定。しばし待たれよ。
NyARToolkitForAndroid On Google App Engine
 →バッテリー問題対応のためです。画像解析をモバイルデバイスでさせると、CPUをブン回すため、ほとんどバッテリーが持ちません。そこで、GAEなどのクラウド上などに負荷を分散しようという計画です。
・PMCode関連
 -PM-AR Engine Android G1
 -PM-Code Reader Android G1
 →QRCodeに3次元目の軸(カラーコード)を持たせて、容量アップを図ったモノ。
 →これは、ARToolkitなどのマーカー路線ですが、発展途上国などの無線通信回線が弱い地域で役に立ちそうなので、やっているものです。
 →ただし、ARのほうは、まだ、モックアップorz 。PMCodeのほうは、うごかなくもない・・・精度が低すぎて、実用性がないだけ<いや、それが致命的なので、死にそうに調整中なんですが。。。という、関係で暇がないのです。(ノД`)




さて、最初のほうに、『一年以内の実用化』と書きましたが、なぜでしょうか?
理由は、『今年がARのトレンド』だからです。
去年のセカイカメラの登場により、世界中の注目が集まっています。
そして、それにより、『ビジネス』が加速しており、投資のお金が流れ始めています。

お金が流れる分野は、急速に発展し、そして、『ビジネス』になれば、また投資されて、開発が進むという正のスパイラルが生まれます。

ですが、逆に言うと、今年、『ビジネス』として、花開かねば、SecondLifeのようになってしまいます。
要するに、『お金にならない技術(=収益を生まない)』のレッテルが貼られてしまうと、投資のお金が回らなくなり、開発の規模も小さくなってしまいます。
これは、AR分野の発展が、5年は遅れてしまうことを意味するのです。
(この手の場合、今まで流れていたものさえ流れなくなり、元に戻るどころか、縮小します。)

ゆえに、AR分野、そして、それに続くであろう分野のためにも、世の中の役に立つというところを見せねばならず、今年は正念場なのです。
そのため、今年〜来年には、実用化可能な技術である必要があるのです。