Pepper SDK for Android Studio をインストールして、QiChat(choregrapheでいうDialogボックス)の動作確認までしてみました。
途中、エミュレータの設定などで気づいた点を書きます。Qiita初投稿です!
検証した環境
・AndroidStudio 2.1.1
・OS Windows10
インストール
ここのとおりに行なうとインストールされます。所要時間30分~1時間程度です。
https://android.aldebaran.com/doc/installation.html
1.SDK Manager で Android SDK version 5.1.1 (API 22, Lollipop)、SDK Build-Tools22.0.1を追加
2.File > Settings > Plugins
でBrowse repositoriesボタンをクリック、Pepperと入力して検索して Pepper SDK を入手
3.案内に従い、AndroidStudioを再起動すると、Robot SDK Manager が追加されるので、クリックして Robot SDK を入手
※Androidエミュレータはとても動作が遅いので、Intelが提供しているHAXMを導入し、SDK Manager で高速エミュレータをダウンロードしておきましょう(Intel x86 Atom System Image。又は Atom_64)。Pepperのタブレットエミュレータの起動、動作がとても早くなります。HAXMの導入については「haxm android」で検索してください。
プログラム作成
参考 https://android.aldebaran.com/doc/create_project.html#create-project
プロジェクトの新規作成
File > New > New Project
で新規プロジェクトを作成。
Targetは Phone and Tablet、Minimun SDK は API22:Android5.1(Lolipop)を選択、Activity は Empty Activity を選択しました。
プロジェクトが作成されたら、File > New > Robot Application
で、Pepperアプリの作成準備完了です。
QiChat
参考 https://android.aldebaran.com/doc/dialog_editor.html?highlight=qichat
1.プロジェクトの app > res
で右クリックして、New > Chat Topic
をクリック
2.Japanese(ja)を選択して、Create をクリック
3.res/raw 配下(実際には raw-ja フォルダ)に chat1.top ファイルが作成されます。内容を記述します。
topic: ~chat1()
language: ja
u:(こんにちは) おっす!
4.MainActivity.javaに追記
参考 の下の方の記述を参考に、MainActivity.javaに記述
public class MainActivity extends AppCompatActivity {
private static final String TAG = "MainActivity";
QiChatPlayer qiChatPlayer = null;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
}
@Override
protected void onResume() {
super.onResume();
// Instantiate a QiChatPlayer
qiChatPlayer = new QiChatPlayer(this);
// Register QiChatPlayer listener.
qiChatPlayer.init(new QiChatPlayerListener() {
@Override
public void onQiChatPlayerServiceConnected() {
// Load the topic file.
qiChatPlayer.loadTopicFile("chat1");
}
@Override
public void onLoadCompleted() {
// The player is ready to play!
qiChatPlayer.startTalk();
}
@Override
public void onError(int error) {
//QiChatPlayer.ERROR_FILE_NOT_EXIST
Log.d(TAG, "NO="+error);
//...
}
});
}
@Override
protected void onPause() {
super.onPause();
qiChatPlayer.stopTalk();
}
@Override
protected void onDestroy() {
super.onDestroy();
qiChatPlayer.destroy();
}
}
実行
準備
1.robot app > Edit Configurations
で CPU/ABi を x86 にして Apply をクリックします。
2.Emulator でPepperエミュレータを起動します。タブレット側に以下のメッセージが表示されますが、これはインストールの欄で記述したHAXMエミュレータを導入すれば早いですよ、という意味です(だと思います)。導入済なら、 Never show this again にチェックを入れてかまいません。
デバッグ実行(失敗)
1.デバッグ で実行します。アプリが実行されますがすぐ終了します。Android Monitor を見ると、public void onError(int error)
で記述したエラーログが出力されています。
...D/MainActivity: NO=-6
2.APIリファレンスによると、エラーコードは、QiChatPlayer.ERROR_xxx で定義されています。-6は ERROR_FILE_NOT_EXIST(ファイルが存在しない)という意味のようです。
public static final int ERROR_SERVICE_IS_ALREADY_CONNECTED = -1;
public static final int ERROR_SERVICE_DISCONNECTED = -2;
public static final int ERROR_SERVICE_CONNECTION_IS_NOT_READY = -3;
public static final int ERROR_CURRENT_LOADING_TASK_IS_NOT_FINISHED_YET = -4;
public static final int ERROR_LOAD_IS_NOT_COMPLETED = -5;
public static final int ERROR_FILE_NOT_EXIST = -6;
3.Chat Topi
を作成したとき Japanese を選択したので raw-ja
フォルダに chat1.top ファイルが作成されました。しかし、タブレットの言語設定は English のままなので raw-en を探す、FILE_NOT_EXIST、ということのようです(Androidっぽい!)。タブレットのエミュレータの Setting をタップします。Language&input > Language
で 日本語 を選択します。
デバッグ実行(成功)
1.もう一度、実行してみます。今度はうまく動いているようです。Robot Viewer の Dialog view から「こんにちは」と入力してみます。
最後に
私はPepper Java SDK(java-naoqi-sdk)で、リモコン(こんなの)とか作ってみてたので、そんなに違和感なく入れましたが、若干ハマリました。その他所感です。
・Choregraphe(Python)とメソッド名が違う
・でも情報量が少ないPepper SDK for AndroidStudio ぐらい(?)
・Choregrapheでステートマシンデザインを使ってサクッと作れてたアプリはどうするか(動作レイヤ毎にFragmentを分けて遷移させたらよいのかな)
Pepper SDK for AndroidStudio で開発手段の選択肢が増えました。Choregrapheも捨てがたいですが、これからも両方楽しんで行きたいと思います。