2015年3月29日日曜日

RAPIRO のRaspberry Pi を Pi BからPi 2へ交換

 今回のガラクタは久々登場のRAPIROです。RAPIRO はArduino互換の制御ボードで小型のサーボ11個を制御して動かす小型のロボットキットです。サーボの制御は腰部に内蔵したArdino互換ボードですが、自分でRaspberry Pi モデルB を用意して、RAPIROの頭部に実装して、UARTで通信させることができるようになっています。今回は、今まで取り付けてあった RPi BをRPi 2に交換しました。

 頭部を開けたところ。RPi Bの上に自作物も色々スタックしているので、まず、これをどけて。


 RPi B の載せた状態。


 RAPIROの首の部品の一部を加工します。写真手前側の基板を押さえる詰めがRPi 2だとオーディオコネクタに当たるので、ニッパー等で半分だけ切り取ってしまいます。


 また、写真右のポールの先端にRPi Bのネジ穴にささるようにピンが立っていますが、これがRPi 2では邪魔になるので、同じくニッパーで切り落としてしまいます。


 RPi 2 を載せたところ。


 自作の追加ボード(センサやスピーカ用のアンプが載っている)とスピーカも取り付けて、蓋(頭)を閉じます。


 RPi を交換したので、無線LAN接続とSSH、VNC接続等を確認して、SSHターミナル(TeraTermとか)でログインして、手動でRPi 2 → Arduino にコマンドを送って動作確認してみます。
 まず、RPi 2 でシリアルポートにコマンドを送信するために cu をインストール。

   sudo apt-get install cu

 RPi 2 と Arduino 間は 57600bps での通信なので、

   cu -l /dev/ttyAMA0 -s 57600

で通信開始。コマンド #M1 で前進、 #M0 で停止。簡単に動作は確認できました。

 さて、RPi を置き換えたので、新環境で色々セットアップをし直さないといけないわけですが、その際に音声認識のJuliusのセットアップを以前の記述を備忘録として再度行おうとしたのですが、なぜか、記事の後半部分がすっぽりの抜けてる・・・。こんなことってあるの?もうすっかり、忘れちまってるよ・・・。調べ直しかよ・・・。
 仕方ないので、Julius公式サイトから本体ソースディクテーションキット文法キットをダウンロードします。(前述のリンクは、記述辞典の最新版へのリンクなので、公式トップからそのときの最新を探すほうが良いと思います。)今回はwgetでうまく落とせなかったので、GUIのブラウザでダウンロードは行いました。
 piユーザのホームにこれらの

   julius-4.3.1.tar.gz
   dictation-kit-v4.3.1-linux.tgz
   grammar-kit-v4.1.tar.gz

があるとして、まず、julius本体を解凍して、makeして、インストール。

   tar xvzf julius-4.3.1.tar.gz
   cd julius-4.3.1
   ./configure -with-mictype=alsa
   make
   sudo make install

 次に、・・・。この先が思い出せません。Googleで検索して、こちらのサイトを参考にさせて頂きました。・・・ディクテーションキットと文法キットを適当なフォルダを作って解凍。

   cd ~
   mkdir julius-kit
   cd julius-kit
   tar xvzf ~/dictation-kit-v4.3.1-linux.tgz
   tar xvzf ~/grammar-kit-v4.1.tar.gz

  入力デバイスの設定。

   export ALSADEV=plughw:0,0  (ハードウェア番号は arecord -l 等で調べてください)

 次は、単語リストを作成。

   vi ~/julius-kit/dictation-kit-v4.3.1-linux/rapiro.dic

エディタで任意のファイル名でファイルを作成して、認識語リストを作成します。[認識結果語][tab][(認識用音声文字での)読み]のようにリストを作成します。

   <sil>        silB
   <sil>        silE
   <sp>        sp
   こんにちは    k o N n i ch i w a
   前進        z e N sh i N
   後退        k o u t a i
   停止        t e i sh i
   右         m i g i
   左         h i d a r i
   パンチ       p a N ch i

みたいな感じで。記述方法はこの辺とかを参照。
 次に設定ファイルですが、正直、設定ファイルの詳細は理解できていません。参考ページなどにあるものをコピーしてきて、辞書ファイル名等を一部を変更しただけです。

   vi ~/julius-kit/dictation-kit-v4.3.1-linux/rapiro.jconf

として、以下の内容で作成します。

   -w rapiro.dic
   -v model/lang_m/bccwj.60k.htkdic
   -h model/phone_m/jnas-tri-3k16-gid.binhmm
   -hlist model/phone_m/logicalTri
   -n 5
   -output 1
   -input mic
   -input alsa
   -rejectshort 800
   -lv 1500
   -demo

 これで、

   julius -C ~/julius-kit/dictation-kit-v4.3.1-linux/rapiro.jconf

とすると、認識が開始されるはずです。


"<<< please speak >>>" というのが表示されるので、登録されている語句をマイクに話しかけると認識ます。限らた語句で辞書を作って認識させる方式だと、かなりの認識率で認識してくれます。そのかわり、違う言葉も強引に辞書内の単語に当てはめようとします。たとえば、「ぱんつ」と言うと「パンチ」に、「変身」というと「前進」として認識します。認識率が悪い場合は、マイクの音量不足の可能性もあるので、

   amixer -c 0 sset Mic 80%

などとして、マイク音量を調整してみてください。

 音声認識ができたら、認識結果をコマンドと知って、制御用Arduino側に送信するプログラムを試してみます。まずは、辞書ファイル rapiro.dic の認識結果をシリアル送信するコマンドで書き換えます。

   <sil>        silB
   <sil>        silE
   <sp>        sp
   #M6    k o N n i ch i w a
   #M1    z e N sh i N
   #M2    k o u t a i
   #M0    t e i sh i
   #M3    m i g i
   #M4    h i d a r i
   #M9    p a N ch i

  JuliusLib を使って、認識結果をシリアルに送信するプログラムはこちら。以前に動かした時の動画です。



 次は、OpenCV。これは、過去の記述を参考に行いました。RPi 2 だとコンパイル時間が短くてすみます(っていっても2時間くらいかかるけど)。

   sudo apt-get -y install build-essential cmake cmake-qt-gui pkg-config libpng12-0 libpng12-dev libpng++-dev libpng3 libpnglite-dev zlib1g-dbg zlib1g zlib1g-dev pngtools libtiff4-dev libtiff4 libtiffxx0c2 libtiff-tools

      sudo apt-get -y install libjpeg8 libjpeg8-dev libjpeg8-dbg libjpeg-progs ffmpeg libavcodec-dev libavcodec53 libavformat53 libavformat-dev libgstreamer0.10-0-dbg libgstreamer0.10-0 libgstreamer0.10-dev libxine1-ffmpeg libxine-dev libxine1-bin libunicap2 libunicap2-dev libdc1394-22-dev libdc1394-22 libdc1394-utils swig libv4l-0 libv4l-dev python-numpy libpython2.6 python-dev python2.6-dev libgtk2.0-dev pkg-config

   wget http://sourceforge.net/projects/opencvlibrary/files/opencv-unix/2.4.10/opencv-2.4.10.zip 

   unzip opencv-2.4.10.zip
   cd OpenCV-2.4.2/
   mkdir build
   cd build
   cmake-gui (これはGUI画面で行う)

 CMake GUI画面で Configureして、必要なオプションを追加後、Genarateします。その後

   make (時間がかかります)

   sudo make install

となります。

ん~今日はここまで。