Понимание программирования Pepper в Javascript

Недавно я начал создавать программу Javascript для Pepper. Моя цель — заставить Pepper слушать, что говорят люди, и либо говорить «Привет», либо заставить Pepper делать анимацию на основе ключевого слова «Hello/Animation» в событии WordRecognized в Javascript.

На данный момент я могу показать две кнопки на планшете с помощью JavaScript и заставить Пеппера сказать «Привет» при нажатии одной кнопки и выполнить анимацию при нажатии другой кнопки. Нажатие на кнопки работает, но я не могу заставить его работать для событий WordRecognized с помощью Qi Javascript SDK (http://doc.aldebaran.com/2-4/dev/js/index.html ). Я прошел по ссылке, упомянутой здесь, и нашел приведенный ниже фрагмент кода, который заставляет Пеппер сказать «Обнаружено слово», услышав распознанное слово. Просто интересно, чего еще мне не хватает в коде, чтобы Пеппер прислушивался к словам и выполнял соответствующие действия?

    //Start the Speech Recognition
    var asr = session.service('ALSpeechRecognition');

    //Define the Vocabulary
    vocabulary = ["hello", "dance"];

    //Set The Language To English and set the Vocabulary
    asr = asr.then( function(asr) { return asr.setLanguage('English') }).then( function(asr){ return asr.setVocabulary(vocabulary, false); } );
    console.log("Set the Language to English!");

    //Register the Callback function  for the Speech REcognition

    asr.unsubscribe(); //De-Register if Existing from Before
    asr.subscribe();

    session.service("ALMemory").then(function (ALMemory) {
    ALMemory.subscriber("wordRecognized").then(function (subscriber) {
    // subscriber.signal is a signal associated to "wordRecognized"
    subscriber.signal.connect(function (state) {
    word = state.getData("wordRecognized")[1];
    word.then( function() { session.service('ALTextToSpeech').say("A Keyword is Detected!") });
    asr.unsubscribe();
  }); //subscriber
   }); //connect
    }); //ALMemory

  });

person srinu634    schedule 10.06.2018    source источник


Ответы (1)


Ваш фрагмент кода, как указано, не будет работать, потому что это:

var asr = session.service('ALSpeechRecognition');

означает, что переменная asr является будущей, поэтому вы не можете вызвать для нее asr.unsubscribe().

Чтобы все работало правильно, вам придется обернуть все в session.service(...).then(function(asr) { ...}, как вы это делаете с ALMemory.

Синтаксис может быть немного неудобным, я обычно использую небольшую вспомогательную библиотеку, robotutils.qim.js, что делает код немного более читабельным и имеет помощник для подписки на ALMemory.

person Emile    schedule 11.06.2018
comment
Спасибо за информацию. Это очень помогает. У меня есть вопрос. Мне удалось настроить функцию обратного вызова для FrontTactileTouched. Робот говорит: «Кто-то коснулся моей головы», когда я касаюсь его головы. Однако я не могу заставить робота обнаруживать лицо/реагировать на речевые события (например, заставить робота сказать, что я видел лицо на FaceDetected), хотя я подписался на обратные вызовы так же, как FrontTactileTouched ( github.com/srinu634/Pepper-Javascript-Sample/blob/master/). Разве поведение не должно быть одинаковым для всех обратных вызовов событий? - person srinu634; 12.06.2018