ひつじTips

技術系いろいろつまみ食います。

「Intel.RealSense.unitypackage」を使ったUnityアプリを,Android上で使えるようにする方法

皆さまご存知のRealsenseですが,そのデバイス自身の素晴らしさもさることながら,SDKのプラットフォームの対応の幅広さも本当に素晴らしい点だと思います.

librealsenseレポジトリのReadmeも一行目から

Intel® RealSense™ SDK 2.0 is a cross-platform library (後略)

マルチプラットフォームを謳っております.

github.com


今回,AndroidからRealsenseを使いたいなぁと思って調べていて,もちろん公式対応はあるのですが,Androidのサポートはネイティブ(java)だけなのですね......

一方,Android向けにビルドもできるゲームエンジン,UnityにもRelasenseは公式に対応しているのですが,このUnityPackageはPC向けサポートのみということでAndroidには使えず......

AndroidなUnityでRealsenseを使いたい!ということで,「Android Unity Realsense」とかでググると,@UnlimitedBuildWorksさんの神記事が出てきます.

qiita.com

これで万事解決といえば解決なのですが,この方法だとjavaでRealsenseSDKを叩いてC#側に情報を渡すWrapperを自作しないといけないという......

つらい......日頃Unityでヌルく生きてるへっぽこエンジニアにはつらすぎる...…javaなんて書きたくないよう...…

ということで,Realsenseの公式UnityPackage「Intel.RealSense.unitypackage」をAndroid向けに使用できる方法を模索し,なんとか使えるようになったっぽいので,その方法をまとめます.

Realsense in Android
RealsenseのUnityPackageのサンプルシーンをAndroidバイス上で動かしてみた様子

とりあえずサンプルシーンが動いていることを確認しただけなので,何か問題あればごめんなさい.ウチではもろもろ責任取りません(免責事項)

続きを読む

LibrealsenseのAndroidWrapperをAndroid StudioでProjectビルドしたら,「Failed to notify project evaluation listener.」というエラーでビルドできない問題

問題

このLibRealSenseのAndroid Wrapperを使いたくて,Readme通りに Android Studioでプロジェクトを開いたのですが.

github.com

Syncしたときに,以下のようなエラーが出てビルドできませんでした.

A problem occurred configuring project ':hogehoge'.
> Failed to notify project evaluation listener.
   > org.gradle.api.file.ProjectLayout.fileProperty(Lorg/gradle/api/provider/Provider;)Lorg/gradle/api/file/RegularFileProperty;
GradleSyncのエラー
エラーメッセージ

この問題の解決方法を残しておきます.

解決策

1. ProjectのGradleのバージョン設定を変更する

File > Project Structure... から Project Structure を開くと,Android Gradle Plugin Versionが選択できます.

Android StudioのProject Structure
Android StudioのProject Structure

古いバージョンに設定されているようなので,2021年02月現在で最新の安定版と思しき4.1.2に変更.

Gradle Plugin version
Gradle Pluginのバージョンを最新にする

ここで自動でSyncが走るはず.

すると,元の「Failed to notify project evaluation listener.」のエラーはなくなるんですが,次は「Minimum supported Gradle version is ...」というエラー.

Gradle version error
Gradle versionのエラー

設定したGradle versionが悪かったっぽい.

Change gradle version again
Gradle versionを再度変更

今回は4.0.2にすると「Minimum supported Gradle version is」というエラーはなくなりました.

ここは試行錯誤でたどり着いたので,なぜ4.0.2でOKなのか詳細な理由は不明...

2. 必要なNDKのバージョンをダウンロードする

ただ,なんかまた別のエラーが出ます...

次は「No version of NDK matched the requested version」というもの.

Android NDK version error
NDKのバージョンエラー

これは普通に正しいバージョンのNDKをインストールすればよさそうです.

右上のアイコンからSDK Managerを開き,

Open SDK Manager
SDK Managerを開く

SDK Tools のタブを選択,右下の Show Package Details にチェックが入っていなかったらチェックを入れます.

すると,NDKのバージョンを選択できるようになるので,エラーメッセージで指定されたバージョンを選択し,この状態で OK を押します.

Install NDK
NDKのバージョンを指定してインストール

なんやかんやダイアログが出るかもですが,適宜対応してるとダウンロードが実行されるので待ち.

3. 再度Syncを実行

NDKのダウンロードが終わったら,再度Syncを実行します.

右上のアイコンからGradleのSyncを実行

f:id:mu-777:20210209084835p:plain
GradleのSyncの実行

すると成功しました!🎉🎉

Build successfull
Build成功時のメッセージ

参考

「toio SDK for Unity」でシミュレータとしてビルドする方法

「ロボットやろうぜ!- toio & Unity 作品動画コンテスト -」というのにアプリを出したのですが,それで「toio SDK for Unity」を触ったのでTipsとか書くシリーズ第三弾です.

コンテストに出したアプリについてはこちら: mu-777.hatenablog.com

コードのレポジトリはこちら: github.com

で,せっかくなので誰でもこのアプリを動かせるようにしようとこのコンテストで作ったアプリはWebGLアプリにして公開しています!:
(自分でもそのうち動かせなくなりそうですしね...)

mu-777.github.io

ただ,これをするために地味にハマったのでメモとして書いておきます.

続きを読む

「toio SDK for Unity」でCubeを車輪の角速度[rad/sec]で制御する方法

「ロボットやろうぜ!- toio & Unity 作品動画コンテスト -」というのにアプリを出したのですが,それで「toio SDK for Unity」を触ったのでTipsとか書くシリーズ第二弾です.

コンテストに出したアプリについてはこちら: mu-777.hatenablog.com

コードのレポジトリはこちら: github.com

タイトルの,「Cubeの車輪の角速度[rad/sec]での制御」にちょっと手こずったというか,「toio SDK for Unity」にそのものズバリな関数は用意されていなかったので自作した件について書きます.

ちなみに実機は持っていないので,純粋にUnity Editor上でシミュレータとして使う用途に関する話だけになります.

続きを読む

「toio SDK for Unity」の座標系について

「ロボットやろうぜ!- toio & Unity 作品動画コンテスト -」というのにアプリを出したのですが,それで「toio SDK for Unity」を触ったのでTipsとか書くシリーズです.

コンテストに出したアプリについてはこちら: mu-777.hatenablog.com

コードのレポジトリはこちら: github.com

マット上における各Cubeの絶対位置が取得できることが大きな特徴・魅力なtoioですが,SDK上で取得できる位置座標系が個人的にはかなり罠だったので記録を残しておきます.
たぶん,toio SDK for Unity のドキュメントにも,「toio コアキューブ技術仕様」にも情報が載ってないと思います(読み逃してるだけなら申し訳ないです)

ちなみに実機は持っていないので,純粋にUnity Editor上でシミュレータとして使う用途に関する話だけになります.

続きを読む

「ロボットやろうぜ!- toio & Unity 作品動画コンテスト -」に出たよ

去年の話になるのですが,「ロボットやろうぜ!- toio & Unity 作品動画コンテスト -」というのがありまして,それに出品したものについてまとめまっす.

toio.io

ついでにtoioをUnityで使うためのSDKtoio SDK for Unity」についても書こうかなという感じです.

ちなみに受賞とかは全然ダメでした😭😭

「ロボットやろうぜ!- toio & Unity 作品動画コンテスト -」について

は詳細略で.ここ見てください:https://toio.io/blog/detail/20200930-1.html

応募作品

出したのは「toioで人工ポテンシャル法をシミュレーションしてみる」というネタでした.

www.youtube.com

このコンテスト自体は締め切りの1ヶ月前ぐらいから知ってたのですが,漠然と「何ができるかなぁ~色々できそうで意外と難しいなぁ~」とかウダウダ考えてたのですが,

  • 「ロボットやろうぜ!」というタイトルだったのでちゃんとロボットっぽいことをしよう
  • toioの「絶対位置を取得できる」という最強の特徴を活かそう

というところから,大学の学生実験でやった人工ポテンシャル法をtoioで実装しよう,と思い至りました

遊んでみる

こちらから遊べるようになってます!:

mu-777.github.io

レポジトリはこちらです:

github.com

人工ポテンシャル法を使ったロボット制御について

別記事にまとめる予定です

記事を書きました!

mu-777.hatenablog.com

toio SDKのTipsとかもろもろ

別記事にまとめる予定です

記事を書きました!:

おわりに

ちょっとあまりに記事書いてなかったので,あんま中身ないですがとりあえず公開しちゃいます.

今年はもうちょっとブログ書きたいものです

[Unity]アプリのウインドウハンドルを確実に取得する方法

このQiita記事にめっちゃちゃんとまとまっていて(@kiruroboさん,素晴らしい記事本当にありがとうございます!!!),本エントリで紹介する方法はほぼこの「方法4」ではあるんですが,この「方法4」ではうまくいかないところがあったのでなんとかしましたよ,というのが本エントリになります.

qiita.com

諸事情により,アプリがバックグラウンドにいた場合でもウインドウハンドルを取得したく,その場合 GetActiveWindow() 関数を使用するQiita記事内の「方法1」「方法2」が使えません.

「方法3」でもいいのですが,ちょっとQiita記事内でも挙げられてる「問題点」が厳しくパス,「方法5」もちょっとめんどくてパス,というので,「方法4」たどり着きました.

Qiita記事には「方法4」の実装まで書かれていなかったので,具体的な実装を明記しつつ,問題点とそれの回避方法までまとめます.

無駄に長いので,答えが欲しい方は「4. 実装」の方にとんでください~

  • 方針
  • 問題
  • 問題の解決
  • 実装
  • 感想
続きを読む