Pepperの音声認識を使ってクイズアプリを作る:Pepperで始めるロボットプログラミング(3)(3/4 ページ)
Pepperには音声認識機能が搭載されており、GUIで簡単に「音声に反応するロボット」をプログラミングできる。プログラミングに有効な「ボックス」の使い方も覚えよう。
オリジナルのボックスを作る
次は、クイズに2問目を追加してみよう。同様にボックスを追加していっても作れるが、さらに3問目、4問目と増やしていくと、フローダイアグラムがゴチャゴチャして見にくくなるだろうというのは想像に難くない。このようなときに便利なのが、ボックスへの変換機能である。
開始のサウンドを鳴らし、クイズを出して、回答により、正解/不正解の処理を実行する……という部分は、各クイズで共通する処理だ。このように使い回しができる部分は、1つのボックスにしてしまえば、いろいろと便利。これは、一般的なプログラミングで「関数」とか「サブルーチン」とか呼ばれている仕組みと似たような考え方である。
ChoregrapheのようなGUIツールは、取っつきやすい反面、アプリが大規模になってくると、全体の構造が分かりにくくなるという欠点もある。機能のブロックごとにボックス化(グループ化)すると、処理の流れが見えやすくなるので、アプリのメンテナンス性を高めるという点でも、この方法は有効である。
やり方は非常に簡単だ。まとめたい範囲をマウスでドラッグし、ボックスを選択。シフトキーを押しながらドラッグを繰り返し、必要なボックスを全て選択し終えたら、右クリックで表示されるメニューから「ボックスに変換」を選択すれば良い。すると、選択したボックスをまとめた新しいボックスが出来上がる。これをQuizボックスと呼ぼう。
Quizボックスの中身を確認したいときはダブルクリックすれば良い。グループ化されたボックスが表示されるので、必要であればここで修正することも可能だ。ところでこのボックスの入れ子構造、見覚えがないだろうか。そう、今まで普通に使ってきたSayボックスだ。じつはSayボックスも、このようにグループ化されたものだったのだ。
このQuizボックスを並べていけばクイズを簡単に追加できる…はずなのだが、じつはこのままだとうまく動作しない。Quizボックスを開いて、ちょっと修正が必要だ。
まずSpeech Reco.まわりの接続が勝手に変わってしまっていた。onNothing出力とonStop入力をつなげて、元通りにする必要がある。
そして入出力ポートの設定だ。Speech Reco._onStopという入力が追加されていたので、アイコンのところで右クリックし、「Delete input」を選択して消してしまおう(ただ、この入力はあっても問題ないので、放置しても構わない)。
一方、出力側は「Say_onStopped」という名前で、ダイナミック/即時に設定されたポートが作られていたが、こちらもアイコンで右クリックし、「Edit output」を選択。種類をバン/onStoppedに変えよう。即時からonStoppedに変更することで、Quizボックスの終了時に、ボックスの動作を確実に止めることができる。それと動作には関係ないが、名前も気に入らないので「onStopped」に変えておきたい。
じつはQuizボックスでは、正解/不正解の処理が終わった後も、Speech Reco.を止めていなかった。そのため、2問目のQuizボックスがスタートした後も、1問目のSpeech Reco.が起動したままになっており、おかしなことになってしまうのだ。出力の種類をonStoppedに変えておけば、ボックスの終了時にSpeech Reco.の動作も止まるので、この問題を回避できるわけだ。少しややこしいが、気をつけて欲しい。
Copyright © ITmedia, Inc. All Rights Reserved.