SRM-10P
HSWB-2RGに接続するために使用。
回路図
コネクタ | SRM-10P 受け側コネクタ×2 <br>(SRM-10P スターターキットに付いてくる) |
電源取得用 | 2ピンコネクタ |
ロボット・コントローラーとの接続用コネクタ | 4ピンコネクタ |
合計約70秒で128音声まで登録出来るので、自分が使用する音声の種類のピン数のコネクタを準備しましょう。
ソース
'-------------------------------------------------
'- SRM-10P + PIC-BASIC 音声再生
'- Ver 1.00
'- URL: http://web2.incl.ne.jp/ruming/
'-------------------------------------------------
'-- 初期設定 --
INIT_RTN:
' RDポートを入力に設定 Input RD.Bit0 Input RD.Bit1 Input RD.Bit2 Input RD.Bit3 Input RD.Bit4 Input RD.Bit5 Input RD.Bit6 Input RD.Bit7
' ロボット側からの音声再生の要求番号 Dim voice_no As Byte
' データは9600bps,8bit DATA, 1bit STOP, Non Parityで送信されます。 Dim rs_start As Byte Dim rs_command As Byte Dim rs_param1 As Byte Dim rs_param2 As Byte Dim rs_end As Byte Dim rs_check As Byte
' START <&HF0>固定 ,END<&HF1>固定 rs_start = &HF0 rs_end = &HF1
' 起動直後、1秒間だけ待ちます Sleep 1000 ' 受信バッファクリア Serclear
' == 主処理 ==
' -- ポート入力待ち --
' 0の間は、待ち状態
PORT_INPUT_WAIT:
voice_no = 0 ' 使用するピンだけコメントを外す ' 現ソースは、4ピンの設定で、15音声の再生 If rd.Bit0=1 Then voice_no = voice_no + 1 If rd.Bit1=1 Then voice_no = voice_no + 2 If rd.Bit2=1 Then voice_no = voice_no + 4 If rd.Bit3=1 Then voice_no = voice_no + 8
' If rd.Bit4=1 Then voice_no = voice_no + 16
' If rd.Bit5=1 Then voice_no = voice_no + 32
' If rd.Bit6=1 Then voice_no = voice_no + 64
' 0以外は、音声再生の要求有りと見なす If voice_no <> 0 Then ' 音声再生 Gosub SEND_TALK_SUB ' 応答待ち状態の処理に行く Goto RECEIVE_WAIT Endif
Goto PORT_INPUT_WAIT
' -- SRM-10P応答待ち --
' 基本的には応答パケットを受信するまで待ち状態
' (この間、音声再生の要求があっても再生しない)
RECEIVE_WAIT:
' 1バイト受信 rs_start=0
' シリアルポート受信 Serin pb9600,10,rs_start ' 受信出来ない場合、再び応答待ち If rs_start=0 Then RECEIVE_WAIT ' 受信したのは「コマンド有効」の場合、何もせず応答パケットを待つ If rs_start=&HF8 Then RECEIVE_WAIT ' 受信したのは「応答パケット」以外の場合、 If rs_start<>&HF0 Then RECEIVE_DATA
' 受信したのは「応答パケット」の場合、応答パケット受信する Serin pb9600,30,rs_command,rs_param1,rs_param2,rs_end,rs_check
Goto PORT_INPUT_WAIT
' -- 残受信データを全て受信する --
' 念の為の処理
RECEIVE_DATA:
Do ' シリアルポート受信 Serin pb9600,10,rs_start Until rs_start = 0
Goto PORT_INPUT_WAIT
'== サブルーチン群 ==
'-- SRM-10Pにデータを送信する --
SEND_SRM10P_SUB:
'チェックコード作成 rs_check = rs_start ^ rs_command ^ rs_param1 ^ rs_param2 ^ rs_end rs_check = rs_check & &HFF 'シリアルポート送信 Serout pb9600,chr$(rs_start),chr$(rs_command),chr$(rs_param1),chr$(rs_param2),chr$(rs_end),chr$(rs_check)
Return
' COMMAND TK-音声合成再生 <&H58>
' PARAM1 音量 <127>
' PARAM2 音声番号
SEND_TALK_SUB:
rs_command=&H58 rs_param1=127 rs_param2=voice_no Gosub SEND_SRM10P_SUB
Return
' COMMAND PLY-録音音声再生 <&H51>
' PARAM1 音量 <127>
' PARAM2 音声番号
SEND_PLY_SUB:
rs_command=&H51 rs_param1=3 rs_param2=voice_no Gosub SEND_SRM10P_SUB
Return
使い方
HSWB-02RGの場合の記述を書きますと、単に音声を出すだけなら、以下のコマンドを実行します。
以下の例は、登録した一番目の音声を再生する場合です。
OLLLLLLLH
W10
OLLLLLLLL
モーションを実行中の場合は、Wコマンド(待機コマンド)の代わりに、本来のモーションを実行を実行させて下さい。
そして、適当な時期に、デジタル出力を全てLowにしてください。
ここでいう「適当な時期」と言うのは、ごくごく短い時間なので、いろいろと試して見てください。
仕様
PIC-BASICが、HSWB-02RGからの音声再生の指示があるまで、ひたすら待ちます。
ここで、待ち状態となるのは、デジタル出力が全てLowレベルの場合は「指示無し」と見なします。
Highレベルがどこか1ピンでもある場合は、SRM-10Pに、要求のあった音声再生を要求します。
ここで再生する音声は、デジタル出力を2進数→10進数として、音声再生します。
PIC-BASICは、SRM-10Pに音声再生を要求後、応答待ちになります。
この間、HSWB-02RGの音声再生の指示はみていません。
SRM-1OPからの応答が帰ってきたら、再び、HSWB-02RGの音声再生の指示待ちになります。
ここで、使い方のところでも書いた「適当な時期」というのは、この「SRM-1OPからの応答待ち」時間と
いうことです。
この時間内に全てLowレベルにしないと、また同じ音声が再生されるということになります。
逆に言えば、繰り返しの音声を使用する場合は、全てLowレベルにするのは、全てのモーションが終わってからにするということになります。
例えば、歩いている間、「よいしょ、よいしょ」という言葉を繰り返して言うのであれば、以下のようにします。
1.「よいしょ」という言葉と1言を登録する。
2.歩きはじめで、音声再生を指示。
3.歩きモーションを実行。この間、自動的に、「よいしょ」が繰り返される。
4.歩き終わった時に、全てをLow レベルに設定する。
というような使い方が出来ます。
回路の拡張
先の回路図は、音声再生のための最小限の回路図になっています。
その為、PIC-BASICに書き込むためには、別の書き込むための書き込み用ボードが必要だったり、SRM-1OPへの音声登録も、スタータキットで書き込む必要があります。
ですが、ちょっとしたコネクタやスイッチ、部品の追加で、ボードから外さなくても、出来るようにすることは可能です。
この辺りの回路図は、そんなに、頻繁に書き換える内容でもないと思いますので、今は公開しません。
(私も、PIC-BASICだけ、書き込み用のコネクタとスイッチを追加しただけですし、SRM-10Pは多分、これで動くだろう程度なので・・・)
HSWB-02RG以外から使えるのか?
基本的には、デジタル出力出来て、PIC-BASICでHigh/Lowレベルの認識ができれば使えるはずです。
では、最近、よくロボットで使われているモーションプロセッサーは、一見するとデジタル出力がないようだけど、どうなのか?
正直、試していないので判りませんが、吉日ツアー内で話を聞いたところによると、「RedGainSetコマンド」で、Low/Highレベルの設定が出来ると聞いています。
ただ、いっしょに「POSSISON EDITOR」で、ゲイン設定(通常は「PWN」になってる)のを[LOW][HIGH]に出来るが、「POSSION LIST」に登録した際には、その設定した内容は保存されないらしい、とも聞いているので、使い方としてはどうなのかはよくわかりません。
もしかすると、起動時にホームポジションに設定した時には、「PWN」となっていて、パルスをしているかもしれませんので、PIC-BASIC側で、起動時に、少しだけ処理待ち時間を設けた方がよいかもしれません。
(現在のソースにも、1秒間だけ待ち時間を設けています。そういったロボット・コントローラ側の設定完了の待ち時間として)
- 最終更新:2014-09-19 20:35:16