7. 命令ブロック

本ソフトウェアに備わっている命令ブロックについて、概要及び設定項目を個別に説明します。

7-1. 共通の設定項目

 全てのブロックには、下記の共通設定項目があります。これらは、プロパティウィンドウ内では標準で項目が折りたたまれているため、設定を変更する場合は[+]ボタンをクリックして項目を展開します。

◆設定項目:
 ・comment…ブロックに関する任意のコメントを入力
 ・isBrak…プログラム実行時にbreakポイントを設定
 ・isSelect…ブロックの選択状態
 ・location…ブロックの表示場所(ウィンドウの表示倍率が100%の場合を基準としたピクセル単位)



7-2. 個別の設定項目

 ブロックの種類ごとに、概要・プロパティウィンドウ内の設定項目・分岐条件の設定画面の項目を説明します。分岐条件の設定画面は、分岐条件が指定できるブロックをダブルクリックすると表示されるダイアログです。概要はチュートリアルの「繰り返しや条件分岐を使った顔認識プログラムの作成」を参照してください。

メソッドブロック

 メソッドを作成します。

◆設定項目:
 ・arguments…メソッドの引数。設定・変更は、プロパティウィンドウ内の項目右端に表示される[...]ボタンをクリックする
   name…引数の名前。他の引数と重複しないようにする
   type…引数の型。Int,Stringなどから選択、または直接テキストを入力する
 ・methodName…メソッド名。同一クラス内で重複する名前は設定できない
 ・modifire(編集不可)…メソッドの修飾子
 ・type…メソッドの型。void,int,booleanなどから選択、または直接テキストを入力する。
     void以外を設定した場合、必ずreturnブロックで戻り値を設定する必要がある。
◆分岐条件:
 なし



変数宣言

 変数を作成します。ブロックをメソッド内に接続するとローカル変数、コンストラクタ内に接続するとメンバ変数として利用できます。

◆設定項目:
 ・isInitialize…初期化を行うか(True=初期化する、false=初期化しない)。trueの場合、initParamも必ず設定する。
 ・initParam…変数の初期化内容。typeで選んだ型に応じて、数値や文字列・変数などを設定する
 ・name…変数名。半角英数で入力する
 ・type…変数の型。int,String,booleanなどから選択、または直接テキストを編集する


◆分岐条件:
 なし



演算

 任意の変数に対して定数や変数を四則演算し、結果を変数に戻します。

◆設定項目:
 ・ccalc…演算子。=(代入),+=(加算),-=(減算),*= (乗算),/=(除算),%=(剰余)から選択
 ・left…参照元の変数。演算結果はここで選択した変数に代入される。
 ・right…leftに対する演算で使用する定数・変数。


◆分岐条件:
 なし



for

for文を出力し、既定の回数プログラムを繰り返します。ループカウンタ用の変数、及び繰り返し回数(定数または変数)を設定できます。forブロックの中に別のforブロックを入れる場合、counterの変数名が重複しているとビルドエラーが発生します。

◆設定項目:
 ・counter…ループカウンタの変数名。
     name…変数名。半角英数で入力する
     type…変数の型。int,String,booleanなどから選択、または直接テキストを編集する
     isInitialize…初期化を行うか(True=初期化する、false=初期化しない)。trueの場合、initParamも必ず設定する。
     initParam…変数の初期化内容。typeで選んだ型に応じて、数値や文字列・変数などを設定する
 ・loop…繰り返しの回数。


◆分岐条件:
 なし



break

 現在実行されている一番近い繰り返しを中断して、その繰り返しの終了ブロックにジャンプします。繰り返しの外で使用するとビルドエラーが発生します。

◆設定項目:
 なし


◆分岐条件:
 なし


return

 メソッドを終了して、一つの戻り値を返します。戻り値は任意の定数・変数を設定できます。メソッドのtypeがvoid以外の場合は、必ずreturnを最後に入れてください。また、returnValueには、メソッドのtypeと同じ型の変数・定数を設定してください。

◆設定項目:
 ・returnValue…戻り値。メソッドのtypeと同じ型の定数・変数を設定する。


◆分岐条件:
 なし



衝突回避機能の一時無効

 ロボットの衝突回避機能を一時的に無効にします。このブロックを使う場合は、ワークスペースの設定を変更し衝突回避機能の切り替えを有効にする必要があります。ブロックには開始・終了があり、間に挟んだ処理を実行する間だけ、衝突回避機能が無効になります。

◆設定項目:
 なし



無限ループ

 while(true)に相当する命令が出力され、開始・終了の間に挟んだ処理を永久に繰り返します。

◆設定項目:
 なし


◆分岐条件:
 なし


while

 一つの比較条件式を持つwhile(…)文を作成します。

◆設定項目:
 ・partA…比較条件式の左辺を設定。任意の変数または定数を設定する。
 ・partB…比較演算子を設定。=,!=,<,<=,>,>=から選択。
 ・partC…比較条件式の右辺を設定。任意の変数または定数を設定する。


◆分岐条件:
 なし



ifブロック

 if/else if/elseによる汎用の条件分岐を作成します。分岐条件として、一つの比較条件式を設定できます。

◆設定項目:
 なし


◆分岐条件: 最小数=2、最大数=無限_
 ・isOnlyElse…2番目以降の条件の場合、比較条件式を出力せずに「else」を出力するかを設定。
               trueの場合、partA~Cの内容に関わらず「else」を出力する
 ・partA…比較条件式の左辺を設定。任意の変数または定数を設定する。
 ・partB…比較演算子を設定。=,!=,<,<=,>,>=から選択。
 ・partC…比較条件式の右辺を設定。任意の変数または定数を設定する。





switch case(整数)

 switch caseによる汎用の条件分岐を作成します。

◆設定項目:
 ・switchValue…各分岐条件と比較する数値を、任意の定数・変数から設定する。


◆分岐条件: 最小数=2、最大数=無限_
 ・condition…switchValueと比較する定数を整数で入力する
 ・isDefault…分岐条件を「default:」にするか否か



switch case(文字列)

 文字列(String型)によるswitch caseの条件分岐を作成します。

◆設定項目:
 ・switchValue…各分岐条件と比較する文字列を、任意の文字列・変数から設定する。


◆分岐条件: 最小数=2、最大数=無限_
 ・condition…switchValueと比較する文字列を設定する
 ・isDefault…分岐条件を「default:」にするか否か




ランダム

 switch caseによるランダムの条件分岐を作成します。

◆設定項目:
 ・range…発生する乱数の最大数を設定する。実際に得られる乱数は、この設定値-1の値になる


◆分岐条件: 最小数=2、最大数=無限_
 ・condition…設定項目の「range」と比較する定数を、整数で入力する
 ・isDefault…分岐条件を「default:」にするか否か






poseブロック

 ロボットにポーズを送信します。Poseブロックをはじめとした「RobotLib」カテゴリのブロックの一部は、ロボットの機種(ワークスペースの「ターゲット」の設定)に応じて切り替わります。

◆設定項目:
 ・ip_time…ポーズの遷移時間をmsec単位の整数で設定
 ・isSync…ポーズの遷移が完了するまで処理を待機するか


◆分岐条件:
 なし



soundブロック

 リソースファイルに登録したWavサウンドファイルを再生します。

◆設定項目:
 ・filepath…再生する音声ファイル。登録したリソースファイルから選択する


◆分岐条件:
 なし



waitブロック

 次の命令実行まで、一定時間待機します。

◆設定項目:
 ・time…待機時間をmsec単位の整数で設定


◆分岐条件:
 なし


モータON

 ロボットのモータをONにします。プログラムの開始時は必ずロボットのモータがOFFになっているので、モータを動かす場合はこのブロックでONにしてください。

◆設定項目:
 なし


◆分岐条件:
 なし



モータOFF

 ロボットのモータをOFFにします。

◆設定項目:
 なし


◆分岐条件:
 なし



自由記述処理

 入力したテキストを直接ソースに出力します。任意の処理を記述できますが、設定内容に問題があるとビルドエラーが発生します。また、コメントアウト(「//」「/*」「*/」)は記述しないで下さい。

◆設定項目:
 ・texts…ソースに出力するテキストを入力。
          設定・変更は、プロパティウィンドウの項目右端に表示される[...]ボタンをクリックする


◆分岐条件: 
 なし



ログ出力

 プログラム実行時に、コンソールウィンドウ(またはロボット内のシェルのコンソール)に任意のテキストを表示します。デバッグ用途などに利用できます。

◆設定項目:
 ・text…コンソールに出力するテキストを、任意の文字列・変数から設定


◆分岐条件: 
 なし


録音

 ロボットのマイクから音声を一定時間録音します。録音したファイルはロボットのプログラム転送先のディレクトリに保存されます。

◆設定項目:
 ・file…録音するファイル名を文字列・変数で設定
 ・time…録音する時間(msec単位)を数値・変数で設定


◆分岐条件: 
 なし



録音した音声を再生

 録音ブロックで録音した音声をロボットから再生させます。

◆設定項目:
 ・file…再生するファイル名を文字列・変数で設定


◆分岐条件: 
 なし




顔検出

 ロボット本体のカメラで人の顔の検出を行います。検出した顔をロボットに自動的に追跡させたい場合は「顔追跡」を使ってください。ブロックには開始・終了があり、この間に挟まれた部分で顔の検出を行います。顔検出の中に別の顔検出や顔追跡のブロックを入れると、カメラの使用が重複してプログラムの実行エラーが発生するため、これらのブロックは必ず同時に1個だけ実行されるようにしてください。

◆設定項目:
 ・ageSexDetect…年齢と性別の検出を行うか否か。「性別の判定」及び「年齢の判定」を使うときは、必ずtrueに設定する
 ・faceSerch…顔の検出を有効にするか否か。「顔が見つかったか?」を使うときは、必ずtrueに設定する
 ・smileDetect…笑顔の検出を行うか否か。「笑顔の判定」を使うときは、必ずtrueに設定する


◆分岐条件: 
 なし



顔追従

 ロボット本体のカメラで人の顔を検出し、また検出状況に応じてロボットの首を自動的に動かします。首の動きは、顔が検出されなければ周囲を見回し、検出されたらその方向を向きます。顔の検出のみ行い、ロボットの首を動かさない場合は「顔検出」を使ってください。

ブロックには開始・終了があり、この間に挟まれた部分で顔の検出と追従を行います。顔追従の中に別の顔追従や顔検出のブロックを入れると、カメラの使用が重複してプログラムの実行エラーが発生するため、これらのブロックは必ず同時に1個だけ実行されるようにしてください。

◆設定項目:
 ・ageSexDetect…年齢と性別の検出を行うか否か。「性別の判定」及び「年齢の判定」を使うときは、必ずtrueに設定する
 ・faceSerch…顔の検出を有効にするか否か。「顔が見つかったか?」を使うときは、必ずtrueに設定する
 ・smileDetect…笑顔の検出を行うか否か。「笑顔の判定」を使うときは、必ずtrueに設定する


◆分岐条件: 
 なし



顔が見つかったか?

 顔検出、及び顔追従の実行中に、顔が検出されたかどうかで処理を分岐します。ノイズによる誤動作を防ぐため「連続で顔が検出された回数」で条件分岐を行うことができます。分岐条件の「integerValue」を0、「operation」を「>」に設定すると、顔が検出されたら必ず条件が成立するようになります。

なお、顔検出、及び顔追従ブロックの外で本ブロックを使用するとプログラムの実行時にエラーが発生するので、必ずこれらのブロックの間に入れてお使いください。

◆設定項目:
 なし


◆分岐条件: 最小数=2、最大数=2_
 ・isOnlyElse…2番目以降の条件の場合、比較条件式を出力せずに「else」を出力するかを設定。
               trueの場合、partA~Cの内容に関わらず「else」を出力する
 ・partA(編集不可)…顔の連続検出回数
 ・partB…比較演算子を設定。=,!=,<,<=,>,>=から選択。
 ・partC…顔の連続検出回数と比較する数値。任意の変数または定数から設定



性別の判定

 顔検出、及び顔追従の実行中に、検出された顔の性別によって条件分岐を行います。分岐条件の登録数や内容は固定で、各分岐の条件は、1番目が「男性か?」、2番目の分岐が「女性か?」、3番目の分岐が「いずれでもない」です。

なお、本ブロックは、「ageSexDetect」の設定をtrueにした顔検出、及び顔追従ブロックの中でお使いください。この設定がfalseになっていたり、これらのブロックの外で本ブロックを使うと、プログラムの実行時にエラーが発生します。

◆設定項目:
 なし



◆分岐条件: 最小数=3、最大数=3_
 ・isOnlyElse…2番目以降の条件の場合、比較条件式を出力せずに「else」を出力するかを設定。
               trueの場合、partA~Cの内容に関わらず「else」を出力する
 ・partA(編集不可)…設定無し。
 ・partB(編集不可)…設定無し。
 ・partC(編集不可)…設定無し。



年齢の判定

 顔検出、及び顔追従の実行中に、検出された顔の年齢によって条件分岐を行います。

なお、本ブロックは、「ageSexDetect」の設定をtrueにした顔検出、及び顔追従ブロックの中でお使いください。この設定がfalseになっていたり、これらのブロックの外で本ブロックを使うと、プログラムの実行時にエラーが発生します。

◆設定項目:
 なし


◆分岐条件: 最小数=2、最大数=無限_
 ・isOnlyElse…2番目以降の条件の場合、比較条件式を出力せずに「else」を出力するかを設定。
               trueの場合、partA~Cの内容に関わらず「else」を出力する
 ・partA(編集不可)…検出した顔の年齢を表す数値
 ・partB…比較演算子を設定。=,!=,<,<=,>,>=から選択。
 ・partC…検出した顔の年齢と比較する数値。任意の変数または定数から設定



笑顔の判定

 顔検出、及び顔追従の実行中に、検出された顔の笑顔の点数によって条件分岐を行います。笑顔の点数は整数で取得され、一般的な「笑顔」の閾値は45付近です。

なお、本ブロックは、「smileDetect」の設定をtrueにした顔検出、及び顔追従ブロックの中でお使いください。この設定がfalseになっていたり、これらのブロックの外で本ブロックを使うと、プログラムの実行時にエラーが発生します。

◆設定項目:
 なし




◆分岐条件: 最小数=2、最大数=無限_
 ・isOnlyElse…2番目以降の条件の場合、比較条件式を出力せずに「else」を出力するかを設定。
               trueの場合、partA~Cの内容に関わらず「else」を出力する
 ・partA(編集不可)…検出した顔の笑顔の点数を表す数値
 ・partB…比較演算子を設定。=,!=,<,<=,>,>=から選択。
 ・partC…検出した顔の笑顔の点数と比較する数値。任意の変数または定数から設定




写真を撮る

 ロボットのカメラで写真を撮影します。撮影したファイルはロボットのプログラム転送先のディレクトリに保存されます(png形式)。

◆設定項目:
 ・file…記録するファイル名を文字列・変数で設定


◆分岐条件: 
 なし



TCP/IPクライアント

 同一ネットワークに存在する別のロボット及び端末に対して、TCP/IPで接続し、任意の文字列を送信します。文字列の最後には必ず改行コード(\n)が付加されます。分岐条件の登録数や内容は固定で、各分岐の条件は、1番目が「送信成功」、2番目の分岐が「それ以外(失敗)」です。

◆設定項目:
 ・data…接続先に送信する文字列。送信時には末尾に改行コード(\n)が付加される
 ・host…接続先のホスト名(IPアドレス)
 ・port…通信に使用するポート番号。


◆分岐条件: 最小数=2、最大数=2_
 なし(設定変更不可)





TCP/IPサーバ初期化

 TCP/IPサーバの初期化を行います。TCP/IPサーバ受信のブロックを使う場合は、必ず本ブロックの開始・終了の間に入れてください。

◆設定項目:
 ・port…通信に使用するポート番号
 ・timeout…クライアントからの接続待ち受け時間(msec単位)。接続が行われた後は、この設定時間に関係なく、改行コードが出現するまで受信を続ける


◆分岐条件:
 なし 



TCP/IPサーバ受信

 同一ネットワークに存在する別のロボット及び端末からのTCP/IP接続に対して対応し、任意の文字列を受信します。メッセージの受信は改行コード(\n)が出現するまで行います。また、正常にメッセージを受信できたら「OK\n」のメッセージを返信します。

 条件分岐は、受信したメッセージと文字列の比較で行い、両者が完全に一致した場合に条件が成立します。

本ブロックは、必ずTCP/IPサーバ初期化のブロックの間に入れてください。正しい場所で使用しないと、プログラムの実行時にエラーが発生します。

◆設定項目:
 なし 


◆分岐条件: 最小数=2、最大数=無限_
 ・isOnlyElse…2番目以降の条件の場合、比較条件式を出力せずに「else」を出力するかを設定。
               trueの場合、partA~Cの内容に関わらず「else」を出力する
 ・partA(編集不可)…設定なし。
 ・partB…受信したデータと比較する文字列。定数または変数から設定可能。両者が完全一致したら条件が成立する
 ・partC(編集不可)…設定なし。






音声合成

 「text」の項目で設定した文章をロボットに発話させます。音声の合成処理はネットワーク上のサーバで行うため、インターネットの接続環境が必要です。また、本ブロックはライセンスを供与されたユーザのみ利用できます。

◆設定項目:
 ・text…発話させる文章


◆分岐条件:
 なし



音声認識

 ロボットのマイクで取得した音声をテキストに変換し、その結果に応じて処理を分岐します。分岐条件には、認識結果と比較する文字列を設定でき、その文字列が認識結果に含まれていた場合に条件が成立します。例えば、比較する文字列に「こんにちは」と設定した場合、認識結果が「こんにちは」「どうも、こんにちは」のいずれも条件が成立します。

音声の認識処理はネットワーク上のサーバで行うため、インターネットの接続環境が必要です。また、本ブロックはライセンスを供与されたユーザのみ利用できます。

◆設定項目:
 なし


◆分岐条件: 最小数=2、最大数=無限_
 ・isOnlyElse…2番目以降の条件の場合、比較条件式を出力せずに「else」を出力するかを設定。
               trueの場合、partA~Cの内容に関わらず「else」を出力する
 ・partA(編集不可)…設定なし。
 ・partB…認識結果と比較する文字列。定数または変数から設定可能。認識結果の中にpartBの文字列が含まれたら条件成立。
 ・partC(編集不可)…設定なし。