
オートラップ計測ロボットを作る ー VUI編
今回が最終回となります。前回でオートラップ計測ロボット単体としては完成し、練習中のラップタイムがどんどんクラウドに蓄積されています。
このデータはCloud Firestore(NoSQL Database)に保存されていて、コンソールから閲覧、検索することができます。
これでも十分なんですが、これにVUI(Voice User Interface)を付加して、いままででもっとも速かったタイムをGoogle Assistantから教えてもらえるようにします。
先にどんな会話になるかイメージ画像でお伝えします。本当はGoogle Home Miniへ問い合わせる様をムービーにしようかと思いましたが、テストバージョンは日本語では動作しないようで、英語で発話しないといけないが私のブロークンな英語を披露するもの気が引けるので、イメージだけにします。
Google AssistantアプリはiOS/Androidでも利用できるので、これで十分といえば、十分です。まず、コースマネージャを呼び出します。
次に、コースマネージャにコースレコードを聞いてみましょう。Dialogflowのintentには以下のような文に反応するように設定しています。
では、「コースレコードを教えて?」と発話してみます。
コースマネージャがさきほどのCloud Firestoreのデータを検索して、もっとも速かったラップタイムを教えてくれます。
これぐらい長い返答になると、やはりアプリのGoogle Assistantの方が文章が残るので確認しやすいですね。
返答部分のプログラムは以下のようになっています。
function replyCourseRecord(courseRecord) {
let reply = '';
if (courseRecord.exists) {
const best = courseRecord.data();
let recordedAt = convertRecordedAt(best.lapTime.recordedAt);
reply = `もっとも速かったラップタイムは${recordedAt}の${parseFloat(best.lapTime.time).toFixed(2)}です。`;
recordedAt = convertRecordedAt(best.totalTime.recordedAt);
reply += `もっとも速かったトータルタイムは${recordedAt}の${parseFloat(best.totalTime.time).toFixed(2)}です。`;
return reply;
} else {
return 'いまのところ、記録はありません。';
}
}
FulfillmentのAPIはV2を利用しています。今後はV2を使うほうがいいでしょうね。すべてのソースコードはGitHubにて公開済みです。
こうやって自分の練習結果がいつでも閲覧、問い合わせできることで、より練習に励むことができるようになりました。
IoTを使ってなにかやってみたいと思っても、じゃあ何作る?ってなることが多いですが、自分の趣味に役立つものを作るのは、こんなに楽しいものかと感じました。当然仕事より楽しかったです。まあ、私の場合は仕事でもプログラミングは楽しいんですけどね。
Google Assistantのプログラミングは、プログラミング言語の習得・教育にも最適ではないかと思います。
ぜひ、みなさんも挑戦してみてください。