MOVERIO
BT-30C ドキュメント

2. Androidアプリ開発

2.1. Androidアプリ開発の概要

Moverio向けのAndroidアプリケーションを開発するために必要となる手順について以下に記載します。

Android SDKの導入

Moverio SDKの組み込み

APIリファレンス

Moverio SDKの適用範囲

2.1.1. Android SDKの導入

以下の項目ではWindows10を搭載したパソコンにAndroid SDKを導入する方法について記載します。

2.1.1.1. Android Studioの入手

Android Studioを下記のサイトからダウンロードします。(2018年8月時点では、Android Studio 3.1.4)

https://developer.android.com/studio/

2.1.1.2. Android Studioのインストール

インストーラーの指示に従いAndroid Studioをインストールします。

例) C:\Users\<ユーザー名>\AppData\Local\Android\sdk
※以降、上記フォルダにAndroid Studioがインストールされていることを前提に記載します。

2.1.1.3. Android Studioのプロキシ設定

プロキシ設定の必要なネットワーク環境でアプリケーションを開発する場合は、Android Studioのプロキシ設定を行ってください。下記のサイトで詳細な手順を確認してください。

https://developer.android.com/studio/intro/studio-config#gradle-plugin

プロキシ設定が不明な場合は、ネットワーク管理者にプロキシを利用した外部ネットワークへの接続方法についてお問い合わせください。

2.1.1.4. Android SDK Manager でのツールの取得・更新

アプリケーションの開発に必要なツール類は、Android SDK Managerを使用してください。下記のサイトで詳細な手順を確認してください。

https://developer.android.com/studio/intro/update#sdk-manager

2.1.2. USBドライバの設定

アプリケーション開発パソコンと接続するために、ご使用のホスト機器のUSBドライバの設定を行います。USBドライバの設定は、ご使用のホスト機器の設定手順をご確認ください。

2.1.3. ホスト機器とパソコンとの接続

ADBの設定が完了したパソコンとホスト機器の接続について記載します。

2.1.3.1. ホスト機器の設定

ホスト機器の開発者向けオプションを有効にしてください。次に、USBデバッグを有効にしてください。下記のサイトで詳細な手順を確認してください。

https://developer.android.com/studio/debug/dev-options

2.1.3.2. 接続確認方法

ADBの接続確認コマンドでパソコンとホスト機器が接続されているか確認することができます。
コマンドプロンプトを起動し、"cd C:\Users\<ユーザー名>\AppData\Local\Android\sdk\platform-tools" を実行しフォルダを移動します。
※環境変数で上記のPathを通しておくと便利です。

"adb devices"を実行してリストにデバイス名が表示されればADB接続ができています。

※表示されない場合は、ホスト機器をUSB接続しなおし、再度"adb devices"を実行してください。

2.1.4. Moverio SDKの組み込み

下記利用方法は、Android Studio でのアプリケーション開発を前提としています。

Android StudioのProjectViewを表示し、[File]-[New]-[Directory]で"libs"フォルダを作成します。
C:\Users\<ユーザー名>\AndroidStudioProjects\<アプリケーション名>\app\libs が作成されますので、ここへ MoverioSDK_1.0.0.aar を置きます。
(作成したプロジェクトのフォルダが C:\Users\<ユーザー名>\AndroidStudioProjects の場合)
※以降、C:\Users\<ユーザー名>\AndroidStudioProjects\<アプリケーション名>にプロジェクトがあるものとして説明しています。
その後、アプリケーションの最小APIレベルを24で定義し、アプリケーションの依存関係にMoverioSDK_1.0.0.aarを追加してください。

apply plugin: 'com.android.application'

android {
        :
    // APIレベル24を追加
    minSdkVersion 24
        :
}

dependencies {
        :
    // MoverioSDK.aarを追加
    implementation files('libs/MoverioSDK_1.0.0.aar')
        :
        :
}

Android Studio上部のSync Project with Gradle Filesボタンを押して、Gradleの変更をプロジェクトに反映します。

2.2. ディスプレイ制御

Moverioはシースルー型(透過型)のディスプレイを搭載しています。Moverio SDKではディスプレイの明るさや2D/3D表示モードの切り替えなどを制御することができます。ディスプレイの明るさは専用APIからの調整と周辺環境の照度に合わせた自動調整の方法を使用することができます。また、Side-by-Side方式の3Dコンテンツの表示に対応することが可能です。

関連する情報を参照してください。

ディスプレイの明るさの調整

2D/3D表示モードの切り替え

ディスプレイ制御機能の機種対応表

APIリファレンス

サンプルコード

2.2.1. ディスプレイの明るさの調整

Moverioはシースルー型のディスプレイを搭載しており、周辺環境の明るさの影響により表示映像の見やすさが変化します。周辺環境が明るい場合はディスプレイの明るさを強くし、周辺環境が暗い場合はディスプレイの明るさを弱くすることで表示映像を見やすくすることができます。

ディスプレイの明るさの調整には、最初にMoverioのディスプレイとの通信を確立します。これを行うには、DisplayManagerクラスのインスタンスを作成して、open()メソッドを呼び出してください。

※Moverio SDKのDisplayManagerクラスの利用の際に、Android標準のDisplayManagerクラスとの名前衝突を回避するために、com.epson.moverio.hardware.display.DisplayManagerのインポートをする、もしくは、インスタンス生成時のクラス名をcom.epson.moverio.hardware.display.DisplayManagerとしてください。

例)com.epson.moverio.hardware.display.DisplayManagerのインポート

import com.epson.moverio.hardware.display.DisplayManager;

例)com.epson.moverio.hardware.display.DisplayManagerのインスタンス生成

public class DisplayActivity extends Activity {
    private com.epson.moverio.hardware.display.DisplayManager mDisplayManager = null;

そして、ディスプレイの明るさを手動で調整するには、setBrightness()メソッドを使用してディスプレイの明るさの調整をしてください。調整できるディスプレイの明るさの範囲は、 ディスプレイの明るさの範囲を参照してください。

最後に、ディスプレイの明るさ調整を完了した場合は、必ずMoverioのディスプレイとの通信を解除してください。解除には、close()メソッドを使用してください。

private DisplayManager mDisplayManager = new DisplayManager(context);
try {
    mDisplayManager.open();
} catch (IOException e) {
    e.printStackTrace();
}
mDisplayManager.setBrightnessMode(DisplayManager.BRIGHTNESS_MODE_MANUAL);
mDisplayManager.setBrightness(15);
mDisplayManager.close();

2.2.2. 2D/3D表示モードの切り替え

Moverioのディスプレイは、Side-by-Side方式の3Dコンテンツの表示に対応しています。Moverioで表示する映像がSide-by-Side方式の3Dコンテンツの場合でアプリから制御する場合は、専用APIを使用してください。

Side-by-Side方式とは一つの画面に左右の画像を並べて格納する方式です。

Side-by-Side方式の映像を作成する場合は、映像の左半分と右半分に、それぞれ左目用映像と右目用映像を配置してください。

例えば、1280x720(HDサイズ)のSide-by-Side方式の映像を作成する場合は、下図のように左目用映像に640×720の映像を、右目用映像に640×720の映像を配置することでSide-by-Side方式の映像とすることができます。

ディスプレイの2D/3D表示モードの切り替えには、最初にMoverioのディスプレイとの通信を確立します。これを行うには、DisplayManagerクラスのインスタンスを作成して、open()メソッドを呼び出してください。

次に、ディスプレイの2D/3D表示モードを2D表示モード、もしくは、3D表示モードに設定します。設定には、setDisplayMode()メソッドを使用します。2D表示モードの場合はDISPLAY_MODE_2D引数を渡して、3D表示モードの場合はDISPLAY_MODE_3D引数を渡してください。

最後に、2D/3D表示モードの設定を完了した場合は、必ずMoverioのディスプレイとの通信を解除してください。解除には、close()メソッドを使用してください。

private DisplayManager mDisplayManager = new DisplayManager(context);
try {
    mDisplayManager.open();
} catch (IOException e) {
    e.printStackTrace();
}
mDisplayManager.setDisplayMode(DisplayManager. DISPLAY_MODE_3D);
mDisplayManager.close();

2.2.3. シースルーを活かした映像の作り方

Moverioはシースルー型のディスプレイを搭載しており、Moverioの装着者は実空間で見えている景色を見ながら表示される映像を重ね合わせてみることができます。実空間で見えている景色にMoverioで表示したいオブジェクトの映像を重ね合わせて見る場合は、表示したいオブジェクトの背景を黒にすることで、シースルーを活かした映像を作ることができます。

2.2.4. ディスプレイの明るさの範囲

調整できるディスプレイの明るさの範囲は、下表を参照してください。

機種 明るさの範囲
BT-35E/30E 0~20
BT-30C 0~20

2.3. センサー制御

Moverioは動き、向き、環境を検知する様々なセンサーをヘッドセットに搭載しています。Moverio SDKでは、これらのセンサーの生のデータを取得することができます。センサーデータを使用することで、装着者の頭の動きを推測したり、周辺環境の明るさを推測したりできます。

関連する情報を参照してください。

センサーの種類

センサーの軸

センサーデータの取得

センサー制御機能の機種対応表

APIリファレンス

サンプルコード

2.3.1. センサーの種類

Moverioは様々な種類のセンサーを搭載しています。センサーの中には、ハードウェアベースのセンサーとソフトウェアベースのセンサーがあります。ハードウェアベースのセンサーには、加速度、地磁気、角速度、環境照度などがあります。ソフトウェアベースのセンサーは、単体もしくは複数のハードウェアベースのセンサーの出力値を使用した仮想のセンサーです。ソフトウェアベースのセンサーには、回転ベクトルや重力などの推測が可能なものがあります。

センサー 種類 説明 使用例
TYPE_ACCELEROMETER ハードウェア 重力を含むMoverioの加速度を3軸(x、y、z)の加速度[m/s²]で測定します。 モーション検知(傾きなど)
TYPE_MAGNETIC_FIELD ハードウェア 周囲の地磁気を3軸(x、y、z)の地磁気[µT]で測定します。 方位検知
TYPE_GYROSCOPE ハードウェア Moverioの角速度を3軸(x、y、z)の角速度[rad/s]で測定します。 モーション検知(回転など)
TYPE_GRAVITY ソフトウェア 重力を3軸(x、y、z)の加速度[m/s²]で測定します。 モーション検知(傾きなど)
TYPE_LINEAR_ACCELERATION ソフトウェア 重力を除いた3軸(x、y、z)の加速度[m/s²]で測定します。 タップ、歩行の検出などへの応用
TYPE_ROTATION_VECTOR ソフトウェア Moverioの向きを回転ベクトルで測定します。 ヘッドトラッキングなど

2.3.2. センサーの軸

Moverioのセンサーは、Android標準のセンサーの座標系と同じです。Moverioを装着した場合、X軸は右方向を指し、Y軸は上方向を指し、Z軸は装着者の方向を指します。

2.3.3. センサーデータの取得

Moverio SDKを使用すると、Moverioに搭載されている各種センサーを使用することができます。

センサーデータの取得には、最初にMoverioのセンサーとの通信を確立します。これを行うには、SensorManagerクラスのインスタンスを作成して、open()メソッドを呼び出してください。その際に、センサーの種類とセンサーデータのリスナーのインスタンスを引数で渡してください。

※SensorManager#openは、MoverioとスマートフォンをUSB接続してから10秒以上経過後に、Moverioに映像が表示されていることを確認の上、実行してください。10秒以内にSensorManager#openを実行した場合は、正常に通信を確立できない場合があります。

※Moverio SDKのSensorManagerクラスの利用の際に、Android標準のSensorManagerクラスとの名前衝突を回避するために、com.epson.moverio.hardware.sensor.SensorManagerのインポートをする、もしくは、インスタンス生成時のクラス名をcom.epson.moverio.hardware.sensor.SensorManagerとしてください。

例)com.epson.moverio.hardware.sensor.SensorManagerのインポート

import com.epson.moverio.hardware.sensor.SensorManager;

例)com.epson.moverio.hardware.sensor.SensorManagerのインスタンス生成

public class SensorActivity extends Activity implements SensorDataListener {
    private com.epson.moverio.hardware.sensor.SensorManager mSensorManager = null;

センサーデータは、登録されたリスナーのonSensorDataChanged()メソッドで随時取得できます。onSensorDataChanged()メソッドは、非常に高速に呼び出しされます。アプリケーションで効率的なセンサー利用を実現するために、onSensorDataChanged()メソッド内では、可能な限り時間のかかる処理などを実行しないようにしてください。最後に、センサーデータの取得を終了させる場合は、必ずMoverioのセンサーとの通信を解除してください。解除には、close()メソッドを使用してください。

センサーデータは、SensorDataクラスのインスタンスとして取得できます。SensorDataクラスの詳細は、APIリファレンスを参照してください。

public class SensorActivity extends Activity implements SensorDataListener {
    private SensorManager mSensorManager = null;

    @Override
    public final void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);

        mSensorManager = new SensorManager(this);
    }

    @Override
    protected void onResume() {
        super.onResume();
        try {
            mSensorManager.open(SensorManager.TYPE_ACCELEROMETER, this);
        } catch (IOException e) {
            e.printStackTrace();
        }
    }

    @Override
    protected void onPause() {
        super.onPause();
        mSensorManager.close(this);
    }

    @Override
    public void onSensorDataChanged(SensorData data) {
        // Do something with this sensor value.
    }
}

2.3.4. センサー制御の注意事項

Moverio SDKを使用したセンサー制御は、単一のアプリでのみ利用することができます。別のアプリでセンサー制御を利用する場合は、必ずセンサー制御を利用しているアプリでセンサー制御の利用を停止してから、利用してください。

2.4. オーディオ制御

MoverioはCTIA規格に準拠したイヤホンを挿入することができます。Moverio SDKではイヤホンの音量を調整することができます。

関連する情報を参照してください。

イヤホンの音量の調整

オーディオ制御機能の機種対応表

APIリファレンス

サンプルコード

2.4.1. イヤホンの音量の調整

MoverioはCTIA規格に準拠したイヤホンを挿入することができます。周辺環境に合わせてイヤホンの音量を増減させることができます。

イヤホンの音量の調整には、最初にMoverioのオーディオとの通信を確立します。これを行うには、AudioManagerクラスのインスタンスを作成して、open()メソッドを呼び出してください。

※Moverio SDKのAudioManagerクラスの利用の際に、Android標準のAudioManagerクラスとの名前衝突を回避するために、com.epson.moverio.hardware.audio.AudioManagerのインポートをする、もしくは、インスタンス生成時のクラス名をcom.epson.moverio.hardware.audio.AudioManagerとしてください。

例)com.epson.moverio.hardware.audio.AudioManagerのインポート

import com.epson.moverio.hardware.audio.AudioManager;

例)com.epson.moverio.hardware.audio.AudioManagerのインスタンス生成

public class AudioActivity extends Activity {
    private com.epson.moverio.hardware.audio.AudioManager mAudioManager = null;

そして、イヤホンの音量を調整するには、setVolume()メソッドを使用してイヤホンの音量を調整してください。調整できるイヤホンの音量の範囲は、 イヤホンの音量の範囲を参照してください。

最後に、イヤホンの音量の調整を完了した場合は、必ずMoverioのオーディオとの通信を解除してください。解除には、close()メソッドを使用してください。

private AudioManager mAudioManager = new AudioManager(context);
try {
    mAudioManager.open();
} catch (IOException e) {
    e.printStackTrace();
}
mAudioManager.setVolume(12);
mAudioManager.close();

2.4.2. イヤホンの音量の範囲

調整できるイヤホンの音量の範囲は、下表を参照してください。

機種 音量の範囲
BT-35E/30E 0 ~ 15
BT-30C 0 ~ 20

2.5. ネットワークを介してアプリケーションをデバッグする

BT-35EなどのUSB接続型Moverioのアプリケーション開発では、USB接続型MoverioとAndroidスマートフォンをUSB接続しアプリケーション動作を確認します。このときパソコンとAndroidスマートフォンはUSB接続されていないためデバッグできません。

上記を解決する方法として、ネットワークを介してAndroidスマートフォンにadb接続することでUSB接続型MoverioとAndroidスマートフォンをUSB接続したまま開発する方法について記載します。下記サイトも合わせて確認ください。
https://developer.android.com/studio/command-line/adb#wireless

  1. パソコンとAndroidスマートフォンを同じネットワークに接続します。
  2. パソコンとAndroidスマートフォンをUSB接続します。
    ※以降、パソコンに接続されているAndroidスマートフォンは1台のみとして記載します。
  3. パソコンにおいて下記コマンドを実行し、Androidスマートフォンにネットワークを介してadb接続できるようにします。
    # adb tcpip 5555
  4. パソコンとAndroidスマートフォンのUSB接続を解除します。
  5. AndroidスマートフォンのIPアドレスを確認します。
    いくつかのAndroidスマートフォンにおいてIPアドレスは設定画面から確認できます。IPアドレスが表示される画面までの手順はAndroidスマートフォンによって異なります。詳しくはお手持ちのAndroidスマートフォンの操作方法を確認ください。
  6. パソコンにおいて下記コマンドを実行し、Androidスマートフォンにネットワークを介してadb接続します。
    # adb connect ip_address
    例: adb connect 192.168.1.10
  7. パソコンにおいて下記コマンドを実行し、パソコンにAndroidスマートフォンがadb接続されていることを確認します。
    接続したデバイスが一覧に含まれることを確認します。
    接続されていない場合は以下を確認してください。
    • パソコンとAndroidスマートフォンが同じネットワークに接続されているか
    • 3.からの手順を何度か実行し、接続できないか
    • 6.で入力したIPアドレスに誤りはないか
    # adb devices
  8. Android Studioを用いてAndroidスマートフォンにアプリケーションをインストールし、アプリケーション動作を確認します。

2.6. KotlinからMoverio SDKを利用する

KotlinからMoverio SDKを利用する手順について以下に記載します。

Moverio SDKの組み込み

Moverio SDK APIの実行例

2.6.1. Moverio SDKの組み込み

Kotlinが開発言語として選択されているプロジェクトに対してMoverio SDKの組み込みを実施してください。
Moverio SDKの組み込み方法は こちらを確認してください。

2.6.2. Moverio SDK APIの実行例

KotlinからのMoverio SDK APIの実行例を記載します。

2.6.2.1. ディスプレイ制御

明るさの取得/設定の実行例を記載します。
ディスプレイ制御の詳細は こちらを確認してください。

val displayManager = DisplayManager(context)
try {
    displayManager.open()
} catch (e: IOException) {
    e.printStackTrace()
}

val brightness = displayManager.brightness // getBrightness
displayManager.brightness = brightness + 1 // setBrightness

displayManager.close()
2.6.2.2. センサー制御

加速度センサーのデータ取得の実行例を記載します。
センサー制御の詳細は こちらを確認してください。

class SensorActivity : Activity(), SensorDataListener {

    private var sensorManager: SensorManager? = null

    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)

        sensorManager = SensorManager(this)
    }

    override fun onResume() {
        super.onResume()
        try {
            sensorManager?.open(SensorManager.TYPE_ACCELEROMETER, this)
        } catch (e: IOException) {
            e.printStackTrace()
        }
    }

    override fun onPause() {
        super.onPause()
        sensorManager?.close(this)
    }

    override fun onSensorDataChanged(SensorData data) {
        // Do something with this sensor value.
    }
}
Go to Top