Sota取扱説明書

チュートリアル

"チュートリアルでは、ソフトウェアの導入から、ロボット毎のプログラミング環境となる「ワークスペース」の作成、簡単な動作(モーション)の作成と実行を行い、実際にロボットを動かすまでの操作を、具体的な手順を例に説明します。 " "

1.

ソフトウェアの導入  本ソフトウェアの動作環境、及びインストール手順について説明します。

動作環境

" 本ソフトウェアの動作に必要な環境は以下になります。お使いのPCが動作環境を満たしているかご確認ください。 "

   <tr>
    <td>
    ■Vstone Magic 動作環境
    "l 
    OS:Windows Vista/7/8/8.1
    "l 
    .NET Framework 4.0(Client
    Profile) 
    "l 
    DirectX 11
    "l 
    ネットワーク環境
    </td>
   </tr>

" " " " " " "
" "

ダウンロード

" " 本ソフトウェアは、webページ「Sota Community」内の「ソフトウェア」ページにて公開しています。 "

 #ref(社内専用/image001.png" ,left,nowrap,null,100%)
   <tr>
    <td>
    「ソフトウェア」ページをクリック
    </td>
   </tr>


"●Sota Community URL "<a href="http://www.vstone.co.jp/sota/">http://www.vstone.co.jp/sota/ "

#ref(社内専用/image002.jpg" ,left,nowrap,null,100%)
<w:wrap type="square"/>

" " " " " " " " ソフトウェアのページを開くには、ユーザ登録が必要です。既にアカウントをお持ちの方は「サインイン」をクリックしてコミュニティページにログインしてください。アカウントをお持ちでない方は「アカウントの作成」をクリックして、アカウントを新規に作成してください。 "

  #ref(社内専用/image003.png" ,left,nowrap,null,100%)
    <tr>
     <td>
     アカウントをお持ちの場合、ログインする
     </td>
    </tr>
    <tr>
     <td>
     アカウントをお持ちでない場合、新規作成する
     </td>
    </tr>

" " " "
"
" ソフトウェアページに「Vstone Magic」が公開されているので、「Download」をクリックして、インストーラをダウンロードしてください。 "

  #ref(社内専用/image004.png" o:title="" croptop="16289f"
   cropbottom="12123f" cropleft="1f" cropright="17429f"/>
    <tr>
     <td>
     仮
     </td>
    </tr>
   <tr>
    <td>
    Downloadをクリック
    </td>
   </tr>

" " " " " " " "
" ファイルをダウンロードしたら、PC上の任意のフォルダに展開してください。展開すると、「VstoneMagic_Inst_***.exe」(*はバージョン番号)と「setup.exe」という二つのファイルができます。これらのうち、「setup.exe」を実行し、本ソフトウェアのインストールを開始してください。 "

  <tr>
   <td>
   を実行すると、ソフトウェアの動作に必要な.NET
   Frameworkがインストールされない場合があります。インストールを行う際は、必ずsetup.exeを実行してください。
   </td>
  </tr>
 #ref(社内専用/image005.png" o:title="" croptop="19228f"
  cropbottom="33556f" cropleft="18142f" cropright="26804f"/>
   <tr>
    <td>
    setup.exeを実行
    </td>
   </tr>

" " " " " " " " " "

インストール

" setup.exeを実行すると、最初に.NET FrameWorkのインストールが行われます。お使いのPCに、既にソフトウェアの動作に必要なバージョンの.NET FrameWorkがインストールされている場合、この作業は省略されます。 "
" " " .NET FrameWorkのインストールが完了すると、続いてソフトウェア本体のインストールを開始します。画面の表示に従って、それぞれ以下のように操作してください。 "

  #ref(社内専用/image006.png" ,left,nowrap,null,100%)
    <tr>
     <td>
     「次へ」をクリック
     </td>
    </tr>
  #ref(社内専用/image007.png" ,left,nowrap,null,100%)
    <tr>
     <td>
     「同意する」をチェックック
     </td>
    </tr>
    <tr>
     <td>
     「次へ」をクリック
     </td>
    </tr>
  #ref(社内専用/image008.png" ,left,nowrap,null,100%)
    <tr>
     <td>
     インストール先のフォルダを指定する場合は入力
     </td>
    </tr>
    <tr>
     <td>
     「次へ」をクリック
     </td>
    </tr>
  #ref(社内専用/image009.png" ,left,nowrap,null,100%)
    <tr>
     <td>
     「次へ」をクリック
     </td>
    </tr>
    <tr>
     <td>
     スタートメニュー中の
     グループを指定する場合は入力
     </td>
    </tr>
  #ref(社内専用/image010.png" ,left,nowrap,null,100%)
    <tr>
     <td>
     「次へ」をクリック
     </td>
    </tr>

" " " " " "
"

 #ref(社内専用/image011.png" ,left,nowrap,null,100%)
   <tr>
    <td>
    「完了」をクリック
    </td>
   </tr>
 #ref(社内専用/image012.png" ,left,nowrap,null,100%)
   <tr>
    <td>
    「インストール」をクリック
    </td>
   </tr>
 #ref(社内専用/image013.png" ,left,nowrap,null,100%)
   <tr>
    <td>
    インストールが
    完了するまで待つ
    </td>
   </tr>

" " " " " " " " " " " " " " " " " " " "

ソフトウェアの起動

" インストールが完了したら、一度ソフトウェアを起動してみましょう。OSのスタートメニューより、「すべてのプログラム」→「Vstone Magic」→「Vstone Magic」をクリックしてください。 "インストール時に「デスクトップにショートカットを作成する」にチェックを入れた場合、デスクトップ上に作成されたショートカットをダブルクリックしても実行できます。 " "

  #ref(社内専用/image014.png" ,left,nowrap,null,100%)
    <tr>
     <td>
     クリックして起動
     </td>
    </tr>
  #ref(社内専用/image015.png" ,left,nowrap,null,100%)
    <tr>
     <td>
     ショートカットをダブルクリックして起動
     </td>
    </tr>

" " " " " "
"
" 最初の起動時には、以下のメッセージが表示され、PC内に本ソフトウェアの設定が登録されます。「OK」をクリックし、初期化を実行してください。 "

 #ref(社内専用/image016.png" ,left,nowrap,null,100%)
   <tr>
    <td>
    クリック
    </td>
   </tr>

" " " " " "
"

   <tr>
    <td>
    Vstone Magic 起動画面例
    </td>
   </tr>
 #ref(社内専用/image017.png" ,left,nowrap,null,100%)
初期化が完了したら、以下のようなウィンドウを開きます。

" " " " " " " " " " " " " " " " " また、最初の起動時に以下の確認メッセージが表示される場合があります。本ソフトウェアの動作に必要な設定のため、「アクセスを許可する」をクリックしてください。 "

  #ref(社内専用/image018.png" ,left,nowrap,null,100%)
    <tr>
     <td>
     クリック
     </td>
    </tr>

" " " " " "
"_

画面説明

" 本ソフトウェアの基本画面における、各部の名称や概要について説明します。各部の詳しい操作や説明は、チュートリアル及びリファレンスで個別に解説します。 "

 #ref(社内専用/image019.png" ,left,nowrap,null,100%)
    <tr>
     <td>
     ・ツールバー(下段)
     </td>
    </tr>
    <tr>
     <td>
     ②ツールボックス
     </td>
    </tr>
    <tr>
     <td>
     ⑤エクスプローラ
     </td>
    </tr>
    <tr>
     <td>
     ③クラスウィンドウ
     </td>
    </tr>
    <tr>
     <td>
     ④ポーズウィンドウ
     </td>
    </tr>
    <tr>
     <td>
     ⑥コンソール
     </td>
    </tr>
    <tr>
     <td>
     ⑦プロパティウィンドウ
     </td>
    </tr>

" " " " " " " " " " " " " " " "

   <tr>
    <td>
    "①   
    メニュー・ツールバー…詳細設定やウィンドウの表示・通信等の操作を行います。
    "②   
    ツールボックス…プログラミングで使用する命令の選択を行います
    "③   
    クラスウィンドウ…プログラムの作成を行います
    "④   
    ポーズウィンドウ…プログラムで使用するロボットのポーズ(姿勢)の作成を行います
    "⑤   
    エクスプローラ…プログラムで使用するファイル等の表示・設定を行います
    "⑥   
    コンソール…プログラムのビルド・実行時に状況を表示します
    "⑦   
    プロパティウィンドウ…プログラム等の各種設定項目を表示・変更します
    ※画像では表示されていませんが、上記以外のウィンドウも存在します。
    </td>
   </tr>


"
" 各ウィンドウの名前を表示している箇所を「タイトルバー」と言い、タイトルバーをマウスでドラッグ&ドロップすることで、ウィンドウのレイアウトを変更することができます。 "

  #ref(社内専用/image020.png" o:title=""
   cropbottom="2772f"/>
     <tr>
      <td>
      タイトルバーをドラッグして
      ウィンドウを移動・分離・合体
      </td>
     </tr>
     <tr>
      <td>
      ウィンドウを折りたたみ
      </td>
     </tr>
  #ref(社内専用/image021.png" ,left,nowrap,null,100%)
    <tr>
     <td>
     タイトルバー
     </td>
    </tr>
  #ref(社内専用/image022.png" ,left,nowrap,null,100%)
    <tr>
     <td>
     ウィンドウを分離
     </td>
    </tr>

" " " " "

2.

プログラミングの準備  本項目では、ロボットのプログラミングを始めるまでに必要な手順について説明します。

ワークスペースの作成

" 本ソフトウェアでは、ロボット毎に独立したプログラミング設定を作成することができます。この設定を「ワークスペース」と言います。ロボットのプログラムを作成する場合、最初にお使いのロボットに対するワークスペースを作成する必要があります。 " " 新しくワークスペースを作成する場合、メニューより「ファイル」→「ワークスペースの新規作成」をクリックしてください。クリックすると、「ワークスペースの新規作成」画面を開くので、ワークスペース名や作成先などを入力してください。デフォルトの設定で問題なければ、そのまま「作成」をクリックしてください(ワークスペースの作成先はデフォルトの設定では「マイドキュメント\VstoneMagic\WorkSpace\」のフォルダに作成されます)。 " "

 #ref(社内専用/image023.png" ,left,nowrap,null,100%)
   <tr>
    <td>
    クリック
    </td>
   </tr>
#ref(社内専用/image024.png" ,left,nowrap,null,100%)
<w:wrap type="square"/>

" "

  <tr>
   <td>
   "■    テンプレート…使用するロボットの機種を選択
   "■    名前…ワークスペースの名前を半角英数文字で入力
   "■    作成先…ワークスペースを作成するフォルダを入力
   </td>
  </tr>

" " " " " " " " " " "
" 「作成」をクリックすると、「作成先」で指定した場所に、設定した名前のフォルダが作成され、また、作成したワークスペースを本ソフトウェアで開いた状態になります。 "

  #ref(社内専用/image025.png" ,left,nowrap,null,100%)
    <tr>
     <td>
     ワークスペースを作成すると、自動的に本ソフトウェアで開いた状態になり、
     エクスプローラにワークスペースに
     関する情報が表示される
     </td>
    </tr>


" "
"また、ワークスペースのフォルダには、「(ワークスペース名).VWS」と言うファイルがあります。本ソフトウェアを起動していない状態で、このファイルをダブルクリックすると、最初からワークスペースを開いた状態でソフトウェアを起動します。 "

 #ref(社内専用/image026.png" ,left,nowrap,null,100%)
    <tr>
     <td>
     VWSファイルをダブルクリックすると、
     最初からワークスペースを開いた状態で起動
     </td>
    </tr>

" " " " " " " "

パッケージとクラスの概要

" ロボットのプログラムファイルは、複数のメソッドをまとめた「クラス」と、更にクラスを複数まとめた「パッケージ」の二段階で必ず構成されます。プログラムを作成する場合、まずはこれらをワークスペースに作成します。なお、ワークスペースの作成時に選択したテンプレートによっては、既にパッケージとクラスが作成されている場合があります。 "

 #ref(社内専用/image027.png" ,left,nowrap,null,100%)
   <tr>
    <td>
    パッケージ
    </td>
   </tr>
   <tr>
    <td>
    クラス
    </td>
   </tr>
  <tr>
   <td>
   ■パッケージとクラスの例(Sota)
   ワークスペースのテンプレートにSotaを選択した場合、「jp.co.mysota」というパッケージと「mymain.java」と言うクラスがあらかじめ作成されています。
   </td>
  </tr>

" " " " " " " " " " " " "
"パッケージやクラスが存在しない場合や、今後これらを追加する必要がある場合、その作成手順を次ページより説明します。既にパッケージやワークスペースが存在する場合、次項「ロボットの通信設定と接続」から引き続きお読みください。
" " パッケージを追加する場合、エクスプローラの「src」を右クリックしてポップアップメニューを表示してください。続いて、メニューの「新規」→「パッケージ」をクリックしてください。クリックすると、「パッケージの追加」画面を開くので、パッケージ名を入力してください。 "

 #ref(社内専用/image028.png" ,left,nowrap,null,100%)
   <tr>
    <td>
    クリック
    </td>
   </tr>
  <tr>
   <td>
   【パッケージ名について】
   プログラミングでは、原則としてパッケージ名は他者と重複しないユニークな命名を行います。例えば「yahoo.co.jp」など、個人や企業でドメインを取得している場合、そのドメイン名はユニークな名前であると言えます。一般的なjavaのプログラムでは、このドメイン名を逆転したものをパッケージ名に使用します。
   </td>
  </tr>
 #ref(社内専用/image029.png" ,left,nowrap,null,100%)
   <tr>
    <td>
    パッケージ名を入力
    </td>
   </tr>

" " " " " " " " " " " " " " " "
" 名前を入力して「OK」をクリックすると、エクスプローラの「src」の項目に、作成したパッケージが追加されます。 "

  #ref(社内専用/image030.png" ,left,nowrap,null,100%)
    <tr>
     <td>
     作成したパッケージが追加される
     </td>
    </tr>

" " " "
" "
" 続いてクラスを作成します。追加したパッケージを右クリックしてメニューを開き、「新規」→「クラス」をクリックしてください。クリックすると、「クラスの追加」画面を開くので、各種項目を入力してください。 " "

 #ref(社内専用/image031.png" ,left,nowrap,null,100%)
   <tr>
    <td>
    追加したパッケージを右クリック
    </td>
   </tr>
   <tr>
    <td>
    クリック
    </td>
   </tr>


"

#ref(社内専用/image032.png" ,left,nowrap,null,100%)
<w:wrap type="square"/>

" " "

  <tr>
   <td>
   "■    追加先のパッケージ…クラスを追加するパッケージを選択
   "■    クラス名…クラスの名前を半角英数文字で入力
   "■    テンプレート…使用するロボットの機種を選択
   </td>
  </tr>

" " " " " " " " " " "
"

 #ref(社内専用/image033.png" ,left,nowrap,null,100%)
   <tr>
    <td>
    作成したクラスが追加される
    </td>
   </tr>
 項目を入力し「OK」をクリックすると、エクスプローラのパッケージ内に作成したクラスが追加されます。

" " " " " " " " 実際のプログラミングについては、次章で説明します。
_

ロボットの通信設定と接続

" プログラムの作成中や実行時には、ロボットと通信する必要があります。次の手順で、本ソフトウェアより通信設定を行い、ロボットと通信させてみましょう。 "

  <tr>
   <td>
   ロボットとの通信はネットワーク経由で行われます。ロボットと通信するためには、PCとロボットを同一ネットワーク上に接続し、本ソフトウェア上で、接続先のロボットのIPアドレスを指定する必要があります。ロボット本体のネットワーク接続方法、及びIPアドレスの確認方法は、お使いのロボットの取扱説明書をご参照ください。
   </td>
  </tr>
  <tr>
   <td>
   ロボット本体は、あらかじめ起動してネットワークに接続した状態にしてください。
   </td>
  </tr>

" " " " " " " "
" 本ソフトウェアの通信設定を行う場合は、メニューの「設定/通信」→「接続設定...」をクリックして、ロボットの通信設定画面を開いてください。 "

 #ref(社内専用/image034.png" ,left,nowrap,null,100%)
   <tr>
    <td>
    クリック
    </td>
   </tr>

" " " " " " "
"

 #ref(社内専用/image035.png" ,left,nowrap,null,100%)
     <tr>
      <td>
      Sota(Raspberry Pi版)
      </td>
     </tr>
     <tr>
      <td>
      Sota(Edison版)
      </td>
     </tr>
     <tr>
      <td>
      Sota(仮想ロボット)
      </td>
     </tr>
    <tr>
     <td>
     ロボットの接続設定画面例(テンプレートに「Sota」を選択した場合)
     </td>
    </tr>
  設定画面には、現在登録されているロボットの接続設定がリストアップされています。ワークスペースの作成時に選択したテンプレートによっては、既に接続先が登録されている場合があります。下図は、ワークスペース作成時にテンプレートで「Sota」を選択した場合に、最初から登録されている接続設定です。

" " " " "
" " ここでは、例としてSotaの接続設定の手順を説明します。Sotaには、Raspberry Pi版とEdison版の2種類が存在するため、接続先としてあらかじめこれらの2種類が登録されています。お使いのSota本体の仕様に合わせて、どちらかをクリックしてください。どちらかの接続先をクリックしたら、設定画面下の「設定変更」をクリックしてください。 "

 #ref(社内専用/image036.png" ,left,nowrap,null,100%)
   <tr>
    <td>
    Sota(Raspberry Pi版)はこちらをクリック
    </td>
   </tr>
   <tr>
    <td>
    Sota(Edison版)はこちらをクリック
    </td>
   </tr>

" " " " " "
"ちなみに、これら以外にもう一つ登録されている設定(「プラットフォーム」が’Virtual’の物)は、仮想ロボット用の接続設定です。仮想ロボットは、ロボットの実機が無い状態で、PC上に表示されるロボットの3Dモデルを仮想ロボットとして操作する場合に使います。詳しくは「9.仮想ロボットによるシミュレーション」の項目をご参照ください " " 「設定変更」をクリックすると、選択した項目の詳細設定画面を開きます。Sotaの場合、設定変更が必要な項目は「host」のみです。hostの項目をクリックし、ロボット本体のIPアドレスに書き換えてください。設定を書き換えたら「OK」をクリックしてください。 "

  #ref(社内専用/image037.png" ,left,nowrap,null,100%)
      <tr>
       <td>
       「host」の設定を、ロボット本体のIPアドレスに書き換える
       </td>
      </tr>
     <tr>
      <td>
      クリック
      </td>
     </tr>

" " " " " " " " " " " " " " " " "
" "
" 「OK」をクリックすると、ロボットの通信設定画面に戻ります。戻ってきた画面上で、「接続先」の項目が正しく書き換わっているか確認し、続いて「接続」をクリックしてください。クリックすると、設定画面を閉じてロボットとの通信を開始します。 "

 #ref(社内専用/image038.png" ,left,nowrap,null,100%)
    <tr>
     <td>
     変更した設定を確認
     </td>
    </tr>
    <tr>
     <td>
     クリック
     </td>
    </tr>

" " " " " " " " " "
" ロボットとの接続状態は、ツールバーの「通信ボタン」で表示されます。ロボットと正しく通信できた場合、通信ボタンのアイコンが「通信中」になります(接続準備中、一時的に「通信エラー」になります)。もし「通信エラー」のまま変化がない場合、本ソフトウェアの設定、またはPC・ロボット本体・ネットワーク環境全体のいずれかの問題が考えられます。 " "

 #ref(社内専用/image039.png" ,left,nowrap,null,100%)
    <tr>
     <td>
     通信ボタン
     </td>
    </tr>
  <tr>
   <td>
   ■通信ステータス(通信ボタンのアイコン)
    #ref(社内専用/image040.emz" ,left,nowrap,null,100%)
   …未接続    
    #ref(社内専用/image041.emz" ,left,nowrap,null,100%)
   …通信中    
    #ref(社内専用/image042.emz" ,left,nowrap,null,100%)
   …通信エラー
   正しく通信できない場合、以下の事項をそれぞれご確認ください。
   "l  ロボットのIPアドレスが本ソフトウェアで設定したものと同じか
   "l  PC及びロボット本体がネットワークに接続できているか
   "l  ネットワーク環境に接続の制限を行うような設定が行われていないか
   "l  ネットワーク環境のトラフィックや、その他動作に問題が無いか
   </td>
  </tr>

" " " " " " " " " " " " " " "
" ロボットとの通信を切断したり、再度同じロボットに接続する場合は、通信ボタンをクリックしても行うことができます。通信中(

#ref(社内専用/image041.emz" ,left,nowrap,null,100%)

)・及び通信エラー(

#ref(社内専用/image042.emz" ,left,nowrap,null,100%)

)の状態でクリックすると通信を切断し、未接続(

#ref(社内専用/image040.emz" ,left,nowrap,null,100%)

)の状態でクリックすると、同じ接続先に通信を開始します。
"

3.

単純なモーションプログラムの作成 "「プログラミングの準備」でロボットとの通信・プログラミングの準備を整えたら、続いて簡単なモーション(動作)のプログラムを作成してみましょう。本章では、Sotaを例に、実際のプログラミングの手順について説明します。 " "ロボットのプログラミングは、クラスの中で行います。まずは、エクスプローラより、現在パッケージに登録されているクラス(Sotaの場合「mymain.java」)をダブルクリックしてください。ダブルクリックすると、本ソフトウェア内に「クラスウィンドウ」を開きます。 "

 #ref(社内専用/image043.png" ,left,nowrap,null,100%)
  #ref(社内専用/image027.png" ,left,nowrap,null,100%)
      <tr>
       <td>
       ダブルクリック
       </td>
      </tr>
      <tr>
       <td>
       クリックしたクラスの
       「クラスウィンドウ」が開く
       </td>
      </tr>

" " " " " " " " " "

命令ブロックの追加

"ロボットのプログラミングは、フローチャートのような感覚で、クラス上に「命令ブロック」を並べ、それを実行順につなぎ合わせて作成します。命令ブロックは「ツールボックス」のウィンドウに表示され、マウス操作で任意のブロックを選び、クラスウィンドウに追加できます。 "使用できる命令ブロックの種類は、使用するロボットの機種やワークスペースの設定などによって変わります。 "

  #ref(社内専用/image044.png" ,left,nowrap,null,100%)
     <tr>
      <td>
      プログラム例:フローチャートのように、「命令ブロック」を実行順に接続する
      </td>
     </tr>
     <tr>
      <td>
      ツールボックス:使用できる「命令ブロック」を表示・選択
      </td>
     </tr>

" " " " " "
"
"それでは、簡単な例として「Sotaの両腕を上げ下げする」というプログラムを作成してみましょう。 "

  • ○ メソッドとコンストラクタ 種類の命令ブロックが作成されています。これらはそれぞれ「メソッド」と「コンストラクタ」と言うブロックです。
     #ref(社内専用/image045.png" ,left,nowrap,null,100%)
       <tr>
        <td>
        ■メソッド
        ロボットに実行させる命令をこのブロックの中に接続する
        </td>
       </tr>
       <tr>
        <td>
        ■コンストラクタ
        クラスで使用する変数の初期設定などを行う。場合によって自動的にブロックが追加される
        </td>
       </tr>

    個のブロックがセットになっており、この間に「モータON」「ポーズ」等、実際のロボットの動きに関する命令ブロックをつなげます。  「コンストラクタ」は、メソッドの一種ですが、クラスの初期設定に関する命令を作成するためのメソッドです。命令ブロックの種類によっては、クラスに追加すると、必要な変数が自動的にコンストラクタに追加されます。
      <tr>
       <td>
       コンストラクタはプログラムの実行に必要な設定を行っており、中の命令ブロックを設定変更や変更すると、正しくプログラムが実行できなくなる場合があります。チュートリアル中、及びプログラム中の必要時以外に、コンストラクタの内容を変更しないで下さい。
       </td>
      </tr>

     メソッドについて補足すると、メソッド(関数)は、一連の処理の開始・終了を表すもので、メソッドブロックに接続されていない命令ブロックはロボットに実行させることができません。また、詳細は後述しますが、プログラムを実行する際は、作成したプログラムに含まれるメソッドから任意の物を「メインメソッド」として設定し、そのメソッドから実行を開始します。
      #ref(社内専用/image046.png" o:title="" croptop="42570f"
       cropleft="24185f"/>
        <tr>
         <td>
         メソッドに入っていないブロックは実行されない
         </td>
        </tr>

    "
  • ○ モータONブロックの追加と接続 のメソッドに必要な命令ブロックを追加していきましょう。ロボットは、プログラムの開始直後はモータがOFFの状態なので、動作の指示を与えても実際にモータが動きません。そこで、動作の中身を作る前に、最初にモータONの処理が実行されるようなプログラミングが必要です。  命令ブロックをクラスに追加する場合、ツールボックスからクラスウィンドウに目的の命令ブロックをドラッグ&ドロップします。ツールボックスから「モータON」のブロックを探して、クラスウィンドウにドラッグ&ドロップしてください。またこの時、メソッドの開始側のブロックのコネクタ(
    #ref(社内専用/image047.png" ,left,nowrap,null,100%)
    の部分)にドロップしましょう。これにより、最初から追加したブロックがメソッドブロックと接続されます。
     #ref(社内専用/image048.png" ,left,nowrap,null,100%)
       <tr>
        <td>
        ブロックが追加され、メソッドブロックと接続される
        </td>
       </tr>
     #ref(社内専用/image049.png" ,left,nowrap,null,100%)
       <tr>
        <td>
        モータON
        </td>
       </tr>
       <tr>
        <td>
        ドラッグ中はブロックの種類によってアイコンが変わる
        </td>
       </tr>
       <tr>
        <td>
        メソッドの開始側の
        コネクタ(
         #ref(社内専用/image047.png" ,left,nowrap,null,100%)
        )にドロップ
        </td>
       </tr>
    "
    "命令ブロック内にある、ブロック同士を接続するインターフェースを「コネクタ」と言い、
    #ref(社内専用/image047.png" ,left,nowrap,null,100%)
    #ref(社内専用/image050.png" ,left,nowrap,null,100%)
    のようなアイコンで表示されます。コネクタは、ブロックの接続状態に応じて表示色が切り替わります。 "
      <tr>
       <td>
       ■コネクタの接続ステータス
        #ref(社内専用/image051.png" ,left,nowrap,null,100%)
        #ref(社内専用/image052.png" ,left,nowrap,null,100%)
       …未接続   
        #ref(社内専用/image053.png" ,left,nowrap,null,100%)
        #ref(社内専用/image054.png" ,left,nowrap,null,100%)
       …接続済    
        #ref(社内専用/image055.png" ,left,nowrap,null,100%)
        #ref(社内専用/image056.png" ,left,nowrap,null,100%)
       …接続可能
       「接続可能」は、ブロック同士の接続操作(後述)において、目的の接続が可能な状況を表します。
       </td>
      </tr>
     #ref(社内専用/image057.png" ,left,nowrap,null,100%)
        <tr>
         <td>
         コネクタ
         </td>
        </tr>
    " " " " " " "
    " コネクタに追加するブロックをドラッグ&ドロップした時のように、ブロック同士が接続可能な状態では、コネクタの色がオレンジ(
    #ref(社内専用/image058.png" ,left,nowrap,null,100%)
    #ref(社内専用/image059.png" ,left,nowrap,null,100%)
    )になります。ブロックを接続する方法としては、これ以外に「コネクタ同士を真横に隣接させる」「コネクタをドラッグして矢印を引っ張り、接続先のブロックにドロップする」等があります。詳細は、後述のクラスウィンドウに関する操作説明で紹介します。
    "
  • ○ ポーズブロックの追加と接続  次に「腕を上げ下げする」というロボットの実動作部分を作成します。本ソフトウェアのモーション(動作)の構造は「キーフレームアニメーション」形式であり、一連の動作における途中の姿勢(ポーズ)を並べて、そのポーズ間をつなぐ時間を設定する方式になります(いわゆるパラパラ漫画と同じような方式です)。 一般のパラパラ漫画(アニメーション)では、動きを滑らかに見せるために細かいコマ割りが必要ですが、Sotaの場合、各キーフレームのポーズ間をロボット自身が自動的に補間するため、少ないポーズでも動作させることができます。 例えば、今回の「腕を上げ下げする」をキーフレームアニメーションの形に分解すると、①「腕を下げたポーズ(実行直後)」→②「腕を上げたポーズ」→③「腕を下げたポーズ」の3つのポーズになります。 "
      #ref(社内専用/image060.png" ,left,nowrap,null,100%)
        <tr>
         <td>
         ①手を下げたポーズ
         </td>
        </tr>
      #ref(社内専用/image061.png" ,left,nowrap,null,100%)
        <tr>
         <td>
         ②手を上げたポーズ
         </td>
        </tr>
      #ref(社内専用/image060.png" ,left,nowrap,null,100%)
        <tr>
         <td>
         ③手を下げたポーズ
         </td>
        </tr>
       <tr>
        <td>
        </td>
       </tr>
       <tr>
        <td>
        </td>
       </tr>
    " " " " " " " " " " " " "
    " 個別のポーズを制御する命令ブロックは「poseブロック」が該当します。それでは、モータONブロックの後に、ポーズブロックを3個追加しましょう。poseブロックを追加すると、コンストラクタに自動でブロックが追加されます。これはposeブロックの実行に必要な変数(インスタンス)が追加されたためです。先に説明した通り、コンストラクタの内容を変更するとプログラムが正しく実行できなくなる場合があるため、コンストラクタは操作せずに作業を進めてください。 "
      #ref(社内専用/image062.png" ,left,nowrap,null,100%)
        <tr>
         <td>
         Poseブロック
         </td>
        </tr>
        <tr>
         <td>
         モータONの後に追加
         </td>
        </tr>
    " " " " "
    "
    " ブロックを追加した場合に、ブロック同士が重なるなどしてつなげにくくなった場合は、ブロックをドラッグして動かしましょう。 " "
     #ref(社内専用/image063.png" ,left,nowrap,null,100%)
       <tr>
        <td>
        ドラッグして移動させる
        </td>
       </tr>
     #ref(社内専用/image064.png" ,left,nowrap,null,100%)
       <tr>
        <td>
        残りのブロックを追加
        </td>
       </tr>
    " " " " " " " "
    "以上で必要なブロックの追加は完了です。続いて、次項でポーズの作成を行います。 " "
    "

ポーズの設定

"前項で追加したposeブロックで設定されたポーズは全て、初期値である「気を付け」の状態になっています。「手を上げ下げする」動作のためには、2番目のポーズを「手を上げたポーズ」に変更する必要があります(1,3番目のポーズは「気を付け」のままで動作上問題ありません)。 "ロボットのポーズ編集は、クラスウィンドウとは別に専用のウィンドウである「ポーズウィンドウ」が存在します。まずはposeブロックをダブルクリックして、ポーズウィンドウを開きましょう。 " "

 #ref(社内専用/image064.png" ,left,nowrap,null,100%)
   <tr>
    <td>
    2番目のポーズをダブルクリック
    </td>
   </tr>
 #ref(社内専用/image065.png" ,left,nowrap,null,100%)
   <tr>
    <td>
    ポーズウィンドウを開く
    </td>
   </tr>

" " " " " " " " " "
"ポーズウィンドウには、ポーズ編集用のインターフェースである「ポーズスライダ」が並んでいます。ポーズスライダは、基本的に各モータやLEDの色(R・G・B)などによって個別に備わっており、対応する箇所の名前・現在のポーズの設定値(角度や明るさ)、またロボットと通信中の場合は、ロボット自身の現在の設定値(モータ角度等)を表示します。 "また、「ツマミ」や「スピンボタン」をマウス操作で操作して設定値を編集したり、ロボットと通信している場合はロボットからポーズを読み取って編集中のポーズに取り込むことも可能です。 "

   <tr>
    <td>
    ■ポーズスライダ
    "l  名前:ポーズスライダの名前(原則として対応する関節やLED等の名称)
    "l  ツマミ:マウスでドラッグしてポーズ値を操作
    "l  読み出し値:ロボット本体の現在のポーズ(通信中のみ表示)
    "l  基準値:基準ポーズ(後述)の位置を表示
    "l  スピンボタン:クリックしてポーズ値を一定量増減
    "l  チェックボックス:ポーズでの使用・未使用を選択
    "l  ポーズ値:現在のポーズ値
    "l  モータゲイン:モータの出力を表示・設定(関節に割り当てられたポーズスライダのみ表示)
    </td>
   </tr>
  #ref(社内専用/image066.png" ,left,nowrap,null,100%)
     <tr>
      <td>
      名前
      </td>
     </tr>
     <tr>
      <td>
      読み出し値
      </td>
     </tr>
     <tr>
      <td>
      チェックボックス
      </td>
     </tr>
     <tr>
      <td>
      ポーズ値
      </td>
     </tr>
      <tr>
       <td>
       スピンボタン
       </td>
      </tr>
     <tr>
      <td>
      基準値
      </td>
     </tr>
     <tr>
      <td>
      モータゲイン
      </td>
     </tr>
     <tr>
      <td>
      ツマミ
      </td>
     </tr>

" "
" "
"ポーズエリアの特徴は、キーボードからの数値入力ではなく、ポーズスライダによるマウス操作(ドラッグやクリック)可能であり、また、ロボットと画面上の表示・設定がリアルタイムでフィードバックされるため、視覚的にわかりやすくポーズを編集できます。また、設定値のコピー・ペーストや、ロボットの右半身と左半身で、ポーズのコピーや反転ができるなど、ポーズ編集に便利な機能が備わっています。 "

  <tr>
   <td>
   ロボットと通信していなくてもポーズの作成は可能ですが、ロボット本体へのポーズのフィードバックや教示などの機能は、通信中のみ有効です。
   </td>
  </tr>

" " " " "

  • ○ ポーズスライダの操作 " それでは、ポーズスライダを操作してポーズの編集を行っていきます。ただ、最初は安全性を考えて、ロボットのモータを動かさずLEDの色を変えて、ポーズスライダの操作を確認しましょう。ここでは例として右目LEDのRGBに対応する「LED REYE R」「~G」「~B」の三つのポーズスライダを動かしてみます。 "
     #ref(社内専用/image067.png" o:title=""
      cropbottom="22870f" cropright="8817f"/>
        <tr>
         <td>
         右目LEDのR要素(赤)
         </td>
        </tr>
        <tr>
         <td>
         右目LEDのG要素(緑)
         </td>
        </tr>
        <tr>
         <td>
         右目LEDのB要素(青)
         </td>
        </tr>
    " " " " " " " " " "
    " ツマミをドラッグして、Rを最大値(255)、Gを最小値(0)にしてみましょうBは元々最小(0)なので、ロボットの右目が赤くなります。ツマミのドラッグでは、大きくポーズ値を変えることができますが、数値の変化が大きいので細かい角度の調整には不向きです。また、関節に対応したポーズスライダなどは、急激にモータが動きやすいので周囲との衝突に注意しましょう。 "
      #ref(社内専用/image068.png" ,left,nowrap,null,100%)
        <tr>
         <td>
         右目が赤くなる
         </td>
        </tr>
      #ref(社内専用/image069.png" ,left,nowrap,null,100%)
         <tr>
          <td>
          右端(最大値)までドラッグ
          </td>
         </tr>
         <tr>
          <td>
          左端(最小値)までドラッグ
          </td>
         </tr>
    " " " " "
    "
    " 今度は、スピンボタンをクリックして、RとBを125にしてみましょう。これでRとBが同じ輝度になり、右目が紫になります。 "
     #ref(社内専用/image070.png" ,left,nowrap,null,100%)
       <tr>
        <td>
        右目が紫になる
        </td>
       </tr>
     #ref(社内専用/image071.png" ,left,nowrap,null,100%)
        <tr>
         <td>
         クリック
         </td>
        </tr>
        <tr>
         <td>
         クリック
         </td>
        </tr>
    " " " " " " "
    "スピンボタンのクリックでは、ポーズ値が一定量増減します。【+】をクリックすると値が増え、【-】をクリックすると値が減ります。この方法では、一度に増減する値が決まっており、またツマミのドラッグよりも急激な変化が少ないため、細かい位置の調整に向いています。 " " スピンボタンのクリックで増減する量は、あらかじめポーズスライダ毎に設定されており、ツマミをドラッグした場合も、ポーズ値はこの増減量の倍数に丸め込まれます。 " "
  • ○ 基準ポーズとポーズの初期化 " ポーズスライダの操作方法を確認したら、編集したポーズを最初の状態(「気を付け」)に戻しましょう。 " " ブロック作成時に最初に設定されているポーズは「基準ポーズ」と言い、この時のポーズ値は各ポーズスライダの基準となります。基準ポーズはロボットの機種毎に異なりますが、基本的には「気を付け」のような、あらゆる動作の元になるポーズが最初に設定されています。 " " ポーズスライダでは、基準ポーズの値を表すツマミの位置に「基準値」のアイコンが表示されます。また、主にモータのポーズスライダは、基準ポーズを±0とした相対的な数値でポーズ値が表示されます。それでは、ツールバーの「ポーズ初期化」をクリックして、編集した右目LEDのポーズ値を戻しましょう。 "
      #ref(社内専用/image072.png" ,left,nowrap,null,100%)
         <tr>
          <td>
          「ポーズ初期化」
          ボタンをクリック
          </td>
         </tr>
      #ref(社内専用/image073.png" o:title=""
       cropbottom="18255f" cropleft="1f" cropright="20317f"/>
        <tr>
         <td>
         ポーズエリアのツールバー
         </td>
        </tr>
      #ref(社内専用/image074.png" ,left,nowrap,null,100%)
         <tr>
          <td>
          各ポーズ値が初期化される
          </td>
         </tr>
    " " " "
    "
  • ○ ポーズのキャプチャ " それでは、今度は実際にロボットのポーズを編集してみましょう。ポーズ編集は基本的にLEDと同じく、モータが割り当てられたポーズスライダを操作することで作成できますが、ポーズについてはロボット本体から取り込む「教示」を行い、微調整のみポーズスライダで行うと、簡単かつ直感的にポーズを作成できるので、今回はこの方法で進めてみたいと思います。 " "ロボットの関節に対応したポーズスライダは、ロボット本体と通信中の場合、ロボットからポーズをキャプチャすることが可能です。ポーズのキャプチャは、ポーズウィンドウのツールバーの「ポーズキャプチャ」ボタンで行います。まずは、ロボットの各関節を手で動かして、手を上げた状態にしてください。手でポーズを合わせたら、続いてツールバーのポーズキャプチャボタンをクリックしてください。 "
      <tr>
       <td>
       ロボットのモータがONになっていて手で動かせない場合は、次項の説明を参考にポーズをOFFにしてから、手でモータを動かしてください。モータがONの状態で無理にモータを動かすと破損する恐れがあるため、絶対におやめください。
       </td>
      </tr>
     #ref(社内専用/image075.jpg" o:title="DSCN0209s"
      croptop="20008f" cropbottom="2567f" cropright="3322f"/>
       <tr>
        <td>
        ロボットの関節を手で動かし、
        「手を上げる」ポーズに合わせる
        </td>
       </tr>
     #ref(社内専用/image076.png" ,left,nowrap,null,100%)
        <tr>
         <td>
         モータに対応するポーズ
         スライダの値が書き換わる
         </td>
        </tr>
     #ref(社内専用/image077.png" ,left,nowrap,null,100%)
       <tr>
        <td>
        ポーズキャプチャボタンをクリック
        </td>
       </tr>
    " " " " " " " " " " " " " " " "
    " ポーズキャプチャは、非常に早く・直感的にポーズを編集できますが、ポーズ値を特定の数値(角度)に合わせたり、左右のポーズを完全に対称にするなどの細かい・正確な編集には不向きなため、これらの必要がある場合は、ポーズキャプチャした後に、これまで説明した操作でポーズを微調整しましょう。 "
      #ref(社内専用/image076.png" ,left,nowrap,null,100%)
         <tr>
          <td>
          キャプチャしたポーズ(例)
          </td>
         </tr>
         <tr>
          <td>
          数値が中途半端な値になる
          </td>
         </tr>
         <tr>
          <td>
          完全な左右対称ではない
          </td>
         </tr>
    "

  • ○ ロボットのモータのON/OFF "ポーズスライダには関節(モータ)が割り当てられているものがありますが、ロボット本体のモータがOFFの場合、ポーズスライダを操作しても実際にモータが動くことはありません。モータを動かすには、ポーズウィンドウよりモータをONにする必要があります。モータをONにすることで、LEDのように編集中のポーズがロボットにフィードバックされるようになります。 " "モータのON/OFFを切り替える場合は、ポーズウィンドウのツールバーの「モータON/OFFボタン」をクリックします(クラスウィンドウでポーズブロックをクリックし、ポーズを編集できる状態にである必要があります)。モータがONの場合は、ボタンのアイコンが「
    #ref(社内専用/image078.png" ,left,nowrap,null,100%)
    」、OFFの場合は「
    #ref(社内専用/image079.png" ,left,nowrap,null,100%)
    」で表示されます。 " "
    #ref(社内専用/image080.jpg" o:title="DSCN0208s"
     croptop=".25" cropbottom="15252f" cropleft="11275f" cropright="16309f"/>
    <w:wrap type="square"/>
    それでは、ボタンをクリックしてモータをONにしてみましょう。ONにすると、ロボット本体のモータに力が入り、現在編集しているポーズに遷移します。今回の場合、ロボット本体が先ほどキャプチャした「手を上げる」ポーズで固まります。 "
     #ref(社内専用/image081.png" ,left,nowrap,null,100%)
       <tr>
        <td>
        モータON/OFFボタン
        </td>
       </tr>
      <tr>
       <td>
       現在のポーズでモータが固まる
       </td>
      </tr>
    " " " " " " " " "
       <tr>
        <td>
        モータをONにしている場合、ロボット本体の関節がロボット自身や周囲の物と衝突・干渉して、破損や事故が起こらないように十分注意してください。特に、関節が干渉し続けてモータに無理な負荷がかかり続ける「モータロック」の状態が起こらないように注意してください。
        ■注意が必要な操作(一例)
        "&Oslash; 
        モータON時(一部または全身の関節が一度に大きく動く場合がある)
        "&Oslash; 
        ポーズブロックのクリック時(別のポーズに切り替わる瞬間)
        "&Oslash; 
        ポーズスライダのツマミのドラッグ時(関節が大きく動く場合がある)
        "&Oslash; 
        可動範囲が狭い関節の操作(見た目にモータロックがわかりづらい場合がある)
        </td>
       </tr>
    " "
    "
  • ○ ポーズスライダの選択と微調整 それでは、中途半端な角度値や左右のポーズ値の差異、無関係なモータのポーズ値の初期化をそれぞれ行います。これらの操作を行う場合、操作対象のポーズスライダを「選択」すると、効率的に操作が可能です。 " ポーズウィンドウの何もないところをマウスでドラッグすると、水色の枠を表示します。この枠にポーズスライダを重ねると、ポーズスライダが緑色に変化し「選択状態」になります。先に説明したポーズの初期化や、別項で説明するポーズ値のコピー・貼り付けなどは、ポーズスライダを選択することで、選択した場所のみに操作を適用できます。 " それでは、「首ピッチ軸」「首ロール軸」「首ヨー軸」「胴体」の4つのポーズスライダを選択し、ツールバーの「ポーズ初期化」をクリックして、基準ポーズに戻しましょう。
     #ref(社内専用/image082.png" ,left,nowrap,null,100%)
       <tr>
        <td>
        何もないところをドラッグすると
        水色の枠を表示
        </td>
       </tr>
       <tr>
        <td>
        選択状態のポーズスライダ(緑色)
        </td>
       </tr>
     #ref(社内専用/image077.png" ,left,nowrap,null,100%)
       <tr>
        <td>
        ポーズ初期化ボタンをクリック
        </td>
       </tr>

     続いて、中途半端なポーズ値を整えます。ポーズ値の操作はポーズスライダのツマミまたはスピンボタンで可能ですが、ここでは数値を合わせやすいように、スピンボタンのクリックで調整しましょう。左肩のポーズ値を110.00°、左肘のポーズ値を0.00°に、それぞれ設定してください。右腕・右肘は調整しなくても良いです。
     #ref(社内専用/image083.png" ,left,nowrap,null,100%)
       <tr>
        <td>
        スピンボタンで
        ポーズ値を整える
        </td>
       </tr>

    " 最後に、ポーズをきれいに左右対称にしましょう。ポーズを左右対称にするには「半身コピー」の機能を使います。左腕・左肘の2軸のポーズスライダを選択し、ツールバーの「左半身コピー」ボタンをクリックしましょう。クリックすると、両腕・両肘のポーズ値が同じになります。 "
      #ref(社内専用/image084.png" o:title=""
       cropbottom="5924f"/>
         <tr>
          <td>
          左腕・左肘2軸を選択
          </td>
         </tr>
      #ref(社内専用/image077.png" ,left,nowrap,null,100%)
        <tr>
         <td>
         左半身コピーボタンをクリック
         </td>
        </tr>
    " "
    "

プログラムのビルド・実行

" それでは、ここで一度、作成したプログラムを実行してみましょう。本ソフトウェアのプログラムはjavaソースとして保存され、実行する前にJavaDevelopmentKit(JDK)でビルドされます。エラーが発生せずビルドに成功すれば、ロボット本体でプログラムを実行できます。 "

  • ○ メインメソッドの設定 "ビルドの前に、プログラムで最初に実行するメソッドを設定する必要があります。このメソッドを「メインメソッド」と言います。メインメソッドは、エクスプローラまたはクラスウィンドウから設定することができます。 " エクスプローラでメインメソッドを設定する場合は、設定するメソッドを右クリックしてポップアップメニューを開き、メニューの「メインメソッドに設定」をクリックしてください。クラスウィンドウでメインメソッドを設定する場合は、これと同様に設定するメソッドを右クリックしてポップアップメニューを開き、メニューの「メインメソッドに設定」をクリックしてください。メインメソッドを設定すると、エクスプローラ上でそのメソッドのアイコンが「
    #ref(社内専用/image085.png" ,left,nowrap,null,100%)
    」で表示されます。 " "
     #ref(社内専用/image086.png" ,left,nowrap,null,100%)
        <tr>
         <td>
         ②クリック
         </td>
        </tr>
        <tr>
         <td>
         ①メインメソッドに設定する項目を右クリック
         </td>
        </tr>
     #ref(社内専用/image087.png" ,left,nowrap,null,100%)
       <tr>
        <td>
        メインメソッドは
         #ref(社内専用/image085.png" ,left,nowrap,null,100%)
        のアイコンで表示
        </td>
       </tr>
    " " " " " "
    "  " "
  • ○ プログラムのビルド・実行 "プログラムのビルドは、ツールバーの「ビルドボタン」及び「実行ボタン」で行います。ビルドボタンはプログラムのビルドのみ行い、実行ボタンはプログラムのビルド後に、ロボット本体にプログラムを転送して実行します。プログラムの実行は、必ずロボット本体と通信中である必要があります。 "それでは、ロボット本体との通信を確認し、「実行ボタン」をクリックして、作成したプログラムを実行してみましょう。 "
      #ref(社内専用/image088.png" ,left,nowrap,null,100%)
        <tr>
         <td>
         ビルドボタン
         プログラムのビルドのみ行う
         </td>
        </tr>
        <tr>
         <td>
         実行ボタン
         プログラムのビルドと実行を行う
         </td>
        </tr>
    " " "
    "
    " ビルド・実行の進行状況は、コンソールウィンドウに表示されます。 "
     #ref(社内専用/image089.png" o:title="" croptop="48341f"
      cropbottom="-1f" cropright="15278f"/>
       <tr>
        <td>
        ビルド・実行の状況をコンソールウィンドウに表示
        </td>
       </tr>
    " " " " " "
  • ○ プログラムの実行停止 " ツールバーの「停止ボタン」をクリックすると、現在実行しているプログラムを停止します。 "
     #ref(社内専用/image088.png" ,left,nowrap,null,100%)
       <tr>
        <td>
        停止ボタン
        実行中のプログラムを停止する
        </td>
       </tr>
    " " " "
  • ○ ロボット本体へのプログラム割り当て " ビルドしたプログラムは、ロボット本体のプログラムに組み込んで、本ソフトウェアを使わずにロボット単体で実行させることができます。Sotaの場合、○ボタンを押すことで組み込んだプログラムを実行できます。 " 本体にプログラムを組み込む場合、次の操作でワークスペースの設定を変更し、改めてプログラムを実行してください。 "
     #ref(社内専用/image090.png" ,left,nowrap,null,100%)
        <tr>
         <td>
         ①右クリック
         </td>
        </tr>
        <tr>
         <td>
         ②クリック
         </td>
        </tr>
     #ref(社内専用/image091.png" ,left,nowrap,null,100%)
       <tr>
        <td>
        クリック
        </td>
       </tr>

    "  " " " " " " " " " " " "
      #ref(社内専用/image092.png" ,left,nowrap,null,100%)
        <tr>
         <td>
         プログラムを実行
         </td>
        </tr>
      #ref(社内専用/image093.png" ,left,nowrap,null,100%)
        <tr>
         <td>
         クリック
         </td>
        </tr>
    "
    "
    " ロボット本体にプログラムを割り当てたら、一度本体単体で実行してみましょう。Sotaの背面にある○ボタンを短く1回押して、プログラムが実行されるか確認してみましょう。プログラムの起動には数秒の時間がかかります。 "
     #ref(社内専用/image094.png" ,left,nowrap,null,100%)
       <tr>
        <td>
        ○ボタンを押してプログラムを実行
        </td>
       </tr>
    " " " " " " " " " " " " " "
    " ○ボタンで起動したプログラムの実行中に再び○ボタンを押すと、プログラムの実行を停止します。 "
      <tr>
       <td>
       本ソフトウェアからプログラムを実行する場合は、○ボタンで起動したプログラムを終了させてから行ってください。
       </td>
      </tr>
    " " " "
    " 以上が、本ソフトウェアのプログラミングの基本的な手順になります。他にも説明していないソフトウェアの機能があるため、それらを含めて、次章からは更に複雑なプログラムを作成してみたいと思います。
    "

クラスウィンドウ・ポーズウィンドウの操作に関する補足

" クラスウィンドウ・ポーズウィンドウは、本ソフトウェアの中心となるインターフェースであり、プログラミングやモーション編集に役立つ様々な機能を搭載しています。いくつかの機能は既に説明済み、またはこれから説明しますが、本項目にてそれらに関する機能をいくつか紹介します。チュートリアルを次に進めたい場合は、本項目を読み飛ばして、次章「4. クラス・メソッドを切り分けたプログラムの作成」にお進みください。 "

  • ○ 編集するポーズブロックの選択 "ポーズウィンドウの内容は、クラスウィンドウで最後にクリック(ダブルクリック含む)したブロックの内容が反映されます。クリックしたブロックがポーズブロックの場合、そのポーズが表示され編集できるようになります。それ以外の種類のブロックをクリックした場合は、ポーズスライダの一部が非表示になり、編集機能が無効になります。 "
     #ref(社内専用/image095.png" ,left,nowrap,null,100%)
        <tr>
         <td>
         編集したいポーズ
         ブロックをクリック
         </td>
        </tr>
        <tr>
         <td>
         クリックしたブロックのポーズに変化する
         </td>
        </tr>
     #ref(社内専用/image096.png" ,left,nowrap,null,100%)
        <tr>
         <td>
         ポーズブロック以外をクリック
         </td>
        </tr>
        <tr>
         <td>
         ポーズ編集が無効になる
         </td>
        </tr>
    " " " " " " " " " " " "
  • ○ ポーズの選択・一括操作 " ポーズスライダは、クラスウィンドウの命令ブロックと同じく、マウスの操作で選択状態にすることができます。選択したポーズスライダは、数値をコピー・貼り付けしたり、マウスのホイールで数値を一括操作したりすることができます。 "
      #ref(社内専用/image097.png" ,left,nowrap,null,100%)
        <tr>
         <td>
         何もないところをドラッグすると、水色の枠を表示
         </td>
        </tr>
      #ref(社内専用/image098.png" ,left,nowrap,null,100%)
        <tr>
         <td>
         選択状態のポーズスライダ(緑色)
         </td>
        </tr>

    "
    " マウスホイールによるポーズ値の操作は、例えば両腕・両目など対になるポーズ値を同時に編集する場合に便利な機能です。対になるポーズスライダを選択してマウスホイールを操作すると、左右対称なポーズ編集などを容易に行うことができます。
     #ref(社内専用/image099.png" ,left,nowrap,null,100%)
       <tr>
        <td>
        対になるポーズスライダを選択してマウスホイールを動かす
        </td>
       </tr>
     #ref(社内専用/image100.png" ,left,nowrap,null,100%)
       <tr>
        <td>
        対称的なポーズ編集を
        一括に行うことができる
        </td>
       </tr>

  • ○ コピー・貼り付け・半身コピー・鏡像反転 "
     #ref(社内専用/image077.png" ,left,nowrap,null,100%)
       <tr>
        <td>
        コピーボタン
        </td>
       </tr>
       <tr>
        <td>
        貼り付けボタン
        </td>
       </tr>
       <tr>
        <td>
        半身コピーボタン(右から左)
        </td>
       </tr>
       <tr>
        <td>
        半身コピーボタン(左から右)
        </td>
       </tr>
       <tr>
        <td>
        鏡像反転ボタン
        </td>
       </tr>
    選択したポーズスライダに対して、ポーズのコピー・貼り付けなどの操作を行う場合、ポーズウィンドウのツールバーの各ボタンをクリックします。
    "
     #ref(社内専用/image101.png" ,left,nowrap,null,100%)
       <tr>
        <td>
        ポーズウィンドウのツールバー
        </td>
       </tr>
    " " " " " " "
       <tr>
        <td>
        一つもポーズスライダを選択していない状態で、コピー・貼り付け・半身コピー(左右)・鏡像反転・ポーズ初期化・ポーズキャプチャの各操作を行うと、全部のスライダに操作が反映されます(貼り付けのみ、コピー時に選択されていないポーズスライダが省かれます)。
        </td>
       </tr>
    ~

  • ○ ポーズの半身コピー・鏡像反転 " ポーズの半身コピーは、ポーズスライダを右半身・左半身に分けて、互いのポーズをコピーする機能です。 "
     #ref(社内専用/image102.png" ,left,nowrap,null,100%)
       <tr>
        <td>
        元のポーズ
        </td>
       </tr>
     #ref(社内専用/image103.png" ,left,nowrap,null,100%)
       <tr>
        <td>
        半身コピー
        (右から左)
        </td>
       </tr>
     #ref(社内専用/image104.png" ,left,nowrap,null,100%)
       <tr>
        <td>
        半身コピー
        (左から右)
        </td>
       </tr>
    " " " " " " " " " " "
    "また、鏡像反転は、左右半身のポーズを反転する機能です。首ヨー軸・首ロール軸・胴体ヨー軸のように体の中心を通るような関節は、基準ポーズを基点にポーズ値が反転します。 "
     #ref(社内専用/image102.png" ,left,nowrap,null,100%)
       <tr>
        <td>
        元のポーズ
        </td>
       </tr>
     #ref(社内専用/image105.png" ,left,nowrap,null,100%)
       <tr>
        <td>
        鏡像反転
        </td>
       </tr>
    " " " " " " " " " " " "
    "ポーズの鏡像反転・鏡像コピー機能は、対となるポーズスライダのどちらかが選択されていれば、一方が選択されていなくても操作が反映されます。
    "
  • ○ 命令ブロックのコネクタとブロック同士の接続  クラスウィンドウでブロック同士の接続を行う場合、次のような方法があります。
      <tr>
       <td>
       ■ブロック追加時に、接続先のコネクタをクリック
       "先程モータONブロックを追加した手順のように、クラスにブロックを追加する際に、マウスカーソルをコネクタに合わせてドロップすると、最初からクリックしたブロックと接続した状態でブロックが追加されます。
       </td>
      </tr>
     #ref(社内専用/image106.png" ,left,nowrap,null,100%)
        <tr>
         <td>
         隣接すると「接続可能」になる
         </td>
        </tr>
     #ref(社内専用/image048.png" ,left,nowrap,null,100%)
       <tr>
        <td>
        ブロックが追加され、メソッドブロックと接続される
        </td>
       </tr>
     #ref(社内専用/image049.png" ,left,nowrap,null,100%)
       <tr>
        <td>
        モータON
        </td>
       </tr>
       <tr>
        <td>
        ドラッグ中はブロックの種類によってアイコンが変わる
        </td>
       </tr>
       <tr>
        <td>
        メソッドの開始側の
        コネクタ(
         #ref(社内専用/image047.png" ,left,nowrap,null,100%)
        )にドロップ
        </td>
       </tr>
     #ref(社内専用/image107.png" ,left,nowrap,null,100%)
       <tr>
        <td>
        ドラッグを終了して接続
        </td>
       </tr>
     #ref(社内専用/image108.png" ,left,nowrap,null,100%)
        <tr>
         <td>
         ドラッグ
         </td>
        </tr>
       <tr>
        <td>
        ■接続するブロック同士のコネクタを隣接させる
        "ブロックのコネクタ同士を真横に隣接させると、コネクタが「接続可能」になります。その状態でドラッグを終了すると、ブロック同士が接続されます。
        </td>
       </tr>

    "
     #ref(社内専用/image109.png" ,left,nowrap,null,100%)
        <tr>
         <td>
         コネクタが「接続可能」になる
         </td>
        </tr>
      <tr>
       <td>
       ■接続先のコネクタにブロックをドラッグ&amp;ドロップする
       "ブロックの接続先のコネクタにブロックをドラッグ&amp;ドロップすると、コネクタが「接続可能」になります。そのままドラッグを終了すると、ブロックを接続できます。
       </td>
      </tr>
     #ref(社内専用/image107.png" ,left,nowrap,null,100%)
       <tr>
        <td>
        ドラッグを終了して接続
        </td>
       </tr>
      #ref(社内専用/image108.png" ,left,nowrap,null,100%)
         <tr>
          <td>
          コネクタにドラッグ
          </td>
         </tr>

    ブロックをドラッグして接続した場合、ドラッグしたブロックに元々つながっていたブロックとの接続は切り離されます。
     #ref(社内専用/image110.png" ,left,nowrap,null,100%)
        <tr>
         <td>
         まとめてブロックを接続したい場合
         </td>
        </tr>
     #ref(社内専用/image111.png" ,left,nowrap,null,100%)
        <tr>
         <td>
         先頭とそれ以降の接続が切れる
         </td>
        </tr>
     #ref(社内専用/image112.png" ,left,nowrap,null,100%)
       <tr>
        <td>
        先頭のブロックだけ接続すると…
        </td>
       </tr>
    "
    元々の接続を保ったまま接続を行う場合は、ドラッグ元につながっているすべてのブロックを選択状態にして、接続操作を行ってください。
      #ref(社内専用/image113.png" ,left,nowrap,null,100%)
      #ref(社内専用/image114.png" ,left,nowrap,null,100%)
         <tr>
          <td>
          先頭のブロックを接続
          </td>
         </tr>
          <tr>
           <td>
           元の接続は途切れない
           </td>
          </tr>
      #ref(社内専用/image115.png" ,left,nowrap,null,100%)
        <tr>
         <td>
         接続するブロックをすべて選択
         </td>
        </tr>

    " "
      <tr>
       <td>
       ■接続元のコネクタから接続先のブロックに矢印をドラッグ&amp;ドロップする
       "ブロック右側のコネクタをドラッグすると赤い矢印を引っ張ることができ、接続先のブロックにドロップすると接続できます。この接続では、既にメソッドやループなどに囲まれて接続されているブロックはつなげられません。
       </td>
      </tr>
     #ref(社内専用/image116.png" ,left,nowrap,null,100%)
       <tr>
        <td>
        接続される
        </td>
       </tr>
     #ref(社内専用/image117.png" ,left,nowrap,null,100%)
        <tr>
         <td>
         接続先のブロックにドロップ
         </td>
        </tr>
        <tr>
         <td>
         コネクタをドラッグ
         </td>
        </tr>
    " " " " " " " " " " "
  • ○ 命令ブロックの接続の解除 ブロックの接続を切り離す場合は、キーボードのSHIFTを押しながらブロックをクリックしてください。
     #ref(社内専用/image118.png" ,left,nowrap,null,100%)
        <tr>
         <td>
         切り離したいブロック
         </td>
        </tr>
     #ref(社内専用/image119.png" ,left,nowrap,null,100%)
     #ref(社内専用/image120.png" ,left,nowrap,null,100%)
        <tr>
         <td>
         SHIFTキーを押しながらクリック(ドラッグ)
         </td>
        </tr>
        <tr>
         <td>
         接続が切れる
         </td>
        </tr>

    こちらもブロックの接続と同様、複数のブロックの接続を保ったまま切り離す場合、接続を保ちたいブロックを選択状態にして操作してください。
     #ref(社内専用/image121.png" ,left,nowrap,null,100%)
        <tr>
         <td>
         まとめて切り離したいブロックをあらかじめ選択する
         </td>
        </tr>
      #ref(社内専用/image122.png" ,left,nowrap,null,100%)
      #ref(社内専用/image123.png" ,left,nowrap,null,100%)
         <tr>
          <td>
          SHIFTキーを押しながら
          先頭のブロックを
          クリック(ドラッグ)
          </td>
         </tr>
         <tr>
          <td>
          選択部分はつながったままクリックしたブロックの
          接続が切れる
          </td>
         </tr>

    "

4.

クラス・メソッドを切り分けたプログラムの作成 "本ソフトウェアでは、一つのクラス内に複数のメソッドを作成したり、クラスそのものを複数作成することができます。プログラム中の処理を、これらの形式で細分化することで、類似する処理を使いまわしたり、プログラム自体を整理することができます。 "例えば、繰り返しや分岐を多用する複雑なプログラムをメインメソッド一つで作成する場合、ブロック数が非常に多くなり、プログラムが煩雑になります。そこで、類似する処理や動作(モーション)を別のメソッドとして作成しておき、メインメソッドからは、それらをサブメソッドとして呼ぶ仕組みにすると、メインメソッドは大まかなロジック処理だけの記述となり、プログラムの流れを整理しやすくなります。また、サブメソッドの数が多くなってプログラムが見づらい場合は、サブメソッド専用のクラスを別に作成してそちらにサブメソッドをまとめると、プログラム全体を把握しやすくなります。 "

  #ref(社内専用/image046.png" ,left,nowrap,null,100%)
   <tr>
    <td>
    mainメソッド
    (アルゴリズム部のみ
    </td>
   </tr>
   <tr>
    <td>
    subメソッド1
    (動作部のみ)
    </td>
   </tr>
   <tr>
    <td>
    subメソッド2
    (動作部のみ)
    </td>
   </tr>
   <tr>
    <td>
    subメソッドを呼び出し
    </td>
   </tr>
  <tr>
   <td>
   ■サブメソッドの活用例
   "一般にモーション(動作)のプログラムは長くなるため、別のメソッドに切り分けます。メインメソッドはアルゴリズムを中心にプログラムし、動作が必要な箇所でサブメソッドを呼び出します。
   </td>
  </tr>

" " " " " " " " " " " " " " " " " " " " "
" 本章にて、先ほど作成したプログラムをベースに、クラスやメソッドを分けたプログラムを作成してみましょう。具体的には、ポーズブロックを使った実際の動作部分を「motion」というクラスに分けて、先ほど作成した動作をmotionクラスに移します。また、motionクラスに新しい動作として「右手を上げる」「左手を上げる」「うなづく」の動きをそれぞれ追加します。そして、メインメソッドからは、motionクラスのそれぞれのメソッドを呼び出して、作成した全ての動作を実行してみましょう。
" "

クラスとメソッドの追加

" まずは、現在のワークスペースに新しいクラスとメソッドを追加します。まずは、メインクラスを作成したときと同じように、次の手順でワークスペースにクラス「motion」を作成してください。 "

  • ○ クラスの追加 "
      #ref(社内専用/image124.png" ,left,nowrap,null,100%)
         <tr>
          <td>
          現在のパッケージを右クリック
          </td>
         </tr>
         <tr>
          <td>
          「新規」→「クラス」をクリック
          </td>
         </tr>
      #ref(社内専用/image125.png" ,left,nowrap,null,100%)
        <tr>
         <td>
         クラス「motion」が追加される
         </td>
        </tr>
      #ref(社内専用/image126.png" ,left,nowrap,null,100%)
        <tr>
         <td>
         クラス名を
         ’motion’に設定
         </td>
        </tr>
        <tr>
         <td>
         クリック
         </td>
        </tr>
    " " " " "

  • ○ サブメソッドの作成と命令ブロックのコピー・貼り付け " "motionクラスを追加したら、エクスプローラからダブルクリックして、motionクラスのクラスウィンドウを表示しましょう。更に、メソッドブロックを一つ追加して、メインメソッドの動作の移植先を作りましょう。 "
     #ref(社内専用/image127.png" ,left,nowrap,null,100%)
       <tr>
        <td>
        「motion」のクラスウィンドウが開く
        </td>
       </tr>
     #ref(社内専用/image128.png" ,left,nowrap,null,100%)
       <tr>
        <td>
        メソッドブロックを一つ追加
        </td>
       </tr>
     #ref(社内専用/image125.png" o:title=""
      cropbottom="11424f"/>
       <tr>
        <td>
        「motion」を
        ダブルクリック
        </td>
       </tr>
    " " " " " " " " " " " " " " " " " " " "
    " 続いて、メソッドの名前を「mot1」に変更しましょう。追加したメソッドブロックをクリックすると「プロパティウィンドウ」に現在の設定が表示されるので、「methodName」の項目を「method」から「mot1」に書き換えてください。 "
      #ref(社内専用/image129.png" ,left,nowrap,null,100%)
         <tr>
          <td>
          メソッド名を「mot1」に変更
          </td>
         </tr>
      #ref(社内専用/image130.png" ,left,nowrap,null,100%)
        <tr>
         <td>
         クリック
         </td>
        </tr>
        <tr>
         <td>
         プロパティウィンドウ
         </td>
        </tr>

    "
    " 続いて、現在メインメソッドに存在する「手を上げる」動作をmotionクラスに移動します。命令ブロックは、ポーズスライダと同様にマウス操作で選択することができ、選択したブロックは、一般的なWindowsのファイル等のように、コピー・切り取り・貼り付けが可能です。ブロックのコピー・貼り付けは、異なるクラス間でも行うことができます。 " " " まずは、「mymain.java」のクラスウィンドウのタイトルバーをクリックして、コピー元のクラスを画面に表示させます。続いてクラスウィンドウ中の何もないところをドラッグして、目的のブロックを選択状態にしてください。ブロックを選択したら、クラスウィンドウのツールバーの「切り取り」ボタンでブロックを切り取ってください。 " "
      #ref(社内専用/image131.png" ,left,nowrap,null,100%)
        <tr>
         <td>
         mymain.javaのタイトルバーをクリック
         </td>
        </tr>
      #ref(社内専用/image132.png" ,left,nowrap,null,100%)
        <tr>
         <td>
         コピーするブロックを選択
         </td>
        </tr>
      #ref(社内専用/image133.png" ,left,nowrap,null,100%)
        <tr>
         <td>
         「切り取り」ボタンをクリック
         </td>
        </tr>
        <tr>
         <td>
         選択したブロックが切り取られる
         </td>
        </tr>
    " " " " " " " " " " " " " " " " " " " " " "
    "
    "続いて、motion.javaにブロックを貼り付けます。貼り付けたブロックのつなげ方は、つなげるブロックのコネクタ同士を隣接させます。モータONブロックをドラッグして、メソッドの開始ブロックに隣接させましょう。 " "
      #ref(社内専用/image134.png" ,left,nowrap,null,100%)
        <tr>
         <td>
         motion.javaのタイトルバーをクリック
         </td>
        </tr>
      #ref(社内専用/image135.png" ,left,nowrap,null,100%)
        <tr>
         <td>
         「貼り付け」ボタンをクリック
         </td>
        </tr>
        <tr>
         <td>
         コピーしたブロックが貼り付けられる
         </td>
        </tr>
      #ref(社内専用/image136.png" ,left,nowrap,null,100%)
        <tr>
         <td>
         コピー・接続完了
         </td>
        </tr>
      #ref(社内専用/image137.png" ,left,nowrap,null,100%)
        <tr>
         <td>
         つなげるブロックの
         コネクタを隣接させる
         </td>
        </tr>
    " " " " " " " " " " " " " " " " " " " " " "
    "

メインメソッドからのサブメソッドの呼び出し

"新しいクラスとメソッドを作成したら、メインメソッドからサブメソッドを呼び出す部分を作りましょう。サブメソッドは、エクスプローラの項目をクラスウィンドウにドラッグ&ドロップすることで、そのメソッドを呼び出す命令ブロックを追加できます。 "エクスプローラより、motion.javaの「mot1」メソッドを、mymain.javaのクラスウィンドウにドラッグ&ドロップしてください。 "

 #ref(社内専用/image138.png" ,left,nowrap,null,100%)
   <tr>
    <td>
    クラスウィンドウにmot1をドラッグ&amp;ドロップ
    </td>
   </tr>
   <tr>
    <td>
    ドラッグしたメソッドを
    呼び出すブロックが追加される
    </td>
   </tr>

" " " " " " " " " " " " "
" mot1を呼び出す命令ブロックが作成されたら、mainのメソッドに接続してください。ちなみに、ブロックの接続方法は、ブロック同士の隣接以外に「接続元のコネクタをドラッグし、矢印を接続先のブロックにドロップする」と言う方法もあります。ここではその方法で接続してみましょう。 " " "

 #ref(社内専用/image139.png" ,left,nowrap,null,100%)
   <tr>
    <td>
    コネクタから接続先のブロックへ矢印をドラッグ&amp;ドロップ
    </td>
   </tr>
 #ref(社内専用/image140.png" ,left,nowrap,null,100%)
   <tr>
    <td>
    接続される
    </td>
   </tr>

" " " " " " " "
" それでは、正しくプログラムが作成できているか、一度ビルド・実行して確かめましょう。本ソフトウェアのツールバーより「実行ボタン」をクリックして、プログラムのビルドと実行を行ってください。実際の動作は先ほどのプログラムと変わりませんが、エラーが出ずにビルド・実行できれば、正しくプログラムが作成できています。
" プログラムの実行が確認できたら、更にmotionクラスに別の動作(メソッド)を追加します。作成した「mot1」のメソッドを、今度はコピーして同じmotionクラス上に二つ貼り付けましょう。 " "

  #ref(社内専用/image141.png" ,left,nowrap,null,100%)
    <tr>
     <td>
     メソッドmot1をすべて選択
     </td>
    </tr>
    <tr>
     <td>
     「コピー」をクリック
     </td>
    </tr>
 #ref(社内専用/image142.png" ,left,nowrap,null,100%)
   <tr>
    <td>
    「貼り付け」をクリック
    </td>
   </tr>

" " " " " " " " "
"コピーしたメソッドは、それぞれ「mot2」「mot3」という名前に変更してください。そして、前者を「右手だけ上げる」、後者「左手だけ上げる」という動作に作り変えましょう。ポーズウィンドウが既に開いている場合、クラスウィンドウでposeブロックをクリックするとそのブロックのポーズが編集できるようになります(poseブロック以外をクリックすると、ポーズスライダの一部が非表示になり、編集機能が無効になります)。 "

 #ref(社内専用/image143.png" ,left,nowrap,null,100%)
   <tr>
    <td>
    「右手だけ上げる」ポーズに変更
    </td>
   </tr>
   <tr>
    <td>
    methodNameをmot2に変更
    </td>
   </tr>
   <tr>
    <td>
    methodNameをmot3に変更
    </td>
   </tr>
   <tr>
    <td>
    「左手だけ上げる」ポーズに変更
    </td>
   </tr>

" " " " " " " " " " " "
" 両手を上げる動作を「片手を上げる」に変更する場合、各メソッドの2番目のポーズ(手を上げたポーズ)を、左右どちらかだけ基準ポーズに戻せば作成できます。 "

  #ref(社内専用/image144.png" ,left,nowrap,null,100%)
    <tr>
     <td>
     下げる側の腕を選択
     </td>
    </tr>
    <tr>
     <td>
     ポーズ初期化をクリック
     </td>
    </tr>


"
" mot2,mot3の動作を作成したら、先ほどのようにエクスプローラよりメインメソッドのクラスウィンドウにドラッグ&ドロップし、メソッド呼び出しブロックを追加しましょう。 "

 #ref(社内専用/image145.png" ,left,nowrap,null,100%)
    <tr>
     <td>
     作成した各メソッドをドラッグ&amp;ドロップ
     </td>
    </tr>

" " " " " " " " " " " " " "
"追加したブロックをメインメソッドに接続したら、プログラムの実行確認をしてください。 "

 #ref(社内専用/image146.png" ,left,nowrap,null,100%)
    <tr>
     <td>
     メインメソッドにブロックを接続
     </td>
    </tr>
    <tr>
     <td>
     「実行ボタン」をクリック
     </td>
    </tr>

" " " " " " " " " " "
" ビルドエラーが出ずにプログラムが実行され、ロボットがmot1、mot2、mot3の各動作をすれば、正しくプログラムが作成できています。 "

   <tr>
    <td>
    基本的に、クラスやメソッドが大きくなりすぎると、プログラムが見づらくなり、無駄も多くなります・このような場合に、クラスやメソッドを小分けすることで、プログラムの整理ができます。
    </td>
   </tr>


"
" サブメソッドを単体で動作確認したい場合は、サブメソッド自体をメインメソッドに設定することで、メインメソッドに呼び出しブロックを追加せずに確認できます。確認後はメインメソッドの設定を忘れず元に戻しましょう。 "

 #ref(社内専用/image147.png" ,left,nowrap,null,100%)
    <tr>
     <td>
     確認したいメソッドを右クリック
     </td>
    </tr>
    <tr>
     <td>
     クリックしてメインメソッドにする
     </td>
    </tr>
 #ref(社内専用/image148.png" ,left,nowrap,null,100%)
   <tr>
    <td>
    実行するといきなり
    サブメソッドから始まる
    </td>
   </tr>

" " " " " " " " " " "

   <tr>
    <td>
    メインメソッドで初期化処理(モータON等)を行っているプログラムの場合、サブメソッド単体で動作確認すると、その初期化処理が実行されず、正しく実行されない場合があります。サブメソッド単体での実行時に、エラーが発生したり意図した動作にならなければ、この点に問題が無いか確認してください。
    </td>
   </tr>

" "
"

5.

繰り返しや条件分岐を使った顔認識プログラムの作成 " ロボットには、カメラやマイク等のセンシングデバイスが多数備わっていますが、これらを使うプログラムでは「一定時間で入力情報を繰り返し取得する」「取得した入力情報によって処理を分岐する」と言う仕組みが基本となります。これを実現するために、本ソフトウェアでは繰り返しや条件分岐の仕組みを持つ命令ブロックが多数備わっています。本章では、Sotaの顔認識プログラムを参考に、これらの機能の使い方や、プログラムのアルゴリズムについて説明します。 " "

繰り返し機能の使用例

" 繰り返し機能を持つブロックにはforやwhileなどがあります。繰り返し機能を持つブロックは、メソッドブロックのように「開始」と「終了」の2個で構成され、間に挟んだブロックが繰り返し対称となります。 "

  • ○ forブロックによる繰り返し " まずは、forブロックを使ったシンプルな規定回数の繰り返しをしてみましょう。forブロックをmymainのクラスに追加してください。 "
     #ref(社内専用/image149.png" ,left,nowrap,null,100%)
        <tr>
         <td>
         forブロック
         </td>
        </tr>
    " " " " " " " "
    " まずはブロックの接続を行いましょう。メインメソッドには、mot1、mot2、mot3のサブメソッドがあります。このうちmot2とmot3だけをforのブロックで挟んで繰り返されるようにしましょう。 "既に接続しているブロックを切り離す場合は、切り離すブロックを全て選択し、キーボードのSHIFTキーを押しながら、切り離すブロックの先頭をドラッグしてください。 "
      #ref(社内専用/image150.png" ,left,nowrap,null,100%)
        <tr>
         <td>
         mot2,mot3のブロックを選択
         </td>
        </tr>
      #ref(社内専用/image151.png" ,left,nowrap,null,100%)
        <tr>
         <td>
         SHIFTキーを押しながらドラッグして切り離す
         </td>
        </tr>
    "
    "
    " 切り離したブロックを、forの開始ブロックに接続しましょう。最後に、forブロックをmot1のブロックの後に接続しましょう。 "
     #ref(社内専用/image152.png" ,left,nowrap,null,100%)
       <tr>
        <td>
        forの開始ブロックにドラッグして接続する
        </td>
       </tr>
     #ref(社内専用/image153.png" ,left,nowrap,null,100%)
       <tr>
        <td>
        forをmot1のブロックに接続する
        </td>
       </tr>
    " " " " " " " " " " "
    "繰り返し回数は、プロパティウィンドウの「loop」の項目で設定します。項目をクリックすると右端に詳細を開くボタンを表示するので、それをクリックしてください。クリックすると更に別の選択肢を開くボタンを表示するので、それをクリックし、選択肢より「(数値入力)」の表記がある物をクリックしてください。クリックすると、数値を入力する画面が別途開きます。ここで繰り返し回数を入力し、「OK」をクリックしてください。 "
     #ref(社内専用/image154.png" ,left,nowrap,null,100%)
        <tr>
         <td>
         クリック
         </td>
        </tr>
        <tr>
         <td>
         (数値入力)を選択
         </td>
        </tr>
        <tr>
         <td>
         クリック
         </td>
        </tr>
    "
    "
     #ref(社内専用/image155.png" ,left,nowrap,null,100%)
       <tr>
        <td>
        数値を入力
        </td>
       </tr>
     
    " " " " " " " "
    " ブロックを接続したら、プログラムをビルド・実行してみましょう。mot1が1回、mot2,mot3がそれぞれ2回(数値を書き換えた場合はその回数)実行されたら、正しくプログラムが作成できています。forによるループは、メインメソッド以外にも、動作のサブメソッドなどで「手を?回上げる」など同じ動作を繰り返したい場合などに利用できます。
    "
  • ○ 無限ループ " 「無限ループ」は、名前の通り永続的に処理を繰り返す命令です。先に上げたようなセンサを使ったプログラムなど、特定の条件を除き基本的にプログラムを永続的に実行し続ける仕組みに利用します。先ほどのプログラムのforループを無限ループに置き換えると、ソフトウェアからツールバーの「停止ボタン」をクリックするまで繰り返すプログラムになります。 " それでは、先ほどのプログラムのforループを無限ループに置き換えて実行してみましょう。停止ボタンを押さない限り、プログラムが繰り返されます。 " "
      #ref(社内専用/image156.png" ,left,nowrap,null,100%)
         <tr>
          <td>
          Mot1のメソッドブロックと無限ループを接続
          </td>
         </tr>
      #ref(社内専用/image157.png" ,left,nowrap,null,100%)
        <tr>
         <td>
         「停止ボタン」をクリックするまで繰り返し続ける
         </td>
        </tr>
      #ref(社内専用/image158.png" ,left,nowrap,null,100%)
        <tr>
         <td>
         forブロックをクリックして
         キーボードのDeleteキーを押す
         </td>
        </tr>
      #ref(社内専用/image159.png" ,left,nowrap,null,100%)
        <tr>
         <td>
         forブロックが削除される
         </td>
        </tr>
      #ref(社内専用/image160.png" ,left,nowrap,null,100%)
         <tr>
          <td>
          無限ループの
          ブロックを追加
          </td>
         </tr>
      #ref(社内専用/image161.png" ,left,nowrap,null,100%)
         <tr>
          <td>
          Mot2,mot3のメソッドブロックを接続
          </td>
         </tr>
    " " " " " " " "

    " ループの最中に、特定の条件下で繰り返しを抜ける場合「breakブロック」を使います。ループ中にbreakブロックが実行されると、そこからループの終了のブロックまでジャンプします。ループが二重・三重に使われている場合、一番内側のループに対して機能が働きます。breakブロックは、forループ・無限ループ共に使用でき、forループの場合は、規定回数繰り返していなくてもループを終了します。 " ロボットのプログラミングでのbreakブロックの用途としては、センサを使った無限ループのプログラムで、一定時間・回数センサに反応があった(または無かった)場合にループを抜けるなどの場合に使います。 "
      #ref(社内専用/image162.png" ,left,nowrap,null,100%)
         <tr>
          <td>
          breakブロック
          </td>
         </tr>
         <tr>
          <td>
          一番近いループの終了までジャンプする
          </td>
         </tr>
    " " " " " " " " " " " " "
    "
  • ○ 顔を追跡するプログラムの作成  繰り返しの機能について一通り理解できたら、無限ループと「顔追跡ブロック」を組み合わせて、顔認識を続けるプログラムを作りましょう。顔追跡ブロックは、カメラで顔を検出すると、ロボットの首を動かして顔の動きを追従するブロックです。首ピッチ軸・首ヨー軸のモータ制御はブロック内で自動的に行われ、これまでのようにポーズを作る必要はありません。またその関係で、首ピッチ軸・首ヨー軸はブロックによって占有されるため、顔追跡中にポーズを実行しても、この2軸は設定したポーズに遷移せず、常に顔の追跡を行います。  それでは、顔認識ブロックをプログラムに追加しましょう。顔認識ブロックは、メソッドや繰り返しの命令と同様に開始・終了のペアになります。各ブロックは、それぞれ「カメラデバイスの初期化と顔の認識・追跡の開始」、「顔の認識・追跡の終了とカメラデバイスの解放」の役割を持ち、このブロックに挟まれた間だけ、顔追跡が行われます。
     #ref(社内専用/image163.png" ,left,nowrap,null,100%)
        <tr>
         <td>
         顔追跡ブロック
         </td>
        </tr>
     #ref(社内専用/image164.png" ,left,nowrap,null,100%)
        <tr>
         <td>
         開始・終了に挟まれた範囲で顔追跡を行う
         </td>
        </tr>

    顔回追跡ブロックには繰り返し機能が無いため、顔を追跡し続けるには、無限ループやforループとの組み合わせが必要になります。ただし、注意点として、顔追跡ブロックの間に繰り返しのブロックを挟むようにプログラムしてください。顔追跡の初期化・解放は原則として必要な場面で一度だけ行われることを想定していますが、繰り返しに顔追跡を入れると、何度も初期化・解放が行われることになり、動作の安定性や動作速度などに大きく影響するためです。また、同じく顔認識の中に顔認識を入れるなど、機能が重複するような使い方はしないで下さい。
      #ref(社内専用/image165.png" ,left,nowrap,null,100%)
        <tr>
         <td>
         【◎正しい使い方】
         顔追跡の中に繰り返しを入れる
         </td>
        </tr>
      #ref(社内専用/image166.png" ,left,nowrap,null,100%)
        <tr>
         <td>
         【×間違った使い方】
         顔追跡を重複して使う
         </td>
        </tr>
      #ref(社内専用/image167.png" ,left,nowrap,null,100%)
        <tr>
         <td>
         【×間違った使い方】
         繰り返しの中に顔追跡を入れる
         </td>
        </tr>
    "

    それでは、無限ループと顔認識を、次のようにつなぎかえてプログラムを実行してみましょう。実行中は、ロボットの体はこれまで通りmot1,mot2のモーションを行いますが、首は独立して動きます。顔認識中の首の動作は、顔が見当たらない場合は周囲を見回し、見つかったらそれを追いかけるような動作をします。
      #ref(社内専用/image168.png" ,left,nowrap,null,100%)
         <tr>
          <td>
          コネクタをドラッグして接続
          </td>
         </tr>
      #ref(社内専用/image169.png" ,left,nowrap,null,100%)
         <tr>
          <td>
          コネクタをドラッグして接続
          </td>
         </tr>
      #ref(社内専用/image170.png" ,left,nowrap,null,100%)
         <tr>
          <td>
          接続完了
          </td>
         </tr>
         <tr>
          <td>
          実行する
          </td>
         </tr>
      #ref(社内専用/image171.png" ,left,nowrap,null,100%)
         <tr>
          <td>
          無限ループ全体を選択し、SHIFTキーを押しながらループの先頭をドラッグ
          </td>
         </tr>
    "
    _

条件分岐機能の使用例

"条件分岐の機能を持つブロックは、繰り返し等と同様に「開始」「終了」の2個のブロックで構成されますが、更に間に挟めるブロックの接続先(コネクタ)が複数備わっています。各接続先には、それぞれ条件を設定でき、指定した条件が成立した場合にそれぞれの接続先へ進みます。条件は原則として上のものから順番に照合します。複数の条件が成立する場合は、その中から一番上(最初)に成立した条件に進みます。また、一つも成立する条件が無ければ、どの接続先にも進まず、条件分岐の終了側のブロックに進みます。 "

   <tr>
    <td>
    【条件分岐ブロックの例】
    開始・終了間に複数の接続先(コネクタ)がある。各コネクタに分岐条件を設定でき、条件が成立した接続先のプログラムが実行される。
     条件は必ず最初(上側)から確認され、複数の条件が成立する場合は一番上側の分岐が実行される
    </td>
   </tr>
 #ref(社内専用/image172.png" ,left,nowrap,null,100%)

" " " " " " " " " "
" 顔認識に関連するブロックには「顔が見つかったかどうか」「検出した顔の年齢/性別」などの分岐機能を持つものが備わっています。ここではこれらを使って、条件分岐の機能を確認してみたいと思います。 "

  <tr>
   <td>
   顔認識に関する条件分岐のブロックは、必ず顔追跡(または顔検出)ブロックの間に入れてください。顔追跡(または顔検出)していない状態でこれらのブロックを使うと、プログラムがエラーで実行停止します。
   </td>
  </tr>

" " " " "

  • ○ 顔が見つかったかどうかを判断するプログラム " まずは「顔が見つかったか?」ブロックを使って、顔が見つかったどうかで呼び出すモーションメソッドを切り替えるプログラムを作ってみましょう。まずは、ブロックをプログラムに追加してください。ブロックには最初から二つの分岐があります。分岐の上側は顔が見つかった場合、下側は見つからなかった場合です。 "
      #ref(社内専用/image173.png" ,left,nowrap,null,100%)
          <tr>
           <td>
           顔が見つかったか?ブロック
           </td>
          </tr>
         <tr>
          <td>
          顔が見つかった場合
          </td>
         </tr>
         <tr>
          <td>
          顔が見つからなかった場合
          </td>
         </tr>
    " " "

    " それでは、次の手順でブロックをつなぎかえましょう。 "
     #ref(社内専用/image174.png" ,left,nowrap,null,100%)
       <tr>
        <td>
        無限ループ内のブロックを選択し、SHIFTキーを押しながら先頭をドラッグ
        </td>
       </tr>
     #ref(社内専用/image175.png" ,left,nowrap,null,100%)
       <tr>
        <td>
        mot1、mot2のブロックを、「顔が見つかったか?」ブロックの分岐先に接続
        </td>
       </tr>
     #ref(社内専用/image176.png" ,left,nowrap,null,100%)
       <tr>
        <td>
        無限ループの中に
        「顔が見つかったか?」ブロックを接続
        </td>
       </tr>
    " " " " " " " " " " " " " " " " " " " " " " "
    "ブロックの接続が完了したら、プログラムを実行してみましょう。ロボットが顔を認識し続けることで、呼び出すメソッドが切り替わり動作が変わります。ただし、後述の「認識の閾値」設定が高めになっているので、なかなか上側の「顔を認識した場合」の分岐が実行されません。 " "
    "
  • ○ 分岐条件の設定 " 分岐条件は、命令ブロックの設定と同じように変更することができます。分岐条件の設定はプロパティウィンドウに表示されないため、ブロックをダブルクリックして分岐条件の設定ダイアログを開きます。 "
     #ref(社内専用/image177.png" ,left,nowrap,null,100%)
       <tr>
        <td>
        分岐条件を設定する
        ブロックをダブルクリック
        </td>
       </tr>
     #ref(社内専用/image178.png" ,left,nowrap,null,100%)
       <tr>
        <td>
        分岐条件の設定
        ダイアログを開く
        </td>
       </tr>
    " " " " " " " " " " "
    " 分岐条件の設定ダイアログでは、分岐条件の追加・削除・入れ替えや、各条件の詳細設定が可能です。ただし、ブロックの種類によって、追加・削除できる分岐条件の数が決まっていたり、条件の入れ替えができない場合があります。条件の詳細設定は、命令ブロックの設定と同じくブロックの種類によって項目が異なります。 "
      #ref(社内専用/image179.png" ,left,nowrap,null,100%)
         <tr>
          <td>
          設定変更する条件をクリックして選択
          </td>
         </tr>
         <tr>
          <td>
          選択した条件の並び順を入れ替える
          </td>
         </tr>
         <tr>
          <td>
          分岐条件を追加・削除する
          </td>
         </tr>
         <tr>
          <td>
          各分岐条件の詳細を設定する
          </td>
         </tr>
       <tr>
        <td>
        【条件分岐の設定ダイアログ】
        画面左側では、設定する条件の選択、分岐条件の追加・削除や並び順の入れ替えを行う。
        画面右側では、左側で選択した条件の詳細設定を行う。
        ブロックの種類により、条件の追加・削除・入れ替えの可否や、設定項目が異なる。
        </td>
       </tr>
    " " " " " " " "

    " 「顔が見つかったか?」ブロックでは、「連続して何回以上顔が検出されたか」が分岐条件です。無限ループで、「顔が見つかったか?」ブロックを実行するたびに、顔が見つかれば回数を加算、見つからなければ回数を0に戻します。初期値は3に設定されており、3回より多く(つまり4回以上)顔が連続して見つかれば、上側の分岐条件に進みます。現在のプログラムでは、顔が見つからなかった場合のメソッドが長く、1回のループに時間がかかるため、3回連続で顔が検出され上側の分岐に進むまでに時間がかかります。そこで、今回は分岐条件を3から0に変更してみましょう。 "
     #ref(社内専用/image180.png" ,left,nowrap,null,100%)
        <tr>
         <td>
         上側の分岐条件をクリック
         </td>
        </tr>
        <tr>
         <td>
         数値を0に設定し直す
         </td>
        </tr>
        <tr>
         <td>
         クリック
         </td>
        </tr>
    " " " " " " " " " " " " "
    " 条件が0回の場合「(連続で顔が見つかった回数)>0」と言う条件になります(0回より多く、つまり1回以上)。そのため、1回でも顔が見つかれば上側の分岐に進むようになります。ただし、条件分岐の判断が行われるのは、毎ループ開始時の「顔が見つかったか?」ブロックの場所なので、そこからの分岐先でメソッドなどを実行している間は分岐の判断が行われません。 " " " 顔認識の条件分岐ブロックには、他にも年齢や性別・笑顔の点数を使った命令があります。これらを使うことで、より詳細な場合分けを行うことができます。 "
      #ref(社内専用/image181.png" ,left,nowrap,null,100%)
         <tr>
          <td>
          性別の条件分岐
          </td>
         </tr>
         <tr>
          <td>
          年齢の条件分岐
          </td>
         </tr>
         <tr>
          <td>
          男性か?
          </td>
         </tr>
         <tr>
          <td>
          女性か?
          </td>
         </tr>
         <tr>
          <td>
          どちらでもない(不明)
          </td>
         </tr>
         <tr>
          <td>
          20歳以下か?
          </td>
         </tr>
         <tr>
          <td>
          そうでない
          (20歳より上)
          </td>
         </tr>
    " "
    "

6.

音声再生・音声合成・音声認識を使ったプログラム " 次に、音声を使ったプログラムを作成してみましょう。ロボット本体には音声再生の機能が備わっており、音楽や効果音・あらかじめ吹き込んだ音声などの、waveサウンド形式のファイルを再生することが可能です。また、追加機能によって、リアルタイムの音声合成や、音声認識を使ったプログラミングが可能です。それでは、これらの機能を使ったプログラムを作成してみましょう。 " "

  <tr>
   <td>
   音声合成・認識機能はライセンスの供与が必要です。ライセンス供与の手続きを行っていない場合は、必要データの入手に制限がある他、プログラムが正常に動作しません。
   </td>
  </tr>

" " "

音声再生を行う

  • ○ リソースファイルの追加  音声再生の命令ブロックでは、音声ファイル等外部に記録したファイルをプログラムから読み込んで使用します。このように、外部に存在しプログラムから読み込まれるファイルを「リソースファイル」と言います。リソースファイルをプログラムから使用するためには、最初にファイルをエクスプローラに追加する必要があります。 " リソースファイルの追加は、エクスプロ―ラの「resource」の項目を右クリックしてポップアップメニューを表示し、「追加」→「リソースファイル」をクリックします。クリックするとwavサウンドファイルを選択する画面を開くので、再生したい音声ファイルを選んで「開く」をクリックしてください。クリックすると、エクスプローラのresouceフォルダに選択したファイルが追加されます。 "
     #ref(社内専用/image182.png" ,left,nowrap,null,100%)
        <tr>
         <td>
         右クリック
         </td>
        </tr>
        <tr>
         <td>
         クリック
         </td>
        </tr>
     #ref(社内専用/image183.png" ,left,nowrap,null,100%)
       <tr>
        <td>
        追加するファイルを選択
        </td>
       </tr>
       <tr>
        <td>
        クリック
        </td>
       </tr>
    " " " " " " " " " " " " "
    "
        <tr>
         <td>
         選択したファイルが「resource」の項目に追加される
         </td>
        </tr>
    #ref(社内専用/image184.png" ,left,nowrap,null,100%)
    <w:wrap type="square"/>

    " "
    " 追加したリソースファイルは、エクスプローラ上の項目をダブルクリックすると、ファイルの種類(拡張子)に対してお使いのPCで割り当てられているアプリケーションを起動し、ファイルを開くことができます。 "
      <tr>
       <td>
       リソースファイルは、必ず半角英数のファイル名の物を使用してください。
       </td>
      </tr>
    " " "
  • ○ 音声再生ブロックの設定 " 追加したwavサウンド形式のリソースファイルは、soundブロックで再生することができます。soundブロックは、プロパティウィンドウの「file」の項目で、再生する音声ファイルを選択できます。 "
     #ref(社内専用/image185.png" ,left,nowrap,null,100%)
        <tr>
         <td>
         Soundブロック
         </td>
        </tr>
     #ref(社内専用/image186.png" ,left,nowrap,null,100%)
       <tr>
        <td>
        再生する音声
        ファイルを選択
        </td>
       </tr>
    " " " " " " " " "
    " 使用するリソースファイルは、プログラムの実行時に、プログラムのファイルと併せて本ソフトウェアからロボットに転送されます。一度ファイルを送信したら、ファイルが更新されない限り、次回以降転送を省略します。それでは、先ほど作成したプログラムに、任意のwavサウンドファイル(リソースファイル)を追加し、soundブロックで再生してみましょう。 "
      #ref(社内専用/image187.png" ,left,nowrap,null,100%)
        <tr>
         <td>
         Soundブロックを追加して実行してみる
         </td>
        </tr>
    " " " " " " " "
    "_

音声合成・認識を行う

" 音声合成・音声認識の機能は、ブロックの追加を行うことで使用可能になります。また、ロボット本体にもファイルのインストールが必要です。これらのファイルの入手やロボット本体へのプログラムのインストールは、Sotaコミュニティサイトをご参照ください。 "

  • ○ 音声合成・認識ブロックの追加 "入手した命令ブロックのデータはzip形式で圧縮されており、展開すると「jp.co.vstone.tts」と「jp.co.vstone.speechrecog」の二つのフォルダができます。これらのフォルダが追加するブロックのデータになります。 "
    #ref(社内専用/image188.png" o:title="" cropbottom="33713f"
     cropright="30699f"/>
    <w:wrap type="square"/>
    " " " " " " " " " " 命令ブロックの追加は、ツールボックスから行います。ツールボックスの任意の項目を右クリックしてポップアップメニューを表示し、「コマンドブロックの追加」をクリックしてください。クリックするとファイルの選択画面を開くので、先ほどダウンロードして展開した各フォルダにある「」 "
     #ref(社内専用/image189.png" ,left,nowrap,null,100%)
       <tr>
        <td>
        クリック
        </td>
       </tr>
     #ref(社内専用/image190.png" o:title=""
      cropbottom="38735f" cropright="30817f"/>
       <tr>
        <td>
        展開したフォルダ内のxmlファイルを開く
        </td>
       </tr>
    " " " " " " "
      #ref(社内専用/image191.png" ,left,nowrap,null,100%)
         <tr>
          <td>
          追加される
          </td>
         </tr>
    "

  • ○ 音声合成の命令 "
     #ref(社内専用/image192.png" ,left,nowrap,null,100%)
       <tr>
        <td>
        (文字列入力)をクリック
        </td>
       </tr>
     音声合成は、任意の文字列をリアルタイムで音声合成し、発話します。先に紹介したsoundブロックと違って、あらかじめ音声データを用意する必要がなく、また発話内容も文字列を変更するだけで容易に行うことができます。
    "
      <tr>
       <td>
       音声合成・音声認識は、インターネット上のサーバに接続する必要があるため、これらを使ったプログラムを実行する際は、必ずロボットをインターネットに接続してください。
       </td>
      </tr>
     #ref(社内専用/image193.png" ,left,nowrap,null,100%)
       <tr>
        <td>
        発話内容を入力
        </td>
       </tr>
     #ref(社内専用/image194.png" ,left,nowrap,null,100%)
    " " " " " " " " " " " " " " "
  • ○ 音声認識の命令 " 音声認識は、ロボット本体のマイクより周囲の人の声を取り込んで、文字列に変換します。音声認識ブロックでは、聞き取った文字列を元に条件分岐を設定します。分岐条件には、任意の文字列を一つ設定できます。このブロックでは、認識結果に設定した文字列が含まれると条件が成立します。例えば「こんにちは」を条件に設定したら、「こんにちは」以外に「どうも、こんにちは」など、条件の文字列を含む結果でも成立します。 "
      #ref(社内専用/image195.png" ,left,nowrap,null,100%)
         <tr>
          <td>
          ここで指定したテキストを含む文字列なら条件成立
          </td>
         </tr>
         <tr>
          <td>
          音声認識ブロックの条件分岐設定
          </td>
         </tr>
    " " "
    "

7.

変数を使ったプログラム " 本ソフトウェアの特徴として、変数機能があります。変数は値を記録したり計算することができるもので、これを使うことでより柔軟なプログラミングが可能です。それでは実際にプログラムを作成しながら変数の使い方を確認してみましょう。顔認識のプログラムに変数を組み込み、顔が認識されて既定の回数だけmot2メソッドが呼び出されたら、無限ループをbreakで抜けるプログラムにしてみます。 "

変数の作成と演算

" 変数を使う場合、まずは「変数宣言」のブロックで、名前や内容などを決めて変数を作成します。まずは、mainメソッドの先頭に変数宣言ブロックを一つ追加しましょう。 "

  • ○ 変数宣言ブロックの追加 "
       #ref(社内専用/image196.png" ,left,nowrap,null,100%)
        <tr>
         <td>
         変数宣言ブロック
         </td>
        </tr>
      #ref(社内専用/image197.png" ,left,nowrap,null,100%)
        <tr>
         <td>
         接続完了
         </td>
        </tr>
      #ref(社内専用/image198.png" ,left,nowrap,null,100%)
        <tr>
         <td>
         コネクタから矢印をドラッグ&amp;ドロップ
         </td>
        </tr>
    " " " " " " " " " " " " " " " " " " " "
    "
    "ブロックを追加したらクリックしてプロパティウィンドウに設定を表示し、変数の型・名前・初期値を確認してみましょう。 "
     #ref(社内専用/image199.png" ,left,nowrap,null,100%)
       <tr>
        <td>
        クリック
        </td>
       </tr>
     #ref(社内専用/image200.png" ,left,nowrap,null,100%)
       <tr>
        <td>
        【変数宣言の設定】
        現在の設定では、int(整数)型の変数「var」を作り、定数「0」で初期化します。
        </td>
       </tr>
    " " " " " " " " " " "
    "nameの項目では、変数の名前を設定できます。同じメソッドに同じ名前の変数が存在するとビルド時にエラーが出るため、複数の変数を使用するときは、重複しない名前を設定してください。 " " typeの項目では、変数の「型」を設定できます。プログラムでは「数値」「文字列」等の様々な形式のデータを扱いますが、それらには全て「型」が決まっており、取り扱うデータに応じて正しい変数の型を設定する必要があります。一般的なプログラムでは、前述のように「数値」または「文字列」を扱うことが多く、前者の場合は「int」、後者の場合は「String」を型に指定します。 " " IsInitializeとinitParamは「変数を初期化するか否か」及び「初期化する内容」です。現在の設定では、int型の「var」と言う名前の変数を定数の「0」で初期化(代入)します。 "
  • ○ 演算ブロックの追加 " 変数を作成したら、続いて「メソッドmot2を実行したら加算して回数を記録する」と言う部分を作ります。演算のブロックをプログラムに追加し、メソッドmot2の呼び出しブロックの後に接続しましょう。 "
       #ref(社内専用/image201.png" ,left,nowrap,null,100%)
        <tr>
         <td>
         演算ブロック
         </td>
        </tr>
    " " " " " "
    " "
     #ref(社内専用/image202.png" ,left,nowrap,null,100%)
       <tr>
        <td>
        mot2の呼び出しの後に接続
        </td>
       </tr>
    " " " " " " " " " "
    " 接続したら、ブロックの設定を変更します。ここでは、先ほど作成した変数int varに1を加算するという設定に書き換えます。 "設定項目のleftは、計算対象となる変数を設定します。「var」を選択してください。rightはleftとの計算に使う数値または変数を設定します。「1を加算」という計算のため、数値入力で1を入力してください。 "ccalcには、leftとrightの計算方法を設定します。初期設定の「=」は、rightの内容をそのままleftに代入する、という設定になります。四則演算をする場合は、+=(加算),-= (減算),*= (乗算),/= (除算),%= (剰余)をそれぞれ選択します。ここでは「1を加算」という計算のため、「+=」を設定してください。 " "
      #ref(社内専用/image203.png" ,left,nowrap,null,100%)
        <tr>
         <td>
         (int)varを選択
         </td>
        </tr>
        <tr>
         <td>
         クリック
         </td>
        </tr>
      #ref(社内専用/image204.png" ,left,nowrap,null,100%)
        <tr>
         <td>
         「+=」を選択
         </td>
        </tr>
       <tr>
        <td>
        及びrightの選択肢から(自由入力)を選ぶと、「変数+5」のような書式も可能です。ただし、自由入力を行う場合は、文法や変数名等に問題が無いように注意してください。
        </td>
       </tr>
      #ref(社内専用/image205.png" ,left,nowrap,null,100%)
        <tr>
         <td>
         クリック
         </td>
        </tr>
        <tr>
         <td>
         (数値入力)をクリック
         </td>
        </tr>
        <tr>
         <td>
         「1」を入力
         </td>
        </tr>
    " " "

  • ○ 変数を使った条件分岐の作成 " ここまでの操作で、変数varが作成され、mot1メソッドを実行するごとに1加算される仕組みができました。最後に、既定の回数で無限ループを抜ける処理を作成したいと思います。変数を使った汎用的な条件分岐にはifのブロックを使用します。プログラムにifブロックを追加してください。ブロックを追加したら、演算ブロックの後ろにつなげてください。 "
     #ref(社内専用/image206.png" ,left,nowrap,null,100%)
       <tr>
        <td>
        ifブロック
        </td>
       </tr>
     #ref(社内専用/image207.png" ,left,nowrap,null,100%)
       <tr>
        <td>
        演算ブロックの後ろにつなげる
        </td>
       </tr>
    " " " " " " " " " " "
    " ifブロックの条件の設定は、「顔が見つかったか」のブロックと同じく、プロパティウィンドウではなくブロックをダブルクリックして「条件分岐の設定画面」を開いて行います。ブロックをダブルクリックして設定画面を開き、以下のように設定を変更してください。 "
     #ref(社内専用/image208.png" ,left,nowrap,null,100%)
       <tr>
        <td>
        クリック
        </td>
       </tr>
       <tr>
        <td>
        「var」を選択
        </td>
       </tr>
       <tr>
        <td>
        「&gt;=」を選択
        </td>
       </tr>
       <tr>
        <td>
        (数値入力)で3を入力
        </td>
       </tr>
    " " " " " " " " " " " " " "
    " この分岐条件の設定で、「var>=3」となり、プログラム実行中にvarの値が0から加算され、3を超えた時点で条件が成立します。
    " "
     #ref(社内専用/image209.png" ,left,nowrap,null,100%)
       <tr>
        <td>
        breakブロックを追加・接続
        </td>
       </tr>
     最後に、条件が成立したら無限ループを抜けるようにbreakブロックを追加しましょう。設定できたらプログラムを実行してみましょう。3回mot1メソッドを実行したら、プログラムを終了するようになっていると思います。
    " " " " " " " " " " " "  " 変数を使うことで、このようにプログラム内の様々な状態や必要な情報を保存・呼び出しでき、柔軟なアルゴリズムを組み立てることができます。ただし、変数の使い方を間違えるとビルドが通らなくなり、プログラムが実行できなくなってしまうため、扱いには注意が必要です。ここで、変数に関しての補足事項をいくつかお伝えします。 " "
    "
  • ○ ローカル変数とメンバ変数 "本ソフトウェアを含め、java言語一般のプログラミングにおける変数には「グローバル変数」「ローカル変数」「メンバ変数」のカテゴリが存在します。各カテゴリには以下のような特徴があります。 "
     #ref(社内専用/image210.png" ,left,nowrap,null,100%)
       <tr>
        <td>
        ②メンバ変数
        </td>
       </tr>
       <tr>
        <td>
        ①ローカル変数
        </td>
       </tr>
       <tr>
        <td>
        ③グローバル変数
        (ワークスペースのプロパティ内)
        </td>
       </tr>
    " " " " " " " " " " " " " " "
       <tr>
        <td>
        【変数のカテゴリ】
        "① 
        ローカル変数
        メソッドの中で作成される変数です。変数が使えるのは宣言したメソッドの中だけです。
        "② 
        メンバ変数
        コンストラクタで作成される変数です。変数は、同じクラスの中であればどこでも使えますが、「いつどこで何を書き換えたか」を把握しておかないと意図した動作が行われない場合があります。また、プログラムから自動的に追加・設定されるものが多いため、設定を間違えるとプログラム全体に影響を与える場合があります。
        "③ 
        グローバル変数
        全てのクラスでどこからでも参照できる変数です。ワークスペースのプロパティ内で設定します。メンバ変数と同じく「いつどこで何を書き換えたか」把握する必要がある、自動で追加・設定された内容に影響を与えるとうまく動かない場合がある点に注意が必要です。
        </td>
       </tr>
       <tr>
        <td>
        同じカテゴリの変数の場合、同じ名前を設定できませんが、カテゴリが異なる変数の場合同じ名前を設定できます。ただし、プログラミングの際に混同しやすいため、なるべく変数名は異なる物を設定してください。
        </td>
       </tr>
    " " "

    "各カテゴリの特徴を見ると、メンバ変数やグローバル変数はどこからでもアクセスができるため使い勝手が良いように見えますが、逆に「いつどこで書き換えられたか」がわかりにくくなるという問題があり、また本ソフトウェアでは、メンバ変数・グローバル変数の多くがプログラムから自動で追加されるため、それらを勝手に使ったり設定や並び順を変更したりすることで、プログラムが正しく動作しなくなる場合があります。これらの点に十分注意し、メンバ変数・グローバル変数は、極力必要な場面だけ作成・使用しましょう。 " "
  • ○ 変数の参照制限とウォッチウィンドウ "他のブロックが変数を使えるのは、宣言された場所から後になります。変数が宣言される前に使おうとしても、プロパティウィンドウの選択肢等に表示されません。メンバ変数やグローバル変数も、実際に宣言される場所(コンストラクタやワークスペースの設定項目)においては同様に、既に宣言された変数のみ使えます。 " " 本ソフトウェアには、各ブロックやクラスがどの変数を使えるかを確認する「ウォッチウィンドウ」があります。クラスウィンドウや命令ブロックをクリックすると、そのブロックが参照できる全ての変数がウォッチウィンドウにリストアップされます。ウォッチウィンドウが画面に表示されておらずタイトルバーも見つからない場合は、本ソフトウェアのメニューより「ウィンドウ」→「ウォッチ」をクリックして開いてください。 " "例えば、先ほどのプログラムで追加したifブロックをクリックすると、全てのグローバル変数・メンバ変数と、ローカル変数としてメソッドの最初で宣言した変数varがウォッチウィンドウに表示されます。一方、mainメソッドのブロックをクリックすると、変数varが宣言される前のブロックであるため、ローカル変数には何も表示されません。 "
      #ref(社内専用/image211.png" ,left,nowrap,null,100%)
        <tr>
         <td>
         クリック
         </td>
        </tr>
        <tr>
         <td>
         ウォッチウィンドウ
         </td>
        </tr>
        <tr>
         <td>
         先に宣言された
         変数varが見える
         </td>
        </tr>
    " " " " " " " " "
    "
    " また、ローカル変数の中でも、forブロックや無限ループ、ifブロックのように、開始・終了を持つブロックの中で宣言された変数は、同じブロックで囲まれた中でしか参照できません。同じブロックで囲まれた中であれば、更に別のブロックで囲まれた中でも参照可能です。 "
     #ref(社内専用/image212.png" ,left,nowrap,null,100%)
       <tr>
        <td>
        この変数「var」は無限ループの中だけで使える
        </td>
       </tr>
       <tr>
        <td>
        無限ループの外なので使えない
        </td>
       </tr>
       <tr>
        <td>
        無限ループの中なので使える
        </td>
       </tr>
       <tr>
        <td>
        無限ループの中なので使える
        </td>
       </tr>
    " " " " " " " " " " "
    " また、範囲的に参照できる変数でも、設定項目によっては型が一致しないと選択できない場合があります(ブロックの種類によって異なります)。例えばifブロックでは、partAは自由に変数を選択できますが、partCはpartAで選んだ変数・定数の型からしか選択できません。 "
      #ref(社内専用/image213.png" ,left,nowrap,null,100%)
        <tr>
         <td>
         partAと同じ型(int)だけ選択できる
         </td>
        </tr>
    "
    "_

引数を持つメソッドの作成

" 変数と関連する機能として、メソッドの引数・戻り値があります。先の説明の通り、変数は同じメソッドの中でしか使えませんが、異なるメソッドで変数の値を使いまわしたり、メソッドに「繰り返し回数」など何らかの情報を与えたい場合に「引数」を使います。また、呼び出したサブメソッドから何らかの情報を返す機能が「戻り値」で、サブメソッドの実行結果の成否等の情報をメインメソッドに伝える場合などに使います。 " "

  • ○ メソッドの引数の作成 " まずは、メソッドの引数を使ってみましょう。クラス「motion.java」のmot1にforループを組み込んで、繰り返し回数を引数で指定してみましょう。まず、次の手順でmot1のメソッドにforループを組み込んでください。 " "
     #ref(社内専用/image214.png" ,left,nowrap,null,100%)
       <tr>
        <td>
        mot1の2,3番目のポーズを選択
        forブロックを追加
        </td>
       </tr>
     #ref(社内専用/image215.png" ,left,nowrap,null,100%)
       <tr>
        <td>
        motion.javaに
        forブロックを追加
        </td>
       </tr>
    " " " " " " " " " "
      #ref(社内専用/image216.png" ,left,nowrap,null,100%)
        <tr>
         <td>
         SHIFTキーを押しながら2番目のポーズをドラッグして切り離し
         forブロックを追加
         </td>
        </tr>
      #ref(社内専用/image217.png" ,left,nowrap,null,100%)
        <tr>
         <td>
         1番目のポーズのコネクタをforブロックにドラッグ&amp;ドロップ
         forブロックを追加
         </td>
        </tr>
      #ref(社内専用/image218.png" ,left,nowrap,null,100%)
        <tr>
         <td>
         forの開始ブロックのコネクタをドラッグ&amp;ドロップ
         forブロックを追加
         </td>
        </tr>
      #ref(社内専用/image219.png" ,left,nowrap,null,100%)
        <tr>
         <td>
         接続完了
         </td>
        </tr>
    " " " " " " " "
    "
    " 次に、引数を設定します。mot1のメソッドブロックをクリックしてプロパティウィンドウに設定項目を表示し、続いて「arguments」の項目の
    #ref(社内専用/image220.png" ,left,nowrap,null,100%)
    ボタンをクリックしてください。 "
     #ref(社内専用/image221.png" ,left,nowrap,null,100%)
       <tr>
        <td>
        クリック
        </td>
       </tr>
       <tr>
        <td>
        クリック
        </td>
       </tr>
    " " " " " " " " " " "
    " クリックすると引数を設定する画面を表示します。まずは「追加」ボタンをクリックし、「メンバー」に1個引数の情報を追加してください。追加したらその項目をクリックして、画面右側に詳細設定を表示してください。詳細設定では、「name」に変数名、「type」に変数の型を設定します。ここではそれぞれ「name」をarg、「type」をintにしてください。 "
       #ref(社内専用/image222.png" ,left,nowrap,null,100%)
         <tr>
          <td>
          ①クリック
          </td>
         </tr>
         <tr>
          <td>
          ②追加された
          項目をクリック
          </td>
         </tr>
         <tr>
          <td>
          ③nameを「arg」に設定
          </td>
         </tr>
         <tr>
          <td>
          ④typeを「int」に設定
          </td>
         </tr>
        <tr>
         <td>
         ⑤クリック
         </td>
        </tr>
    " " " " " " " "
    "
    " 引数を設定すると、メソッドのローカルに登録されます。引数はメソッドの最初で宣言されるため、メソッド内のどこからでも使用できます。また、mot1のプロパティにも表示されます。mot1ブロックをクリックして、プロパティウィンドウ及びウォッチウィンドウから、引数argが追加されたことを確認してみましょう。 "
     #ref(社内専用/image223.png" ,left,nowrap,null,100%)
       <tr>
        <td>
        クリックして展開
        </td>
       </tr>
       <tr>
        <td>
        設定した引数を表示
        </td>
       </tr>
     #ref(社内専用/image224.png" ,left,nowrap,null,100%)
       <tr>
        <td>
        設定した引数を表示
        </td>
       </tr>
    " " " " " " " " " " " "
    " 続いて、mot1内のforブロックの繰り返し回数を設定しましょう。mot1内のforブロックをクリックしてプロパティウィンドウに設定を表示し、「loop」の設定を(int)argに変更してください。 "
     #ref(社内専用/image225.png" ,left,nowrap,null,100%)
       <tr>
        <td>
        クリック
        </td>
       </tr>
       <tr>
        <td>
        「loops」に(int)argを設定
        </td>
       </tr>
    " " " " " " " " " " " " "
    " 以上でmot1(motion.java)側の設定は完了です。続いて、mot1を呼び出すmainメソッド(mymain.java)側の設定を行います。 "
       <tr>
        <td>
        メソッドの引数の設定を変更したら、そのメソッドを呼び出す場所も、それに合わせた引数の設定をする必要があります。メソッドの引数と呼び出し場所の引数の設定が異なるとビルドエラーが出てプログラムが実行できません。
        </td>
       </tr>

    "
  • ○ メソッド呼び出し側の引数設定 " 続いて、mainメソッドのmot1メソッド呼び出しブロックをクリックし、プロパティウィンドウに設定を表示しましょう。プロパティウィンドウでは、「argument」の項目に「[0] | (int)」という項目が追加されています。これが、mot1メソッドの引数argに渡す数値になります。ここでは、数値入力で4を設定しましょう。 " "
     #ref(社内専用/image226.png" ,left,nowrap,null,100%)
       <tr>
        <td>
        クリック
        </td>
       </tr>
     #ref(社内専用/image227.png" ,left,nowrap,null,100%)
       <tr>
        <td>
        (数値入力)で4を入力
        </td>
       </tr>
    " " " " " " " " " " " " "
    " 設定を変更したら、プログラムを実行してみましょう。mot1の動作を4回繰り返すようになっていたら、正しくプログラミングできています。正しい動作を確認したら、呼び出しブロックの引数の回数を変更してみましょう。 " "
    "_

戻り値を持つメソッドの作成

" 続いて、メソッドに戻り値を設定してみましょう。今度は例として「引数を2倍にして返す」というメソッドを新しく作り、mot1メソッドに組み込んでforループの繰り返し回数を2倍にするプログラムを作成してみましょう。 "

 #ref(社内専用/image228.png" ,left,nowrap,null,100%)

" " " " " " " " " " " " "
" motion.javaにメソッドを追加したら、プロパティウィンドウから「methodName」(名前)を「mul」に変更し、また、「type」(戻り値の型)を「void」から「int」に変更しましょう。元の設定の「void」は「戻り値が無い」という型であり、戻り値を使わない関数は必ずこの設定をします。 " 続いて、argumentsをクリックして引数を一つ作りましょう。引数は「name」をsrc、「type」をintに設定しましょう。 " "

  #ref(社内専用/image229.png" ,left,nowrap,null,100%)
    <tr>
     <td>
     「mul」に変更
     </td>
    </tr>
    <tr>
     <td>
     クリックして「int」を選択
     </td>
    </tr>
  #ref(社内専用/image230.png" ,left,nowrap,null,100%)
    <tr>
     <td>
     クリックして
     項目を一つ追加
     </td>
    </tr>
    <tr>
     <td>
     「src」に設定
     </td>
    </tr>
    <tr>
     <td>
     「int」を選択
     </td>
    </tr>

" " " " " " " " " " "
"
" 次に、メソッドmulの中身(処理部分)を作成します。まずは、演算ブロックを一つ追加します。追加する演算ブロックをmulの開始側ブロックのコネクタにドラッグ&ドロップして、接続した状態で追加しましょう。 "ブロックを追加したら、プロパティウィンドウより「ccalc」を「*=」、「left」を「src」、「right」を「2」に、それぞれ変更しましょう。これで、メソッドmulの引数「src」が、この演算ブロックで2倍されます(leftの値とrightの値を掛け算(*=)し、その答えをleftに戻す) " "

 #ref(社内専用/image231.png" ,left,nowrap,null,100%)
   <tr>
    <td>
    ドラッグ&amp;ドロップ
    </td>
   </tr>
 #ref(社内専用/image232.png" ,left,nowrap,null,100%)
   <tr>
    <td>
    「*=」を選択
    </td>
   </tr>
   <tr>
    <td>
    「src」を選択
    </td>
   </tr>
   <tr>
    <td>
    数値の2を設定
    </td>
   </tr>

" " " " " " " " " " "
" 次に、mulメソッドの戻り値を設定します。メソッドがどのような値を戻り値として返すかは、returnブロックによって設定します。mulメソッドの演算ブロックの後にreturnブロックを追加してください。 " ブロックを追加したら、クリックしてプロパティウィンドウに設定を表示してください。returnブロックには、戻り値として使う定数・変数を設定する「returnValue」の項目があります。今回は2倍した結果を記録している変数「src」を戻り値に設定してください。 "

 #ref(社内専用/image233.png" ,left,nowrap,null,100%)
   <tr>
    <td>
    ドラッグ&amp;ドロップ
    </td>
   </tr>
 #ref(社内専用/image234.png" ,left,nowrap,null,100%)
   <tr>
    <td>
    「src」を選択
    </td>
   </tr>

" " " " " " " " " "
"以上でmulメソッド側の設定は完了です。続いてmulメソッドを呼び出す部分を作成します。 "

   <tr>
    <td>
    メソッドの戻り値を使用する(void以外に設定)場合、必ずreturnブロックをメソッドに追加して戻り値を設定してください。また、戻り値の型とメソッドの型を一致させてください。これらに問題があると、ビルドエラーが出てプログラムが実行できません。
    </td>
   </tr>


"
" 作成したmulメソッドはmot1で呼び出すので、エクスプローラ型mot1の開始ブロックのコネクタにメソッドの呼び出しブロックをドラッグ&ドロップしてください。 "

 #ref(社内専用/image235.png" ,left,nowrap,null,100%)
   <tr>
    <td>
    ドラッグ&amp;ドロップ
    </td>
   </tr>

" " " " " " " " " " " " "
" 続いて追加したブロックをクリックしてプロパティウィンドウに設定を表示し、メソッドの引数(「arguments」の「[0]」)にargを設定してください。次に、「enableGetReturnValue」をtrueに設定してください。これで、関数の戻り値を変数に代入できるようになります。enableGetReturnValueをtrueにしたら、「recvVariable」の項目に「arg」を設定してください。 " "

 #ref(社内専用/image236.png" ,left,nowrap,null,100%)
   <tr>
    <td>
    クリック
    </td>
   </tr>
 #ref(社内専用/image237.png" ,left,nowrap,null,100%)
   <tr>
    <td>
    変数argを設定
    </td>
   </tr>
   <tr>
    <td>
    Trueに設定
    </td>
   </tr>
   <tr>
    <td>
    変数argを設定
    </td>
   </tr>

" " " " " " " "
" この設定により、mot1内の変数argを引数にメソッドmulが呼び出され、その中で2倍された結果が再び変数argに代入されます。設定できたらプログラムを実行し、mot1の繰り返し回数が2倍になったことを確認してください。 "

   <tr>
    <td>
    戻り値を受け取る場合は、enableGetReturnValueをtrueにする必要があります。また、enableGetReturnValueをtrueにすると、recvVariableに必ず戻り値を受け取る変数を設定しないとビルドエラーが出ます。
    </td>
   </tr>
   <tr>
    <td>
    以上で変数を使ったプログラムは完了です。ここまでの内容が、本ソフトウェアによるプログラミングの基本となります。
    </td>
   </tr>

" " " "

8.

エラーメッセージ例と対処方法 " プログラムに問題があると、ビルドエラーが発生して正しくプログラムが実行できなくなります。この場合、原因となるブロックの設定を修正しないと実行できるようになりません。本章では、主なビルドエラーを例に、対処方法を掲載していきます。 " "

エラー箇所の特定

"

 #ref(社内専用/image238.png" ,left,nowrap,null,100%)
   <tr>
    <td>
    エラーメッセージをダブルクリック
    </td>
   </tr>
   <tr>
    <td>
    該当するブロックが選択される
    </td>
   </tr>
   <tr>
    <td>
    該当するブロックの設定を表示
    </td>
   </tr>
 ビルドエラーが発生すると、コンソールウィンドウにその概要が表示されますが、エラーメッセージ部分をダブルクリックすると、該当するクラスウィンドウと命令ブロックを前面に表示し、プロパティウィンドウにそのブロックの設定を表示します。

" " " " " " " " " " " " " "

 #ref(社内専用/image239.png" ,left,nowrap,null,100%)
   <tr>
    <td>
    ワークスペース自体のエラーは主にsrc\main\main.javaに対して発せられる
    </td>
   </tr>

また、エラーの原因がクラス内ではなくワークスペース自体の設定にある場合は、主にsrc\main\main.javaと言うクラス(プログラムが自動生成するクラス)に対してエラーが表示されます。この場合、メインメソッドの設定(関数名や引数の設定)を見直してください。 " " "
"

エラーメッセージ例と対処

" 主に発生するエラーメッセージと、想定される問題の原因・対処について列挙します。ビルドエラーが発生したら、該当するブロックの種類に応じてこれらの問題をご確認ください。 " "エラー: 変数 varはすでにメソッド mul(int)で定義されています "1 変数宣言ブロックの場合、既に同じ名前の変数が宣言されている可能性があります。変数名が重複しないようにnameを変更してください。 "2 forブロックの中に別のforブロックを入れている場合、カウンタとして宣言する変数(初期設定では「i」)が重複することでエラーが発生します。どちらかのforブロックのcounter内の「name」を、どれとも重複しない別の変数名に設定してください。 " "エラー: 式の開始が不正です "1 演算ブロックでleftやrightの設定をし忘れる(空白状態)と発生します。left・rightの設定を行ってください。 "2 メソッド呼び出しブロックで、引数が必要なメソッドに対して引数の設定を忘れると発生します。正しい引数を設定してください。 "3 メソッド呼び出しブロックで、enableGetReturnValueをtrueにしているが、戻り値の受取先の変数が設定されていないに場合に発生します。recvVariableで正しい戻り値の受取先を設定してください。 "4 src\main\main.javaに対してのエラーの場合、メインメソッドの引数の設定に問題がある可能性があります。エクスプローラからワークスペースをクリックしてプロパティウィンドウに設定を表示し、メインメソッドのargmunetの設定を見直すか(引数の設定し忘れが無いか)、また、再度メインメソッドを設定し直してください。 " "エラー: 不適合な型: ???を???に変換できません: "1 演算ブロックでleftとrightの型が異なると発生します。特にleftの設定を変更した後にrightの設定をし忘れることで発生します。leftの変数に応じた正しい値をrightに設定してください。 " "エラー: 不適合な型: 予期しない戻り値 "1 型がvoidのメソッドブロックで、returnブロックによって戻り値を設定した場合に発生します。型がvoidのメソッドは戻り値を設定できないため、returnブロックで戻り値を設定しないで下さい。 " "エラー: return文が指定されていません "1 型がvoid以外のメソッドブロックで、returnブロックが入っておらず戻り値が不明な場合に発生します。型がvoid以外のメソッドは戻り値を設定する必要があるため、必ずreturnブロックで戻り値を設定して下さい。
" " "エラー: 変数???は初期化されていない可能性があります "1 宣言した変数に何も数値が代入されずに中身が参照される場合に発生します。変数を宣言したら、基本的に初期化を行うようにしてください。 " " "エラー: 不適合な型: voidを???に変換できません: "1 及びメソッドブロックの型をvoidに変更したが、そのメソッドの呼び出しブロックで戻り値を受け取る設定になっている場合に発生します。メソッドをvoid型に変更したら戻り値が発生しなくなるため、呼び出し側のブロックのenableGetReturnValueをfalseにしてください。 " " "
"

9.  <a

name="_Toc431804761">仮想ロボットによるシミュレーション " 本ソフトウェアには、仮想ロボット機能が搭載されています。仮想ロボット機能は、PCの画面上にロボットの3Dモデルを表示し、ロボットの実機が無い状態でもポーズの視覚的な確認・編集が可能です。また、実機のロボットとの通信中に、実機のポーズを画面上の3Dモデルにフィードバックしたりすることができます。 "

  <tr>
   <td>
   仮想ロボット機能は、Sotaのみ対応しています(2015年9月現在)
   </td>
  </tr>

" " "

仮想ロボットへの接続

" 仮想ロボットは、実機のロボットと同じように通信・接続を行うことができます。 "

 #ref(社内専用/image240.png" ,left,nowrap,null,100%)
   <tr>
    <td>
    「プラットフォーム」が’Virtual’の接続設定をクリック
    </td>
   </tr>
   <tr>
    <td>
    「接続」をクリック
    </td>
   </tr>
 #ref(社内専用/image034.png" ,left,nowrap,null,100%)
   <tr>
    <td>
    クリック
    </td>
   </tr>

" " " " " " " " "
" 仮想ロボットは、実機のロボットと同様に、ツールバーの「通信ボタン」に、接続のステータスが表示されます。 " "

仮想ロボットビューア

" ロボットの3Dモデルは、本ソフトウェアより仮想ロボットビューアを起動して表示させます。仮想ロボットビューアの起動は、ツールボックスの「VRボタン」をクリックしてください。クリックすると、仮想ロボットビューアが起動します(実際に画面に表示されるまで、数秒~数十秒かかる場合があります) "

 #ref(社内専用/image241.png" ,left,nowrap,null,100%)
   <tr>
    <td>
    VRボタン
    </td>
   </tr>
 #ref(社内専用/image242.png" ,left,nowrap,null,100%)
   <tr>
    <td>
    仮想ロボットビューア
    </td>
   </tr>

" " " " " " " "
" プログラミング中などの場合に、本ソフトウェアのウィンドウで仮想ロボットビューアが隠れてしまった場合は、VRボタンをクリックすると、ビューアのウィンドウを最前面に表示します。 " " なお、初めて仮想ロボットビューアを起動したときに、以下のメッセージが表示される場合があります。このメッセージが表示されたら、「アクセスを許可する」をクリックしてください。 "

 #ref(社内専用/image243.png" ,left,nowrap,null,100%)
   <tr>
    <td>
    クリック
    </td>
   </tr>

" " " " " " " " " " " " "

  • ○ カメラアングルの操作 " 仮想ロボットビューアは、以下の操作でカメラのアングルやズームイン・ズームアウト変更できます。カメラの表示設定はPCに保存され、次回以降の起動時に設定が引き継がれます。 " "
      #ref(社内専用/image244.png" ,left,nowrap,null,100%)
        <tr>
         <td>
         【仮想ロボットビューアの操作】
         ○カメラアングルの変更…右クリック+マウスドラッグ
         ○ズームイン・ズームアウト…マウスホイール
         ○カメラアングルの初期化…F1キー
         </td>
        </tr>

    "
  • ○ ロボット本体のボタン入力の表示 " 仮想ロボットビューアの右上は「ボタンエリア」と呼ばれ、ロボット本体のボタンの入力状態を表示します。仮想ロボットと通信している場合、画面上の各ボタンの位置をマウスでクリックすると、ボタンを押すことができます。 "
      #ref(社内専用/image244.png" o:title=""
       cropbottom="41403f" cropleft="24227f"/>
        <tr>
         <td>
         ボタンエリア
         接続先が仮想ロボットの場合、クリックしてボタンを押せる
         </td>
        </tr>
    " " " " " " " " " " "
    "

10.

ソフトウェアのアップデート " 本ソフトウェアにはオンラインアップデートの機能が備わっており、不具合修正・新機能追加等が行われた場合、アップデートによってそれらを適用することが可能です。アップデートは次の手順で行います。アップデートを行う際は、必ずPCをインターネットに接続できる環境を用意してください。 "  ソフトウェアのアップデートは、メニューの「ヘルプ」→「アップデート」をクリックすると開始します。最新のアップデート情報を確認し、ソフトウェアが更新されている場合は必要データをダウンロードしてアップデートを適用します。アップデート中はソフトウェアを全て終了させる必要があります。具体的な手順は、以下を参照してください。

 #ref(社内専用/image245.png" ,left,nowrap,null,100%)
   <tr>
    <td>
    「アップデート」をクリック
    </td>
   </tr>
 #ref(社内専用/image246.png" ,left,nowrap,null,100%)
   <tr>
    <td>
    「はい」をクリック
    </td>
   </tr>

"

  #ref(社内専用/image247.png" ,left,nowrap,null,100%)
    <tr>
     <td>
     「はい」をクリック
     </td>
    </tr>
  #ref(社内専用/image248.png" ,left,nowrap,null,100%)
    <tr>
     <td>
     「OK」をクリックし、
     ソフトウェアを実行し直す
     </td>
    </tr>
  #ref(社内専用/image249.png" ,left,nowrap,null,100%)
    <tr>
     <td>
     クリックすると、実行中の本ソフトウェアが全て自動的に終了する
     </td>
    </tr>
  #ref(社内専用/image250.png" ,left,nowrap,null,100%)
    <tr>
     <td>
     全ての本ソフトウェアが終了すると表示。「OK」をクリック
     </td>
    </tr>
  #ref(社内専用/image251.png" ,left,nowrap,null,100%)
    <tr>
     <td>
     アップデートが完了するまで待つ
     </td>
    </tr>

" " " " " " "

リファレンス

 リファレンスでは、本ソフトウェアの各機能を、ウィンドウ別及び機能別に説明します。原則として本ソフトウェアに関する用語や基本操作は省略しますので、これらに関してはチュートリアルをご参照ください。 "

11.

メインウィンドウ  本項目では、メインウィンドウに備わった機能について説明します。

メニュー・ツールバー

 メニューの各項目の概要について説明します。また、一部項目はツールバーと同じ機能が割り当てられており、その項目については該当するツールバーのアイコンをカッコ内に表示します。

 #ref(社内専用/image252.png" ,left,nowrap,null,100%)
   <tr>
    <td>
    ツールバー
    </td>
   </tr>
   <tr>
    <td>
    メニュー
    </td>
   </tr>


◆ファイル ・ワークスペースの新規作成(

#ref(社内専用/image253.png" ,left,nowrap,null,100%)

)…新しいワークスペースを作成します。 ・ワークスペースの読み込み(

#ref(社内専用/image254.png" ,left,nowrap,null,100%)

)…ファイルからワークスペースを読み込みます。 "・最近使用したワークスペース…最近使用したワークスペースの一覧が表示され、クリックしたワークスペースを開きます。 "・ワークスペースの保存…ワークスペースの設定を保存します。なお、本項目をクリックしなくても、ワークスペースの設定はソフトウェアで都度行われます。 ・(現在開いているクラスファイル)の保存(

#ref(社内専用/image255.png" ,left,nowrap,null,100%)

)…現在編集しているクラスファイルを保存します。 ・全て保存(

#ref(社内専用/image256.png" ,left,nowrap,null,100%)

)…現在開いている全てのクラスファイルを保存します。 ・終了…本ソフトウェアを終了します。
" ◆デバッグ ・ビルド(

#ref(社内専用/image257.png" ,left,nowrap,null,100%)

)…プログラムをビルドします。 ・デバッグ(

#ref(社内専用/image258.png" ,left,nowrap,null,100%)

)…プログラムをビルドし、デバッグ実行します ・実行…プログラムをビルドし、実行します(未実装) ・中断(

#ref(社内専用/image259.png" ,left,nowrap,null,100%)

)…ビルド・実行中のプログラムを中断します。 ・ステップイン…(未実装) ・ステップオーバー(

#ref(社内専用/image260.png" ,left,nowrap,null,100%)

)…(未実装) ・ステップアウト(

#ref(社内専用/image261.png" ,left,nowrap,null,100%)

)…(未実装) ◆設定/通信 ・接続設定…ロボット本体の接続設定画面を開きます。 "・接続(選択した接続先) (

#ref(社内専用/image262.png" ,left,nowrap,null,100%)

)…現在選択している接続先のロボットに対して、通信開始・終了を行います。通信中は項目にチェックが付きます ・仮想ロボットビューアの表示(

#ref(社内専用/image263.png" ,left,nowrap,null,100%)

)…仮想ロボットビューアを開きます ・Javaの環境設定…Javaの環境設定画面を開きます。 ・コマンドブロックの追加…ツールボックスに新しい命令ブロックを追加します "・環境設定の初期化…現在の環境設定を初期化します。初期化すると、独自に追加した命令ブロックなどが削除される場合がありますのでご注意ください。 ◆ウィンドウ "・基準ポーズ…基準ポーズのウィンドウを開きます。既に開いている場合、ウィンドウを "アクティブにします。また、開いている場合、項目にチェックが付きます ・ポーズエリア…上記の操作をポーズウィンドウに対して行います。 ・ウォッチ…上記の操作をウォッチウィンドウに対して行います。 ・プロパティ…上記の操作をプロパティウィンドウに対して行います。 ・エクスプローラ…上記の操作をエクスプローラに対して行います。 ・ツールボックス…上記の操作をツールボックスに対して行います。 ・コンソール…上記の操作をコンソールウィンドウに対して行います。 ◆ヘルプ ・バージョン情報…ソフトウェアのバージョンを表示します ・アップデート…オンラインでアップデートを行います
"_

ステータスバー

 ウィンドウの下部は「ステータスバー」と呼ばれ、現在の接続先など、ソフトウェアの状態(ステータス)を表示します。

  #ref(社内専用/image264.png" o:title="" croptop="45151f"
   cropright="16005f"/>
    <tr>
     <td>
     ステータスバー
     </td>
    </tr>
    <tr>
     <td>
     現在の接続先
     </td>
    </tr>


"

12.

基本設定事項 本項目では、ソフトウェアの各所の設定について説明します。

Javaの環境設定

の環境設定では、本ソフトウェアで使用するJDK(Java Development Kit)の設定、及びビルド時に標準で参照するjarファイルの設定を行います。JDKは本ソフトウェアのインストール時に自動的にインストールされ、本ソフトウェアからはそのJDKを標準で利用します。

 #ref(社内専用/image265.png" ,left,nowrap,null,100%)
   <tr>
    <td>
    使用するJDKへのパス
    </td>
   </tr>
   <tr>
    <td>
    ビルド・実行時に参照するjarファイル
    </td>
   </tr>
   <tr>
    <td>
    リストにjarファイルを追加する
    </td>
   </tr>
   <tr>
    <td>
    リストからjarファイルを削除する
    </td>
   </tr>
 Javaの環境設定画面は、メニューの「設定/通信」→「Javaの環境設定」をクリックすると開きます(下図参照)。各部の概要は次の通りです。

「JDKへのパス」は、本ソフトウェアで使用するJDKのシステム一式のファイルパスを設定します。設定の変更により、本ソフトウェア以外でインストールしたJDKを利用可能ですが、ロボット本体側にも対応するJDKがインストールされていないと正しく動作しないため、設定変更の際はご注意ください。 」は、プログラムのビルド・実行時に参照するjarファイルを設定します。ここで設定したjarファイルは、どのワークスペースのプログラムに対してもビルド・実行時に必ず参照されます。「jarの追加」をクリックするとファイル選択画面を開き、追加するjarファイルを選択できます。また、登録したjarファイルを削除したい場合は、削除するファイルの項目を選択して「削除」ボタンをクリックしてください。
"_

ロボットの通信設定

 ロボットの通信設定では、動かすロボット本体の通信設定の登録・変更・削除が可能です。必要最低限の操作はチュートリアルで紹介しましたが、ここでは本設定に関する各機能・設定項目について説明します。 通信」→「接続設定」をクリックすると開きます(下図参照)。各部の概要は次の通りです。

 #ref(社内専用/image266.png" ,left,nowrap,null,100%)
   <tr>
    <td>
    新しい設定を追加
    </td>
   </tr>
   <tr>
    <td>
    選択した
    設定を削除
    </td>
   </tr>
   <tr>
    <td>
    選択した設定の詳細設定を開く
    </td>
   </tr>
   <tr>
    <td>
    選択した設定に接続して画面を閉じる
    </td>
   </tr>
   <tr>
    <td>
    登録した通信設定が
    リストアップされる。
    クリックすると選択
    </td>
   </tr>


 画面上部には、登録しているロボットの通信設定がリストアップされています。リストアップされた項目をクリックすると各通信設定を選択でき、その状態で「設定変更」をクリックすると選択した通信設定の詳細設定画面を開きます。

  #ref(社内専用/image037.png" ,left,nowrap,null,100%)
    <tr>
     <td>
     パスワードの
     変更画面を開く
     </td>
    </tr>
  #ref(社内専用/image267.png" ,left,nowrap,null,100%)
    <tr>
     <td>
     パスワードの
     変更画面
     </td>
    </tr>


"
」の項目を接続先のロボットのIPアドレスに書き換える際に使用しましたが、それ以外に、ロボットに関する各種設定項目が表示されています。ここでは、それらの概要について簡単に説明します。なお、基本的に「host」以外の項目はあらかじめ適切な値に設定されており、書き換えることで正しくロボットが動作しなくなる場合がありますので、ご注意ください。 ・debugport…Javaのデバッグを行う際に使用するポート番号 ・host…接続先のロボットのIPアドレス(host名) "・password…「username」に対して設定されているパスワード。「username」と「password」は、プログラムの実行・ファイル転送時に、ロボットへアクセスするためのアカウントとして使用されます。 ・platform…ロボットの動作プラットフォームの設定。 "Edison、RaspberryPi、Virtualなどから選択 ・recvID…ロボットに接続されたモータIDの設定(受信側)。 ・rootpath…ロボットへのファイル転送時に転送先となるロボット内部のパス ・sendID…ロボットに接続されたモータIDの設定(送信側)。 ・username…ロボットへのファイル転送時に接続するアカウントのユーザID。 "_

ワークスペースのプロパティ

 #ref(社内専用/image268.png" ,left,nowrap,null,100%)
   <tr>
    <td>
    ワークスペースの設定画面
    </td>
   </tr>
 ワークスペースの設定は、一部を除いて、基本的にソフトウェアからプログラミングなどの操作に応じて自動的に設定が追加・変更されます。現在のワークスペースの設定を確認する場合は、エクスプローラでワークスペースの項目(一番根元)を右クリックして表示されるメニューより「プロパティ」をクリックします。
  #ref(社内専用/image269.png" ,left,nowrap,null,100%)
    <tr>
     <td>
     右クリック
     </td>
    </tr>
    <tr>
     <td>
     クリック
     </td>
    </tr>


"
 ワークスペースの設定項目の概要は以下の通りです。これらの設定の多くは、ソフトウェアで自動的に追加されたものなので、設定を変更すると正しくプログラムをビルド・実行できなくなる場合があるのでご注意ください。 ・DefaultJarFiles(編集不可)…プログラムのビルド・実行時に参照するjarファイル。 "Javaの環境設定の「デフォルト参照jar」と同じ ・execOption…プログラムの実行時にコマンドラインで与えられるオプションの文字列 ・imports…「globalVariables」や「mainFuncName」で参照が必要なimportの設定 ・globalVariables…プログラム内で使用できるグローバル変数 ・mainFuncName…メインメソッド名(パッケージ・クラス名を含む絶対パス) ・mainFuncArgument…メインメソッドの引数の設定 ・classPath…プログラムの実行時に設定されるクラスパス "・モータの衝突回避機能を変更できるようにする…ロボットがモータの衝突回避機能に対応している場合、その機能の有効・無効をポーズエリアやプログラム中から変更できるようにするかの設定 "・最後に実行したプログラムをロボットの○ボタンに割り当てる…ロボットの○ボタンを押すことで、最後に本ソフトウェアから実行したプログラムを呼び出せるようにする "・ターゲット…ターゲットとなるロボットの機種名。この項目の設定により、ツールボックスで使用できる命令ブロックの種類などが切り替わる
"

13.

プロパティウィンドウ  プロパティウィンドウは、命令ブロックやポーズスライダなど、様々なオブジェクト・インターフェースに関しての設定を行うウィンドウです。設定項目は選択した対象に応じて変化し、各設定項目の具体的な説明は、関連するウィンドウの説明にて個別に解説します。

14.

コンソールウィンドウ  コンソールウィンドウは、プログラムのビルド・実行時に状況を表示するウィンドウです。プログラムのビルド・実行を行うと、ウィンドウが閉じられていても自動的に開きます。

15.

ウォッチウィンドウ  ウォッチウィンドウは、使用可能な変数をリストアップするウィンドウです。命令ブロックやクラスウィンドウなどをクリックすると、クリック対象が参照可能な変数の一覧を表示します。

16.

ツールボックス

ツールボックスは、プログラミングの際に使用する命令の選択を行うウィンドウです。ウィンドウ内には、命令ブロックがリストアップされ、クラスウィンドウにドラッグ&amp;ドロップすることで、命令をプログラムに追加できます。

 各命令ブロックの詳細は「命令ブロック」の項目で個別に説明します。本項目では、ツールボックス全般に関する点を説明します。

命令ブロックの追加・削除

 ツールボックス内を右クリックするとポップアップメニューを表示します。メニューの「コマンドブロックの追加」をクリックするとファイル選択画面を開き、追加するブロックのファイルを開くことでブロックを追加できます。メニューの「選択したコマンドブロックを削除」をクリックすると、最後にクリックした命令ブロック(ツールボックス内で反転表示されているもの)を削除します。ブロックのカテゴリをクリックしていると、カテゴリに含まれるブロック全てを削除します。 ブロックの追加・削除の設定をワークスペースに適用する場合は、ワークスペースを開き直してください。
"

17.

エクスプローラ  エクスプローラは、ワークスペースに含まれるファイルやフォルダ・クラス等を表示するウィンドウです。エクスプローラでは、右クリックで表示されるポップアップメニューより、これらの項目の新規作成や追加・削除が可能です。

メニュー

エクスプローラの項目を右クリックするとポップアップメニューを表示します。メニューの内容は、メソッドの項目とそれ以外の項目のどちらをクリックしたかで変化します。ここでは、それぞれのメニューの概要について説明します。

  • ○ メソッドブロック以外のメニュー "・新規…ワークスペースにパッケージ及びクラスの新規作成を行う。それぞれの具体的な作成手順は、チュートリアルの「プログラミングの準備」を参照 " ・追加…ワークスペースに参照jarファイル及びリソースファイルを追加する。ここで追加したjarファイルは、Javaの環境設定の標準参照jarと異なり、現在のワークスペースのみで参照される。リソースファイルの追加・使用については、チュートリアルの「音声再生・ネットワーク通信のプログラミング」を参照 …クリックした項目を削除する。 " ・開く…クリックした項目を開く。開く方法は項目によって異なり、クラス及びメソッドの場合は、クラスウィンドウを開く。リソースファイルの場合はPC上で関連付けられたプログラムを起動する。それ以外の項目で[+]ボタンが表示されている場合は、ツリーを展開する。 …クラス名を変更する。 …プログラムのビルドを行う …プログラムのビルド・実行を行う …別画面で項目のプロパティを開く。プロパティの画面が存在しない項目は選択できない
  • ○ メソッドブロックのメニュー …クリックしたメソッドをメインメソッドに設定する

プログラムへのメソッドの追加

 エクスプローラ内のメソッドの項目をクラスウィンドウにドラッグ&ドロップすると、そのメソッドを呼び出すブロックを追加します。具体的な操作方法は、チュートリアルの「4.クラス・メソッドを切り分けたプログラムの作成」を参照してください。

18.

クラスウィンドウ  クラスウィンドウは、プログラムの中身を作成するウィンドウです。フローチャートを作成する感覚で、ブロック同士をプログラムの流れに沿って接続し、プログラムを作成することができます。なお、命令ブロックの設定項目については、「命令ブロック」の項目をご確認ください。

命令ブロックの操作

 クラスウィンドウへの命令ブロックの追加や、追加したブロックの選択・接続・切断などの操作は、チュートリアルの「単純なモーションプログラム」以降を参照してください。

メニューとツールバー

クラスウィンドウを右クリックするとポップアップメニューを表示し、ブロックのコピーや貼り付け・操作のやり直し等様々な操作が可能です。また、クラスウィンドウには専用のツールバーが備わっており、一部のボタンはメニューの項目と共通しています。ここでは、メニューとツールバーの各機能について説明します(カッコ内は該当するツールバーのアイコンを示します)。 "・元に戻す(

#ref(社内専用/image270.png" ,left,nowrap,null,100%)

)…プログラムの変更を一つ前の状態に戻す。「元に戻す」「やり直し」は、ポーズウィンドウとリンクしており、操作手順によってはウィンドウの表示が切り替わる ・やり直し(

#ref(社内専用/image271.png" ,left,nowrap,null,100%)

)…「元に戻す」で戻した手順を一つ進める ・半透明…命令ブロックの表示方法を、透過/非透過に切り替える "・コピー(

#ref(社内専用/image272.png" ,left,nowrap,null,100%)

)…選択状態のブロックをコピーする。「コピー」「切り取り」でコピーしたブロックは、別のクラスウィンドウへ貼り付けることが可能 "・切り取り(

#ref(社内専用/image273.png" ,left,nowrap,null,100%)

)…選択状態のブロックをコピーして削除する ・貼り付け(

#ref(社内専用/image274.png" ,left,nowrap,null,100%)

)…コピーしたブロックを貼り付ける "・メインメソッドに設定…メソッドブロックを右クリックした場合のみ選択可能で、クリックしたブロックをメインメソッドに切り替える 以下の機能は、ツールバーのみに備わっています。 ・

#ref(社内専用/image275.png" ,left,nowrap,null,100%)

(表示倍率)…ウィンドウ内の描画のズームイン・ズームアウトを設定。 10%~1000%の範囲で、数値を選択肢から選ぶか、直接キーボードから入力して設定する ・

#ref(社内専用/image276.png" ,left,nowrap,null,100%)

(保存)…編集中のクラスをファイルに保存する
"_

ショートカットキー・その他マウス操作

 クラスウィンドウには、これまでに説明した操作以外に、ショートカットキーやマウスでの操作が備わっています。それぞれの概要を説明します。

  • ○ マウス操作 ・ホイールをクリックしてドラッグ…ドラッグに合わせて画面をスクロールする ・Ctrlキーを押しながらホイールを操作…画面のズームイン・ズームアウトを10%単位で切り替える ・一部のブロック(ポーズ・ウェイト等)を選択してホイールを操作…遷移時間を増減する
  • ○ ショートカットキー …ウィンドウ内の全てのブロックを選択 …メニューの「コピー」と同じ操作 …メニューの「貼り付け」と同じ操作 …メニューの「切り取り」と同じ操作 …メニューの「やり直し」と同じ操作 …メニューの「元に戻す」と同じ操作 …クラスをファイルに保存 …選択したブロックを削除

クラスの設定

 クラスウィンドウの命令ブロック以外の場所をクリックすると、クラス自体の設定をプロパティウィンドウで行うことができます。クラスの設定は、プログラミング時にソフトウェアから自動で追加・変更されるため、基本的に直接設定を変更する必要はありません。また、自動で追加・変更された設定を手動で変更すると、プログラムが正しくビルド・実行できなくなる場合があるためご注意ください。 " ・className(編集不可)…クラス名 ・ConstractorArguments…コンストラクタの引数設定 ・Import…クラス内の参照設定。ブロック追加時に自動で設定される ・memberObjects(編集不可)…クラスのメンバ変数やインスタンス。ブロック追加時に自動で設定される ・package(編集不可)…クラスが所属するパッケージ名 ・path(編集不可)…クラスが保存されているファイルパス
"

19.

ポーズウィンドウ  ポーズウィンドウは、ロボットのポーズを編集するためのウィンドウです。命令ブロックの設定は主にプロパティウィンドウで行いますが、ロボットのポーズについては、本ウィンドウにて数値入力形式より視覚的に設定・編集できるようになっています。

ポーズスライダの概要

 ポーズスライダの各部の説明、及び基本的な操作方法については、チュートリアルの「単純なモーションプログラムの作成」以降をご参照ください。

メニューとツールバー

ポーズウィンドウを右クリックするとポップアップメニューを表示し、ポーズ値のコピーや貼り付け・操作のやり直し等様々な操作が可能です。また、ポーズウィンドウには専用のツールバーが備わっており、一部のボタンはメニューの項目と共通しています。ここでは、メニューとツールバーの各機能について説明します(カッコ内は該当するツールバーのアイコンを示します)。 "・元に戻す(

#ref(社内専用/image270.png" ,left,nowrap,null,100%)

)…プログラムの変更を一つ前の状態に戻す。「元に戻す」「やり直し」は、クラスウィンドウとリンクしており、操作手順によってはウィンドウの表示が切り替わる ・やり直し(

#ref(社内専用/image271.png" ,left,nowrap,null,100%)

)…「元に戻す」で戻した手順を一つ進める "・コピー(

#ref(社内専用/image272.png" ,left,nowrap,null,100%)

)…選択状態のポーズスライダのポーズ値をコピーする。「コピー」「貼り付け」に関する操作は、選択状態のスライダが存在しない場合、原則として画面上の全てのポーズスライダに対して操作が適用される ・貼り付け(

#ref(社内専用/image274.png" ,left,nowrap,null,100%)

)…コピーしたポーズ値を貼り付ける "・半身コピー(左から右)(

#ref(社内専用/image277.png" ,left,nowrap,null,100%)

)…左半身側に属するポーズスライダのポーズ値を、対応する右半身のポーズスライダにコピーする "・半身コピー(右から左)(

#ref(社内専用/image278.png" ,left,nowrap,null,100%)

)…右半身側に属するポーズスライダのポーズ値を、対応する左半身のポーズスライダにコピーする "・鏡像反転(

#ref(社内専用/image279.png" ,left,nowrap,null,100%)

)…左半身・右半身に属するポーズスライダのポーズ値を交換し、体の主軸に属するポーズスライダのポーズ値を反転する ・基準ポーズへ戻す(

#ref(社内専用/image280.png" ,left,nowrap,null,100%)

)…ポーズスライダのポーズ値を現在の基準ポーズの値に戻す
" 以下の機能は、ツールバーのみに備わっています。 ・

#ref(社内専用/image281.png" ,left,nowrap,null,100%)

(ポーズのキャプチャ)…現在のロボットのポーズを取り込む "・

#ref(社内専用/image282.png" ,left,nowrap,null,100%)

(モータのON/OFF)…ロボットのモータのON/OFFを切り替える。ロボットの状態によりアイコンの表示が切り替わる(

#ref(社内専用/image283.png" ,left,nowrap,null,100%)

=モータOFF/

#ref(社内専用/image282.png" ,left,nowrap,null,100%)

=モータON) ・

#ref(社内専用/image284.png" ,left,nowrap,null,100%)

(衝突回避機能のON/OFF)…ロボットのモータの衝突回避機能のON/OFFを切り替える。 このボタンを有効にするには、ワークスペースの設定変更が必要(「ワークスペースの設定」項目を参照)。ロボットの状態によりアイコンの表示が切り替わる(

#ref(社内専用/image285.png" ,left,nowrap,null,100%)

=機能OFF/

#ref(社内専用/image284.png" ,left,nowrap,null,100%)

=機能ON) ・

#ref(社内専用/image275.png" ,left,nowrap,null,100%)

(表示倍率)…ウィンドウ内の描画のズームイン・ズームアウトを設定。 10%~1000%の範囲で、数値を選択肢から選ぶか、直接キーボードから入力して設定する ・

#ref(社内専用/image286.png" ,left,nowrap,null,100%)

(遷移時間)…ポーズの遷移時間を設定する。数値はキーボードから "直接入力する "ツールバーのボタンは、一部を除きポーズが編集できる状態のみの場合に操作可能です。また、ポーズのキャプチャやモータ・衝突回避機能のON/OFFなど、ロボットとの通信が必要となる操作は、ロボットと通信していない場合は利用できません。

ショートカットキー・その他マウス操作

 ポーズウィンドウには、これまでに説明した操作以外に、ショートカットキーやマウスでの操作が備わっています。それぞれの概要を説明します。

  • ○ マウス操作 ・ホイールをクリックしてドラッグ…ドラッグに合わせて画面をスクロールする "・SHIFTキーを押しながらホイールを操作…モータのポーズスライダを選択中の場合、モータゲインを増減する
  • ○ ショートカットキー …ウィンドウ内の全てのブロックを選択 …メニューの「コピー」と同じ操作 …メニューの「貼り付け」と同じ操作 …メニューの「やり直し」と同じ操作 …メニューの「元に戻す」と同じ操作
    "

ポーズスライダの設定

 ポーズスライダをクリックすると、そのポーズスライダの設定がプロパティウィンドウに表示され、設定を変更することができます。ポーズスライダの設定では、数値の上限・下限、名称や数値の表記方法、対応する出力(モータ・LEDなど)、左右半身の属性等を設定できます。なお、ポーズスライダの設定は、ワークスペースの作成時に、ロボットに応じて最初から適切な数値が設定されており、一部を除いて基本的に変更する必要性が低くなっています。初期設定を変更すると、ポーズの編集が正しく行われなくなる場合があるため、注意してください。 ・enable…ポーズスライダを使用するか。Falseに設定したポーズスライダは画面に表示されない ・gainEnable…ポーズスライダがモータゲインを設定できるようにするか ・gainIndex…モータゲインの数値の出力先 ・isAbs…ポーズ値の表記を、絶対値にするか、基準ポーズのポーズ値を基準とした相対値にするか ・isRawParam…ポーズ値の表記を「putParamGain」を乗算せずに生データ単位とするか ・limit_H…ポーズ値の設定可能範囲の上限 ・limit_L…ポーズ値の設定可能範囲の下限 ・Location…ポーズスライダの表示位置。画面の表示倍率100%を基準としたピクセル単位で設定 "・mirror…左右半身コピー・鏡像反転の際の、ポーズスライダの属性と、ペアになるポーズスライダの設定。設定を変更する場合、項目の[+]ボタンをクリックして、以下の詳細項目を表示する "・_pairNum…左半身・右半身の属性の場合に、ペアとなるポーズスライダの番号 "・isNoReverse…左半身・右半身の属性の場合に、ペアとなるポーズスライダのポーズ値を反転せずにコピーするか "・type…ポーズスライダの属性。NONE(無効)、PAIR_L(左半身)、PAIR_R(右半身)、MIRROR(主軸)から選択 ・name…ポーズスライダの名称 ・param(編集不可)…現在のポーズ値(生データ表記) ・paramIndex…ポーズ値の出力先 "・paramUnitName…ポーズ値の単位表記。「isRawParam」がfalseの場合に、ポーズ値の後に表記される ・potensionIndex…ロボットから読み出される現在のポーズ値の参照先 "・putLR…ポーズスライダ描画時に、下限・上限側を左右どちらに配置するか。LEFT(下限→上限表示)、RIGHT(上限→下限表示)から選択 ・putParamGain…ポーズ値の表記の際に乗算される係数。「isRawParam」がfalseの場合に、ポーズ値にこの値を乗算した結果を小数点第2まで表示する ・selected…ポーズスライダが選択状態か ・spinStep…ポーズ値の増減の分解能

ポーズウィンドウの設定

 ウィンドウ内のポーズスライダ以外の場所をクリックすると、プロパティウィンドウにポーズウィンドウの設定を表示します。ここで設定できる項目は以下の通りです。 …ポーズスライダの透過表示の設定。1~0.1の範囲で設定し、数値が低いほど透過度が上がる "・sliders…全てのポーズスライダのプロパティ。項目の[+]ボタンや[...]ボタンをクリックすると、個別の設定項目を展開する。未使用(enableがfalse)のポーズスライダを設定したり、ポーズスライダの「mirror」の「_pairNum」の項目のために番号を確認する場合などは、こちらから参照・操作する
"

20.

基準ポーズウィンドウ  基準ポーズウィンドウでは、ポーズエリアで使用する基準ポーズの追加・削除・変更が可能です。ウィンドウ内には、現在登録されている基準ポーズがリストアップされます。

基準ポーズの追加・削除・変更

 基準ポーズを追加する場合は、最初にポーズウィンドウでポーズを編集し、登録する基準ポーズを作成してください。登録するポーズを作成したら、基準ポーズウィンドウ内を右クリックしてポップアップメニューを表示し、「追加」をクリックしてください。クリックすると「新しいポーズ」と言う名称で作成したポーズが基準ポーズに登録されます。  登録した基準ポーズを変更したい場合は、ポーズエリアで変更後のポーズを作成してから、基準ポーズウィンドウ内の変更したい基準ポーズの項目を右クリックしてポップアップメニューを表示し、「差し替え」をクリックしてください。  登録した基準ポーズを削除したい場合は、基準ポーズウィンドウ内の削除したい基準ポーズの項目を右クリックしてポップアップメニューを表示し、「削除」をクリックしてください。

基準ポーズの選択

ポーズウィンドウで使用する基準ポーズを変更する場合は、設定したい基準ポーズの項目をダブルクリックしてください。ダブルクリックすると、現在編集中のポーズに選択した基準ポーズが適用されます。

基準ポーズの名称変更

秒待つと、基準ポーズの名前を編集できます。キーボードから名前を入力してEnterキーを押すと、名前の変更ができます。
"

21.

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

共通の設定項目

 全てのブロックには、下記の共通設定項目があります。これらは、プロパティウィンドウ内では標準で項目が折りたたまれているため、設定を変更する場合は[+]ボタンをクリックして項目を展開します。 …ブロックに関する任意のコメントを入力 …プログラム実行時にbreakポイントを設定 …ブロックの選択状態 …ブロックの表示場所(ウィンドウの表示倍率が100%の場合を基準としたピクセル単位)

個別の設定項目

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

  • ○ メソッドブロック  メソッドを作成します。 …メソッドの引数。設定・変更は、プロパティウィンドウの
    #ref(社内専用/image220.png" ,left,nowrap,null,100%)
    ボタンをクリックする …引数の名前。他の引数と重複しないようにする …引数の型。Int,Stringなどから選択、または直接テキストを入力する …メソッド名。同一クラス内で重複する名前は設定できない (編集不可)…メソッドの修飾子 …メソッドの型。void,int,booleanなどから選択、または直接テキストを入力する。 以外を設定した場合、必ずreturnブロックで戻り値を設定する必要がある。 "  なし " "
  • ○ 変数宣言  変数を作成します。ブロックをメソッド内に接続するとローカル変数、コンストラクタ内に接続するとメンバ変数として利用できます。 …初期化を行うか(True=初期化する、false=初期化しない)。 trueの場合、initParamも必ず設定する。 …変数の初期化内容。typeで選んだ型に応じて、数値や文字列・変数などを設定する …変数名。半角英数で入力する …変数の型。int,String,booleanなどから選択、または直接テキストを編集する "  なし " "
  • ○ 演算  任意の変数に対して定数や変数を四則演算し、結果を変数に戻します。 …演算子。=(代入),+=(加算),-=(減算),*= (乗算),/=(除算),%=(剰余)から選択 …参照元の変数。演算結果はここで選択した変数に代入される。 …leftに対する演算で使用する定数・変数。 "  なし " "
  • ○ for for文を出力し、既定の回数プログラムを繰り返します。ループカウンタ用の変数、及び繰り返し回数(定数または変数)を設定できます。forブロックの中に別のforブロックを入れる場合、counterの変数名が重複しているとビルドエラーが発生します。 …ループカウンタの変数名。 …変数名。半角英数で入力する …変数の型。int,String,booleanなどから選択、または直接テキストを編集する …初期化を行うか(True=初期化する、false=初期化しない)。 trueの場合、initParamも必ず設定する。 …変数の初期化内容。typeで選んだ型に応じて、数値や文字列・変数などを設定する …繰り返しの回数。  なし " "
  • ○ break  現在実行されている一番近い繰り返しを中断して、その繰り返しの終了ブロックにジャンプします。繰り返しの外で使用するとビルドエラーが発生します。  なし  なし
  • ○ return  メソッドを終了して、一つの戻り値を返します。戻り値は任意の定数・変数を設定できます。メソッドのtypeがvoid以外の場合は、必ずreturnを最後に入れてください。また、returnValueには、メソッドのtypeと同じ型の変数・定数を設定してください。 …戻り値。メソッドのtypeと同じ型の定数・変数を設定する。  なし
  • ○ 衝突回避機能の一時無効  ロボットの衝突回避機能を一時的に無効にします。このブロックを使う場合は、ワークスペースの設定を変更し衝突回避機能の切り替えを有効にする必要があります。ブロックには開始・終了があり、間に挟んだ処理を実行する間だけ、衝突回避機能が無効になります。  なし
    "
  • ○ 無限ループ に相当する命令が出力され、開始・終了の間に挟んだ処理を永久に繰り返します。  なし  なし
  • ○ while 文を作成します。 …比較条件式の左辺を設定。任意の変数または定数を設定する。 …比較演算子を設定。=,!=,<,<=,>,>=から選択。 …比較条件式の右辺を設定。任意の変数または定数を設定する。  なし
  • ○ ifブロック による汎用の条件分岐を作成します。分岐条件として、一つの比較条件式を設定できます。  なし
         最小数=2、最大数=無限_
    " ・isOnlyElse…2番目以降の条件の場合、比較条件式を出力せずに「else」を出力するかを設定。 "        trueの場合、partA~Cの内容に関わらず「else」を出力する …比較条件式の左辺を設定。任意の変数または定数を設定する。 …比較演算子を設定。=,!=,<,<=,>,>=から選択。 …比較条件式の右辺を設定。任意の変数または定数を設定する。
    "
  • ○ switch case(整数) による汎用の条件分岐を作成します。 …各分岐条件と比較する数値を、任意の定数・変数から設定する。
         最小数=2、最大数=無限_
    " ・condition…switchValueと比較する定数を整数で入力する " ・isDefault…分岐条件を「default:」にするか否か "
  • ○ switch case(文字列) switch caseの条件分岐を作成します。 …各分岐条件と比較する文字列を、任意の文字列・変数から設定する。
         最小数=2、最大数=無限_
    " ・condition…switchValueと比較する文字列を設定する " ・isDefault…分岐条件を「default:」にするか否か
  • ○ ランダム によるランダムの条件分岐を作成します。 …発生する乱数の最大数を設定する。実際に得られる乱数は、この設定値-1の値になる
         最小数=2、最大数=無限_
    " ・condition…設定項目の「range」と比較する定数を、整数で入力する " ・isDefault…分岐条件を「default:」にするか否か
    "
  • ○ poseブロック ブロックをはじめとした「RobotLib」カテゴリのブロックの一部は、ロボットの機種(ワークスペースの「ターゲット」の設定)に応じて切り替わります。 …ポーズの遷移時間をmsec単位の整数で設定 …ポーズの遷移が完了するまで処理を待機するか  なし "
  • ○ soundブロック サウンドファイルを再生します。 …再生する音声ファイル。登録したリソースファイルから選択する  なし
  • ○ waitブロック  次の命令実行まで、一定時間待機します。 …待機時間をmsec単位の整数で設定  なし
  • ○ モータON にします。プログラムの開始時は必ずロボットのモータがOFFになっているので、モータを動かす場合はこのブロックでONにしてください。  なし  なし
  • ○ モータOFF にします。  なし  なし " "
  • ○ 自由記述処理  入力したテキストを直接ソースに出力します。任意の処理を記述できますが、設定内容に問題があるとビルドエラーが発生します。また、コメントアウト(「//」「/*」「*/」)は記述しないで下さい。 …ソースに出力するテキストを入力。 設定・変更は、プロパティウィンドウの
    #ref(社内専用/image220.png" ,left,nowrap,null,100%)
    ボタンをクリックする  なし
  • ○ ログ出力  プログラム実行時に、コンソールウィンドウ(またはロボット内のシェルのコンソール)に任意のテキストを表示します。デバッグ用途などに利用できます。 …コンソールに出力するテキストを、任意の文字列・変数から設定  なし
  • ○ 録音  ロボットのマイクから音声を一定時間録音します。録音したファイルはロボットのプログラム転送先のディレクトリに保存されます。 …録音するファイル名を文字列・変数で設定 …録音する時間(msec単位)を数値・変数で設定  なし
  • ○ 録音した音声を再生  録音ブロックで録音した音声をロボットから再生させます。 …再生するファイル名を文字列・変数で設定  なし
  • ○ 顔検出  ロボット本体のカメラで人の顔の検出を行います。検出した顔をロボットに自動的に追跡させたい場合は「顔追跡」を使ってください。ブロックには開始・終了があり、この間に挟まれた部分で顔の検出を行います。顔検出の中に別の顔検出や顔追跡のブロックを入れると、カメラの使用が重複してプログラムの実行エラーが発生するため、これらのブロックは必ず同時に1個だけ実行されるようにしてください。 " ・ageSexDetect…年齢と性別の検出を行うか否か。「性別の判定」及び「年齢の判定」を使うときは、必ずtrueに設定する " ・faceSerch…顔の検出を有効にするか否か。「顔が見つかったか?」を使うときは、必ずtrueに設定する …笑顔の検出を行うか否か。「笑顔の判定」を使うときは、必ずtrueに設定する  なし "
  • ○ 顔追従  ロボット本体のカメラで人の顔を検出し、また検出状況に応じてロボットの首を自動的に動かします。首の動きは、顔が検出されなければ周囲を見回し、検出されたらその方向を向きます。顔の検出のみ行い、ロボットの首を動かさない場合は「顔検出」を使ってください。 ブロックには開始・終了があり、この間に挟まれた部分で顔の検出と追従を行います。顔追従の中に別の顔追従や顔検出のブロックを入れると、カメラの使用が重複してプログラムの実行エラーが発生するため、これらのブロックは必ず同時に1個だけ実行されるようにしてください。
    " " ・ageSexDetect…年齢と性別の検出を行うか否か。「性別の判定」及び「年齢の判定」を使うときは、必ずtrueに設定する " ・faceSerch…顔の検出を有効にするか否か。「顔が見つかったか?」を使うときは、必ずtrueに設定する …笑顔の検出を行うか否か。「笑顔の判定」を使うときは、必ずtrueに設定する  なし
  • ○ 顔が見つかったか?  顔検出、及び顔追従の実行中に、顔が検出されたかどうかで処理を分岐します。ノイズによる誤動作を防ぐため「連続で顔が検出された回数」で条件分岐を行うことができます。分岐条件の「integerValue」を0、「operation」を「>」に設定すると、顔が検出されたら必ず条件が成立するようになります。 なお、顔検出、及び顔追従ブロックの外で本ブロックを使用するとプログラムの実行時にエラーが発生するので、必ずこれらのブロックの間に入れてお使いください。  なし
         最小数=2、最大数=2_
    " ・isOnlyElse…2番目以降の条件の場合、比較条件式を出力せずに「else」を出力するかを設定。 "        trueの場合、partA~Cの内容に関わらず「else」を出力する (編集不可)…顔の連続検出回数 …比較演算子を設定。=,!=,<,<=,>,>=から選択。 …顔の連続検出回数と比較する数値。任意の変数または定数から設定 "
  • ○ 性別の判定  顔検出、及び顔追従の実行中に、検出された顔の性別によって条件分岐を行います。分岐条件の登録数や内容は固定で、各分岐の条件は、1番目が「男性か?」、2番目の分岐が「女性か?」、3番目の分岐が「いずれでもない」です。 なお、本ブロックは、「ageSexDetect」の設定をtrueにした顔検出、及び顔追従ブロックの中でお使いください。この設定がfalseになっていたり、これらのブロックの外で本ブロックを使うと、プログラムの実行時にエラーが発生します。  なし
    "
         最小数=3、最大数=3_
    " ・isOnlyElse…2番目以降の条件の場合、比較条件式を出力せずに「else」を出力するかを設定。 "        trueの場合、partA~Cの内容に関わらず「else」を出力する (編集不可)…設定無し。 (編集不可)…設定無し。 (編集不可)…設定無し。
  • ○ 年齢の判定  顔検出、及び顔追従の実行中に、検出された顔の年齢によって条件分岐を行います。 なお、本ブロックは、「ageSexDetect」の設定をtrueにした顔検出、及び顔追従ブロックの中でお使いください。この設定がfalseになっていたり、これらのブロックの外で本ブロックを使うと、プログラムの実行時にエラーが発生します。  なし
         最小数=2、最大数=無限_
    " ・isOnlyElse…2番目以降の条件の場合、比較条件式を出力せずに「else」を出力するかを設定。 "        trueの場合、partA~Cの内容に関わらず「else」を出力する (編集不可)…検出した顔の年齢を表す数値 …比較演算子を設定。=,!=,<,<=,>,>=から選択。 …検出した顔の年齢と比較する数値。任意の変数または定数から設定
  • ○ 笑顔の判定  顔検出、及び顔追従の実行中に、検出された顔の笑顔の点数によって条件分岐を行います。笑顔の点数は整数で取得され、一般的な「笑顔」の閾値は45付近です。 なお、本ブロックは、「smileDetect」の設定をtrueにした顔検出、及び顔追従ブロックの中でお使いください。この設定がfalseになっていたり、これらのブロックの外で本ブロックを使うと、プログラムの実行時にエラーが発生します。  なし
    "
         最小数=2、最大数=無限_
    " ・isOnlyElse…2番目以降の条件の場合、比較条件式を出力せずに「else」を出力するかを設定。 "        trueの場合、partA~Cの内容に関わらず「else」を出力する (編集不可)…検出した顔の笑顔の点数を表す数値 …比較演算子を設定。=,!=,<,<=,>,>=から選択。 …検出した顔の笑顔の点数と比較する数値。任意の変数または定数から設定
  • ○ 写真を撮る  ロボットのカメラで写真を撮影します。撮影したファイルはロボットのプログラム転送先のディレクトリに保存されます(png形式)。 …記録するファイル名を文字列・変数で設定  なし
  • ○ TCP/IPクライアント で接続し、任意の文字列を送信します。文字列の最後には必ず改行コード(\n)が付加されます。分岐条件の登録数や内容は固定で、各分岐の条件は、1番目が「送信成功」、2番目の分岐が「それ以外(失敗)」です。 …接続先に送信する文字列。送信時には末尾に改行コード(\n)が付加される …接続先のホスト名(IPアドレス) …通信に使用するポート番号。 " "_◆分岐条件: 最小数=2、最大数=2_  なし(設定変更不可)
    "
  • ○ TCP/IPサーバ初期化 サーバの初期化を行います。TCP/IPサーバ受信のブロックを使う場合は、必ず本ブロックの開始・終了の間に入れてください。 …通信に使用するポート番号 " ・timeout…クライアントからの接続待ち受け時間(msec単位)。接続が行われた後は、この設定時間に関係なく、改行コードが出現するまで受信を続ける " "_◆分岐条件: " なし " "
  • ○ TCP/IPサーバ受信 接続に対して対応し、任意の文字列を受信します。メッセージの受信は改行コード(\n)が出現するまで行います。また、正常にメッセージを受信できたら「OK\n」のメッセージを返信します。  条件分岐は、受信したメッセージと文字列の比較で行い、両者が完全に一致した場合に条件が成立します。 本ブロックは、必ずTCP/IPサーバ初期化のブロックの間に入れてください。正しい場所で使用しないと、プログラムの実行時にエラーが発生します。 " なし " "_◆分岐条件: 最小数=2、最大数=無限_ " ・isOnlyElse…2番目以降の条件の場合、比較条件式を出力せずに「else」を出力するかを設定。 "        trueの場合、partA~Cの内容に関わらず「else」を出力する (編集不可)…設定なし。 …受信したデータと比較する文字列。定数または変数から設定可能。 両者が完全一致したら条件が成立する (編集不可)…設定なし。
    "
  • ○ 音声合成 」の項目で設定した文章をロボットに発話させます。音声の合成処理はネットワーク上のサーバで行うため、インターネットの接続環境が必要です。また、本ブロックはライセンスを供与されたユーザのみ利用できます。 …発話させる文章 " "_◆分岐条件:  なし "
  • ○ 音声認識  ロボットのマイクで取得した音声をテキストに変換し、その結果に応じて処理を分岐します。分岐条件には、認識結果と比較する文字列を設定でき、その文字列が認識結果に含まれていた場合に条件が成立します。例えば、比較する文字列に「こんにちは」と設定した場合、認識結果が「こんにちは」「どうも、こんにちは」のいずれも条件が成立します。 音声の認識処理はネットワーク上のサーバで行うため、インターネットの接続環境が必要です。また、本ブロックはライセンスを供与されたユーザのみ利用できます。 " なし " "_◆分岐条件: 最小数=2、最大数=無限_ " ・isOnlyElse…2番目以降の条件の場合、比較条件式を出力せずに「else」を出力するかを設定。 "        trueの場合、partA~Cの内容に関わらず「else」を出力する (編集不可)…設定なし。 …認識結果と比較する文字列。定数または変数から設定可能。 認識結果の中にpartBの文字列が含まれたら条件成立。 (編集不可)…設定なし。
    "

22.

Q&A ロボットと通信できない 同一ネットワーク上にロボットが ビルド時に「」というエラーが表示される ワークスペースの読み込み時に「」というエラーが表示される

/html>