2016年12月8日木曜日

第13回:GOPIGOにカメラをつけてみた(2)

GOPIGOにカメラをつけていたので、このカメラからライブ画像を取り出そうと、情けないことに、しばらく悪戦苦闘していた。
ネットでいろいろ探してみても、MJPGを使うとかMotionを使うとか、いろいろ出ていて、WEBカメラを使う例は多いが、PiCameraの場合まずどうすれば良いのか?よくわからなかった。

結論としては、MJPG-Streamerで、とりあえずMACやIPHONEにローカルではあるが、ライブ的(多少カクカクしている)に簡易に表示できることがわかったので、このブログに書いておく。とりあえず、ローカルな実験範囲での報告である。

参考になったブログは、実はWEBカメラを使っているが、そのままPiCameraに使えたので、その点は参考になるだろう。MJPG-Streamerのインストールについては、このブログのままでOKだった。実際には、WEBカメラでも良いとわかったことから、別のブログも参照した。同じ事が書いてある。やったことは、以下だ。

$ sudo apt-get update
$ sudo apt-get install subversion libjpeg-dev imagemagick
$ svn co https://svn.code.sf.net/p/mjpg-streamer/code/mjpg-streamer mjpg- streamer
$ cd mjpg-streamer
$ make
先ほどのブログを参照して頂くのが、最も正しいと思うが、一応書いておいた。私の環境では、8080ポートを使っているので、そこがちょっと違うだけだ。
以下のコマンドを実施すれば、GOPIGOのPiCameraから、ライブストリーミングを出力する。
$ ./mjpg_streamer -i "./input_uvc.so -y" -o "./output_http.so -w ./www"
ライブストリーミングを見るには、IPアドレスが、192.168.3.6の場合は、私のMACでは以下で
http://192.168.3.6:8080/stream.html
ブログの通り、MJPGのデモ画面が表示され、その中にライブ画像が出てくる。
これも、ブログに丁寧に記述して頂いているとおり、
http://192.168.3.6:8080/stream_simple.html
とすれば、ライブ画像だけが表示される。Iphoneでも全く同じなので、これで、Iphoneで、同じ無線LANの範囲であれば、GOPIGOのPiCameraライブを見る事ができる。多少カクカクしているが、これだけ簡便に表示できるのであれば、監視カメラ的には十分かなと思う。
 いつものことながら、ブログの作者様には、感謝申し上げる。そういう意味でも、私も他の方々の便益になるようなブログを書いておこうと思う。

ライブで見てみた感じでは、1秒程遅れて、多少カクカクしているので、画像を見ながらリアルタイムにGOPIGOを制御するのは難しかろう、という印象だ。以下にテレビ画像をGOPIGOのカメラで写し、iphoneでストリーミングを見ているところをビデオ撮影してみた。少々カクカクしている様子も少しはわかるかと思う。









2016年11月25日金曜日

第12回:GOPIGOの頭脳であるRaspberry PIを使える様に(2)

以前から、SSH接続で進めて来たが、その際良く出てくる言葉としてVNCというものが有った。正直良く理解せずに居たが、一度トライしてみた。

私の今のGOPIGOの環境は、今までの経緯で様々なプログラムがインストールされてしまっているので、このブログをご覧になった方が同じ事をしても結果が同じかどうか私にはわからないが、Chrome ブラウザを使い、アドレス欄にxxx.xxx.xxx.xxx  要はGOPIGOのIPアドレスを入力してENTERするだけで、以下の画面がWEBブラウザに現れた。
ここの、Launch VNCをクリックして、画面上表示されているパスワードをそのまま入力してあげると、
なんと、GOPIGOをテレビに接続した時と同じ画面が、MAC book airのウエブブラウザの一画面として表示された。これがVNC接続なのか、と感心することしきり。画面は多少小さくはなっているが、HDMI接続でテレビに映した時と同じ操作ができる様だ。このウエブブラウザの中で、ターミナル画面も開ける事が確認できた。何も知らずにやってきて、無知というのは恐ろしいものだ、と変に感心してしまった。こんな画面が見れるのなら、テレビは不要ですがな。
でも、まあSSHが使えれば、それで十分かもしれない。VNCは、例えばCAMERA PREVIEWなど使って来た機能であるが、VNCの場合は画面に表示されない、とか制限も多い様だ。
ご参考まで。

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以下の距離の場合はギブアップする様になってます。



2016年11月22日火曜日

第10回:GOPIGOにスピーカをつけてみた(2)

今回は付け足しの投稿だ。
前回、音声合成ソフトウエアとして、Aquestalkを使った。Aquestalkは商用ソフトであるが、個人使用は無料という範疇のソフトである。
よくよく、ネットで調べてみると、どうやらOpenJTalkというソフトがオープンであり、主流の様だ。そこで、急遽、OpenJTalkについても試してみた。

いろいろと試していると、やっぱりスピーカがパッシブ型なので、音が小さい事が気になって来た。

OpenJTalkについては、これもやはりいろいろとブログに参考になる情報があふれている。このブログに従ってOpenJTalkにトライした。
プログラムのインストール等は、このブログの通りで、スムースにできた。Aquestalkで作ったテキストファイルを読まして比較したかったので、ブログにあるPYTHONのプログラムを多少変更して、テキストファイルから読み込む様にした。
#coding: utf-8
import subprocess
from datetime import datetime

def jtalk(t):
    open_jtalk=['open_jtalk']
    mech=['-x','/var/lib/mecab/dic/open-jtalk/naist-jdic']
    htsvoice=['-m','/usr/share/hts-voice/mei/mei_normal.htsvoice']
    speed=['-r','0.7']
    outwav=['-ow','open_jtalk.wav']
    cmd=open_jtalk+mech+htsvoice+speed+outwav
    c = subprocess.Popen(cmd,stdin=subprocess.PIPE)
    c.stdin.write(t)
    c.stdin.close()
    c.wait()
    aplay = ['aplay','-q','open_jtalk.wav']
    wr = subprocess.Popen(aplay)

def say_datetime():
    d = datetime.now()
    text = '%s月%s日、%s時%s分%s秒' % (d.month, d.day, d.hour, d.minute, d.second)
    jtalk(text)

if __name__ == '__main__':
    f=open('shaberu.txt','r')
    k=f.read()
    jtalk(k)
変えたのは、メインルーチンで、shaberu.txtファイルを読む形に変えただけだ。あ、そういえば、少し発声を遅くするために、speed 設定を1.0から0.7に変えたことも書いておく。ブログを書かれたkkoba84さん、有用な情報を有り難うございます。関数を使わさせて頂いております。

Aquestalkと同じファイルを読まして比較して、OpenJTalkは、レスポンスが遅いことが気になった。声の調子などは、女性の明るい声に変えることで、OpenJTalkの方が良いと思うが、OpenJTalkは起動してから5秒程しずかなので、何か間違ったのかと思ってしまう。また、人との掛け合いの間が抜けてしまうかもしれない。遅くなる理由が何かあるとは思うが、他人のプログラムを活用させて頂いている関係で、よく理由がわからない。
Aquestalkは商用プログラムなので、応答性能は重視して開発しているだろうから、こういう差が出るのかもしれない。まあ、両方使いながら、実用性を比較して行こう。

kkoba84さんが、時間を読み上げるPYTHONプログラムを公開されているので、「今何時?」と聞けば、時間を答える、という時間応答ロボットをまず作ってみたらどうか?と思った。でもその為には、マイクをつけないといけないね。次はそれだね。

2016年11月21日月曜日

第9回:GOPIGOにスピーカをつけてみた


前回は、カメラを付けてみた。
これは、最初の目的であるGoogleのAPIを使って、写真に写った文字を読み取らせるために付けたものだ。でも、やっぱり読み取った文字は、GOPIGOが自分でしゃべるのが自然だろう。 そこで、カメラに引き続き、今回はスピーカに挑戦することにした。

Raspberry PIはLINUXなので、スピーカとしてUSBタイプのスピーカを付けることもできるが、アマゾンで探してみてもとても大きな物しか見つからない。GOPIGOに付けるというよりはGOPIGOがスピーカにくっついているのもいただけない。もともとRaspberry PIに装備されているミニジャックを使うのが最も簡単だし、安く小さな物も買える様だ。

いろいろな商品が出ていて、選択に悩む程であるが、うまくできるがわからないので、とりあえず安いものとして、ヤザワ プラグインスピーカー VRS202W (アマゾンで589円とお安い)を選択して購入した。小さく平べったくってGOPIGOのシャーシーに載せるにはぴったりと思った。これは、つけてみてわかったことだが、アンプがついていないタイプなので、Raspberry PIのボリュームを最大にしてやっと静かな部屋で聞こえる程度のものだ。でも、最初の実験としては安いしこれで十分で、本当に大きな声が必要ならアンプ付きの同種の物に買い替えれば良いだけだ。丁度同じタイプで厚さが少し厚いだけの電池アンプ入りの物(ヤザワ アンプリファイドプラグインスピーカー VRS203W:アマゾンで854円:最初からこれを買えば良かったか??)がある。

<接続>
ステレオミニジャックに付けるだけなので、当たり前の領域かと思っていたが、意外と奥が深い。普通、Iphoneに使われている4極ミニジャックは、4極目はマイク入力になっている。ところが、回路図を見ると、Raspberry PIのステレオミニジャックの4極目は、何とビデオ信号出力になっている。上記スピーカは、3極ミニジャックなので、そのまま差すと、ビデオ信号出力をGNDにショートすることになり、あまり電気的には宜しくない状況を作り出す。ミニジャック分配ケーブルの様なものを使えってスピーカ側を使えばベストだな。世の中のブログを見ても、気にせず(知らずに)直につなげている人が多いので多分大丈夫なのだろうが、心配性の私としては一応これも買う事にしよう。
<しゃべらせる>
ここでも、やっぱりブログを参照した。便利な世の中だ。他の人のためになる事を書いてくれている人がたくさん居る。私のこのブログも、同じ事をする人が参考になるように書く事にしよう。
ミニジャックを使う事にしたので、設定は簡単だ。Raspberry PIは、基本設定が、HDMIかミニジャックの自動設定になっている。従って放っておいても単純にスピーカをつなげれば音は出るはずだ。SSHでGOPIGOに入り込んで、ブログの通りにスピーカーのテスト
$ speaker-test -t sine -f 800
をしてみると、確かにプーという音が小さいが聞こえる。
音量は
$ alsamixer
で調整できる。結局、設定できる最大に近い値にした。
そこで、ブログに書かれている通り、Aquestalkをトライする事にした。

$ wget http://www.a-quest.com/download/package/aquestalkpi-20130827.tgz
$ tar xzvf aquestalkpi-20130827.tgz
$ cd aquestalkpi
までは順調であった。
ところが、
$ ./AquesTalkPi "あいうえお漢字です。" | aplay
がうまく動かない。仕方が無いので、AquestalkPiのホームページを調べて、
$ ./AquesTalkPi 漢字も読めます | aplay
と引用符を省いてみたところ、ちゃんと発声した。何かブロガーの人と環境や設定が異なるのかもしれない。テキストファイル(shaberu.txt)を作りAquesTalkPiと同じディレクトリに置いたら、
$ ./AquesTalkPi  -f shaberu.txt | aplay
としても、ちゃんとそのとおりしゃべった。但し、漢字の読みが一律であったり、不自然な感じはある。でも、無料版はこんなものだろうね。

まあ、目的がGoogleのAPIを使おうというところなので、APIから返されるtextを読み上げられればそれでよいので、こんなところで十分かと思う。


2016年11月18日金曜日

第8回:GOPIGOにカメラをつけてみた


GOPIGOをPYTHONで超音波距離センサーを使って制御し動かす方法は大体わかったので、次の目標として「カメラ」をトライした。
その中で気づいたことだが、GOPIGOのキットに付属していたMicro SDカードの容量が、4GBの仕様だったはずが、現物を良ーく見てみると、何と8GBのMicro SDカードが使われていた。うれしかった。すぐに、領域拡張を行なった。これで、ディスク容量を極度に気にする必要が無くなったのは大変有り難く、このままいろいろなことにチャレンジできそうだ。

<カメラの購入>
そもそも、今回アメリカから直接購入したキットには、カメラは含まれていない。日本でも購入できる事がわかっていたので、オプションとして発注もしなかった。
アマゾンで、いろいろ探したところ、少し旧いが、5MpixelのPICAMERAの新品をセールで1600円で売っていたので、迷わず購入した。新しくV2と言われる8MpixelのPICAMERAが売られているので、在庫処分されたのだと思う。あまりお金をかけたくない私としては、お得な気分。

<カメラの接続>
久しぶりに、Raspberry PiをGOPIGOから取り出した。GOPIGO基板とはピンの列で接合されているので、何度も抜き差しするのは、問題がありそうだ。なるべく付け外しの回数を減らすように努力している。
Dexter Industriesのページにもビデオで取り付け方を説明しているが、ブログに懇切丁寧に基板への取り付け方を説明しているところがあって、参考にした。リボンケーブルの表と裏を間違わない様に。

<カメラの動作確認>
ちゃんと動くかどうか心配だったが、Raspberry PiのLearning resourceというページにカメラの動かし方が書いてあったので、その通りにしたら画面に表示された。少し黄色い印象があるが、結構精細な画面(リアルタイム)がHDMI経由のテレビに映し出された。一応、SSHで制御しながら、HDMI接続しているので、Raspberry PIには、Micro USB ACアダプターと HDMIケーブルが接続されている。

<カメラの設置とスチル写真の撮影>
スチル写真も、プログラムを作り、FTPでGOPIGOに送り、SSHでプログラムを走らせ、又、FTPでMACに持ってくる事ができた。少々面倒くさいが、確認の意味ではこんなものか。
そこで、カメラをどのようにGOPIGOに設置するか悩んだあげく、上の写真の様につけてみた。人の顔を狙いたいので、サーボにつけるのではなく、シャーシに少々角度をつけて設置した。GOPIGOの上側のシャーシには、小さな細長い穴が開いていて、これが、丁度PICAMERAのリボンケーブルの大きさに合っていることがわかったので、そこを通すようにした。これでは、サーボの超音波センサーあたりが邪魔になるのではないかと思ってスチル写真をとってみたが、特にサーボは写っておらず、かなり上向きにとられている事がわかる。Google-APIのブログでは、広角のカメラアダプタを着けたようであるが、まあとりあえずは、これくらいで良いのではないかと思う。やっぱり画像が黄色っぽい。

今回は、Dexter industriesやRaspberry Piのホームページに載っている内容を単に確認しているだけの内容だが、私は全く初めてなので、一歩一歩確認しながら進めている。実際にやってみないとわからないことも結構多い。
GoogleのAPIを使って、こういった画像をアップすれば、例えば画像に文字が含まれていると、その文字を読み取って(OCR機能)返してくれるはずだ。それを読み上げることができれば、単なるおもちゃの領域から別次元へと移行することができる。そういうところを狙うには、スピーカも要る。会話をさせようとすると、マイクも要る。少し、時間がかかりそうだが、ますます面白いことにトライしたい。段々とロボットらしくなってくるぞ。   しかし、電池がすぐ減るのには閉口する。

2016年11月17日木曜日

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


訂正(2016年11月22日):GOPIGOとしてRaspberry PIを組み込んだ状態では、Micro USBの+5V電源は使えないと断言しておりましたが、Dexter IndustriesのホームページにGOPIGOの形で、「Micro USBが使える」ことが明記されておりました。回路図的には私の読んだ通りですが、ICの耐圧仕様などを鑑みるとOKということなのだと理解しました。早とちりで申し訳ありません。


GOPIGOをPYTHONで動かす事は、サンプルプログラムも多くUPされているので、比較的簡単にトライできそうである。
自律駆動の第一歩として、超音波距離センサーで前の距離を測りながら前進して、障害に近づいたら一旦止まり、左右に首を振ってそれぞれの距離を測り、遠い方へまた前進する、ということを繰り返すプログラムを作れば良いと考えた。
サンプルプログラムとしては、GITHUBにUPされているbasic_obstacle_avoid.pyというプログラム例が参考になりそうだ。

<電池問題>
PYTHONでプログラムをしながら、GOPIGOの動きを観察していると、当たり前の話では有るが、電池がへたってきて、SSHのやりとりも時間がかかるようになった。
プログラムコードを睨んでいると、どうしても時間が経ってしまうので、やっぱり電池では無理が多い。
既に持っているMicro USBのACアダプターが使えないものかと、GOPIGO2基板の回路図をじっと見てみたが、回路設計上は+5Vを外部から供給される事は想定していない様だ。GOPIGO2基板の中では、電池ホルダーからの電源を直接使っているのはモータードライバーICだけで、それ以外はレギュレータICを通過して+5Vで使っている。+5VをGOPIGO基板に強引に外部供給した場合、問題となるのはこのレギュレータICの出力ピンとFeedbackピンに想定外の+5Vがかかった場合にICが壊れるかどうかだ。Dexter Industriesにそのことを聞いても設計範囲外のことだから困るだけだろう。あまり、設計範囲外のことをしてトラブルを招くのも嫌なので、やっぱりMicro USBコネクタから電源供給をするのは止めておこう。どなたか、GOPIGOに組み込んだ状態で+5Vを外部供給してみた人が居たら、参考までに状況を教えて下さい。
電池は、やっぱりエネループかな。家にあるエネループを一部使ってみた(写真)が、8本もあるわけではなく、また古いので充電時間も7時間と長い。最新のエネループを見ると2時間程度で充電できるらしい。 +12VのACアダプターを買うのも良いが、動かしてデバッグする時は困るだろうし、最新のエネループを買うのか、迷いは多い。

<超音波距離センサー>
サンプルプログラムは、そのまま動かすと、想像どおりに、壁に向かって動き、20cm程手前で止まる。まったく、プログラム通りだ。
サンプルプログラムに手を加えて、以下の様に変えた。障害まで20cmの距離までまっすぐ進み、20cm以下の距離で止まり、右(20度)、左(160度)の距離を測定し、どちらも20cm以下であれば、少しバックして終了する。どちらかが20cmより遠ければ、より遠い方向へ回転し、まっすぐ進む。これを繰り返す。

from gopigo import *
import time

enable_servo()
servo(90)
distance_to_stop=20
print "Press ENTER to start"
raw_input() #Wait for input to start
fwd()
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()
servo(20)
time.sleep(1)
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!"
       #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"
       fwd()
elif b>a: 
   if b>distance_to_stop:
       left_rot()
       time.sleep(0.3)
       stop()
       servo(90)
                        time.sleep(1)
                        print "go left"
                        fwd()

time.sleep(0.1)
dist=us_dist(15)
time.sleep(.1)

このプログラムで、囲まれた場所では、多少ぶつかりながらも自律的に動き回ることができる。但し、超音波距離センサーが時々誤った結果を返すので、何も障害が無いのに、左右を見渡す動作が入り、どちらかに回転して進んでいるところがある。超音波距離センサーをうまく制御できていない気がする。電池の電圧が変動しているのかもしれないが、正直良くわかりません。
まあ、とりあえず自律動作の第一ステップはうまくいった様に思う。USセンサーを使う限りは、こんなところでしょう。

第二ステップは、カメラ・マイク・スピーカ等を加えて、何ができるか?というところでしょう。ということで、次の段階を検討する事にする。



2016年11月15日火曜日

第6回:GOPIGOでPYTHONのプログラムを動かす


さて、前回までにGOPIGOの組み立てとチェックを終わり、順調に各機能が動いている事まで確認した。大変うれしい限りである。
今回は、いよいよPythonのプログラムを動かしてみよう。

<Python プログラムをGOPIGOに転送する>
SSHでの接続は順調で、難なく動作チェックを終えたが、SSHで動かすのはfwdなどの1コマンドだけなので、連続動作はできない。そこで、簡単なプログラムをGOPIGOに入れて動かしてみたい。
コンピュータとしてキーボード、ディスプレイを接続すれば簡単にできることなのだが、今後の事を考えると、これも私のMACで入力したプログラムをリモートでGOPIGOに転送できたほうが余程効率が良い。いちいちキーボードやディスプレイ(私の場合はテレビを使っているので、テレビをいちいち占有するのは家族に気が引ける)をつながなくても良いのが何よりだ。
SSHは、残念ながらファイル転送機能は持っていない。FTP(File Transfer Protocol)機能が必要になる。Dexter Industriesのビデオでは、Windows SCPというアプリを使っているらしい。でもこれはWindows用であって、MACでは使えない。ネットで調べると、いろいろなアプリが世の中に有るようであるが、まあ、今のところ立派な有料アプリまたは怪しい無料アプリに手を出す必要は無く、ファイルが転送できれば良いだけである。
世の中には親切な方が居て、これもブログを参考にした。LINUXとMACにもともと備わる機能を使うだけなので、今はこれで十分。もっと高級な機能が欲しくなったらアプリを考えよう。
ブログを参照戴ければ、全くその通り行なえば良い。少々説明を加えると、
まず、SSHでGOPIGOに入り込んでから、ftpサーバー機能であるvsftpdをインストールしてCONFIGファイルで「書き込み許可」に書き換える。vsftpdをスタートさせておく。
という順序で淡々と行なえば良い。慣れた人には簡単なことだが、編集にviを使う必要があって、これに手こずった。viは、そう言えば大昔使ったことがある。リモート接続では原始的ではあるが有効な手段だ。と納得したが、viの操作は忘れている。

Vsftpdインストールのインストールは、
$ sudo apt-get update
$ sudo apt-get install vsftpd
の2行を打ち込むだけで、勝手にインストールしてくれた。便利なものだ。インストールされたサーバーをスタートしておけばFTP機能がGOPIGOで動き始める。
でも、これだけでは、ファイル転送は実は拒否されてしまう。インストールされたままでは、書き込み不可状態だからである。
そこで、vsftpd.conf を編集する作業が必要になる。ここで、viを使う羽目になる。

$ sudo service vsftpd stop
$ sudo cp /etc/vsftpd.conf /etc/vsftpd.conf-ORG
$ sudo vi /etc/vsftpd.conf
実際は、変更箇所は、
write_enable=YES #書き込み許可
だけだ。ポイントだけ書いておく。viを起動すると、ずらずらと文字列が表示される。この段階ではコマンド入力状態になっていることを覚えておく。キーボードのカーソルキーを下に押せば、次々と表示が出て来て、
#write_enable=YES #書き込み許可
という行が見つかるはずだ。この最初の#のところにカーソルが来ている事を確認してキーボードの x キーを押すと、# が削除されるはず。このまま編集を終了すればよく、
:wq
とキーボードを押下しエンターキーを押せば良い。
ちょっと面倒だが、これだけでFTP機能が使えることになる。一回きりなので、がんばりましょう。このブログの提供者には、感謝もうしあげます。

<簡単なPythonプログラムを動かす>
さて、準備は整ったので、FTP機能を実際に使ってみよう。
①プログラム例の作成
MACのユーザディレクトリにGOPIGOのプログラム例をMACのテキストエディタで作成しgopigoexample1.pyと名付けて置いた。以下の様に、単に2秒間前向きに進み、その後2秒間後ろ向きに進み、止まるだけの簡単なプログラムだ。

import gopigo
print(gopigo.__file__)
from gopigo import *
import time
fwd()
time.sleep(2)
bwd()
time.sleep(2)
stop()
②FTPサーバーをスタートさせる。
 SSHでGOPIGOに入り込み、
 $ sudo service vsftpd start
 $ exit
③MACからSSHではなく、FTP接続でGOPIGOに入り込む
 ftp pi@xxx.xxx.xxx.xxx (SSHと同じIPアドレス)
 するとパスワードを聞かれるので、これもSSHと同様のパスワードを入れる
 今回の場合は、MAC側はユーザディレクトリそのものに居て、GOPIGO側は、home/piに居る様だ。
④プログラムファイルを転送する
 ftp> put gopigoexample1.py
これだけで転送できた。
 ftp> quit
 FTPを終了する。 SSHの終了はexitで、FTPの終了はquitなのだ。
⑤プログラムを実行する
 再びSSHでGOPIGOに入り込み
$ python gopigoexample1.py
と入力するだけで、プログラム通りにモーターが動いて止まった。ちょっと2秒よりは長かった様には思うが、まあ良いだろう。

以上で、python プログラムの実行環境が整った。
次は、距離センサーを使った、プログラムによる自律走行に挑戦してまた報告する。

2016年11月14日月曜日

第5回:GOPIGO組み立て確認


#訂正します。(2016年11月22日)
GOPIGOとしての電源供給にMicro USBの+5Vが使えないと断定しておりましたが、Dexter industriesのホームページに、デバッグ時などGOPIGOの形でMicro USBを使う事が推奨されておりました。申し訳ありません。

<さて、いよいよGOPIGOの組み立て確認作業に入る>
1)電源投入
12V電源をどうするか、悩み中ではあるが、安い単三電池をAMAZONで購入してあるので、とりあえず電池で確認することにした。
GOPIGOのキットには、Raspberry PI用のAC電源アダプタ(5V)が用意されているが、GOPIGO2基板とRaspberry PI基板は電源共有状態のため、Micro USB端子から+5Vを供給することはできない。従い、GOPIGOとして組み立てた後は5VのACアダプターは使えない。Raspberry PIとして独立して使う人には好都合だが、GOPIGOの形のままいろいろ使うには、電池を充電型にするか、7-12VのACアダプタが必要に感じる。まあ、まずは電池で進めよう。

①電池を附属のボックスに8個挿入した。
②Raspberry PI基板を外した状態で、電源コネクターを入れ、電源スイッチをOnにしたところ、緑色のLEDがしっかりついた。
③Raspberry PI基板を装着して、電源を入れた。Raspberry PIのLEDが順調に点灯した。電源を入れたタイミングでサーボがちょっと動いた。見たところ順調そうだ。
④私のMACから、SSH接続をトライした。ssh pi@xxx.xxx.xxx.xxxコマンドで pi@dex:表示が出た。順調にGOPIGOのPIユーザにはいりこめた。

<要チェックポイント>
前回、ばたばたとGOPIGOを組み立ててみた。
ケーブル接続を良く確認してから電源を入れよう。
わかりにくい点を列挙しておく。以下の3点は、ホームページに英語だけではなく、写真入りで説明があったほうが親切だと思う。

1)超音波距離センサー
Attach the Ultrasonic sensor on the servo mount or on top of the GoPiGo and connect the Ultrasonic sensor using a Grove cable to Port A1.
とホームページに書いてあるので、超音波距離センサーのケーブルは、A1と書かれたコネクターに接続すれば良い事がわかる。


2)サーボ
These instructions are for the GoPiGo2.  The servo cable orientation is reversed from the GoPiGo1.  The servo cable connects on the bottom of the GoPiGo2.  The brown wire is ground, and this should be connected to the GoPiGo board so that it’s facing away from the small robot painted on the board.
GOPIGO1ボードとGOPIGO2ボードは、コネクタが逆についているらしい。(若い頃デジタル回路設計に従事していた私としては、自由奔放さにびっくり)
ケーブルの茶色の線がどうやらGRANDらしく、茶色のケーブルが白いロボットの絵の逆側になる向きに差し込めばよい。写真の様に黄色の線がSIGと書かれたところに来れば良いと思うが、電源を入れて動作確認しよう。

3)モーターケーブル
このケーブルは、ホームページに載っているGOPIGO2基板の写真が巧妙に間違っているので、ますます間違いやすいと感じる。GOPIGO2基板の裏側の写真が鏡で見た様に表現されているのだ。これでは基板をシャーシーに載せてしまってから、ホームページの写真を見ながら接続すると、逆に接続してしまう。(実際私は、一旦逆に接続していて、確認時に写真が変だ、と感じて間違いに気づいた)
この写真の様に接続すれば黒いケーブルがGND、白いケーブルが+に接続されていて、良いはずである。
(モーターの向き)
モータを駆動させてみて、初めてわかることではあるが、モータはビデオに示されている通り、ケーブルが互いに内向き(写真のとおり)にしておかないと、モータの回転方向が、プログラムとは異なる結果となるので、注意。(実際私の場合、間違えていた。写真の様に修正した。)

<動作チェック>
①モーター
SSHモードでPYTHONを起動して、
import gopigo
print(gopigo.__file__)
from gopigo import *
としておいて、
fwd()
にて、両輪が前進回転すること
bwd()
にて、両輪が後進回転すること
(実は、この段階で、両輪の動きが異なる事を発見して、モーターの向きを変えた)

②LED
led_on(LED_L)
にてGOPIGO2基板の左前方のLEDが点灯すること
led_on(LED_R)
にて同様に右前方のLEDが点灯すること

③サーボ
servo(30)で30度回転位置で停止
servo(180)で180度回転しようとして、ボディに衝突した。160度位が限界か。
servo(0)で、同様に右に回転してボディに衝突した。20度位が限界か。

④超音波距離センサー
print us_dist(15)
にて、距離計測結果を返して来た。cmで大体あっている。15というのは、センサーを接続したコネクタがA1であったので、port A1が15番であることによる。

以上、ひととおりの確認を終えたと思う。
これから、PYTHONのプログラムでいろいろとトライしようと思う。
MACのSSH接続だけでは、プログラムをリモートから書き換えることができなさそうなので、FTPとか、MACからうまい方法を見つけて、また進捗を報告したい。




2016年11月11日金曜日

第4回:GOPIGOの組み立て


前回、GOPIGOのリモート接続ができるところまで確認した。
そろそろ、GOPIGO本体を組み立てることにしよう。

<部品の確認>
GOPIGOの組み立ては、Youtubeにビデオがアップされていて、その通りやればできるだろうと確信して進めた。youtubeとは異なり、きれいな箱になっている。ビジネスがうまく回り始めたのだろうか。

 箱の中味の写真も添付する。特に欠品は無い様だ。

アクリル板の保護シールも、youtube映像とは異なり、はがしやすくなっている。また、アクリル板の上下を示すTOPという文字も刻印してある。かなり、改善されている模様だ。なかなかやるではないか。

<組み立て>
モーター部の取り付けをビデオ通りにトライした。
モーター支持部材は、ビデオとは異なり、緑色のプラスティックの様なものに代わっている。また、ビデオには無い、「ワッシャー」と「スペーサ」が登場している。ワッシャーは適当に使うこととした。スペーサは、穴の形状から明らかにモーターから出たシャフトに取り付けるものと思われた。車輪側は、ぴったりで、良い感じだったが、エンコーダ側がどうしたものやら、一つつけただけではガラガラだし、2つつけるとエンコーダがうまく付かない。まあ、どうせいくらでも修正可能なので、とりあえず両脇に一つずつつける事にした。それにして、エンコーダがぐらぐらしている。ビデオでは、紙を挟んでいるが、今回のエンコーダーは紙を挟まなくても良い様に穴がせばめてあり、何かを挟んで固定する雰囲気でもない。よくわからないので、とりあえずそのままとする。
実際、組み立ててみて、モーター取り付けの長ねじの方向をビデオから変えた。ドライバーが外から作業できる様に内向けに差し込んだ。ビデオでは、中から外向けにねじを差し込んでいるが、私の持つ、太いドライバーでは、ねじに届かないのだ。外からドライバーで作業する場合は、ナットのシャーシー側の扱いが多少難しくなるが、小型ラジオペンチでナットを保持する事で、比較的容易に組み立てられた。


後部キャスターの取り付けは、簡単であるが、ワッシャーは役に立つと思われる。しっかりと両面にワッシャーをつけた。
モーター基板も載せてねじ締めをするだけ。

 さて、Raspberry PI 基板を載せる段になって、Raspberry PIのコネクタが40pinで、GOPIGO2基板のコネクタが26pinであることに気づいた。1pin同士を合わせれば良いことは、なんとなくわかるが、心配なので、Raspberry PI3とGOPIGO2の回路図を比較してそれで正しいことを確認した。もっとも、1pin 同士の接続以外は普通しないような設定になっている。 しかし、接続コネクターだけで支持されているRaspberry PI基板はなんとも頼りない。何故、ここだけ手を抜いているのか?疑問は残る。基板自体は軽いので、コネクタだけでも、まず問題は無いとは思うが、、。
最後はサーボメカニズムをつけて、us距離センサーを載せればできあがり。
サーボメカニズムの付け方もビデオがある。少しねじが小さすぎて、扱いに困る。
また、GOPIGOで不親切なところは、ケーブルの接続がわかりにくいことである。
組み立ててみたが、正しいかどうか疑念が残る。電源を入れる前に、再チェックしよう。実際には、何が正しいのかわかりにくいので、チェックにも時間がかかりそうだ。
また、よくよく見ると、電源は単三電池が8つで12V仕様の様だ。Raspberry PI自体は、GOPIGO2基板と電源共有結合しており、Raspberry PIの電源は、GOPIGO2基板から供給される形になっている。ということは、この形でRaspberry PIをいじろうとしたら、電池駆動になってしまうということだ。うーん、これでは電池がいくつあっても足りないぞ。
充電池(エネループ?)でも買うか、、、。
次回は、動作確認だ。慎重にやらねば、、。






2016年11月8日火曜日

第3回:GOPIGOの頭脳であるRaspberry PIを使えるように

GoogleのAI関係のクラウドAPIの発表の時に、GOPIGOがデモツールとして使われ、大いに興味を持った事で、GOPIGOを作ってみる事にした経緯は既に述べた。
もうGOPIGOのキットは家に届いてしまっている。ロボットカーを組み立てるのは容易だが、GOPIGOにはRaspberry PIというCPUボードが載っており、LINUXで動くところが含まれていて、ラズパイ初心者の私がこの点を乗り越えられるかが大いに心配である。もちろん、フレキシビリティの高さや人工知能を含めた高い可能性もLINUX CPUにかかっているので、とても大切な要素だ。
そこで、まずはラズパイの辺りを攻略することにした。

ラズパイ自体をコンピュータとして扱うのは面倒なので、そのうちSSH接続といって、私のMACからリモートターミナルを使ってコントロールしたほうが便利だと思っているが、まずはラズパイ自体の表示を確認するところから始めたい。

Raspberry PIをコンピュータとして扱うため、GOPIGO到着までに以下の用意をした。
①キットに入っているMicro SDカード容量が小さい(4GB)ので16GBのMicro SDカードを購入した。(Amazonにて;Transcend microSDHCカード 16GB Class10 (無期限保証) TS16GUSDHC10E (FFP) :680円)
②HDMIケーブル(Amazonにて、598円):表示器はテレビを使う事に、、、。
③USBキーボード (AmazonにてSANWA SUPPLY USBキーボード SKB-L1U:490円):安さにびっくり。
④USBマウス (Amazonにて:Logicool ロジクール 有線光学式3ボタン マウス M100r ブラック:481円)

とりあえず、キットに入っているMicro SDカード(4GB)を挿入して、キーボード・マウス、及びHDMIケーブルでテレビをつなげて電源を入れると、いとも簡単にパソコンの様な画面が出てきた。何だ、簡単ではないか、、。
Raspberry PI 3 に備わっているWIFI機能で、家の無線LANにも簡単に接続でき、インターネット画面も見る事ができる。キットに入っているWIFIドングルは使う事が有るのだろうか? おやおやネットを見ようとしても日本語がうまく表示できていないね。

<日本語化>
GOPIGOのRaspberry PIの日本語表示は最初の段階では不要と思うが、とりあえずトライしてみた。これもブログに助けてもらった。
sudo apt-get update
sudo apt-get install fonts-ipaexfont
の2行を打ち込むだけで、少々時間がかかったが、どうやらフォントは読み込めた様だ。
ところが、Dexter社のMicro SDカードを使う分には、設定を変えようとするとWarningが出てくる。設定を変えたら知らないぞ、とのことなので、Dexter 社のカードはいじらないようにしよう。残念では有るが、ロボットが画面を持つことは無いので、今回は日本語化は止めておこう。

Dexter Industries社のカードではなく、別途アマゾンで購入したMicro SDカードを試してみる事にした。別のブログを参照した。Micro SDカードをフォーマットして、Raspberry PIのホームページからNOOBSをダウンロードし、解凍してMicro SDカードにコピーした。このMicro SDカードをRaspberry PI基板にさして、電源を入れたところ多少時間はかかったが正常にRasbianというOSがインストールされた様だ。画面がかなり違うのでびっくり。
Raspberry PI上でのインストールの際に、言語を日本語に指定できたので、指定してインストールしたところ、何をせずともWEBアクセスをしても日本語がうまく表示できた。簡単なものだ。日本語が使いたければ、Dexter Indutries社のカードではなく、このカードにDexter Industries社のソフトウエアをインストールした方が良さそうに思うが、まずは、GOPIGOがちゃんと動くまではこのままDexter Indutries社のMicro SDカードを使う事にしよう。

<SSH接続>
Raspberry PIをコンピュータとして使うなら、大きなキーボードやマウスがついていても構わないが、目的はロボット化であるから、なるべくパソコンからリモートでコントロールしたいものだ。その為に、SSH(Secure SHell)という機能が準備されていて、Raspberry PIには、SSHサーバーが搭載されている。
Dexter Industries社のMicro SDカードを使って、これもブログを参照しながら、SSH接続を試みた。
①Raspberry PIの画面上で、ターミナル画面を開き、現状無線LANでつながっているIPアドレスを取得する。(hostname -I コマンド)
②PC(私の場合はMAC)側で、やはりターミナル画面を開き、ssh コマンドを発行して、リモート接続する。
の2ステップで簡単なはずであったが、リモートログインでトラブルが発生した。初期設定上 ID:pi、Password:raspberryのはずであるが、パスワードを入れても、拒否される状況になった。何が起きたのか、よくわからないが、最後の手段として、Raspberry PI側に戻り、Passwordを書き換える方法をとった。sudo passwd pi コマンドでPIユーザのパスワードを書き換えてしまったところ、SSH接続ができた。

このSSH接続ができれば、GOPIGOの制御やプログラム書き換えなど進められるので、一つの山を越えたと感じた。参照させて戴いたブログをご提供戴いた方々には感謝申し上げたい。









2016年11月6日日曜日

第2回:GOPIGOが届いた!

 GoogleのクラウドAPIの発表の時に、デモに使われたGOPIGOというRaspberry PIを載せたおもちゃの車ロボットに魅せられ、アメリカのDexter Industries本社に発注してしまったが、発注に至る経緯は前回書いた。そのGOPIGOがなんと郵便局から届いたのだ。
最近の輸送トラッキングシステムは非常にしっかりしていて、全て追跡可能になっている。本当に驚きだ。10月25日にDexter Industries社のホームページで発注したのが、10月27日にDexter Industries社からUSPSに出荷され、10月30日にニューヨークを経由して10月31日に東京に到着し、11月3日に我が家に配達されたが、不在だった様子がすべてわかる。

但し、小さいが輸入にあたり、関税¥1000と通関料¥200、合計¥1200を請求された。米国内では、shipping freeのキャンペーン中でもあり、$199.00で手に入るものが、日本から購入すると、それに加え$64.71の輸送費+関税等¥1200を支払う必要がある。やはり、日本で安く気軽に購入できる様にならないとなかなか受け入れがたいだろうなという感じが残る。Dexter Industriesには広域代理店(Robotshop:日本を含む米国、カナダ等)があり、日本語の購入サイトが開いているが、購入者が少ないせいか品揃えも十分ではない。今回も知っていて検討はしたが、ベーシックキットしか出ておらず、使う気にはなれなかったのが本当のところ。
梱包を開けてみると、

緩衝材は無く、バラバラに部品が箱に入っている。よくまあ無事にアメリカから日本まで届いたものだ。個々の部品は、ある意味しっかりと袋や箱に入っていたりしているので、これで輸送会社の品質の高さを考慮すると、十分なのかもしれない。内容的には、オーダーした部品が全てしっかり入っていた。(というよりも、Dexter社のキットそのものではある)

いよいよ、組み立てに入ろう!

GOPIGOで難しいところは、GOPIGOカーの組み立て自体ではなくRaspberry PIというLINUXのCPUボードをうまく使いこなせるか?という点である。私は、Raspberry PIを初めて扱うので、次回からその辺りを含め報告することにする。



2016年10月30日日曜日

第1回:GOPIGOを発注する



GOPIGOというのは、自動車型のおもちゃロボットで、米国のDexter Induxtriesという会社が提供している。日本ではあまりなじみが無いかもしれない。
Googleが、AI機能APIをクラウド提供し始めたときに、デモとして使われたらしい。ブログを見てとても興味をもった。
日本では、小学校での2020年度からのプログラミング教育の必修化が検討される事になり、今後このような具体的なツールが注目されると推測される。こういうロボット自体は国内で調達した方がコストは安いと思うが、米国では既に教育に使われており、ノウハウが先行しているところは学ぶべきだろう。教育はハードコストも重要だが、教育効果のほうがはるかに重要だと思う。
また、GOPIGOは、他社の商品より若干高めであるが、その分Raspberry PI(ラズパイ)と呼ばれるクレジットカードサイズの超小型PCを搭載しており、自律行動ができる点が優れている。クラウド上のAI機能と連携させることも先述のブログの様に可能であり、「できること」が大きく広がっている。
そういった意味で、先行したノウハウを見てみたいと思い、まずはGOPIGOを入手することにした。

日本で購入できれば、楽で良いのだが、残念ながらちゃんと購入しようとすると、現在のところは米国のDexter Industriesから直接購入するのが一番確実な様だ。日本から発注するにあたり、ホームページから確認してみたが、ちゃんと反応がすぐに有り、適切な操作指示が来た。ただ、応答してくれた人の肩書きがCOOであったので、これはかなり小さな会社であるなと実感した。ホームページから会社の住所を見ても、全くの住宅街の一角にあり、まさにガレージで起業したタイプの会社であろう。
多少、不安を感じながらも以下の発注を行なった。私はラズパイも持っていないので、スターターキットを買う事にした。オーダーすると、メールですぐに反応があり、また出荷した時点でもメールがあり、一安心といったところ。



Product                            Quantity Price
GoPiGo Robot Starter Kit          1 $199.99
Subtotal:                                         $199.99
Shipping:                                           $64.71 via USPS Priority Mail International (Estimated delivery between November 2, 2016 and November 8, 2016)
Tax: $0.00
Payment Method: Credit card (Stripe)
Total:                                                  $264.70

1 x WIFI Dongle for Raspberry Pi (855947002552)
1 x Raspberry Pi Power Supply (855947002576)
1 x GoPiGo2 Base Kit (855947002583)
1 x Servo Package for GoPiGo (855947002590)
1 x Ultrasonic Sensor (855947002606)
1 x Raspberry Pi Ethernet Cable (855947002644)
1 x 4GB Micro SD Card with Custom Dex Software (855947002637)
1 x Raspberry Pi3 Model B (682710991498)

Raspberry PI 3は、WIFI機能も内包しているが、このキットはRaspberry PI 2の時代の構成の様で、WIFIドングルが含まれている。また、送料が意外に高いのは閉口する。日本のアマゾンあたりで安く買える状況にならないと普及は難しかろう。教育用ツールとしては、レゴのマインドストームが有名な様だが、このGOPIGOのような単純で安価なキットは現実的でより普及しやすいと思うので、言語的な壁を含め日本化を提案したいところだ。

実際に荷物が着くのは11月の上旬らしいので、大いに期待しながら待つ事にしよう。
到着して組み立てる時の様子はまた報告したい。