開発ブログ

第4回 座布団のボタンでパペロの頭を動かして喋らせてみた

投稿日時:2018年7月13日 18:07

こんにちは。ピャペロンです。
今回は座布団のボタンでパペロの頭を好きなように動かして喋らせてみたよ。
あらかじめパペロシミュレーターを動かす環境を整えておこう。第2回 Windowsからパペロシミュレーターを動かしてみた
本格的にプログラミング言語を扱うから難易度が上がるけど少しずつしっかり理解していこう!

使用するソフト
・Windows 10
・テキストエディタ(Visual Studio Code
・Google Chrome
・Python 3(ver3.4推奨)
※推奨環境以外は不具合が起きる可能性があるので自己責任でお願いします。


まずPython3でよく使われる単語を最低限説明するよ。Pythonに触れたことがない人は入門書や入門サイトに目を通しておくことをおすすめするよ。

ライブラリ、モジュール : クラスや関数などが記述された.pyファイルのこと。利用するには初めに記述する必要があるよ。
関数 : 特定の処理を実行する機能のことだよ。
クラス : オブジェクトの型のようなもの。そのオブジェクトだけが利用できる変数やメソッドが記述されてるよ。
オブジェクト : 対象物で覚えておけばいいと思う。Pythonはほとんどオブジェクトの組み合わせ(関数もオブジェクト)
変数 : 簡単に言えば整理箱。数値や言葉などのオブジェクトを分類して入れておく箱。
メソッド : そのオブジェクトだけが利用できる関数のこと。オブジェクト自身を操作したりするよ。

 

下記のソースコードは真ん中のボタンを押すと頭を動かして挨拶するプログラムだよ。
コピーペーストして動かしてみよう。※動かない場合は” -sim “オプションでシミュレータIDを指定してみよう。
今回はこのプログラムをいじって頭を好きなように動かして喋らせてみよう。

パッと見ても訳がわからないと思うからPythonライブラリ(pypapero.py)リファレンスマニュアルチュートリアルを見ながら一行ずつ理解していこう。

# 真ん中のボタンを押すと頭を動かして挨拶するプログラム

import sys    # コマンドラインの動作に深く関連する関数を定義しているsysモジュールを利用できるようにするよ。

import pypapero    # PaPeRo i 制御用ライブラリを利用できるようにするよ。

def my_func(papero):    # 頭を動かして挨拶するmy_func関数を定義するよ。
    papero.send_move_head(["A-15T1000L", "R0T1000L", "A0T1000L"], ["A0T1000L", "R0T2000L"])    # paperoオブジェクトの頭を動かすよ。
    papero.send_start_speech("おはようございます")    # paperoオブジェクトの音声合成による発話を開始するよ。

if __name__ == "__main__":    # コマンドラインからこのファイルを実行したら。

    # コマンドライン引数からそれぞれの値を変数に代入するよ。
    simulator_id, robot_name, ws_server_addr = pypapero.get_params_from_commandline(sys.argv)

    papero = pypapero.Papero(simulator_id, robot_name, ws_server_addr)    # Paperoオブジェクトをクラスから生成するよ。

    if papero.errOccurred == 0:    # エラーが発生しなければ実行するよ。
        while True:    # 繰り返し実行するよ。
            messages = papero.papero_robot_message_recv(1.0)    # パペロから受信したメッセージを変数messagesに代入するよ。
            
            # メッセージをきちんと受信して、かつ足元のボタンが押されていたら実行するよ。
            if (messages is not None) and (messages[0]["Name"] == "detectButton"):

                if messages[0]["Status"]=="C":    # 真ん中のボタンが押されていたら実行するよ。
                    my_func(papero)    # my_func関数を実行するよ。
                else:    # 真ん中のボタン以外なら実行するよ。
                    break    # 繰り返しを抜けるよ。
    papero.papero_cleanup()    # paperoオブジェクトの使用を終了するよ。

 

このプログラムを右ボタンを押したら右を向いて挨拶して、左ボタンを押したら左を向いて挨拶して、真ん中を押したら終了するプログラムに改変してみよう。
まずはパペロから見て右を向きながら挨拶する関数をプログラムしてみよう。
ここで難しいのはsend_move_head()メソッドだ。()の中に頭の動きを記述するよ。リファレンスを見ながら理解していこう。

()には、(縦の動き, 横の動き, 繰り返し, 優先度)の順に指定するよ。今はリピートと優先度は無視してもOK。縦の動きはリスト型で[ ]の中に動かす角度や時間などを記述していくよ。例えば上に1秒間30度動いたあと、下に2秒間40度動いて、1.5秒間で正面に戻る動きは、[“A30T1000L”, “R-40T2000L”, “A0T1500L”]となるよ。Aは絶対角度でRは相対角度、Tは時間で単位はミリ秒、Lは加速度で低速を示すよ。
横の動きはパペロから見て左が整数で右はマイナスで表すよ。左に1秒間30度動いて、右に2秒間40度動いて、1.5秒間で正面に戻る動きは[“A30T1000L”, “R-40T2000L”, “A0T1500L”]と縦と同じになるよ。動かさない縦か横の軸があるなら[“”]を指定しよう。
これでパペロから見て右を向きながら挨拶する関数はもう書けるね。

def my_func_R(papero):
    papero.send_move_head([""], ["A-90T1000L", "A0T1000L"])    # 縦は動かさないから[""]を指定してるよ。
    papero.send_start_speech("おはようございます。パペロです。")

 

同じくパペロから見て左を向きながら挨拶する関数もプログラムしてみよう。
あとはプログラムした関数をボタンを押して実行できるようにするだけだよ。

# 右ボタンを押したら右を向いて挨拶して、左ボタンを押したら左を向いて挨拶するプログラム

import sys
import pypapero

def my_func_R(papero): # パペロから見て右を向きながら挨拶する関数 papero.send_move_head([""], ["A-90T1000L", "A0T1000L"]) papero.send_start_speech("おはようございます。パペロです。") def my_func_L(papero): # パペロから見て左を向きながら挨拶する関数 papero.send_move_head([""], ["A90T1000L", "A0T1000L"]) papero.send_start_speech("こんにちは。パペロです。")
if __name__ == "__main__": simulator_id, robot_name, ws_server_addr = pypapero.get_params_from_commandline(sys.argv) papero = pypapero.Papero(simulator_id, robot_name, ws_server_addr) if papero.errOccurred == 0: while True: messages = papero.papero_robot_message_recv(1.0) if (messages is not None) and (messages[0]["Name"] == "detectButton"):
if messages[0]["Status"]=="R": # パペロから見て右のボタンを押したとき実行 my_func_R(papero) elif messages[0]["Status"]=="L": # パペロから見て左のボタンを押したとき実行 my_func_L(papero)
else: break papero.papero_cleanup()


0

最新開発ブログ一覧  (一覧で確認
2020年8月19日 14:08
開発ブログ
第30回 パペロで赤外線アレイセンサを動かしてみよう!【中編:顔の表面温度を測ってみよう】
by 管理者
2020年7月22日 16:07
開発ブログ
第29回 パペロで赤外線アレイセンサを動かしてみよう!【前編:簡易サーモグラフィを作ろう】
by 管理者
2019年11月20日 17:11
開発ブログ
第28回 パペロでJulius4.5を実行してみた
by 管理者
2019年11月13日 09:11
開発ブログ
第27回 JuliusをPaPeRoi向けにクロスコンパイルしてみた
by 管理者
2019年9月19日 17:09
開発ブログ
第26回Linaro Toolchainでクロスコンパイルしてみた
by 管理者

コメントは受け付けていません。