4
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

PepperAdvent Calendar 2018

Day 4

AndroidアプリからPepperに接続して発話させてみる

Last updated at Posted at 2018-12-04

今回はqisdkを使ってAndroidアプリとPepperの連携する方法について紹介します。

qisdkを使うための下準備

qisdkを使えるようにするためにリポジトリと依存関係の追加を行います。

リポジトリの追加

/build.gradle を編集してPepper SDKのリポジトリを追加します。
allprojects {
    repositories {
        google()
        jcenter()
        maven {
            url 'http://android.aldebaran.com/sdk-beta/maven'
        }
    }
}

依存関係の追加

/app/build.gradle を編集してdependenciesに「api 'com.aldebaran:qisdk:1.3.3'」を追加します。

dependencies {
    implementation fileTree(dir: 'libs', include: ['*.jar'])
    implementation 'com.android.support:appcompat-v7:28.0.0'
    implementation 'com.android.support.constraint:constraint-layout:1.1.3'
    testImplementation 'junit:junit:4.12'
    androidTestImplementation 'com.android.support.test:runner:1.0.2'
    androidTestImplementation 'com.android.support.test.espresso:espresso-core:3.0.2'


    api 'com.aldebaran:qisdk:1.3.3'
}

Pepperと連携するためのクラスを実装

Pepperと連携するための手順は以下の通りです。
  1. Session.connectに接続したいPepperのIPを渡して接続する
  2. Session.serviceにて必要なALモジュールを取得する
  3. Future.callを用いてALモジュールが持っているメソッドを呼び出す
package jp.co.happyhack.androidsample;

import com.aldebaran.qi.AnyObject;
import com.aldebaran.qi.Session;

public class Pepper {
    private static final String MODULE_NAME_ALTEXTTOSPEECH = "ALTextToSpeech";

    // Pepperとスマホの接続情報
    private Session mSession = null;
    private AnyObject mALTextToSpeech = null;
    private ConnectionCallback mCallback = null;

    /**
     * PepperとのSessionリスナー
     * 接続、切断されたらコールバックする
     */
    private Session.ConnectionListener mConnectionListener = new Session.ConnectionListener() {
        @Override
        public void onConnected() {
            try {
                mALTextToSpeech = mSession.service(MODULE_NAME_ALTEXTTOSPEECH).get();
            }catch(Exception e){
                disconnect();
            }
            if(mCallback != null){
                mCallback.onConnected();
            }
        }

        @Override
        public void onDisconnected(String s) {
            if(mCallback != null){
                mCallback.onDisconnected();
            }
        }
    };

    /**
     * 指定されたIPのPepperに接続する
     * @param ipAddress
     * @param callback
     * @return
     */
    public Boolean connect(String ipAddress, ConnectionCallback callback){
        Boolean result = false;
        if(mSession == null){
            mSession = new Session();
            mSession.addConnectionListener(mConnectionListener);
        }

        if(callback != null && !mSession.isConnected()){
            mCallback = callback;
            mSession.connect(ipAddress);
            result = true;
        }

        return result;
    }

    /**
     * Pepperとの接続を切断する
     */
    public void disconnect(){
        if(mSession != null){
            mSession.close();
            mALTextToSpeech = null;
        }
    }

    /**
     * チェックイン結果をPepperに送信する(ALMemory.raiseEvent)
     * @param phrase
     */
    public void say(String phrase){
        if(mALTextToSpeech != null)
            mALTextToSpeech.call("say", String.format("\\vct=130\\ \\rspd=110\\ %s", phrase));
    }


    /**
     * Pepperとの接続状況をコールバックするためのIF
     */
    public interface ConnectionCallback{
        void onConnected();
        void onDisconnected();
    }
}

今回はALTextToSpeechを使って発話させるメソッドのみを用意していますが、
ALMemoryやALMotionなど様々なALモジュールにアクセスすることが出来ますので、
是非、お試しいただければと思います。

注意事項

  • qisdk自体、ちょいちょい更新されているっぽく、以前動いていたものが動かなくなったりします。普通にします。
  • ロボアプリが動作しているところにAndroidアプリから発話やモーションを割り込ませた場合にロボアプリの動作がおかしくなる可能性があります。ご利用は計画的に。

サンプルコード

GitHubに挙げてありますので参考にして下さい。 https://github.com/y-minabe/AndroidSample
4
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
4
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?