2016年11月24日木曜日

第11回:GOPIGOをPYTHONで自律駆動させる(2)


<GOPIGOに動きながら状況を報告させる>
GOPIGOの自律駆動をさせたとき、プログラムでは状況をPRINTしていたので、ターミナル画面を見ると、状況がわかるのだが、実際は後で確認する程度にしか使えなかった。デバッグで使う程度だ。
前回、前々回とGOPIGOに発声機能を追加できたことから、PRINTの代わりに状況を言葉で発すれば、見ている人がよくわかると気がついた。

そこで、障害を検知した場合、右・左の判断について、GOPIGO自身がその場で声を出す事にした。このような使い方では、現状ではOPENJTALKは、反応が遅いので多分使う気にはならず、AquesTalkを自然と使う事になった。
プログラムは以下の通り。先回のプログラムを多少変更し、発声部分を追加した程度。

from gopigo import *
import time
from time import sleep
import subprocess

enable_servo()
servo(90)
distance_to_stop=20 #Distance from obstacle where the GoPiGo should stop
print "Press ENTER to start"
raw_input() #Wait for input to start
fwd() #Start moving

while True:
dist=us_dist(15) #Find the distance of the object in front
print "Dist:",dist,'cm'
if dist<distance_to_stop: #If the object is closer than the "distance_to_stop" distance, stop the GoPiGo
print "obstacle"
stop()
subprocess.call('/home/pi/aquestalkpi/aquestalkpi/AquesTalkPi "障害です。止まります。" | aplay', shell=True)

servo(20)
time.sleep(2)
dist=us_dist(15)
print "Right Dist:",dist,'cm'
a=dist
servo(160)
time.sleep(1)
dist=us_dist(15)
print "Left Dist:",dist,'cm'
b=dist
if a<=distance_to_stop and b<=distance_to_stop:
   servo(90)
   time.sleep(1.0)
   bwd()
   time.sleep(0.5)
   stop()
   print "I gave up and stop!"
   subprocess.call('/home/pi/aquestalkpi/aquestalkpi/AquesTalkPi "身動きとれません。止まります。" | aplay', shell=True)
       #Stop the GoPiGo
       
   break
elif a>b:
   if a>distance_to_stop:
       right_rot()
       time.sleep(0.3)
       stop()
       servo(90)
       time.sleep(1)
       print "go right"
       subprocess.call('/home/pi/aquestalkpi/aquestalkpi/AquesTalkPi "右に進みます。" | aplay', shell=True)
       fwd()
elif b>a: 
   if b>distance_to_stop:
       left_rot()
       time.sleep(0.3)
       stop()
       servo(90)
                        time.sleep(1)
                        print "go left"
                        subprocess.call('/home/pi/aquestalkpi/aquestalkpi/AquesTalkPi "左に進みます。" | aplay', shell=True)
                        fwd()

time.sleep(0.1)
dist=us_dist(15)
time.sleep(.1)
実際に動かしてみると、確かによくわかる。実にリアルな印象だ。GOPIGOがロボットらしくなってきたぞ。でも、こうやって動かしながらパッシブスピーカーから声を出しても、あまり良く聞こえないぞ。やっぱり、ちゃんとアクティブ型スピーカーでしっかり音を出さないと無理が多いと合点した。
ということで、単4電池駆動の同種スピーカーをアマゾンで注文したら、翌日届くというスピード感はすごいね。
あちらこちらのブログに、ミニプラグ出力は音質が悪いと散々書かれているが、これも鳴らしてみて合点した。パッシブスピーカーでは、全く分からなかったが、ノイジーだね。まあ、Gopigoで音楽を聴く訳ではなし、Gopigoの騒音との競争だから、十分かなという印象だね。以下のビデオを見て下さい。障害にぶつかる手前で止まり、左右の距離計測をして、遠い方へ走る様に設定したが、両方20cm以下の距離の場合はギブアップする様になってます。



0 件のコメント:

コメントを投稿