在Javascript中理解Pepper编程

时间:2018-06-10 16:21:04

标签: nao-robot pepper

我最近开始为Pepper构建一个Javascript程序。我的目标是让胡椒听人们说什么,或者说你好或让胡椒根据关键词' Hello / Animation'做一个动画。在Javascript中的WordRecognized事件中。

截至目前,我已经能够使用JavaScript在平板电脑上显示两个按钮,并让Pepper在按下一个按钮时说出Hello,并在另一个按钮按下时执行动画。单击按钮可以工作,但我无法使用Qi Javascript SDK(http://doc.aldebaran.com/2-4/dev/js/index.html)使其适用于WordRecognized事件。我浏览了这里提到的链接,并提出了下面的代码片段,让Pepper在听到识别的单词时说出了Word Detected。只是想知道我在代码中还缺少什么才能使Pepper听到这些词并相应地执行操作?

    //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 :(得分:1)

您给出的代码段不起作用,因为:

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

表示asr变量是未来,所以你不能在其上调用asr.unsubscribe()。

你必须在session.service(...).then(function(asr) { ...}中包装所有内容才能使其正常工作,就像使用ALMemory一样。

语法可能有点尴尬,我通常使用一个小帮助库robotutils.qim.js,它使代码更具可读性,并且有一个帮助订阅ALMemory。