PaPeRo iをRaspberry Pi上のpythonから操作する

Raspberry Pi上のpythonスクリプトからPaPeRo iを操作するための手順を説明します。
pythonを使う場合、pythonスクリプトをPaPeRo i本体内で動作させる場合も、外部のWindows PCやRaspberry Piで動かす場合いずれも、
websocket通信経由になります。
このため、PaPeRo iにはwebsocket通信用アドオンシナリオをインストール必要があります。
外部のRaspberry Pi等からPaPeRo iを操作する場合、PaPeRo iにpythonをインストールする必要はありません。
また、pythonの推奨バージョンは3.4ですのでご注意ください。

PaPeRo iにアドオンシナリオをインストール

PaPeRo制御用WebSocket通信アドオンシナリオをダウンロードして展開し、
取り出したsce_00010012.so.1.0.0/Extension/robot_platform/lib/addonに置きます。
PaPeRo iへのファイル転送は、WinSCPの様なscpが使えるftpクライアントを使うか、
linuxからであればscpコマンドで

linux$ scp sce_00010012.so.1.0.0 (USERNAME)@PaPeRoのIPアドレス:/tmp
(USERNAME)@xxx.xxx.xxx.xxx's password: xxxxxxxx

としておいて

# chmod +x /tmp/sce_00010012.so.1.0.0
# mv /tmp/sce_00010012.so.1.0.0 /Extension/robot_platform/lib/addon

とすれば良いでしょう。さらに、

# cd /Extension/robot_platform/lib/addon
# ln -s sce_00010012.so.1.0.0 sce_00010012.so

とし、また、/Extension/robot_platform/conf/sysmgr.conf

00010012,00000001

に変更します。
※後半の割り込みシナリオ指定が00000001である必要があるわけではなく、前半が00010012となっていれば良いです。
変更は、もしエディタのviに不慣れな場合、以下のコマンドでできます。

# cd /Extension/robot_platform/conf/
# echo 00010012,00000001 > sysmgr.conf
# cat sysmgr.conf

最後のcatコマンドでsysmgr.confの内容が画面に表示されますので、意図通りに変更されたか確認します。
確認できたら電源OFF-ONするか、ブラウザからhttp://192.168.1.1/robo/restart.cgiにアクセスしてsys_mgrを再起動してください(電源OFF-ONよりかなり早く済みます)。

Raspberry Pi側の準備

pythonのバージョンの関係上、raspbianはjessieである必要があります。python3.4であることを確認してください。

(pi)$ python3
Python 3.4.2 (default, Oct 19 2014, 13:31:11)
[GCC 4.9.1] on linux
Type "help", "copyright", "credits" or "license" for more information.
>>>

pip3をまだインストールしていない場合、以下の様にインストールしてください。

(pi)$ sudo apt-get install python3-pip

pythonのパッケージtornadows4pypip3でインストールします。

(pi)$ sudo pip3 install tornado ws4py

Raspberry Piへ通信ライブラリをインストール

PaPeRo制御用Pythonライブラリをダウンロードし、Raspberry Piの任意の場所に展開します。
通信ライブラリは現状パッケージ化されていないので、展開したファイルをアプリと同じディレクトリに配置して使用してください。

接続確認

何よりもまずTCP/IPでRaspberry PiからPaPeRo iに通信出来る状態にある必要があります。

(pi)$ ping PaPeRoのIPアドレス
(pi)$ rm ~/.ssh/known_hosts #乱暴ですが
(pi)$ ssh (USERNAME)@PaPeRoのIPアドレス

などでpingsshのリモートログインが成功することを確認してください。

pythonで制御

以下の内容でtest0.pyを作成してください。

import sys
import pypapero

def my_func(papero):
    papero.send_move_head(["A-15T1000L", "A-15T1000L", "A0T1000L"],
                          ["A0T1000L", "A0T1000L", "A0T1000L"])

def test0():
    papero = pypapero.Papero("", "", "ws://PaPeRoのIPアドレス:8088/papero")
    if papero.errOccurred == 0:
        while True:
            msg = papero.papero_robot_message_recv(3.0)
            if ((msg is not None) and
                (msg[0]["Name"] == "detectButton")):
                if msg[0]["Status"] == "C":
                    my_func(papero)
                else:
                    print('finish')
                    break;
            else:
                print(".")
    else:
        print('error')
    papero.papero_cleanup()

if __name__ == "__main__":
    test0()

python3で実行します。

(pi)$ python3 test0.py

真ん中のボタンで首を振り、左右のボタンで終了すれば成功です。

Raspberry Piからシミュレータを動かす

Windows PCに表示したPaPeRo iシミュレータに、Raspberry Piから接続することも出来ます。シミュレータ画面に表示されるシミュレータIDが、
ここでは仮にfau9j4b2だったとして、test0.pyのコネクト部分

papero = pypapero.Papero("", "", "ws://PaPeRoのIPアドレス:8088/papero")

papero = pypapero.Papero("fau9j4b2", "", "")

に変更するだけで、シミュレータ画面のPaPeRo iが動作します。
なお接続先はpythonスクリプトの引数でも指定出来るようになっていますが、
python統合開発環境を使う場合には引数指定の方が逆に面倒なので、
ここではあえてソースを書き換える方法を紹介しました。

※誤記修正しました。
×”ws://PaPeRoのIPアドレス/8088/papero”
○”ws://PaPeRoのIPアドレス:8088/papero”
ご迷惑をお掛けしました。(2016/5/30)

※アドオンシナリオのファイル名変更に伴い内容を更新しました。(2016/9/13)
※ユーザー名を(USERNAME)に変更しました。sysmgr.conf変更の詳細手順を追加しました(2017/10/16)
※sys_mgr再起動手順抜けを修正しました(2017/10/24)


0