Help us understand the problem. What is going on with this article?

ペッパーにイベント情報や会員情報を喋らせてみた

More than 3 years have passed since last update.


ベースキャンプ名古屋の下記のイベントにて、はじめてペッパーのプログラミングに挑戦してみました。

Pepper の日「ベースキャンプ名古屋のPepperのためのアプリ開発」

今回チャレンジした事

今回は、「ペッパー教えて?」と話しかけると、「はい」とペッパーが応答し、「今日のイベントは?」と聞くと、ベースキャンプの今日のイベントを、「イベントは?」と聞くと、直近のイベントを、「誰が来てるの?」と聞くと、ベースキャンプにチェックインしている会員の情報を教えてくれるプログラムを作成しました。

環境整備

まずは下記のサイトよりペッパーの開発環境をダウンロードします。
https://community.aldebaran.com/en/resources/software/language/en-gb
ダウンロード後、さまざまなアプリがインストールされますので、そのなかから、下の図のように、Cのマークのアプリを立ち上げます。

ペッパープログラミング方法

基本的にすでにプログラミングされたブロックを組み合わせていくだけでペッパーを動かす事ができますが、どうしても既存のブロックでは出来ないことはPythonを使って自分でプログラミングする必要があります。今回作ったプログラムの配線図は以下のようになります。

使用したブロックは以下になります。

Sayブロック

ペッパーを喋らせるためのブロック

Speech Recoブロック

ペッパーに音声を認識させるためのブロック。

このように;で単語を区切る事で、認識する言葉を分ける事ができます。
認識した言葉は次のブロックにわたります。

Switch Caseブロック

条件分岐するためのブロックです。
今回は以下のよう認識した言葉に応じて条件分けしています。

Text Editブロック

次のブロックに文字列を渡すためのブロックです。ペッパーに会員情報のJSONデータを引っ張ってきて喋って欲しいので、以下のようにGETしたいJSONファイルを指定しています。
このとき、出力するJSONファイルは、CMS側で生成しています。つまりペッパーに喋らせる内容はすべてCMSの方で管理しています。その方がペッパーのプログラミングの敷居がぐっと下がります。

http://basecamp-nagoya.jp/*****.json

Python Scriptブロック

サーバーにアクセスしてJSONデータを引っ張ってくるブロックがなかったので、それは自分で作りました。下がそのソースになります。ただし、jsonなどの依存ライブラリは別途ダウンロードしてくる必要があります。

import json, urllib2, sys, os, xml

class MyClass(GeneratedClass):
    def __init__(self):
        GeneratedClass.__init__(self)

    def onLoad(self):
        self.framemanager = ALProxy("ALFrameManager")
        pass

    def onUnload(self):
        self.framemanager = None
        pass

    def remove_tags(text):
        return ''.join(xml.etree.ElementTree.fromstring(text).itertext())

    def rest_request(self, url):
        self.folderName = os.path.join(self.framemanager.getBehaviorPath(self.behaviorId), "./lib")
        if self.folderName not in sys.path:
            sys.path.append(self.folderName)
        import requests
        try:
            r = requests.get(url)
            if r.status_code == 200 :
                return r.json();
            else:
                return False
        except:
            return False
        pass;

    def onInput_onStart(self, p):
        result = self.rest_request(str(p));
        output_text = "";
        i = 0;
        length = len(result);
        while i < length:
            output_text += str(result[i]['name'].encode('utf-8'))
            output_text += "\\pau=1000\\"
            output_text += str(result[i]['profile'].encode('utf-8'))
            output_text += "\\pau=3000\\"
            i += 1
        self.onStopped(output_text) 
        pass

    def onInput_onStop(self):
        self.onUnload() 
        self.onStopped() 

    def import_service(self):
        pass

プログラムのパッケージ化

プログラムが完成した後は、右下のパネルより以下のように、Robot Applicationを選択し左上のアイコンをクリックする事で作成したプログラムをパッケージ化しpepperにインストールする事が出来ます。

感想

いやー。楽しかった。普段はWebのフロントの事ばかりなので、たまにはロボットのプログラミングも楽しいですね。

steelydylan
教育用ゲームライブラリAtlas.jsを配布しています。 http://atlasjs.com/
http://horicdesign.com
Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away