リモート接続で色認識
2014年10月28日


 ロビボイスプレイヤーでリモート接続をした2台のロビにしゃべらせてみました。

     

 この時は、LEDを2本とも上から出したのですが出っ歯みたいになったので位置を変えてみました。



 今回はパソコンのプログラムでリモート接続をしたロビに音声出力をしてみます。

 ロビのしゃべる言葉は限られているのでプログラムでやれる事は限定されてきます。
 ロビの音声リストを見てみると色が何種類かあります。
 これはロビが色占いをする時のラッキーカラーのようです。

 また今回もロビの頭のWebカメラを使ってみます。
 Webカメラで取り込んだ色紙の色を解析してその色をロビにしゃべらせるプログラムです。



 画面の中心とその周囲4点の色が同じなら色紙だと認識するようにしました。
 ただ目では同じ色に見えますが色の数値(RGB)は異なってきますのでマージンを取って比較します。
 今回はRGBのそれぞれ8ビットの内、上位2ビット(0xC0)で比較しました。
 比較して同じだったら比較した4点で画面に正方形を表示します。

 次に色の判断ですが照明などの具合でちゃんとした色の値が取得できる訳ではありません。
 例えば赤の場合、RGB値はR=255,G=0,B=0ですが実際はGもBもある程度の値があります。

 そこで色の特徴をとらえて色の判断をします。
 RGBの値が全て128以下なら黒と判断します。

 色が判断できたらリモート接続されたロビにデータを転送します。
 データの詳細についてはこちらを参照してください。

 実際にこのプログラムを動かした動画です。

     

 色紙の判断は正確にできるのですが色の判別が難しいです。
 特に赤とオレンジは赤に照明を当てすぎると白っぽくなりオレンジと区別がつきにくくなります。
 同様に黄色とクリーム色も間違いやすいです。
 今回の目的は正確に色を識別する事でなくロビにリモート接続でしゃべらせる事なので色の識別の精度向上はこれくらいにしておきます。



 リモート接続でロビにしゃべらせる方法を解説します。
 リモート接続でロビにしゃべらせるにはロビでリモート接続用のプログラムを走らせておく必要があります。
 リモート接続用のプログラムとダウンロードは
こちらを参照して下さい。

 なおリモート接続では間違ってサーボを動かす事があるので直接サーボログを書き換えてロビにしゃべらせる時は必ずロビを脱力化しておいてください。
 脱力化はロビ設定ファイルエディタを使えば簡単にできます。

 またロビプログラムのリモート接続起動フォルダーの初期化プログラムはロビを起動するとリモート接続プログラムを走らせるようにしてあるのでロビに命令しなくてもリモート接続が行えます。
 このプログラムを転送した後も脱力化は忘れないようにしてください。

 リモート接続のデータはロビのSDカードの「サーボ.LOG」に書込んで行います。
 このファイルはリモート接続でロビのサーボを動かすためのものですがその拡張として音声も再生する事ができます。

 サーボ.LOGはバイナリーデータなのでメモ帳のようなテキストエディタで扱えません。
 バイナリーデータを扱えるエディタが必要です。
 Windowsの標準ではバイナリーデータを扱えるエディタがないのでソフトウェアライブラリィにあるものを使います。
 私はVisual Studioのエディターを使っていますがこれはプログラム開発用なのでDump4wというフリーソフトを使った方法を説明します。

 Dump4wで直接ロビのSDカードのサーボ.LOGを開きます。
 もちろんUSB経由でアクセスしてロビはリモート接続プログラムも動かしておきます。



 Dump4wの開くダイアログはディフォルトがexeファイルになっているのでサーボ.LOGは最初は現れません。
 ファイルの種類の選択(ファイル名の右のコンボボックス)を全てのファイルに切替えてください。
 なお表示されなくてもファイル名がサーボ.LOGになっているのでSDカードで開くボタンを押すだけでも構いません。

 次に編集で読み取り専用のチェックを外してください。
 なおこのエディターはキー入力する度にファイルを書き換えるので注意してください。



 上はロビに「わかんないよ」としゃべらせるデータです。

 0と1のffは音声再生を表すデータです。
 他のデータがセットされていない段階でここを書き換えるとロビが誤動作するので最後に書き換えてください。

 2は再生する音声データのIDです。
 この値はロビボイスプレイヤーのvoice.csvを参照してください。

 なお値は16進数でセットしなければいけないので10進数を16進数に変換する必要があります。
 私はWindowsのアクセサリの電卓をプログラマ表示で使っています。
 255以上の場合16進の上位2桁はアドレス3になります。
 例えば1F4の場合、アドレス2がF4でアドレス3が01です。

 4は口パクの回数です。
 口のLEDの点滅回数でON,OFFで2回とします。
 この場合は8なのでON,OFFを4回繰り返します。

 口パクの回数は再生時間に比例します。  標準では1秒間でON,OFFするので音声の再生秒数×2となります
 voice.csvに再生時間の項目もあるので参考にしてください。

 6は口パクの点滅周期(OFF→ONまたはON→OFF)で標準では19(25=0.5秒)を指定してください。
 この値はロビのプログラムの時間の単位(50/1秒)で表します。
 この値を変更した場合、音声の長さにあわせたい場合は口パク回数も変える必要があります。

 8は音量を表すアッテネータ(減衰器)の値で大きいほど音量は小さくなります。(0が最大音量)
 この値はSTARTUP.XMLで設定されたものと同じこの値を変更します。(音声再生が終了するとSTARTUP.XMLで設定された値に戻します)

 以上全ての他のデータがセットしたら最後にアドレス0をffにするとロビがそのデータに合わせてしゃべってくれます。

 リモート接続のデータの仕様はこちらを参照してください。

 なおロビのプログラム変更やSDカードの書き換えは、ロビ本体への影響を及ぼす可能性があるのであくまでも自己責任という事でお願いします。
 また必ずオリジナルのSDカードのバックアップは取っておいてください。
 問題があったらオリジナルのSDカードに戻してください。

目次に戻る