Понимание программирования перца в Javascript - PullRequest
0 голосов
/ 10 июня 2018

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

На данный момент я могупокажите две кнопки на планшете с помощью JavaScript и сделайте так, чтобы Pepper сказал Hello при нажатии одной кнопки, а анимацию - при нажатии другой кнопки.Нажатие на кнопки работает, но я не могу заставить его работать для событий 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

  });

1 Ответ

0 голосов
/ 11 июня 2018

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

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

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

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

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

...