【问题标题】:Understanding Pepper Programming in Javascript了解 Javascript 中的 Pepper 编程
【发布时间】:2018-06-10 16:21:04
【问题描述】:

我最近开始为 Pepper 构建一个 Javascript 程序。我的目标是让 Pepper 倾听人们所说的话,或者说 Hello,或者让 Pepper 根据 Javascript 中 WordRecognized 事件中的关键字“Hello/Animation”制作动画。

到目前为止,我可以使用 JavaScript 在平板电脑上显示两个按钮,让 Pepper 在按下一个按钮时说 Hello,并在按下另一个按钮时执行动画。单击按钮可以工作,但我无法通过使用 Qi Javascript SDK (http://doc.aldebaran.com/2-4/dev/js/index.html) 使其适用于 WordRecognized 事件。我浏览了这里提到的链接并想出了下面的代码 sn-p 使 Pepper 在听到识别的单词时说单词 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

  });

【问题讨论】:

    标签: nao-robot pepper


    【解决方案1】:

    给定的代码 sn-p 不起作用,因为:

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

    意味着 asr 变量是一个未来,所以你不能在它上面调用 asr.unsubscribe() 。

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

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

    【讨论】:

    • 感谢您的信息。它有很大帮助。我有个问题。我成功地为 FrontTactileTouched 设置了回调函数。每当我触摸它的头时,机器人就会说“有人摸了我的头”。但是,我无法让机器人检测到面部/响应语音事件(例如,让机器人说我在 FaceDetected 上看到了面部),尽管我以与 FrontTactileTouched 相同的方式订阅回调(github.com/srinu634/Pepper-Javascript-Sample/blob/master/…) .所有事件回调的行为不应该相同吗?
    • 没有; FrontTactileTouched 始终处于“活动状态”,但其他事件(如面部和文字检测)需要激活,因为它们需要特殊处理 - 例如,请参阅 doc.aldebaran.com/2-5/naoqi/peopleperception/…,尤其是 aceProxy.subscribe("Test_Face", period, 0.0 ) 部分。
    猜你喜欢
    • 1970-01-01
    • 2021-01-08
    • 1970-01-01
    • 1970-01-01
    • 2011-02-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多