次のように設定して、キャタピラのコントロールプログラムをPythonで作成し操作します。
・WiringPiをインストール。
・「julius」、「GPIO」、「jtalk」をつなぐPythonで記述したプログラムを作成。
・プログラムの自動起動を設定。
1.次のコマンドを実行して、WiringPiをインストールします。
$ cd
$ sudo apt-get install git-core
$ git clone git://git.drogon.net/wiringPi
$ cd wiringPi/
$ ./build
2.次のコマンドを実行して、インストールを確認します。
$ gpio -v
バージョン番号が表示されれば、OKです。
「julius」、「GPIO」、「jtalk」をつなぐPythonで記述したプログラム「vremocon.py」を
作成します。
1.次のコマンドを実行して、「vremocon.py」を作成
$ cd
$ nano vremocon.py
2.「vremocon.py」の内容は、次の通りです。
# -*- coding: utf-8 -*- import socket import sys import select import os import threading host = "localhost" port = 10500 bufsize = 1024 timer_length = 120.0 standby = False os.system("gpio -g mode 8 out") os.system("gpio -g mode 7 out") os.system("gpio -g mode 23 out") os.system("gpio -g mode 24 out") os.system("/home/pi/jtalk.sh 音声リモコンを起動しました") def standbyoff(): global standby if standby == True: os.system("/home/pi/jtalk.sh 待機モードを解除します") standby = False stop() def stop(): os.system("gpio -g write 8 0") os.system("gpio -g write 7 0") os.system("gpio -g write 23 0") os.system("gpio -g write 24 0") client_socket = socket.socket(socket.AF_INET, socket.SOCK_STREAM) client_socket.connect((host, port)) while True: inputready, outputready, exceptrdy = select.select([client_socket], [],[]) for s in inputready: if s == client_socket: message = client_socket.recv(bufsize) print "受診したメッセージ : " + message if message == "": print 'クライアントの実行を停止します' break if standby == True: if "止まれ" in message: os.system("amixer set Capture nocap") os,system("/home/pi/jtalk.sh 止まります") os.system("amixer set Capture cap") stop() if "前進" in message: stop() os.system("amixer set Capture nocap") os,system("/home/pi/jtalk.sh 前進します") os.system("amixer set Capture cap") os.system("gpio -g write 8 1") os.system("gpio -g write 7 0") os.system("gpio -g write 23 1") os.system("gpio -g write 24 0") if "後進" in message: stop() os.system("amixer set Capture nocap") os,system("/home/pi/jtalk.sh ばっくします") os.system("amixer set Capture cap") os.system("gpio -g write 8 0") os.system("gpio -g write 7 1") os.system("gpio -g write 23 0") os.system("gpio -g write 24 1") if "左前" in message: stop() os.system("amixer set Capture nocap") os,system("/home/pi/jtalk.sh 前進で左に曲がります") os.system("amixer set Capture cap") os.system("gpio -g write 8 0") os.system("gpio -g write 7 0") os.system("gpio -g write 23 1") os.system("gpio -g write 24 0") if "左後" in message: stop() os.system("amixer set Capture nocap") os,system("/home/pi/jtalk.sh ばっくで左に曲がります") os.system("amixer set Capture cap") os.system("gpio -g write 8 0") os.system("gpio -g write 7 0") os.system("gpio -g write 23 0") os.system("gpio -g write 24 1") if "右前" in message: stop() os.system("amixer set Capture nocap") os,system("/home/pi/jtalk.sh 前進で右に曲がります") os.system("amixer set Capture cap") os.system("gpio -g write 8 1") os.system("gpio -g write 7 0") os.system("gpio -g write 23 0") os.system("gpio -g write 24 0") if "右後" in message: stop() os.system("amixer set Capture nocap") os,system("/home/pi/jtalk.sh ばっくで右に曲がります") os.system("amixer set Capture cap") os.system("gpio -g write 8 0") os.system("gpio -g write 7 1") os.system("gpio -g write 23 0") os.system("gpio -g write 24 0") if "受付モードOFF" in message: standby = False os,system("/home/pi/jtalk.sh 待機モードを解除します") if "受付モードON" in message: standby = False os,system("/home/pi/jtalk.sh 既に待機中です") elif "受付モードON" in message: os,system("/home/pi/jtalk.sh 待機モードに入ります") standby = True t = threading.Timer(timer_length, standbyoff) t.start() client_socket.close()
3.次のような操作方法になります。
(1)起動後、メイちゃんが「音声リモコンを起動しました」といいます。
(2)次に「スタンバイ」と言うと、メイちゃんが「待機モードに入ります」と返します。
(3)その後、「前」、「後」、「止まれ」、「右前」、「右後」、「左前」、「左後」と言うと
一旦止まり、
メイちゃんが返事を返して命令通りに動きます。
(4)「ニュートラル」と言うと、「待機モードを解除します」とメイちゃんが返事を返し、
待機モードを解除します。
(5)再度、「スタンバイ」というと(2)のようになります。
(6)待機モードに入ってから2分後に待機モードを自動解除し、モータを停止します。
1.次のコマンドを実行して、起動します。
$ julius -C ~/julius/julius.conf &
2.jyuriusが起動後、下図のように表示され止まります。
3.Enterキーを押すとプロンプトが表示されます。
4.プロンプトの後に次のコマンドを実行すれば、「vremocon.py」が起動します。
$ python vremocon.py
5.しばらくするとメイちゃんが「音声リモコンを起動しました」と言い、
(「julius」と「vremocon.py」の起動の2 )の操作をします。
下図が操作途中の画面です。
6.「Ctrl」+「C」キーを押すと「vremocon.py」のプログラムが停止しプロンプトが表示されます。(下図)
7.「julius」はバックグランドで動いていますので、RaspberryPiのデスクトップ画面でシャットダウンします。
1.スクリプトファイル「rc.local」に以下のスクリプトを追加し自動起動できるようにします。
$ sudo nano /etc/rc.local
2.「rc.local」ファイルの内容で、最後の「exit 0」の前に以下の内容を追加し保存します。
su - pi -c 'julius -C /home/pi/julius/julius.conf &'
sleep 10
su - pi -c 'python /home/pi/vremocon.py &'
exit 0
3.RaspberryPi をシャットダウンします。
4.再度、RaspberryPi を起動すると、しばらくしてメイちゃんの声で「音声リモコンを起動しました」
と言います。
5.「スタンバイ」と話しかければ、メイちゃんが「待機モードに入ります」と返します。
(最初は反応が遅いと思います。)
6.「待機モードに入ります」と返事があれば、音声命令を話しかければキャタピラが反応します。
7.待機モードに入ってから何もしないで2分間たつと「待機モードを解除します」とメイちゃんが
返事をします。
8.終了するときは、PCのリモート操作で、RaspberryPi をシャットダウンします。