Simulink Support Package for Android Devicesを使ってみる

###１．はじめに
Simulink Support Package for Android Devicesは、Simulinkのモデルベースで記述したものをコンパイルしてアプリを生成し、Android deviceで動作させるものです。2014a（2014年の春バージョン）にリリースされているにもかかわらず、Qiitaには未だに人柱記事も立っていない状況のようなので、書いてみることにしました。

###２．準備
まず、最初にAndroid Studioをインストールし、セットアップします。
「えっ？Android Studioが必要？」と思った人もいるかと思います。私もそう思いましたが、要ります。
Simulink Support Package for Android Devicesは、Android Studioの環境をSimulink上から操作するようなことをしているようです。
なので、Android Studioがきちんと動いていないと、Simulink Support Package for Android Devicesも動いてくれません。
Android Studioをまず、セットアップし、サンプルをコンパイルしてハードウェアにデプロイし、Hello Worldが出せるようにしてから、Simulink Support Package for Android Devicesのセットアップを始めたほうがよいと思います（両方中途半端だと訳わからなくなるので）。

~~今（2019年10月）現在のAndroid Studioの最新バージョンは3.5ですが、Simulink Support Package for Android Devicesは、Android Studioの3.5には対応していないそうです。
[ここに書いてありました](https://jp.mathworks.com/matlabcentral/answers/477292-hardware-setup-failed-for-simulink-android-support-package-for-18a-18b-and-19a)。
なので、3.4をダウンロードしてインストール＆セットアップしてください（3.4のダウンロード先も上記のページに書いてあります）。
追記：今（2020年12月）現在のAndroid Studioの最新バージョンは4.1になっていますが、Support Package for Android Devicesは、Android Studioの4.1には対応していないそうで、[4.0.2を使ってください](https://jp.mathworks.com/matlabcentral/answers/622278-why-am-i-seeing-no-matching-files-were-found-error-in-verify-configuration-screen-during-hardware?s_tid=srchtitle)、だそうです。~~
さらに追記：2021bでの状況は、Android Studio 4.2で、APIレベルは30で動きます（32までありますが32では動きませんでした）。SDK ManagerのSDK PlatformsやSDK Tools（右下のShow Package datailにチェック）で、32をアンインストール、30をインストールします。

Android StudioのインストールからハードウェアでHello Worldを出すまでの手順については、多くのページに書いてあるので、ここでは触れません。

Android Studioで、その他に特別にやっておくことは、「Tool」から「SDK Manager」を開き、
![ToolBar.PNG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/434947/cdd7e227-b7b6-2fe9-f50b-5e3e6e561fb6.png)
「Appearance & Behavior」の「System Setting」の「Android SDK」を選択し、「SDK tools」タブの下の、
　・Android SDK Build-Tools
　・Android SDK Platform-Tools
　・Android SDK Tools
　・NDK
　・~~Android Support Repository~~
　・~~Goodle Repository~~
をインストールしておくことです。
![SDKtool.PNG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/434947/95168acc-b541-654c-83c6-412a053f2c61.png)
それと、環境設定として、PCとAndroid Deviceを同じWifiに接続する必要があります。PC～Android Device間はUSBで接続するので、なぜWifi接続も必要なのかはよくわからないですが（PCは同じセグメント内ならイーサネット接続でもOKみたいです）。



###３．Simulink Support Package for Android Devicesのインストールとセットアップ
まず、Support PackageのAddonをインストールします。下の図の「アドオン」から「ハードウェアパッケージの入手」を選択します。
![Fig01.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/434947/ed4581e9-5d6c-8d5c-add9-1859d0e78019.png)
![Fig02.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/434947/a95537d9-d6af-afe9-398a-7a8cd2f7ddd4.png)
開いたブラウザから「Simulink Support Package for Android Devices」を選択して、インストールします。
![ブラウザ.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/434947/77b283f8-f371-54e5-47c8-e6ec2333ec52.png)
![インストール.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/434947/a53c2ace-f7cb-3728-61d0-bd2e0abeb4da.png)
インストールしたら、そのままセットアップに進みます。
Android Studioのベリファイと、SDK Toolのベリファイがあります。
Android Studioをデフォルトのフォルダにインストールした場合は、ファイルの場所はそのままでOKです。SDKでパッケージやツールに不足があります、というメッセージが出た場合は、下の図の緑の矢印部分からヘルプが見れますので、必要なものを追加してください（前章のところで、インストールができていれば追加は必要ないはずです）。
![Verify1.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/434947/a1ece742-ec31-e004-2944-f861a3609aae.png)
![Verify2.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/434947/093b87f5-88d1-6d71-5f77-42d0789252ab.png)
![Verify3.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/434947/0b4e02d6-6b5f-26dc-d719-1e7b1b615d14.png)

デバイスでのデバッグや、USBデバッグのセットアップがありますが、このあたりは、Android StudioでAndroid deviceと接続ができていれば、特に問題ありません。
![USB Debug.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/434947/44ba9965-68e0-2f9f-da9b-23bd74d4571d.png)
このあと、Android Deviceのデバイスドライバーをインストールせよ、と出ますが、これもすでにインストールしてあるので問題ありません。"I have installed the appropriate Android device driver on this computer"にチェックして「次へ」行きます。
Android DeviceをUSBでPCに接続します。「デバッグを許可しますか？」が出たら、許可してください。
![DeviceSetup.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/434947/b4d89852-8e58-ca0e-a3e1-3b372029703a.png)
Select Your Android Deviceでデバイスを選択します。出てこない場合は、「最新の表示」をクリックしてみてください。
そして、Wifiが接続されているか確認します。
![ConnectDevice.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/434947/0d4a0925-c4b8-477a-8b8e-178114d7f837.png)
Configurationをチェックすると、セットアップ完了です。
「サポートパッケージの例を表示します」にチェックを入れておくとサンプル集が開きます。
![VerifyConfig.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/434947/5a4c353f-9c53-2b0e-5fbf-3ba240a26925.png)
![セットアップ完了.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/434947/b06f0168-fce4-0dfd-f1aa-6478c47d12e4.png)


###４．exampleを実行する
exampleの画面が開きました。
![example.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/434947/ea9a22fa-1977-5ed4-597a-d6f15a2bca46.png)
左上の"Getting Started with Android Devices"を開きます。
このサンプルはAndroid Deviceのカメラで得た画像を画面に表示するものです。
![CameraDisplay.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/434947/5e896915-207b-c1c2-e890-e0545dca7248.png)
左側のカメラブロックをダブルクリックすると、カメラの詳細（リアかフロントか 解像度）を選択できます。選択できない場合はRefreshを押してみてください。
![CameraSetting.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/434947/8185f613-8562-acc0-cbca-41320a548703.png)
メニューの「ハードウェア」の「配布」の「ビルド、配布および開始」の「ビルド、配布および開始」を選択すると、ビルドされて、書き込まれます。
Android Deviceで、スタンドアロンで動作させることができて、画面としては、下記のようになります。
![P1.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/434947/8ce37680-ec96-16d0-7b31-74e0dff6686e.png)

exampleを見ると、音声関係、画像関係、モーションセンサー、通信関係（IoTのThingSpeakを含む）ができるようですが、音声関連はAudio System Toolbox、センサー関係はRobotics System Toolboxが必要になるようです。
UIはプッシュボタン、スライダ、モニタ画面、テキスト画面というところです。
あとは、Androidの他のアプリとデータのやり取りができるようですが、ここはまだ調査できていません。
DSP System Toolboxを持っていたので、exampleを下記のように改造してみました。
サンプル＆ホールドは、プッシュボタンが押されたときのみカメラの出力データを取り込み、それ以外のときは、取り込んだデータを保持する機能を持ちます。
![カメラ改造.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/434947/10b91a46-f0bd-ad8c-93be-341f70607b13.png)
Android deviceで実行させると画面はこのようになります。
![Camera2画面.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/434947/32f40480-96d7-0b60-b93d-c2e8164481ae.png)
右のボタンを押すと、その瞬間の画像が撮影できて、
![P2.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/434947/7cd7293d-1792-0aa3-909b-5c6915ceb2cc.png)
こうなります。
画像の右上のにマークが出る（ときがある）ので右にドラッグすると、
![P3.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/434947/056e3d2f-0e2f-3192-6b2e-2700edd608af.png)
こうなって、ボタンが消えます（謎仕様）。

###５．まとめ
以上が、Simulink Support Package for Android Devicesのインストール、セットアップ、サンプルの実行です。

・Android Studioは必要ですが、とりあえずインストールとセットアップができて、Android Deviceが動かせればよいだけ（Hello Worldレベル？）なので、それほど敷居は高くありません。
・音声、画像、センサ、通信系の入出力はそろっているのでデータの取り扱いに困ることはないと思われます。
・一方でUIに関しては、殺伐とした状況です（デザインのカスタマイズは今のところできないようです）。

ということで、Android Studioの写経はしたくないが、Android Device上で、見栄えはともかく動くものを作りたい（ただし、データの扱い、信号処理とかはちゃんとしたい）という目的であれば、有用かと思います（特にモデルベースデザインが、そこそこできる人）。

以上で人柱企画を終わります。
お疲れさまでした。