[Pepper] Pepperアプリケーション開発 ~外部ライブラリの読み込み~

前回は、Pepperで通信を行いました。
今回は、ボックスの作成と外部ライブラリの読み込み方法をご紹介します。

これまでの記事では、Choregrapheに標準で搭載されているボックスを使った機能実装の方法について触れてきました。
とても便利なボックスがたくさんあるのですが、developerであれば「自分でコーディングしたいぜ!」という熱い気持ちを持った方も多いと思います。
なので、これまでとは少し視点を変えて、ボックスを新規に作成してオリジナルの機能を実装してみます。

pepperの開発言語はPython、C++など様々な開発言語に対応していますが、
Choregrapheには、Python Scriptという Pythonで自由にコーディングすることのできるボックスがあるため
そちらを使用して実装していきます。

まずは、Python Scriptボックスを用意します。
フローダイアグラム上・右クリックから、「ボックスの新規作成」→「Python…」と進みます。

名前を入力しOKボタンを押すと、Python Scriptボックスが作成されます。

できたPython Scriptボックス上・右クリックから「ボックスのスクリプトを編集」または、ボックスをダブルクリックで
編集ボックスを開くと、基本的なinput/output処理だけが記載された、まっさらなPythonコードがあると思います。

これで、自由にPythonでコーディングする準備が整いましたが、ただPython標準の機能を使用するだけでは面白くないので
外部ライブラリを用意し、Pepperアプリケーションで使用することにします。

前回の記事で通信を行いましたが、そのときに使用した urllib2というライブラリよりも使い勝手がよいとされている、requestsライブラリを使った通信実装を行います。

<ライブラリの用意>
requestsライブラリはGithubで公開されています。

ダウンロードしたファイルを解凍し、各自Pepperアプリケーションプロジェクト内の好きな場所に配置します。

その後、Choregrapheに戻り、画面左のプロジェクトの内容から「+ボタン」をクリックし、先ほど先ほど配置したファイルをインポートします。

ライブラリの、プロジェクトへの追加が終わったので、実際のコーディングに入ります。
下記が、ソースコードです。

import json

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

    def onLoad(self):
    
        # ALFrameManagerの取得
        self.framemanager = ALProxy("ALFrameManager")
        # 初期化
        self.folderName = None

    def onUnload(self):
        import sys
        
        # 初期化
        if self.folderName and self.folderName in sys.path:
            sys.path.remove(self.folderName)
        self.folderName = None

    def onInput_onStart(self, p):
        import sys, os
        
        # 用意したライブラリまでのパスを取得
        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
        payload = {'key1': 'value1', 'key2': 'value2'}
        # GET通信
        req = requests.get('http://api.openweathermap.org/data/2.5/weather?q=Tokyo,jp' )
        
        # json取得
        jsonData = req.json()
        
        # ログ出力
        self.log( json.dumps( jsonData, indent = 4 ) );


    def onInput_onStop(self):
        self.onUnload() #it is recommended to reuse the clean-up as the box is stopped
        self.onStopped() #activate the output of the box

onLoad時にFrameManagerを取得し、onStartの始めでライブラリまでのパスを設定しています。
これにより、importを使用して、ライブラリを読み込むことが可能となります。

その後は、GET通信でWebで公開されている、天気予報情報を取得するためのAPIを叩いているだけです。
requestsライブラリの詳しい使い方は、いろいろなサイトで紹介されているので、割愛させていただきます。

通信の結果ですが、jsonデータが返却されており、正常にログ出力されていることが確認できます。

■まとめ
以上で、ボックスの新規作成と外部ライブラリの読み込みに関する紹介は終了です。
外部ライブラリが使用可能となったことで、作成できるアプリケーションの幅が広がりました。
GoogleやfacebookといったソーシャルAPIを実行して、各種情報を取得することも可能になりました。
皆さんも、Pythonを使用したボックスの自作を試してみてはいかがでしょうか?

最後までご覧頂き、ありがとうございました。
次回も引き続き、Pepperアプリケーションに触れて行く予定です


弊社では全国各地の請負い(ご自宅)で作業協力頂ける、フリーランスエンジニアの方を常時探しております。
ご興味ある方は、お気軽にお問い合わせ下さい。


コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です

*