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

![](http://horicdesign.com/archives/001/201602/7f6272ef889eda79d8b617c0e828f83a.jpg)
<a href="http://basecamp-nagoya.jp/">ベースキャンプ名古屋</a>の下記のイベントにて、はじめてペッパーのプログラミングに挑戦してみました。

<a href="https://basecamp758.doorkeeper.jp/events/39044"> Pepper の日「ベースキャンプ名古屋のPepperのためのアプリ開発」</a>

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

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

##ペッパープログラミング方法
基本的にすでにプログラミングされたブロックを組み合わせていくだけでペッパーを動かす事ができますが、どうしても既存のブロックでは出来ないことはPythonを使って自分でプログラミングする必要があります。今回作ったプログラムの配線図は以下のようになります。
![](http://horicdesign.com/archives/001/201602/e72f80b32fe52c7a5db76049675a5fa9.png)
使用したブロックは以下になります。
###Sayブロック
ペッパーを喋らせるためのブロック
###Speech Recoブロック
ペッパーに音声を認識させるためのブロック。
![](http://horicdesign.com/archives/001/201602/32e889f3ea4e27e6a8b86289b58d7d5f.png)
このように;で単語を区切る事で、認識する言葉を分ける事ができます。
認識した言葉は次のブロックにわたります。
###Switch Caseブロック
条件分岐するためのブロックです。
今回は以下のよう認識した言葉に応じて条件分けしています。
![](http://horicdesign.com/archives/001/201602/5942f2b7cc307b3d40d4090be7497ed9.png)
###Text Editブロック
次のブロックに文字列を渡すためのブロックです。ペッパーに会員情報のJSONデータを引っ張ってきて喋って欲しいので、以下のようにGETしたいJSONファイルを指定しています。
このとき、出力するJSONファイルは、CMS側で生成しています。つまりペッパーに喋らせる内容はすべてCMSの方で管理しています。その方がペッパーのプログラミングの敷居がぐっと下がります。

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

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

```py
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にインストールする事が出来ます。
![](http://horicdesign.com/archives/001/201602/a8ae0228cae401d472004344e65500d2.png)

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