[2015/11/19] naoqi os で python SDKを使ってローカルからサービスをレジストする方法

##ADEアカウントの取得
https://www.aldebaran.com/ja
上記のサイトでアカウントを取得してください。
pepper持っている人は、すでにお持ちだと思いますが。
ない人は、取得おねがいします。

##デベロッパーズプログラムへの参加
https://community.aldebaran.com/ja/developerprogram
デベロッパーズプログラムに登録しましょう。
![ss1.png](https://qiita-image-store.s3.amazonaws.com/0/35275/ff533616-7793-f819-6160-d25b05b9ffec.png)



##SDKの入手
https://community.aldebaran.com/en/resources/software
現在の環境に合うSDKをダウンロードします。
Python 2.7 SDK バージョン名 OS名 bit数
例：
僕の環境は、ubuntu 64bit でpepperのバージョンが2.4.2なので、
[ Python 2.7 SDK 2.4.2 Linux 64 ]という感じです。

![ss2.png](https://qiita-image-store.s3.amazonaws.com/0/35275/5811d79a-d49a-2e18-792c-b9c533b78585.png)

##python 環境の構築(オプショナル)
python環境の構築については、オプションです。なぜなら、
Windows以外のOSはデフォルトで本記事に必要なバージョンSDKがインストールされているからです。

すでに機械学習や科学計算をするために python 3.x 系やその他の環境を構築している方は、
pyenvとか入れていると思いますが、下記に記事をリンクしておきます。

[pyenvを使ってMacにPythonの環境を構築する](http://qiita.com/1000ch/items/93841f76ea52551b6a97)

##python naoqi & qi モジュールのインストール
以下、オフィシャルの資料
[Python SDK - Installation Guide](https://cloud.aldebaran-robotics.com/naoqidoc/2-4/dev/python/install_guide.html)

ターミナルでの作業になるので、環境を定義します。
エディタ：emacs(vi, nanoとかあると思います。)
OS:Mac(linuxでもほぼ同じ)

上記のサイト＆方法で、pynaoqi-python2.7-2.4.2.26-mac64をダウンロードしてきます。
zip形式だと思うので、好きなディレクトリに解凍します。

端末(terminal)を立ち上げて、各種エディタで、~/.bash_profileに以下を追記します。

\$ export PYTHONPATH=\${PYTHONPATH}:/path/to/python-sdk
\$ export DYLD_LIBRARY_PATH=${DYLD_LIBRARY_PATH}:/path/to/python-sdk

/path/to/python-sdk の部分はさすがにそのままではなくて、さっきダウンロードして解凍してきた。
ディレクトリへのパスです。

端末(terminal)を立ち上げて、import 確認
\$ source .bash_profile
\$ python
\>>> import qi
\>>> import naoqi
何も問題がなければ次へ。

Windowsの方におすすめのサイト
[Apple(日本)](http://www.apple.com/jp//?afid=p238|sKSMckWTz-dc_mtid_18707vxu38484_pcrid_78978864621_&cid=aos-jp-kwg-brand-slid-)

##qibuildのインストール
[qiBuild documentation - Getting started](http://doc.aldebaran.com/qibuild/beginner/getting_started.html)
・用意するもの
1.cmakeのbinへのパス
\$ which cmake 
とかで取得してください。

・pip でインストールする。
\$ sudo pip install qibuild

\$ qibuild config --wizard でconfigファイルを作成する
一番最初は、cmakeのbinへのパスを求められますが、それ以外は、1を選んでおけばベター。
![ss3.png](https://qiita-image-store.s3.amazonaws.com/0/35275/fdf78fa0-391a-88d0-422f-b30b7a5d99a2.png)

・動作確認
\$ qibuild --version
qibuild version 3.10.1
Using Python code from /usr/local/lib/python2.7/dist-packages
Using CMake code from /usr/local/share/cmake

##サービスを作ってみる
[Python - How to write a qimessaging service](https://cloud.aldebaran-robotics.com/naoqidoc/2-4/dev/libqi/guide/py-service.html?highlight=naoqi%20service)
やっと本題です。ローカルからpepperのアプリやダイアログの^pCallやcallなどで使える
サービスをレジストしましょう。

```lang:myfooservice.py
import qi
import sys

class MyFooService:
  def __init__(self, session):
    print "hello,"

  def bang(self):
    return "world"

def main():
    # Create and Start the Application
    app = qi.ApplicationSession(sys.argv)
    app.start()

    # Get the Session
    session = app.session

    # Create the Service
    mf = MyFooService(session)

    # Register It
    session.registerService("MyFooService", mf)

    # Run the Application
    app.run()

if __name__ == "__main__":
    main()


```

##ローカル環境からLAN上のpepperにレジストする
はい、前の項で無事サービスの大本になるpythonファイルが出来ましたね。
あとは、レジストするだけです。以下必要なもの。
1.pepper ip or ドメイン(192.168.0.xとかpepper1.localとか)
2.実機pepper ssh password
先ほど作ったファイルののディレクトリへ移動します。

\$ cd /path/to/sakki/no/faile/myfooservice.py
\$ python myfooservice.py --qi-url=tcp://pepper1.local (あるいは、192.168.0.11とか)

そうすると、以下のような感じになるかと思います。
![ss4.png](https://qiita-image-store.s3.amazonaws.com/0/35275/2e4067b3-dcfb-894c-0fb1-72b48fa094ee.png)


とか言ってくれるかな、と思うんですが、いかがでしょうか。


##実機で動作確認
serviceなんで、実機の中で使えるか検証してみましょう。
以下必要なもの
1.pepper ip or ドメイン(192.168.0.xとかpepper1.localとか)
2.実機pepper ssh password

ssh でログインしましょう。
\$ ssh nao@pepper.local

サービスが正しくレジストされているかどうか確認しましょう。
\$ qicli info MyFooService 
\$ qicli call MyFooService.bang

![ss7.png](https://qiita-image-store.s3.amazonaws.com/0/35275/1da3cd28-6769-30f2-3acc-4cb16d7c3b5d.png)

## 終わり
以上、完了です。次回は、サービスを実際のアプリケーションに組み込んで動かす方法を書こうかなと思います。
ご不明な点とうございましたら、コメント欄までおねがいします。