littlewing

人間とコンピューターとメディアの接点をデザインするために考えたこと

Magic Leap/mldbコマンドのヘルプ

Magic Leap Oneを起動する

  1. Light Packのボタンを三秒長押し(ピポッと音がする) ※マニュアルでは3秒だが、実際は押すだけでOK?
  2. Light PackのLEDがついたら、コントローラのホームボタン(小さいポッチ)を3秒長押し(バイブレーションとLEDが動作する)
  3. 起動に30秒くらいかかる。その間は無反応。起動すると起動サウンドが流れ、Welcome画面が表示される
  4. welcome画面にTap to Contiue.と表示されるので、コントローラのトリガーを押す

Magic Leap Oneを終了する

Case 1: ソフトウェア上での操作方法

  • 画面内のメニューからは、ホームボタンを押して、バッテリーアイコンを選択 -> PowerOffを選択 -> 画面の指示に従って、コントローラーのタッチパッドを円状にタッチする

Case 2: ハードウェアでの操作方法

  • ハードウェアでの電源OFF操作の場合は、Light Packのボタンを8秒長押し後、コントローラーのトリガーとホームボタンを3秒長押し。
  • マニュアルは上記記載だが、コントローラは勝手に電源切れる気がする

基本的な操作や、FAQ

やりたいこと 操作方法
音量の変更 Light Pack横の音量+-ボタンで操作 / ホーム画面からも可能
電池残量の確認 Light Packのホームボタンに触れる(触るだけで押さない)
→LEDの表示で電池残量がわかる。コントローラも
Light WearへのCG表示のOn/Off Light Pack横の Reality ボタンを押す。
復帰時は長押し。
表示OFFの状態の時はLight PackのLEDが白色になっている
アプリのインストール 独自のアプリはThe Labを使う。もしくは、mldbコマンド(後述)。
ストアアプリは [World] というアプリからインストール。
アプリのアインストール 独自のアプリはThe Labを使う。もしくは、mldbコマンド(後述)
もしくは、ホーム画面でアプリを選択して、
タッチパッドを押下
 > サブメニューからアインストール
起動中のアプリを閉じる ホーム画面でアプリを選択して、タッチパッドを押下
 > サブメニューからClose
画面に何も出てない Light Wearを外していると、自動的にSleepに入る。
再び装着すると復帰するが、眼鏡の上からなど、
軽く覗いているだけだと、近接センサーが働かない場合がある。
しっかりと装着すると復帰する
眼鏡使えるの? 眼鏡の上から正しく装着するのはほぼ無理。ノギスで計ったら、横幅114mm以内(できれば112mm)の眼鏡なら入りそうだけど、そんな眼鏡はほぼ、存在しない
専用眼鏡(レンズ)が欲しい! このブログ参照
IPアドレスが知りたい Homeボタン > Wifiアイコン > 接続中のWifiを選択 > [ i ]Advanced をクリック
USBでつないで、mldb ifconfig でもok
ネットワーク経由でデバッグしたい MLDB Over WiFi を読む。
充電しながら開発したい mldb をネットワークでつなげれば可能 ↑参照
録画したい 後述
リアルタイムで外部ディスプレイにストリーミングしたい (19/9/18更新)Device StreamでUSBもしくはWifi経由でストリーミング可能
現状無理(19/3/27時点) 来週のバージョンアップで出来るかも
Homeボタンを押すと音はするけど、何も表示されない PCのディスプレイが目の前にあると、オクルージョンでディスプレイの後ろ側にCGが表示され、見えない事が多い。広い所をみて、再度Homeボタンを押してみる
キーボードが壁に埋まって入力できない キーボードもオクルージョンがかかるので、広い場所で操作するしかない
バイスをリセットする バイス上で Settings.> ID選択 >下の方にある"Take me to Factory Reset"を選択
Creator Modeが表示されない Magic Leap ID作成後、 Webサイト 上で、規約に同意する必要がある。この操作はDevice上ではできないのでPCやスマホでやる。詳しくはこちら->How To: Enable Creator Mode
規約に同意すると、端末にCreator Modeのメニューが表示されるようになる。
Webサイトにアクセスできない、通信ができない Settings > Set Time & Date Automatically > Offにすると、時刻が大幅にずれて、外部通信に失敗する場合がある。(SSL証明書がエラーになる)

mldb コマンドの説明

Magic Leapでアプリのインストール操作にはmldb.exe というコマンドをコマンドプロンプトなどから利用します。場所は

{Magic Leap SDKのインストールパス}\mlsdk\v0.19.0\tools\mldb

となります。 {Magic Leap SDKのインストールパス}はデフォルトだと、

C:\Users\{ユーザ名}\MagicLeap\

となります。

このパスをWindows環境変数のPath に登録しておくと、後の操作が楽になります。

MagicLeapの録画方法

  • コントローラーで、ホームボタンを押しながら、バンプボタンを3秒ほど長押ししてください。録画が開始されます。 録画の停止も同じ操作方法です。

録画データの取り出し

※2020/4/9追記 今はThe Lab からGUIでできます。

# Cドライブ直下に移動(必須ではありません)
cd C:\

# 端末内のビデオをすべて取得 C:\videos\にmp4の動画がダウンロードされます。
mldb pull -D /C1/videos

# 端末内の C1/videos/ フォルダ内の一覧を取得
mldb ls  -D C1/videos

# 端末内の C1/videos/xxxx.mp4 だけをPCにコピー
mldb pull -D /C1/videos/xxxx.mp4

# Videosフォルダの動画を全部消す
$ mldb rm -D C1/videos/*.mp4


# 自分用メモ MINGW64でやると、Userフォルダにしか書き出せなかった。

 mldb pull  -D C1/videos/ML_20190920_11.52.33.mp4 "C:\\Users\\mynage\\rec.mp4"

Magic Leap/mldbコマンドのヘルプ

gistにもアップした。

gist.github.com


HoloLensとMagicLeapの用語の対比

機能 HoloLens MagicLeap
空間への座標固定 World Anchor (空間アンカー) Persistent Coordinate Frames (PCF)

HoloLens のUnityアプリで、カメラアクセスの許可がされているか確認する。

Vuforiaなどでカメラ機能を利用する際に、ユーザーが許可を与えなかったり、 OSバージョンアップ時に許可設定が吹っ飛んでしまった場合、そのまま続行すると例外でアプリがクラッシュしてしまいます。

そこで、カメラアクセスの許可が無いときに分岐する方法。

Application.HasUserAuthorizationは、WebPlayerだけみたいで、UWPではゴミ。

gist.github.com

カメラアクセスの許可は、設定アプリを利用して Settings > Privacy > Camera > アプリ一覧から ON/OFF できます。

参考

HoloLens のUnityアプリで、UWP AppPackageビルド後のバージョンを取得する

UnityのApplication.versionだと、PlayerSettingsのバージョンになってしまう。

AppPackage作成時のインクリメントに対応するには別の方法で取得しないといけない。

そう、こんな感じで

#if !UNITY_EDITOR && UNITY_WSA
using Windows.ApplicationModel;
#endif


private static string GetVersionInfo()
{
#if !UNITY_EDITOR && UNITY_WSA
    Package package = Package.Current;
    PackageId packageId = package.Id;
    PackageVersion version = packageId.Version;

    return string.Format("{0}.{1}.{2}.{3}", version.Major, version.Minor, version.Build, version.Revision);
#else
    return Application.version;
#endif

}

Unityで4つの点から球の中心と半径を求める(内包or面する場合)

空間上で複数の座標から球の中心と半径を求める必要があったので調べてみた。

球を特定するには最低4つの点が必要。

その1.全ての点が球の表面(外接)となる球を求める

f:id:pigshape:20180916143921p:plain

センサー値から回転軸を求める場合に使えるかも。(というかその為に考えた)

gist.github.com


その2.すべての点を内包する最小の球を求める

内包する場合は、一部の点は球の内側に存在する場合がある。

f:id:pigshape:20180916144327p:plain

gist.github.com


両方とも自力では難しかったので、元ネタのコードをUnity/C#に移植しただけですが。

Oculus GO アプリで、マイクのパーミッションが出ないようにする

UnityでOculus Go アプリを開発していたら、マイクを利用していないのに起動時にマイク利用許可のパーミッションが表示される。

そのままでOculusの審査に出したら、リジェクトされてしまった。

OverView: The app must request the minimum number of permissions required to function.

Result: Your app is asking for excessive user permissions or using user permissions inappropriately. -Access Microphone Please remove all unnecessary permissions.

microphoneを利用する処理は書いていないし、 Assets/Plugins/Android/AndroidManifest.xml

<uses-feature android:name="android.hardware.microphone" android:required="false" />

追記しても変化無し。


apk内のManifestがどうなっているか調べてみる。

Unityで作成したAndroidアプリにおいて、最終的なmanifestの内容は、ソースコードの中身などから生成されるらしいので、 apk内のManifestがどうなっているのか調べてみる。

Android SDKに含まれている aaptというコマンドで調べられるらしい。

aapt.exe は

C/Users/{Username}/AppData/Local/Android/Sdk/build-tools/28.0.1/

にあった。

実行してみると

$ ./aapt.exe d permissions hogehoge.apk AndroidManifest.xml

package: jp.hoge.hoge
uses-permission: name='android.permission.INTERNET'
uses-permission: name='android.permission.WAKE_LOCK'
uses-permission: name='android.permission.RECORD_AUDIO'

となり、RECORD_AUDIOが付与されてしまっている。

調べてみると、フォーラムにも同様の症状が。

結果的に、以下の対応をして解決。

  1. 以下6個のファイルを削除
    • Assets/Oculus/Platform/Scripts/IMicrophone.cs
    • Assets/Oculus/Platform/Scripts/LivestreamingMicrophoneStatus.cs
    • Assets/Oculus/Platform/Scripts/MicrophoneInput.cs
    • Assets/Oculus/Platform/Scripts/MicrophoneInputNative.cs
    • Assets/Oculus/LipSync/Scripts/OVRLipSyncMicInput.cs
    • Assets/Oculus/VoiceMod/Scripts/Helpers/OVRMicInput.cs
  2. CAPI.csでエラーが出るので、該当箇所(Livestreamingなんちゃら) をコメントアウト
  3. 再ビルド

Oculus Goのストア申請に役に立ったリンク集

Unreal Engine関連リンク

自分メモ。 いかん。全部忘れてる。

Unity開発者向けUnrealEngineガイド

Hololens Template for Unreal Engine 4

HoloLensでXbox One用のゲームパッド2-その後

以前、HoloLensでXbox One S のゲームパッドを使う方法を書きましたが、 その時の課題の解決方法のがひとまずわかりました。

元記事はこちら

littlewing.hatenablog.com

この記事ではUnityのInputManagerを利用してキーを取得する方法を試したのですが、 XboxコントローラーのDPadと右スティックの入力が取得できませんでした。

その後の調べで、Windows.Gaming.Inputを利用してコードを書いた場合は、両方とも取得できました。ただし、Editor上では動きません。 まとめると

取得方法 HoloLens(UWP)で
DPad・右スティックが
使えるか?
Unity Editor上で
取得できるか?
UnityのInputManager 使えない 動く
Windows.Gaming.Input 使える 動かない

こんな感じ

調べた範囲での話です。