"NUWA Robot SDK"は、NUWA Robotics 製のロボット(2019年11月現在、日本ではケビーのみ対応)用のアプリ開発キットです。Android Qをベースに動作しており、Android Studioを利用してアプリを作成することが可能です。
NUWA Robot SDKは、次の開発環境をサポートしています。
最新情報は、公式ホームページで公開しています。
NUWA Robot APIが含まれるAndroid Archive(aar)の他、サンプルコード、チュートリアルなどを提供しています。
※ 本ドキュメントは、初心者向けの日本語チュートリアル(オリジナル)となります。NUWA Robot SDK Manual 1.1 をベースに解説しています。最新の情報は公式のドキュメントを参照してください。
本ドキュメントでは、NUWA Robot SDKの簡単な使い方を解説しています。NUWA Robot SDKの概要については、NUWA Robot SDK Manual、APIの詳細につきましては、NUWA Robot SDK Javadoc を御覧ください。
ケビーのアプリは、WindowsでもMacでも開発が可能です。本ドキュメントでは、Mac(Catalina)で開発を行っています。
開発には、Android Studioが必要です。最新版のAndroid Studioを用意してください。
※本ドキュメントでは、執筆時の最新版である 3.5.2 を使用しています。
最初に、以下の手順で、ケビーを開発者モードに設定します。
この画面から、「端末情報」にある「ビルド設定」を探して、「ビルド番号」を連打してください。「システム」の「詳細設定」に「開発者向けオプション」が追加されます。
ケビーをUSBケーブルで接続します。
Please get USB password from [NUWA Robot SDK Manual]
※ 自分の環境では、手持ちのUSB-Cケーブル(両端ともにUSB-C)だと認識しなかったので、ケビーに付属しているUSB-Cケーブル(USB-CとUSB-2.0)に変換アダプターをつけたところ正常に認識しました。
それでは、簡単なKebbi用のアプリを作成してみましょう。
「Start a new Android Studio project」を選択して、新しいプロジェクトを作成します。
「Empty Activity」を選んでください。
今回は、「HelloKebbi」という名前にしました。
※ Languageは、Javaを選択してください。
※ Minimum API level は、「API 26: Android 8.0 (Oreo)」を選択してください。
NUWA Robot API を利用するためのライブラリを設定します。
最初に、左上のメニューから「Project」を選択します。
次に、appフォルダの中のlibsフォルダに、KiwiSDKの最新版の.aarファイルをコピーします。
コピーが成功すると、このようになります。
appフォルダの中の「build.gradle」の一番最後に、以下の記述を追加します。
repositories {
flatDir {
dirs 'libs'
}
}
最後に、「build.gradle」のdependenciesの最後に以下を追記します。
xxxxxxxxxx
// include Nuwa Robot SDK in /libs
implementation(name: 'KiwiSDK_RPC_2019-10-03_v1.0.1.9.54caff0', ext: 'aar')
それでは、プログラムを作成していきましょう。
appフォルダの中にあるsrcフォルダから、MainActivity.javaを探してください。
AppCompatActivityに、以下の行を追加します。(自動的に、NuwaRobotAPIを利用するためのimportが追加されます。以下同様です。)
xxxxxxxxxx
private NuwaRobotAPI mRobot;
onCreateに、APIを使うための初期処理を記述します。また、イベントを処理するための関数も用意しましょう。以下のようにonCreateを書き換えてください。
x @Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
//init kiwi sdk
String your_app_package_name = getPackageName();
IClientId id=new IClientId(your_app_package_name);
mRobot = new NuwaRobotAPI(this, id);
// register Nuwa Robot Listener
registerNuwaRobotListener();
}
void registerNuwaRobotListener() {
}
次に、ケビーから発生するイベントのリスナーを定義していきましょう。
先ほど作成した「void registerNuwaRobotListener」の中に以下をコピペしないで記述していってください。
xxxxxxxxxx
mRobot.registerRobotEventListener(new RobotEventListener
そうすると、こんな感じで入力補助が出るので選択します。
閉じカッコでエラーになっているので
このように修正します。
修正が終わったら、以下のプログラムも追加してみてください。
xxxxxxxxxx
mRobot.registerVoiceEventListener(new VoiceEventListener
最終的に、registerNuwaRobotListenerは、以下のようになります。入力補助がうまく出来なかった場合は、以下のソースをコピペしてみてください。
xxxxxxxxxx
void registerNuwaRobotListener() {
mRobot.registerRobotEventListener(new RobotEventListener() {
@Override
public void onWikiServiceStart() {
}
@Override
public void onWikiServiceStop() {
}
@Override
public void onWikiServiceCrash() {
}
@Override
public void onWikiServiceRecovery() {
}
@Override
public void onStartOfMotionPlay(String s) {
}
@Override
public void onPauseOfMotionPlay(String s) {
}
@Override
public void onStopOfMotionPlay(String s) {
}
@Override
public void onCompleteOfMotionPlay(String s) {
}
@Override
public void onPlayBackOfMotionPlay(String s) {
}
@Override
public void onErrorOfMotionPlay(int i) {
}
@Override
public void onPrepareMotion(boolean b, String s, float v) {
}
@Override
public void onCameraOfMotionPlay(String s) {
}
@Override
public void onGetCameraPose(float v, float v1, float v2, float v3, float v4, float v5, float v6, float v7, float v8, float v9, float v10, float v11) {
}
@Override
public void onTouchEvent(int i, int i1) {
}
@Override
public void onPIREvent(int i) {
}
@Override
public void onTap(int i) {
}
@Override
public void onLongPress(int i) {
}
@Override
public void onWindowSurfaceReady() {
}
@Override
public void onWindowSurfaceDestroy() {
}
@Override
public void onTouchEyes(int i, int i1) {
}
@Override
public void onRawTouch(int i, int i1, int i2) {
}
@Override
public void onFaceSpeaker(float v) {
}
@Override
public void onActionEvent(int i, int i1) {
}
@Override
public void onDropSensorEvent(int i) {
}
@Override
public void onMotorErrorEvent(int i, int i1) {
}
});
mRobot.registerVoiceEventListener(new VoiceEventListener() {
@Override
public void onWakeup(boolean b, String s, float v) {
}
@Override
public void onTTSComplete(boolean b) {
}
@Override
public void onSpeechRecognizeComplete(boolean b, ResultType resultType, String s) {
}
@Override
public void onSpeech2TextComplete(boolean b, String s) {
}
@Override
public void onMixUnderstandComplete(boolean b, ResultType resultType, String s) {
}
@Override
public void onSpeechState(ListenType listenType, SpeechState speechState) {
}
@Override
public void onSpeakState(SpeakType speakType, SpeakState speakState) {
}
@Override
public void onGrammarState(boolean b, String s) {
}
@Override
public void onListenVolumeChanged(ListenType listenType, int i) {
}
@Override
public void onHotwordChange(HotwordState hotwordState, HotwordType hotwordType, String s) {
}
});
}
これで、プログラムの準備はできました!
おまたせしました!ケビーを喋らせてみましょう。先程追加したイベントリスナーの中から、onWikiServiceStartを探して以下のように修正してください。このイベントは、APIの初期化が終わったら呼び出されるイベントです。
xxxxxxxxxx
@Override
public void onWikiServiceStart() {
Log.d("KEBBI", "onWikiServiceStart");
mRobot.startTTS("ハロー、私は、ケビーです。");
}
最後にもう一つだけ、イベントリスナーにログを入れてみましょう。
xxxxxxxxxx
@Override
public void onTTSComplete(boolean b) {
Log.d("KEBBI", "onTTSComplete:" + b);
}
onTTSCompleteは、ケビーの発話が終わったら呼び出されるイベントです。ケビーに連続した発話や動作をさせたい場合に役に立つでしょう。今回は最初なので、ログを確認できるようにしておきます。
それでは、プログラムを実行してみましょう。パソコンにケビーが接続されていれば、左上の機種名のところにケビーが表示されているはずです。再生ボタンをおせば、プログラムが実行されますよ!
どうでしょう?ケビーはちゃんと話してくれましたか?ついでに、ログも確認しておきましょう。ログの検索に「KEBBI」と入れておくと、余計なログが表示されないので便利です。
アプリを終了させるには、Android Studioの停止ボタンを押してください。ケビーの頭のボタンをおしても見かけ上は終了したようにみえますが、実際はアプリは動作しています。
実行したアプリは、自動的にケビーのメニューに追加されます。次回以降は、こちらからアプリを起動させることも出来ます。
他のアプリのように、プログラム名を指定したり、アイコンを素敵なものに変えれば、あなただけのオリジナルアプリが完成しますよ!
おつかれさまでした、これでチュートリアルは完了です。ケビーのアプリを作るための基本的な流れは理解できたかと思います。とはいえ、まだまだやってみたいことはたくさんありますよね?
まずは、
[NUWA Robot SDK Manual(日本語訳)] NUWA Developer
を読んでみましょう。このドキュメントには、ケビーのアプリを作るためのAPIの使い方が完結に紹介されています。また、公式サイトにもサンプルプログラムなどが公開されているので、参考にしてみて下さい。
たとえば・・・
などといったことが出来るようになりますよ!
とはいえ、まだまだ、ケビーのプログラム環境は充実しているとは言い切れません、みなさんが挑戦したこと、やってみたこと、実際に作成したアプリケーションなど、ぜひqiitaなどで公開していただければとおもいます!
よろしくおねがいします!