2014年8月7日木曜日

Android開発環境にARアプリ開発用ライブラリ「Vuforia」を導入してサンプルを動作させるまで

ARアプリを作りたくなりました
というわけで、AndroidでARアプリを作る方法をググると、とりあえず3つのライブラリが見つかりました

1,NyARToolkit
2,AndAR
3,Vuforia

で、どれが良いの?と気になるところですが、3つの比較をするような記事は見つかりませんでした
検索しても、Stack Overflowで「Q - NyARToolkitとAndARってどっちが良いの? A - Vuforiaがいいと思うよ」という質問コメントが見つかるくらいです

とりあえず、それぞれのサンプルなんかを調べたりした結果、Vuforiaのサンプルに目標のアプリに近いものがあったのでこれを使うことにします
(Vuforiaはサンプルアプリのapkをサンプルページで公開しているので、試しにインストールしてみるのもいいと思います)

導入はVuforia-SDKのDLページ
Android - Vuforia SDK v3.0
に行くと、丁寧に方法が書かれているので従ってみます
※OSは64bit_Windows7です。MacやLinuxでは導入の仕方が違うようなので公式の導入方法を個別参照して下さい。


Step 1:Setting Up the Development Environment

開発環境の構築です 参考:vuforiaのサンプルをビルドしてみる(1)
普通のAndroidアプリの開発環境に加えて、「Cygwin」「Android NDK」が必要とあります
ただし、それはVuforia-2.8までのようで、現在はネイティブ部分(C++部分)をいじらない人には必要ないようです

ですが、一応両方の導入方法を書いておきます
Javaしか弄らない人はStep 2に進んで問題ないはずです

普通のAndroidアプリ開発環境は
Android 4.0でアプリ開発を始めるための環境構築 を参考にすると良いです


1, Cygwin
Cygwinのサイト から"setup.exe"をDLして、起動します
・インストールタイプに"Install from internet"を選ぶ
・Select Packages では All -> Devel -> "make:The GNU version of the 'make' utility" を選ぶ(Skipの部分をクリック)、Vuforiaでは3.82-90が最新のようなので一応そのVerにしておく



2, Android NDK
http://developer.android.com/tools/sdk/ndk/index.html から、zipファイルをDLして解凍します
解凍された"android-ndk-rxx"を"android-SDK"と同じフォルダに置きます
(私の場合Android-SDKは"(ユーザー)\AppData\Local\Android"にありました)

その後、NDKのフォルダを環境変数のPATHに通しておきます

Step 1.5
ここで一応、CigwinとNDKが正常に導入されたかどうか確認します

・CigwinのTerminalを起動します(初回起動時、自動的に".bash_profile"等の4つのファイルがが"C:\cygwin\home\sdk"に作成されます)
・順番に以下の2つのコマンドを入力します
cd /cygdrive/C/(NDKのあるディレクトリ)/android-ndk-r10/samples/san-angeles
ndk-build
・NDKのサンプルプロジェクトがビルドされます(サンプルがsan-angelesなのはVuforiaでそうなっていたので特に意味は無いです)
・サンプルプロジェクトに、libs/armeabi/.soファイルが作成されたことを確認します


・Eclipseにインポートしてビルド、その後動作を確認します(私は大体実機デバッガーです)



こんな感じのよく分からない3D動画が流れたら成功です(タップで停止・再生するようです)


Step 2: Installing the Vuforia SDK

先のVuforia-SDKページにてDLしたZipファイルにSDKが含まれているので、NDKと同じように、Android-SDKと同じディレクトリに置きます

その後、Eclipseを開いて
Window->Preferences から Java->Build Path->Classpath Variables を選択し、Newで新しいPathを作ります



名前は"QCAR_SDK_ROOT"、PathはVuforia-sdkのフォルダ"vuforia-sdk-android-x-y-z"です


Step 3: Compiling and Running a Vuforia Sample App

あとはサンプルプロジェクトをビルドするだけです
サンプルは、Vuforia - Samples にあります

zipファイルを解凍してEclipseにインポートしたら、プロジェクトのproperties から Java Build Path->Order and Exportで
QCAR_SDK_ROOT/build/java/vuforia/Vuforia.jar にチェックが入っているか確認します

その後ビルドですが、サンプルプロジェクトとVuforia-sdkの位置関係ではエラーになります


まあ、これはエラーメッセージの通り、CopyVuforiaFiles.xml の4行目
<fileset dir="../../build/lib/armeabi-v7a"/> が存在しない。というだけなので
正しいPath("vuforia-sdk-android-3-0-9\build\lib\armeabi-v7a")を指定すれば良いです

以上で、プロジェクトをClean後にビルドして、私はVuforiaのサンプルファイルの動作を確認することが出来ました

サンプル内のImage Targetの動作



2014年7月31日木曜日

EclipseでADT(Android Development Tools)が更新できなかった

久しぶりにAndroidアプリを作ろうとEclipseを開いたら、EclipseからSDKが更新できませんでした
が、それ(failed to rename directory)は解決されました

で、次はADTが更新できません…

This Android SDK requires Android Developer Toolkit version ~ or above.
とか表示されて、ADTを最新版にするように言われるのですが
Check for Updateをしても「No updates were found」となります

【Android】【Eclipse】なぜかADT 22.3.0→22.6.1 に更新できない を参考に
Install New Software からADTを更新しようとしてみたのですが
The operation cannot be completed.でした

エラー内容は以下
Cannot complete the install because of a conflicting dependency.
  Software being installed: Android Development Tools 23.0.2.1259578
 Software currently installed: Android Development Tools 21.0.1.v201212060256-543035
え、いや、今インストールしようとしてる方がVer高いじゃん。どういうこと…


色んなページを参考にしても、この症状は見当たりませんでした(EclipseのVerが古い場合(3.5等)ではVerを上げることで更新出来た方も居ましたが、私のはVer4.2なので当てはまりません)

とりあえず、ADT周辺だけを再インストールすることにしました
先ほどのInstall New Softwareの右下辺りに
Whats is already installed?
というのがあるので、そこから既にインストールされているソフトを削除したり出来ます

その後もう一度インストールを試みて、最新バージョンの導入には成功したのですが、エラーの嵐が巻き起こり対処する気も失せました


で、結局もう面倒臭くなったので、Android開発用のEclipse環境そのものを再インストールしました
参考:Android 4.0でアプリ開発を始めるための環境構築

無用なバージョンの更新は避けたほうが無難ですね…

android SDK update の際に出るエラー「failed to rename directory」の対処法

参考元
Andoroid SDK ToolsのUpdateに失敗した時の対処法
SDKアップデートで「Failed to rename directory」エラーが出た場合の対処法


久しぶりにAndroidアプリを作ろうと思ってEclipseとSDK Managerを開いたら、SDK Toolsが更新されてるようでした。
で、まあ普通にアップデートしようとしたのですが

Failed to rename directory ~ PlatformToolPackage.old01

やら

-= Waring ! =-
 - javaw.exe(eclipse.exe)
are locking the follow directory:

とか、出て更新できません
どうやら、Eclipse自身がそれらファイルを使用中なため、ロックされてリネーム出来ないようです

なのでEclipseを閉じて、Android SDKのインストールフォルダ
(私:Windows7 のデフォ?は "C:\Users\sdk\AppData\Local\Android\android-sdk\tools" )から
"android.bat"を管理者権限で起動して、Android SDK Manager を起動すると更新でエラーは出なくなります


あと、たまたまRev22からAndroid sdk build tools とか言うのが必要になったみたいで、もう1回アップデートしなきゃならなくなりましたが、そこは問題ありませんでした


その後、Eclipseを起動したらADTも最新にしろと言われましたが
そのADTの方が問題でした(続く)

2014年6月23日月曜日

すごいUnity in 広島 #6 に参加しました(UnityFreeでKinectを使ってみました)

2014/6/23 すごいUnity in 広島 #6(もくもく会)に参加して来ましたのでその報告です。

すごいUnity in 広島
とは、広島で開かれているUnityの小規模の勉強会なのですが
Kinectが用意されていると聞いて飛び込んできました。

Kinectは最近ロボコンで良く目にするようになってきて
知能ロボットコンテストでも、それを使ってオブジェクトを回収するロボットが居て、一度手を出してみたいと思ってました。

もし、それらのようにKinectでオブジェクトを検知できるようになれば、格段に制御能力が上がることでしょう。

さらにこの前、UnityではCOMPortを開いてシリアル通信ができると知り

マイコン(ロボット)

Bluetooth

Unity(windows or Android or etc...)

Kinect

の図を思いつきました。

UnityではC#を使ってOpenCVなんかも普通に使えたりするし、処理系には困らないでしょう。
また、安価なステートマシンのプラグインもあるので、全体の制御系が容易に可視化出来るのではないかと目論んでます。
(ゲームエンジンとしても使ってますが、ロボット制御の良いソフトウェアにもなるのではないかとも考えてます)

以上、参加した背景です。


今回はKinectがUnityFreeで動作できるかどうかを確認するとこまでで、いっぱいいいっぱいでした。

色々あたふたした結果
KINECT SDKを使う その1・環境設定編
Kinect Wrapper Package for Unity3D をつかってみる
の2つのサイトを参考にして、UnityFreeでKinectが使えることを確認しました。

上記サイトにも書かれていますが、導入のおさらい。

1, Kinect for Windows の公式サイトからSDKをDL&インストール。(ついでにToolKitも入れておくと良い)
2, Microsoft Kinect - Microsoft SDK - Unity3D から Wrapper Package for Unity3D を DL。
3, Unityを開いて、Wrapper Package for Unity3Dをインポートする
4, サンプルシーンを開いて、Kinectを繋いだ状態でシーンを再生

これだけでOKです。
(なお、DLするファイルは公式のものをつかうこと。どこか別のところから古いファイルを持ってきてしまったせいで1時間無駄にしました…)

実際にやってみた動画が以下になります。
(カラーマップも取得できますが、顔が写ってしまうので表示してません)


全身が写っていないので、足が残念なのは仕方ないでしょう
けれども、DepthマップとColorマップは取得できているので、この画像を用いれば他のKinect処理をする人達と同様にKinectを使えるのではないでしょうか。

次の課題は人ではなく、オブジェクト(例えば本など)の位置を取得することでしょうか。
また、上手くいったら報告します。


2014年6月15日日曜日

Unity-1週間げーむじゃむ-2014/06/09~15 でゲームを作ってみました(ユニティちゃんフェスティばる!)

Unityは現在徐々に広まってきて、有名所ではスマートフォンアプリ等で使われているゲームエンジンです。
例:スマホ版DQ8、黒猫のウィズ、チェインクロニクル、PS3-Rain

色々とGUI的な部分が多いのと、ほぼ全てのプラットホーム(Webブラウザ、Windows、Mac、Linax、Android、i-OS、PS3&Vita)での出力に対応しているのが特長で
公式サイトを見ると、中々の商用レベルのものが見れますが、簡単なゲームなら個人でも楽に作って公開できます。

また、最近では日本語の資料も増えてきて(公式リファレンスも日本語に対応)、初心者でも取り掛かり易いところもいいです。
なお、Unityは無料でほとんどの機能を使うことが出来ます。これも広まっている一因でしょう。

さて、良いエディタがあっても物を作らなければ、意味がありません。
なにか作りたいけどどうしようかなー と考えていた矢先、「1週間げーむじゃむ」なるものが最近始まったことを知りました。
1週間で何でもいいから決まったテーマで作って発表して個々の技術を深めよう、という趣旨のようです。

ちょうどいいので、今週のテーマは「サウンド」ということで、どこかで見たことのあるリズムゲーを作ってみました。

ユニティちゃんフェスティばる! 
↑ここからプレイ可能です(ただし、UnityWebPlayerをインストールする必要があります)



3Dに手を出すにはまだ早かったので、比較的構造が理解しやすい2Dで作りました。
そこそこの難易度と手軽さがあるので、数分の暇つぶしには使えると思います。

なお、リズムゲー的なシステム自体は2時間位で作り終えたのですが、譜面作りが厄介でした…
シーン上ではこうなっています(^_^;)


本当に、ただゲーム開始と同時にマーカーが等速で上から降ってくるだけという…
でも、他に音合せをする方法が浮かばなかったんです…