連載
» 2015年03月27日 11時00分 公開

Pepperの音声認識を使ってクイズアプリを作るPepperで始めるロボットプログラミング(3)(3/4 ページ)

[大塚実,MONOist]

オリジナルのボックスを作る

 次は、クイズに2問目を追加してみよう。同様にボックスを追加していっても作れるが、さらに3問目、4問目と増やしていくと、フローダイアグラムがゴチャゴチャして見にくくなるだろうというのは想像に難くない。このようなときに便利なのが、ボックスへの変換機能である。

photo 何も考えずに問題を追加するとこんな感じに…

 開始のサウンドを鳴らし、クイズを出して、回答により、正解/不正解の処理を実行する……という部分は、各クイズで共通する処理だ。このように使い回しができる部分は、1つのボックスにしてしまえば、いろいろと便利。これは、一般的なプログラミングで「関数」とか「サブルーチン」とか呼ばれている仕組みと似たような考え方である。

 ChoregrapheのようなGUIツールは、取っつきやすい反面、アプリが大規模になってくると、全体の構造が分かりにくくなるという欠点もある。機能のブロックごとにボックス化(グループ化)すると、処理の流れが見えやすくなるので、アプリのメンテナンス性を高めるという点でも、この方法は有効である。

 やり方は非常に簡単だ。まとめたい範囲をマウスでドラッグし、ボックスを選択。シフトキーを押しながらドラッグを繰り返し、必要なボックスを全て選択し終えたら、右クリックで表示されるメニューから「ボックスに変換」を選択すれば良い。すると、選択したボックスをまとめた新しいボックスが出来上がる。これをQuizボックスと呼ぼう。

photo マウスドラッグでボックスを選択。背景が水色になる
photo 右クリックのメニューから「ボックスに変換」を選択
photo 表示されたウィンドウに、名前と説明を入力する
photo OKを押すと、選択したボックスが1つにまとめられる

 Quizボックスの中身を確認したいときはダブルクリックすれば良い。グループ化されたボックスが表示されるので、必要であればここで修正することも可能だ。ところでこのボックスの入れ子構造、見覚えがないだろうか。そう、今まで普通に使ってきたSayボックスだ。じつはSayボックスも、このようにグループ化されたものだったのだ。

 このQuizボックスを並べていけばクイズを簡単に追加できる…はずなのだが、じつはこのままだとうまく動作しない。Quizボックスを開いて、ちょっと修正が必要だ。

photo Quizボックスをダブルクリックして内部に移動

 まずSpeech Reco.まわりの接続が勝手に変わってしまっていた。onNothing出力とonStop入力をつなげて、元通りにする必要がある。

 そして入出力ポートの設定だ。Speech Reco._onStopという入力が追加されていたので、アイコンのところで右クリックし、「Delete input」を選択して消してしまおう(ただ、この入力はあっても問題ないので、放置しても構わない)。

photo 上から2つ目、Speech Reco._onStop入力を削除

 一方、出力側は「Say_onStopped」という名前で、ダイナミック/即時に設定されたポートが作られていたが、こちらもアイコンで右クリックし、「Edit output」を選択。種類をバン/onStoppedに変えよう。即時からonStoppedに変更することで、Quizボックスの終了時に、ボックスの動作を確実に止めることができる。それと動作には関係ないが、名前も気に入らないので「onStopped」に変えておきたい。

photo 出力ポートの設定を変更
photo 出力ポートの初期状態

 じつはQuizボックスでは、正解/不正解の処理が終わった後も、Speech Reco.を止めていなかった。そのため、2問目のQuizボックスがスタートした後も、1問目のSpeech Reco.が起動したままになっており、おかしなことになってしまうのだ。出力の種類をonStoppedに変えておけば、ボックスの終了時にSpeech Reco.の動作も止まるので、この問題を回避できるわけだ。少しややこしいが、気をつけて欲しい。

Copyright © ITmedia, Inc. All Rights Reserved.