Closed32

自力でImmersal REST APIによる位置合わせをする in Unity

Immersalを使うのに毎回Immersal公式サンプルを使っているので、思い切って自力でSDKを使わずに位置合わせをしたい
ただ別に自力でアルゴリズム構築するとかではなく、用意されているREST APIを使うだけだけど......

あとImmersalSDKがunitypackage形式の配布だし、developer portalから取得する形だし、OSSじゃないのでちょっと使いづらいなぁとか思っていた
この思考が成功して余力があったらgitからPackage Manager経由でインポートできるライブラリにしたいかなぁって思う

たぶん前にWebARでやった時ほどの修羅の道じゃないと思う
Unityを使うのでARFoundationやtransform系のAPIの恩恵を得られる
最悪SDKを参考にすることもできるし

ここまででおそらくリクエスト自体は飛ばせるはず

とりあえずUnity 2020.3.11を使ってサクッとURP+ARFoundasion+ARCoreのシーンをセットアップ
実機でも動作確認done

点群のデータが欲しいと思い、Keijiro/Pcxをインポートしてみた
これでImmersalのply点群をインポートしたところ、いい感じにいなった

ARで見てみたら、ちょっと点群が大きかったかな
マテリアルで変更できそうだったので試してみる

準備はできたので、ARFoundasionの情報を使ってImmersalにリクエストを送ってみるまでやって見よう

Immersalの情報はScriptableObjectにまとめておく方式でやりたい

Unityから試しにImmersalにlocalizeのリクを飛ばしてみたが、なぜか

{
  error: "map count"
}

から無限に脱出できない

コードはこんな感じ
変なことはしていないはずなんだが......

上記の問題がC#やUnityによるものなのかわからないので、いったんWebクライアントからもやってみる
Webからは前に成功しているので、たぶんやり方は分かるはず

ん-なんとなくUnityのせいではない気がしてきた
というのも、なぜかWeb側でやっても400 Bad Reqが飛んでくるので
自分の理解不足なのだろうか......
いやでも前はできたんだけどな

公式のPythonのサンプル試したらやっぱりmap countでエラーになった
これ自分が悪くないやつだな?

あれからいろいろあって、ARFoundationの恩恵を十分に受けながら位置合わせのリクエストを送り、
なんとか成功した。
ん-でも精度が悪い気がする
img

作業ログを取るのをすっかり忘れてたんだけど、
昨日はImmersalのレスポンスをシリアライズして、そのデータからマップの姿勢を計算したりしたが
ちょっと変な結果になってしまった

Immersalの位置合わせは成功していて、結構同じような結果が返ってきているので
あとは自分の計算の聖な気がする

位置合わせの姿勢計算が失敗している図

quaternionの生成の仕方が間違ってるのかな
ちょっとこのgistに載ってる方法でも試してみたい

もしくはアフィン変換行列を生成してMapを変形させるとか
WebARのときはその実装だった気がする

ちょっと不安定だけど、何回かImmersalによる位置合わせができた!ということでひと段落......

本当はライブラリ化もしたかったけど、不安定な部分があったり
環境の制約(C#8の使用&UniTask)があるため、いったん保留

これにてスクラップはクローズです

本当はライブラリ化もしたかったけど、不安定な部分があったり

このバグを修正してリファクタをした
結構キレイにできたしよく動作してくれているので
ライブラリ化してみたいなぁと思うなど

このリポジトリをimportによって別のライブラリ用のリポジトリにして、
そこでgit経由で配布したいな

なんとかカスタムパッケージとして公開できた

このスクラップは3ヶ月前にクローズされました
ログインするとコメントできます