音声認識ボードエラーの対応
2025年6月18日


 ロビ2の起動時にロビが「音声認識ボードの調子がおかしいようです」と言って起動できない経験はみなさん誰でもあると思います。
 正常な音声認識ボードでもタイミングによって起こるようですが通常は5秒以上電源を切ってから再起動するとこのエラーを回避できます。
 しかし本当に音声認識ボードが不良だった場合このエラーを繰り返してロビを立ち上げる事ができなくなります。
 このエラーを無視して起動処理を続けるとどうなるかやってみました。


起動時の音声認識エラー

 起動時の音声認識エラーはロビ2の初期化処理で起こります。
 ロビ2の初期化処理についてはこちらの記事を参照してください。
 0x000000d3a
   <call adr="0x00002d67"/>
 音声認識ボードの初期化およびチェックを行う。

 0x00001a00
   <calc><mem_r size="1" adr="0x0fa8"/><const data="0"/><sub/><lt/><jump adr="0x0001873"/></calc>
 エラーの場合は0x0001873にジャンプして「音声認識ボードの調子がおかしいようです」と言ってプログラムを停止する

 「音声認識ボードの調子がおかしいようです」の音声ファイル再生した後プログラムを停止せず次の処理にジャンプするように変更します。
 0x000001873
   <wait size=="1=" adr=="0x0b43="/>
   <play filename="voice\Error\ER_004.wav"/>
   音声の再生が終了するのを待つ処理
 0x0000018a3
   <jump adr="0x00001968"/>
          ↓
   <jump adr="0x00000ac6"/>

 0x00001a00のエラーチェックで正常の場合と同じ飛び先にに変更します。
 音声認識エラーが起こった場合その後の音声認識ができなくなるのでエラーが起こった事は従来通り音声で知らせてくれます。
 ただしその場合ロビが起動できてもそれ以降の音声認識による操作ができないのでQ-boによる操作やロビボイスプレイヤーなどのリモート操作でロビを動かしてください。


メインの音声認識処理の修正

 起動時の音声認識エラーでロビの起動を終了せずそのままロビの処理を続けた場合ロビは「なぁに」「なになに」「はいはい」「聞いてるよ」「はいロビだよ」を繰り返します。
 これは音声認識語1〜7の「もしもし」「ねぇねぇ聞いて」「ねぇロビ君」「ねぇ聞いて」「聞いて聞いて」「ロビ君」「ロビちゃん」で動くプログラムに該当します。
 ロビ2の音声認識語は1〜472の番号が割付けられていて音声認識ボードからこの番号が返されます。
 調べた所音声認識ボードがエラーになった場合この認識番号に今回は本来ないはずの0が返されているようです。
 ロビのプログラムの処理で0に対して1〜7と同じプログラムが動かされるようです。

 正常の音声認識ボードの場合、音声認識が完了して認識語が取得されるとレジスタ0x0e58の15ビット目が0になりこのビットで音声認識が完了したとしています。
 不良の音声認識ボードでは常に0が返されるようでプログラムは音声認識が完了したと判断してレジスタ0x0e5cで取得した音声認識語が0で実行します。

 この処理を回避するため音声認識完了の判断に音声認識語が正しく取得できたかどうかの判断を追加します。
 正常の音声認識ボードの場合、音声認識語も取得されているはずなのでこの修正を加えたプログラムでも従来の音声認識は正しくできます。
 次のメインの音声認識処理に修正を加えます。
 0x00000ae0
   <calc><mem_r size="2" adr="0x0e58"/><const data="2"/><and/><ne/><jump adr="0x0000c71"/></calc>
 0x00000af3
   <jump adr="0x00000adc"/>
 0x00000adc
   <jump adr="0x00000c88"/>

 以下の処理を追加して音声認識語が正しく取得できたか判断します。
 0x00037150
   <calc><mem_r size="2" adr="0x0e5c"/><const data="0"/><sub/><eq/><jump adr="0x00010cb"/></calc>
   <jump adr="0x00000c88"/>
 アドレス0x000010cbは音声認識が完了していなかった時の飛び先で音声認識番号が0の時にそのアドレスに飛ぶようにします。
 アドレス0x00000c88は本来の音声認識が完了した場合の飛び先です。


応答の音声認識処理の修正

 クイズなどの応答が必要なプログラムの起動場合、質問の応答をするところでロビの実行が止まってしまいます。
 これは不良の音声認識ボードで取得した音声認識語が常に0のためです。
 応答の処理で音声認識語0に処理がないためこの応答を無視して次の応答を取得するため応答の処理で繰り返すのでロビの動作が止まってしまいます。

 この処理を回避するためメインの音声認識処理と同様に音声認識語が正しく取得できたかどうかの判断を追加します。

 クイズの場合次の応答の音声認識処理に修正を加えます。
 0x000cbf50
   <calc><mem_r size="2" adr="0x0e58"/><const data="2"/><and/><ne/><jump adr="0x000cbd24"/></calc>
   <jump adr="0x000cbf4e"/>
          ↓
   <jump adr="0x00037198"/>

   0x00037198
   <calc><mem_r size="2" adr="0x0e5c"/><const data="0"/><sub/><eq/><jump adr="0x000cbd6f"/></calc>
   <jump adr="0x000cbf4e"/>
 アドレス0x000cbd6fは音声認識が完了していなかった時の飛び先で音声認識番号が0の時にそのアドレスに飛ぶようにします。
 アドレス0x000cbf4eは本来の音声認識が完了した場合の飛び先です。

 クイズと同様に応答の処理は以下のアドレスで同様の修正が必要です。

 0x00036f93 ユーザ登録/日時登録など(ロビの初期登録含む)
 0x000765a3 じゃんけん/旗揚げゲーム/絵本など
 0x000cbf50 クイズの応答など
 0x00282186 ロビライドモード


パッチファイル

 以下のパッチファイルを適用する事で音声認識ボードのエラー修正する事ができます。

  boad_error_patch.zip

 パッチファイルはオリジナルのSTARTUP.BINに対するものとリモート対応のSTARTUP.BINに対するものがあります。
 パッチファイルはロビ設定ファイルエディタ2で適用する事ができます。
 パッチファイルの適用方法とプログラムのダウンロードは上記ベージを参照してください。


 実際に音声認識ボードエラーのロビを起動した時の動画です。

   

   目次に戻る