- バックアップ一覧
- 差分 を表示
- 現在との差分 を表示
- ソース を表示
- VstoneMagicを使ってみる/プログラミング/単純なモーションプログラムの作成 へ行く。
2.2. 単純なモーションプログラムの作成 †
「プログラミングの準備」でロボットとの通信・プログラミングの準備を整えたら、続いて簡単なモーション(動作)のプログラムを作成してみましょう。本章では、Sotaを例に、実際のプログラミングの手順について説明します。
ロボットのプログラミングは、クラスの中で行います。まずは、エクスプローラより、現在パッケージに登録されているクラス(Sotaの場合「mymain.java」)をダブルクリックしてください。ダブルクリックすると、本ソフトウェア内に「クラスウィンドウ」を開きます。
命令ブロックの追加 †
ロボットのプログラミングは、フローチャートのような感覚で、クラス上に「命令ブロック」を並べ、それを実行順につなぎ合わせて作成します。命令ブロックは「ツールボックス」のウィンドウに表示され、マウス操作で任意のブロックを選び、クラスウィンドウに追加できます。
使用できる命令ブロックの種類は、使用するロボットの機種やワークスペースの設定などによって変わります。
それでは、簡単な例として「Sotaの両腕を上げ下げする」というプログラムを作成してみましょう。
- ○ メソッドとコンストラクタ
クラスウィンドウを開くと、既に2種類の命令ブロックが作成されています。これらはそれぞれ「メソッド」と「コンストラクタ」と言うブロックです。
「メソッド」は、ロボットに実行させる命令をまとめるためのブロックです。開始・終了の2個のブロックがセットになっており、この間に「モータON」「ポーズ」等、実際のロボットの動きに関する命令ブロックをつなげます。
「コンストラクタ」は、メソッドの一種ですが、クラスの初期設定に関する命令を作成するためのメソッドです。命令ブロックの種類によっては、クラスに追加すると、必要な変数が自動的にコンストラクタに追加されます。
コンストラクタはプログラムの実行に必要な設定を行っており、中の命令ブロックを設定変更や変更すると、正しくプログラムが実行できなくなる場合があります。チュートリアル中、及びプログラム中の必要時以外に、コンストラクタの内容を変更しないで下さい。
メソッドについて補足すると、メソッド(関数)は、一連の処理の開始・終了を表すもので、メソッドブロックに接続されていない命令ブロックはロボットに実行させることができません。また、詳細は後述しますが、プログラムを実行する際は、作成したプログラムに含まれるメソッドから任意の物を「メインメソッド」として設定し、そのメソッドから実行を開始します。
- ○ モータONブロックの追加と接続
それでは、mainのメソッドに必要な命令ブロックを追加していきましょう。ロボットは、プログラムの開始直後はモータがOFFの状態なので、動作の指示を与えても実際にモータが動きません。そこで、動作の中身を作る前に、最初にモータONの処理が実行されるようなプログラミングが必要です。
命令ブロックをクラスに追加する場合、ツールボックスからクラスウィンドウに目的の命令ブロックをドラッグ&ドロップします。ツールボックスから「モータON」のブロックを探して、クラスウィンドウにドラッグ&ドロップしてください。またこの時、メソッドの開始側のブロックのコネクタ(
の部分)にドロップしましょう。これにより、最初から追加したブロックがメソッドブロックと接続されます。
命令ブロック内にある、ブロック同士を接続するインターフェースを「コネクタ」と言い、
のようなアイコンで表示されます。コネクタは、ブロックの接続状態に応じて表示色が切り替わります。
- ■コネクタの接続ステータス
…未接続
…接続済
…接続可能
「接続可能」は、ブロック同士の接続操作(後述)において、目的の接続が可能な状況を表します。
コネクタに追加するブロックをドラッグ&ドロップした時のように、ブロック同士が接続可能な状態では、コネクタの色がオレンジ( )になります。ブロックを接続する方法としては、これ以外に「コネクタ同士を真横に隣接させる」「コネクタをドラッグして矢印を引っ張り、接続先のブロックにドロップする」等があります。詳細は、後述のクラスウィンドウに関する操作説明で紹介します。
- ○ ポーズブロックの追加と接続
次に「腕を上げ下げする」というロボットの実動作部分を作成します。本ソフトウェアのモーション(動作)の構造は「キーフレームアニメーション」形式であり、一連の動作における途中の姿勢(ポーズ)を並べて、そのポーズ間をつなぐ時間を設定する方式になります(いわゆるパラパラ漫画と同じような方式です)。
一般のパラパラ漫画(アニメーション)では、動きを滑らかに見せるために細かいコマ割りが必要ですが、Sotaの場合、各キーフレームのポーズ間をロボット自身が自動的に補間するため、少ないポーズでも動作させることができます。
例えば、今回の「腕を上げ下げする」をキーフレームアニメーションの形に分解すると、①「腕を下げたポーズ(実行直後)」→②「腕を上げたポーズ」→③「腕を下げたポーズ」の3つのポーズになります。
- ①手を下げたポーズ
- ②手を上げたポーズ
- ③手を下げたポーズ
個別のポーズを制御する命令ブロックは「poseブロック」が該当します。それでは、モータONブロックの後に、ポーズブロックを3個追加しましょう。poseブロックを追加すると、コンストラクタに自動でブロックが追加されます。これはposeブロックの実行に必要な変数(インスタンス)が追加されたためです。先に説明した通り、コンストラクタの内容を変更するとプログラムが正しく実行できなくなる場合があるため、コンストラクタは操作せずに作業を進めてください。
ブロックを追加した場合に、ブロック同士が重なるなどしてつなげにくくなった場合は、ブロックをドラッグして動かしましょう。
以上で必要なブロックの追加は完了です。続いて、次項でポーズの作成を行います。