ロボット Sota(ソータ) TCP/IP通信
・TCP/IP通信とは
TCP/IPは インターネットで標準的に使われている通信プロトコル(通信規約)であり、このプロトコルに従い通信することで、どんな機器でも(機種やOSに関係なく)ネットワークに接続できて相互に通信が可能です。
ソータがこの機能を使うことで、複数台のソータ同士が会話・協調するアプリが作成可能となります。通信相手をパソコン等にすると、さらに応用ができそうです。
徳島ならではの阿波弁でソータ同士が会話するアプリなんて面白いかもしれません。
・Sotaのできること
<TCP/IPサーバ初期化>
初期設定として、通信ポートやクライアントからの接続待ち時間を設定します。
<TCP/IPサーバ受信>
クライアントからの接続要求を待ち、接続があれば、改行コード<LF>まで任意の文字列を受信します。また、受信完了後、OK<LF>を返信します。受信した文字列に応じて分岐します。
<TCP/IPクライアント>
接続待機中のTCP/IPサーバに対して、接続要求をかけて接続後、任意の文字列を送信します。
(注意)
2016年2月26日現在、このブロック<TCP/IPクライアント>にバグがあるようで、ビルド出来ません。
Javaに置き換えられる際に、このブロックの個所が
if(if( GlobalVariable.booleanResult ) GlobalVariable.booleanResult)
となり、エラーになります。明らかに文法がおかしいような・・・
そのため、私は<自由記述処理>に正しく書き、使っております。
・アプリ作成例
ソータ君はTCP/IPサーバとして接続要求を待っています。TCP/IPクライアント(パソコン)から送信される文字列(red、green、end)に応じて、Sotaが動作(目を赤色へ, 目を緑色へ、アプリ終了)します。
この使い方が正しいかは不明ですが、TCP/IPサーバ初期化後、無限ループに入り、クライアントの送信待ちを繰り返します。
・現状の疑問点
SotaがTCP/IPサーバとなった際に、受信した文字列に対して、任意の返信をしたいが、どのようにすれば良いのか分からない。送信はTCP/IPクライアントのボックスしかなので、サーバとクライアントとを交互に使う必要があるのか?
逆に、クライアントとなった際に、返信文字を取得できない。コンソール上では、
Server: ABC (Sotaから文字列を受信後、パソコンからABCを返信した場合)
と表示されるので、取得できると思われる。
・使ってみた感想
このTCP/IP通信を使用してソフト開発することで、ロボット同士で会話させることが出来そうです。会話のタイミングを通信で確認しながら、音声合成でしゃべらせることで、あたかもSota同士が話をしているように見えると思います。
また、人とソータ君とのやり取りが音声だけでなく、テキスト(文字列)でも可能となりますので、雑音環境下ではチャットでの会話も選択できそうです。
タブレット等と連携させて、ペッパーのように、
・Sota ⇒ 人 :音声で伝える
・人 ⇒ Sota :タブレット入力で伝える
と言った、音声認識の補助としても使用できるのかな?と思いました。
現状のVstoneMagicで使用可能なブロックは全てテストしてみて、ソータが受付ロボットとして活躍できる道がだんだんと見えてきました!もう少し本格的なアプリ開発もしていきたいと思います。