5.4.14.URL・地図画像・ストリートビュー画像を取得する機能の追加

GoogleのAPIを利用し、指定した場所や住所のGoogleMap(地図)の画像とURLを取得する機能を作成します。

1)GoogleのAPIを有効にしてキーを作成する。

下記の3件のAPIを有効にします。(マップのカテゴリーをすべて表示して探してください。)

・Geocoding API

・Maps Static API

・Street View  Static API

APIの有効化の方法は、「5.2.4.3.Googleのライブラリ(Cloud Speech)の利用準備」を参考にしてください。

認証情報から「APIキー」を作成してください。ここで作成/利用するキーは、参考としている「5.2.4.3.Googleのライブラリ(Cloud Speech)の利用準備」で作成したサービスアカウントキーとは種類が異なるので注意してください。

APIとサービスの認証情報から認証情報を作成、APIキーをクリックで作成できます。

作成したAPIキーは、APIキーの項目の下記の赤枠の部分に表示されます。

 

2)プログラムを作成する

[get_map.py]

①地図の基本的な情報(緯度/経度等の情報)を取得するプログラム

今回作成した「GoogleのAPIキー」と「住所または建物/場所の名称」から地図の基本的な情報を取得する関数を作成します。

②地図のURLを取得するプログラム

「①で作成したget_mapinfo」を利用して基本的な情報を取得。その情報から取得できる「緯度/経度」及び「place_id(場所に割り当てられた番号)」をもとに、対象の地図のURLを取得する関数を作成します。

③地図画像を取得するプログラム

「①で作成したget_mapinfo」を利用して基本的な情報を取得。その情報から取得できる「緯度/経度」をもとに地図画像を取得する関数を作成します。

④地図の場所のストリートビュー画像を取得するプログラム

「①で作成したget_mapinfo」を利用して基本的な情報を取得。その情報から取得できる「緯度/経度」をもとに、対象の地図のストリートビュー画像を取得する関数を作成します。

⑤テストする。

URL/地図画像/ストリートビューの画像取得の機能をテストするためのプログラムです。googleのAPIキー、アドレスが不正な場合にエラーとならないように、エラー処理を入れてあります。
 

getmap.pyを実行し、URLが表示され、地図画像とストリートビュー画像ファイルが作成されていたらOKです。  

5.4.13.サーボモーターとスピーカーの競合の解消

サーボモーターはpwmという信号を利用して動いています。
現在は、モノラルのスピーカーをD級アンプを利用して直接Raspberry pi に接続し、このpwmという信号を利用しています。しかし、サーボモーターとスピーカーを同時に利用すると競合が発生し動作不具合が発生するようです。このため、今回はサーボモーターの競合を解消するために、別回路(部品)を利用して動かします。また、このことにより、Raspberry piのpwm信号のピン数が限定的であったことから、サーボモータの接続にも限界がありましたが、この数の制限の解消も目的としています。

今回は、PCA9685というサーボモータードライバを利用します。

 

1)Raspberry Pi、PCA9685の配線

ジャンパー線を下図の通りに接続します。

[Raspberry Pi側]

[PCA9685側]

電池(単三電池4本が入った電池ケース)を画像のように接続します。

GND側➡マイナス(黒)  V+側➡プラス(赤)

 

2)ライブラリのインストール

sudo pip3 install adafruit-pca9685

 

3)プログラムの作成と修正

新しく「servo_new.py」を作成し、「BrainAction.py」を修正します。

[servo_new.py]

 

[BrainAction.py]

NagoRobo_Main.pyを実行し、サーボモーターの稼働とスピーカーの正常稼働確認ができれば完成です。

 

5.4.10.音声認識機能の差し替え(docomoからGoogleへ)

現在、声を文字変換する音声認識機能は、docomoの音声認識APIを利用しています。これをGoogleの音声認識APIの利用にプログラムを修正します。

1)VoiceToText_Google.pyを修正します。

声を文字化できなかった場合にエラーが起こらない様に処理を分岐するように「VoiceToText_Google.py」を修正します。

[VoiceToText_Google.py]

 

2)BrainAction.pyを修正する。

[BrainAction.py]

 

3)NagoRobo_Main.pyを修正します。

[NagoRobo_Main.py]

NagoRobo_Main.pyのプログラムを実行し、文字化したデータとその確度が表示されたらOKです。

 

前の投稿/次の投稿/メニューページへ戻る

5.4.11.NagoRobo_Main.pyを自動起動する

Raspberry piを起動した際にロボットのプログラム自動的に起動することができると便利なので、その設定を行います。

手順としては

1)ロボットのプログラム(NagoRobo_Main.py)がどのフォルダからでも起動できるように、プログラム内部でフォルダを参照してデータを取得している部分を、動的にファイルの場所を取得できるように修正します。

2)自動起動の設定を行う。設定内容としては、ターミナルを起動しNagoRobo_Main.pyをパス付で実行する。

では、順番に対応します。

1)プログラム内部のフォルダ内にあるファイルのパスを動的に取得するように変更。

変更対象のファイルは下記の4つです。

keylist.json

phraselist.json

yahoo_arealist.txt

RobotNago-〇〇〇〇.json(googlekeyファイル)

[NagoRobo_Main.py]を修正します。

# ★と記載されている部分を追加/修正します。

[NagoRobo_Main.py]

keylist.jsonとRobotNago-〇○○○.jsonをパスを指定して参照するように修正します。

[GetWeather.py]

yahoo_arealist.txtをパスを指定して参照するように修正します。

[news_rp_speak.py]

phraselist.jsonをパスを指定して参照するように修正します。

2)自動起動用の設定を行います。

①cd ~/.config/lxsession/LXDE-piで、フォルダーを移動します。

④「sudo nano autostart」でファイルを開きます。

⑤「autostart」ファイルの中に下記を追記して保存します。

@lxterminal -e sudo python3 /home/pi/Python3/NagoRobo_Main.py

再起動し、自動でターミナルが起動され、NagoRobo_Main.pyが実行できていたらOKです。

前の投稿/次の投稿/メニューページへ戻る

 

5.4.9.Google Cloud Text-To-Speechを試してみる

テキストを読み上げる機能は、5.2.6.1.から5.2.6.3.までに作成していますが、ここでは新しくリリースされているGoogleのAPIを利用してテキストの読み上げを行えるようにします。

1)ライブラリをインストールします。

sudo pip3 install –upgrade google-cloud-texttospeech

2)プログラムを作成します。

[TextToSpeech_Google.py]

プログラムを実行し、「こんにちは」と女性の声で聞こえたらOKです。

※再生されない場合は、カード番号を変更して試してみてください。

前の投稿/次の投稿/メニューページへ戻る

5.3.2.2.motor_drv.pyをBrainAction.pyへ組み込む

Raspberry piからモーターを制御できるようになりましたので、このプログラムをBrainAction.pyに組み込みます。

 

1)Dialogflowの修正

①Entities/action_selfの追加

動きを制御するEntityとして前後/左右のEntityを登録します。

このEntityはIntentに登録した際に利用し、動きを制御するキーワードとしてプログラムで利用することから、取り扱いしやすいように英語表記で登録します。synonymsは日本語を含めて通常通り登録しておきます。

②Intents/Action_selfへのフレーズの追加

~Training phrasesを追加します。

足の動きの指示は赤枠の部分となります。「下げてください」、「上げてください」、「振ってください」は手の動きとなります。手を作るの章でプログラムを作成しますが、先に登録していても問題ありません。

~Response登録します。

正常にフレーズが認識された場合には、「了解しました。」と返すようにします。

 

2)BrainAction.pyの修正

Dialogflowの修正に伴い、プログラムの修正を行います。

①モーター制御のプログラムを利用できるように、motor_drv.pyのインポート処理を追加します。

➁BrainAction.pyの下記の部分を修正します。(仮置きしていたプログラムを今回のDialogflowの登録に合わせて修正しています。)

修正前

修正後

NagoRobo_Main.pyを動かし、「前進」「右」「左」などのDialogflowに登録しているフレーズを言って、「了解しました。」とロボットが発声し、モーターが動いていることが確認できればOKです。

前の投稿/次の投稿/メニューページへ戻る

5.3.2.1.DCモーターを動かす

足としてタイヤを動かすためにDCモーターを使います。

Raspberry Piから、DCモータを制御するために、モータドライバを経由してDCモータに接続。制御プログラムを実行することでモーターを動かせるようにします。各部品はブレッドボードとジャンパー線を利用して接続します。

1)Raspberry Pi、ブレッドボードにジャンパー線を接続します。

【Raspberry Pi側】

ジャンパー線を下図の通りに接続します。

【ブレッドボード側】

ジャンパー線を下図の通りに接続します。P4、P15などのPがついている番号はRaspberry Piのピンの番号(GPIOの番号ではありません)です。

※電池、DCモータ、抵抗をを下記のように表しています。

ブレッドボード上の配線が左右対になるようにモータードライブの差し込みは同じ向きにします。

Raspberry Pi側とブレッドボード側のジャンパー線それぞれに、Raspberry Piのピンの番号や、モーターの左右、電池の+/-をタグ付けしておくと接続が簡単です。

Raspberry Pi側の線とブレッドボード側の線の色は合わせてください。Raspberry Pi側のジャンパー線とブレッドボード側のジャンパー線を接続の際にわかりやすくなります。

ジャンパー線を全て接続するとこのようになります。ちょっと複雑に見えますが、それぞれの配線にタグ貼ることで再接続する時にスムーズに接続できるようにしています。

2)プログラムを作成します

モーターを動かすために必要なライブラリをインストールしてください。

sudo pip3 install wiringpi

[motor_drv.py]

プログラムを実行し、2つのモーターが回ればOKです。

前の投稿/次の投稿/メニューページへ戻る

5.4.6.ランダムに話しかけてくるプログラムの作成と組み込み

現在のプログラムは、こちらから話しかけないと何もアクションしない仕組みとなっています。よって、話しかけられない限り何もアクションしないのはつまらないので、一定時間、話しかけない場合に、ロボットが話しかけてくるプログラムを作成します。

 

1)発声するフレーズのリストを取得

ロボットに発声させるフレーズのリストを作成します。json形式で作成します。

[phraselist.json]

2)ランダムに話しかけてくるプログラムの作成

ランダムにリストのフレーズもしくはニュースを発話するプログラムを作成します。

[news_rp _speak.py]

3)NagoRobo_Main.pyを修正する

NagoRobo_Main.pyのプログラムを修正し、2)で作成したプログラムを組み込みます。発話するタイミングは、最後にロボットが発話してからの経過時間を計測。同時に最後に発話したタイミングで、ロボットが自動的に発話するランダムな経過時間を都度設定。経過時間と設定された経過時間に応じて2)で作成したプログラムを起動するように組み込みします。

下記の赤枠の部分をプログラムに追記します。修正を行う前にバックアップをデスクトップに保存しておいて下さい。

[NagoRobo_Main.py]

NagoRobo_Main.pyを実行すると、実行した直後、ロボットの発声直後に数字が出力されます。(下記の画像では60が出力されています。)出力された数字(秒)が経過し、フレーズが発声されたらOKです。

前の投稿/次の投稿/メニューページへ戻る

 

5.2.2.4.Sambaを導入する

sambaとは、RaspberryPiとWindowsの間でネットワーク機能を実現するソフトウェアです。Sambaを導入すると、RaspberryPiとWindows間のファイル等の共有が簡単に行うことができます。

①Sambaをインストールします

sudo apt-get install samba

容量確認があるので[Y]を入力して実行します。

※仮想環境には入らずそのまま実行します。

②Raspberry piとWindowsの間で共有するフォルダを用意します

RaspberryPiのhome/piに「nagorobo」というフォルダを作成します。

自分以外のユーザーも使えるようにしたいので、フォルダのアクセス権を設定します。作成した「nagorobo」のフォルダを右クリックして、ファイルのプロパティを選択します。「パーミッション」タブをクリックし、画像の赤枠の「内容の閲覧」「内容の変更」「内容へのアクセス」の項目を3つとも「すべて」に変更します。

③smb.confという設定ファイルを編集します

編集前に下記のコマンドで、念のためにバックアップを取っておきましょう。

sudo cp -p /etc/samba/smb.conf /etc/samba/smb.conf.org

左に表示されているetcのフォルダの中のsambaのフォルダの中に、smb.conf.orgというバックアップファイルが出来たことを確認します。

次に、下記のコマンドでsmb.confを編集します。

sudo nano /etc/samba/smb.conf

ターミナル上に上記の様なsmb.confの設定ファイルが開くので、カーソルを一番下まで移動し、下記の赤枠部分を追記します。

作成したフォルダを共有する情報となります。

Ctrl+O、Enterで上書き保存してください。

終了は、Ctrl+Xで終了します。

④Sambaの起動し、共有フォルダの共有アクセスの確認

下記のコマンドをターミナルに入力すると、Sambaが起動します。

sudo /etc/init.d/samba restart

次に、同じネットワーク上にあるWindowsのPCから共有確認をしてみます。

エクスプローラーを開き、ネットワークを選択します。

ネットワークの中に「RASPBERRYPI」が表示されていることを確認します。(表示されていない場合には「¥¥raspberrypi」と入力して直接アクセスしてみてください。)

nagoroboのフォルダにファイルを保存すると、smba.confを編集した際に設定したallを通してWindowsとファイルの共有ができます。

⑤Sambaのシャットダウン方法

Sambaのシャットダウンは、下記のコマンドで行うことが出来ます。

sudo /etc/init.d/samba stop

これでSambaの設定は以上です。

前の投稿/次の投稿/メニューページへ戻る

5.4.5.3.RaspberryPiから中継サーバーを利用し翻訳できるようにする

今回、作成した中継サーバーをデプロイし、第三者がインターネットから中継サーバー利用できるようにするためにHerokuというサービスを利用します。

Herokuとは、Paas(Platform as a Service)と呼ばれるサービスで、アプリケーションを実行するためのプラットフォーム(動かすための土台となる環境)です。まずは、Herokuにデプロイする為の準備を行います。

 

【デプロイ用のHeroku関連の環境準備】

1)Herokuを利用できるようにするために、Herokuへアカウントの作成します。(Heroku側作業)

①下記のURLへアクセスし、無料で新規登録ボタンをクリックします。

https://www.heroku.com/

②情報を入力し、無料アカウント作成ボタンをクリックします。

③登録したアドレス宛にConfirm your account on Herokuという登録のメールが届くので、リンクをクリックし、パスワードを設定します。

 

2)次に、Herokuへ作成/開発したアプリケーションをデプロイするためのクライアントの環境を整えます。(クライアントPC側作業)

ツール関連のインストールをおこないます。

Heroku Toolbeltのダウンロード/インストール

①下記のURLへアクセスします。

https://toolbelt.heroku.com/

②PC環境に合ったものをダウンロードします。

③ダウンロードしたHeroku Toolbeltをインストールします。

 

Gitのインストール

①下記のURLからGitをダウンロードし、インストールします。

https://git-for-windows.github.io/

ここまでで、デプロイするためのHeroku側作業及び作業用のクライアントPC側の環境が整いました。

 

【作成/開発した中継サーバーのデプロイ作業を行います。】

Herokuにアプリケーションの作成(Heroku側作業)

①Heroku(https://www.heroku.com/)にアクセスし、「Create New App」をクリックします。画面が切り替わったら、「App name」にアルファベットで好きな名前を入力してください。(大文字は使用できません。)入力した名前の下に緑色の文字で「available」と表示されていたら使用できる文字列なので、「create app」をクリックします。

 

次に、クライアントPCから中継サーバーのアプリケーションを、Heroku側に作成したアプリケーションに対してデプロイします。(クライアント側作業)

クライアントPC上の中継サーバーのアプリケーションファイル群を以下の手順でデプロイします。

①デスクトップ上にHerokuで作成したアプリケーション名と同じ名前のフォルダを作成します。

②Google_APIに入っている中継サーバーのアプリケーションファイル群をすべて①で作成したフォルダに移動します。

➂コマンドプロンプトを起動し、以下の手順に沿って最後までコマンドを実行すると、デプロイが完了します。

heroku login

cd アプリケーション名

git init

heroku git:remote -a アプリケーション名

git add .

git commit -am “コメント”

git push heroku master

まで終了したらデプロイの完了です。

※Herokuのアプリケーションを作成したサイトに下記のような手順が記載されています。参考にしてください。

 

【デプロイした中継サーバーの稼働確認】

デプロイが正常に出来ているかを稼働確認を行います。

①デプロイされた中継サーバーのURLを確認/取得します。

Herokuに作成したフォルダ内のsettingsタブに移動し、「Domains and certificates」のDomainに表示されています。

②5.4.7.で作成した「Translate_GoogleviaN.py」を中継サーバーにアクセスするMyurlのURL部分を①取得したURLに変更します。

※中継サーバー(翻訳機能)の取得したURL+「/translate」となります。ローカル環境で確認設定した際と同様の手続きです。

③Raspberry Pi Zero上で、修正したTranslate_GoogleviaN.pyを実行します。

Helloと返ってきたら中継サーバーのデプロイの成功です。Translate_GoogleviaN.pyは関数としての利用も可能です。

 

前の投稿/次の投稿/メニューページへ戻る