ソニーMESH + ラズパイ + Google + Apple Watch
ソニーのMESHは、iPadなどのアプリで、指でつなぐだけプログラムする事なく、色々なIoTガジェット、ロボットなどが作れる簡単なセンサー、タグ群です。
そんなMESHを使ってロボットを作ってみたいと思います!(こちらはMaker Faire Tokyo 2018のMESH作ってみた友の会で展示したものです)
まずMESHに、みんな大好きラズベリーパイ版のアプリMESH Hubがあるの知ってました?
これがあれば、簡単なインターフェースで動きが変えられるのはそのままに、iPadやiPhoneなどを近くに置いておかなくても(ラズパイがあれば)MESHが動くようになります。
もちろんラズパイ上で動くので、みなさんが普段使われているウェブサーバや、先進的なGoogle、AmazonのAPIと共に、MESHが動く事になります。
ラズパイ版MESHにGoogle APIを入れて、更にAppleWatchから操作できるロボットを作って行きます!
MESH SDKとラズパイのPythonを駆使して、見て(Google Vision)、聞いて(Google AIY、Assistant)、しゃべる(Google Translate、AquesTalk)、そしてIFTTTと組み合わせてAppleWatchから動かす(つまりMESH無しでも!ボソ)ロボットになります!
少し長いですが、内容はこんな感じ。既にラズパイや、Google APIに詳しい方は適当に読み飛ばして、見てみて下さいね。とりあえずGithubのプログラムもあります。
MESHロボットの作り方ステップ
- ラズパイ準備、MESH Hubのインストール
- MESH SDKとBottleによるMESHカスタム・ファンクションの追加
- ラズパイでのGoogle AIY、Assistant、Translate、Visionなどの導入
- MESHアプリからラズパイ機能を呼び出す
- ロボットの外形作り、モーターとの連動
- 全部組み合わせて、AppleWatchで操作
必要な部品など
- RaspberryPi 3B
- PiCamera
- 小型USBマイク
- 小型スピーカー
- アンプキット
- 小型USBバッテリー
- モータードライバー
- タミヤ工作キット(モーター付き)
- 電池、ホルダー
- LEDボタン
- AppleWatch(あれば)
- MESH(ムーブタグ、ボタンタグなど)
それではステップ・バイ・ステップで見ていきましょう。
1. ラズパイ準備、MESH Hubのインストール
今回はラズパイ3を使いました。ロボット組み込みの為、小さいZeroを使ってやってみたのですが、カメラ、モーター、Google APIなど盛りだくさんなので、なかなかパフォーマンスが出ませんでした。
実はこのラズパイのセットアップ、MESH Hubのインストールはこちらのサイトで詳細に説明しています。
- ラズパイのセットアップ(Google AIY付き)
-
MESH Hubアプリのインストール
基本的なセットアップはこれらを見て、済ませておいて下さい。
2. MESH SDKとBottleによるMESHカスタム・ファンクションの追加
次にラズパイの中で動くプログラムと、MESH Hubを連動させる仕組みを作ります。
それにはMESH SDKのカスタム・ファンクションを作ります。
MESH SDKへのリンク
MESH SDKでのファンクションの作り方
MESH SDK(Web)作業:
ここでラズパイのローカルプログラムをキックする簡単なカスタムファンクションを作ります。こちらにJSON形式のプログラムもあるので、それをインポートすると簡単に作れます。
MESH SDK localファンクション JSON
MESHファンクションが出来たので、この図のように指定したパスの機能を呼び出せるように、ラズパイにBottleというPythonベースのウェブサーバーを立ち上げます。/camera/faceなどのラズパイ内で動くプログラムは次の#4で書いていきます。
Bottleのインストール
ラズパイ側作業:
こちらのコマンドで、Bottleを入れます。
またmeshなどのプログラムフォルダーを作っておきます。
$ pip3 install bottle
$ sudo mkdir mesh
$ cd mesh
そしてここに、サーバー機能となるPythonプログラムを作ります。ここでは小林さんのQiita記事を大変参考にさせてもらいました。こちらはサンプルプログラムserver.pyの一部です。
from bottle import route, run, template
@route('/stopwatch/<command>')
def stopwatch(command):
if command == 'start':
# /stopwatch/startに対応する処理
elif command == 'lap':
# /stopwatch/lapに対応する処理
elif command == 'stop':
# /stopwatch/stopに対応する処理
run(host='localhost', port=8080)
ラズパイ内のプログラムをキックできるサーバーを作ったところで、MESHアプリのレシピから動くか確かめてみます。
MESHアプリ作業:
まずMESHアプリから、“Add a new hub”を選び、ラズパイ側のMESH Hubを設定します。
アプリからMESH Hubにつなぐ事ができたら、これまで通りタグをペアリングさせたり、一通りの動作をする事ができます。
次にIFTTTの設定を行います。MESHアプリ上で自分のIFTTTアカウントつなげるようにしておきます。
その後、先ほどのLocalファンクションをカスタムタグから呼び出します。
これで後は、server.pyをラズパイ側で流しておいて、IFTTT経由(Button Widgetなどで)でラズパイの機能を実行する事ができるようになります。
3. ラズパイでのGoogle AIY、Assistant、Translate、Visionなどの導入
せっかくラズパイを使っているので、カメラをつなげて画像認識したり、OK Googleなどのおしゃべり機能を付けたいですよね!?
Google AIY/Assistantのセットアップ
Googleから会話機能のAssistantのSDKが出ていますが、より簡単なGoogle AIYという工作キットのラズパイ・イメージが配布されています。
もう既に#1で導入しているとは思いますが、こちらでGoogle AIY込みのラズパイになっているはずです。
この時点でhotwordコマンドなどでOK Googleができるようになります。(↑記事にしたがってマイクやスピーカーなどの設定をして下さい。project_idやmodel_idは各自のものを使用してくださいね。)
$ ./bin/AIY-projects-shell.sh
$ googlesamples-assistant-hotword –project_id aiy-prj –device_model_id aiy-prj-device1
また日本語発話機能のAquesTalkをダウンロードしておきます。
$ wget https://www.a-quest.com/archive/package/aquestalkpi-20130827.tgz
$ tar xzvf aquestalkpi-*.tgz
Google Visionのセットアップ
カメラを付けた画像解析のために、Google Visionを導入します。これにより顔解析や文字検出が出来るようになります。
$ sudo nano ~/.bashrc
(.bashrcの中程に) GOOGLE_APPLICATION_CREDENTIALS="/home/pi/visionxxx.json
$ echo $GOOGLE_APPLICATION_CREDENTIALS
画像解析結果は英語(文字検出以外)で返ってくるのでそれを日本語にするGoogle Translateも入れておきます。
$ pip install --upgrade oauth2client
$ pip install --upgrade google-cloud-translate
ここではMESH Githubの中のvisiontalk.pyというプログラムで、笑顔検出や文字読み取りを行っています。
4. MESHアプリからラズパイ機能を呼び出す
ではやっとMESH SDKとラズパイのPythonプログラムがそろったので、それをMESHアプリでつなげていきます。
先ほどから何度も出ているように、MESHアプリ上では、SDKで作ったLocalファンクションに/camera/faceのようにコマンドを指定するだけで、既に作ったプログラムをアプリ上から簡単に呼び出せるようにしています。
実際のGoogle APIなどを実行するプログラムはmesh_func.pyになります。
MESH Github
これらを使ってMESHアプリで、ロボットの動きを設定していきます。
5. ロボットの外形作り、モーターとの連動
ここまで来てやっと、ロボットとして二足歩行するようにする部分になりました。
ボディにはタミヤの工作フレームとモーターを使いました。
頭部分に、パイカメラとスピーカー、マイクは下から出しています。
モーターにモータードライバーをセットします。
モーターには単三電池で電源供給しています。
かなりグロテスクですが、このようになりました。
モーターを動かすプログラムは、MESH Githubのmotor.pyになっています。
6. 全部組み合わせて、AppleWatchで操作
最後に中身の上にペーパークラフトなどで外見を付け(この時は、Maker FaireのマスコットMakeyくんにしています)、ロボットっぽくします。
またApple Watchから操れるようにIFTTTを設定します。
これでなんとなく完成!もう一つ、ベイマックスくんも作って、対決させるのも面白いですね!
いかがだったでしょうか?ここまで読んで、なぜMESHを使って??という疑問が湧く方もいるかもしれませんが、ロボットを動かすトリガー(ボタンや動きタグなど)として簡単に使えるのと、ラズパイ内の動きを変えるのにアプリの簡易なインターフェースでその場で変えれるのが魅力だと思います。
全体ではおそらく1万円くらい(MESH、AppleWatch含まず)で作れるのではないかと思います。
以上、ラズパイとGoogleとAppleWatch、そしてMESHで作ったロボットでした!
その他のMESHで作った便利グッズなどはこちらのMESHBOOKでずらずらと並べています。そちらも見てみてください!!