目次

9. スクリプト言語

はじめに

Go Simulation!では、ユーザー側でロボットのプログラムを作成することができます。
Go Simulation!には独自のプログラム言語(スクリプト言語)があり、これを使うことで簡単にロボットのプログラムを作成することができます。

プログラムには、対話実行と、プログラム実行の2つのモードがあります。

対話実行は、一つ一つコマンドを打ち込んで実行させる方法です。
動作の確認がしやすいのが特徴です。
ただし、一部の命令しか使えないため、簡単な動作チェックしかできません。

プログラム実行は、複数行に渡ってプログラムを記述します。
複雑なアルゴリズムを記述することが可能です。

対話実行の例

ロボット設計モードでロボットプロジェクトを開いてから(ロボット設計モードページのプロジェクトメニューの節参照)、メニュー→【モーション設計】→【コマンドウィンドウ】を選択してください。
コマンドウィンドウを開いたら、図 9-1 のように1+2と入力し、Enterキーを押してください。


図 9-1 コマンドウィンドウ

すると画面に

>1+2
ans = 3

と表示され、足し算(1+2=3)が実行されたことが分かります。

同様に以下の結果になるようにコマンドを実行してみてください。

>a=3
a = 3
>a*5
ans = 15

変数aに3が代入され、a*5の計算をして15という答えが出ました。
  もう少し複雑な演算も可能です。

>a=100
a = 100
>b=200
b = 200
>(b-a)*2+300
ans = 500
>(b+a)/100
ans = 3

このように、四則演算や変数に値を代入するといった計算が可能です。

変数の値の範囲

変数は全て整数で、範囲は-32768から32767となっています。

制御用変数

ロボットの制御用に変数が用意されています。
例えば、デフォルトのロボットを開いた状態で、ShoP_R=9000と入力してください。 図 9-2 のように、ロボットの右肩が90度動きます。


図 9-2 コマンドから角度を駆動

このようにロボットの各関節(モーター)には変数が割り当てられています。
どのような変数名が割り当てられているかは、メニュー→【構成設計】→【サーボモータ設定】で確認できます。 図 9-3 の【ID】は設計エディタ(ロボット設計モードページの設計エディタの説)に 表示されている関節の番号、【変数名】の欄で関節毎に変数名を設定しています。


図 9-3 サーボモータ設定(変数名)

また、関節がHINGE(回転モーター)の場合、変数1カウント当たり0.01度に指定されています。 よって、ShoP_R=9000とすると、9000*0.01=90度動くことになります。

関節のタイプ毎に、変数1カウント当たりの関係を表 9-1 を参照ください。

表 9-1 関節タイプと変数1カウント当たりの値
関節タイプ 制御タイプ 1カウント当たり
HINGE 位置制御 0.01度
HINGE 速度制御 1.0度/秒
SLIDER 位置制御 0.001m/秒
SLIDER 速度制御 0.001m/秒

また、関節の変数名の先頭に特定の文字をつけると、サーボモータの特性を変更することが可能です(表 9-2 )。サーボモータの特性についてはロボット設計モードページのサーボモータ設定の節を参照ください。

表 9-2 サーボモータ制御用の変数
変数名 機能
変数名のみ 指令値の設定 ShoP_R
変数名_Err 指令値-実際の値 ShoP_R_Err
Kspeed_変数名 位置gainの設定 Kspeed_ShoP_R
Kp_変数名 モータPgainの設定 Kp_ShoP_R
Kd_変数名 モータDgainの設定 Kd_ShoP_R

その他制御用変数

Go Simulation!で使用しているその他の変数を表 9-3 に示します。

表 9-3 予約変数
変数名 概要 備考
KEY ジョイパッドのキー入力値が入る
KEY_UP ↑ボタンの値 固定値。変更しないでください。
KEY_DN ↓ボタンの値
KEY_LEFT ←ボタンの値
KEY_RIGHT →ボタンの値
KEY_A Aボタンの値
KEY_B Bボタンの値
KEY_C Cボタンの値
KEY_D Dボタンの値
KEY_L1 L1ボタンの値
KEY_R1 R1ボタンの値
KEY_L2 L2ボタンの値
KEY_R2 R2ボタンの値
GyroEna 1:ジャイロ制御有効設定
0:ジャイロ制御無効設定
EneX 敵のX座標[mm] @絶対座標
EneY 敵のY座標[mm] @絶対座標
EneD 敵のZ座標[mm] @絶対座標
EneTh 敵の方向[deg]@自ロボット座標
MyPit 自ロボットのピッチ角[deg]@絶対座標
MyRol 自ロボットのロール角[deg]@絶対座標
EneAttSen 敵からみた自ロボットの角度@敵ロボット座標
EneAttFlg 1: EneAttSenの値有効
0: EneAttSenの値無効(敵が倒れている時)

モーション実行

 コマンドからロボット設計モードページのモーションのセーブとロードの節で作成したモーションを実行させることができます。
例えば、モーションファイル「0Walk.rmo」を実行させたいときは以下のように実行してください。
歩行モーションを実行していることを確認してください。

>rmo(0Walk)

モーショングループ実行

コマンドからロボット設計モードページのモーショングループの節で設定したモーショングループを実行させることができます。
例えば、モーショングループ「ZenGo.rmo」を実行させたいときは以下のように実行してください。
モーショングループが実行されていることを確認してください。

>rmg(ZenGo)

プログラムモード

コマンドをプログラムに記述し、自動的に順番に実行させることが可能です。

プログラムはモーションデータ等と同じ場所の、 (マイドキュメント)\Go Simulation!\ROBOT_PROJECTS\(ロボット名)\ Program の下に置いてください。

ここにtest.txtというファイルを作成し、以下のプログラムを記述して保存してください。

#--------------------
:START

#もし上ボタン(KEY_UP)を押されたら
if(KEY=KEY_UP){
  #モーション(0Walk)を実行する
  rmo(0Walk)
}

#KEYクリア
KEY=0;

#1ミリ秒待ち
#goto文の前に必ず入れてください
wait(1)

#ラベルSTARTに行く
goto START

コマンドウィンドウから、以下のように実行してください

run(test)

ジョイパッドの↑ボタンを押すと、ロボットが前進歩行(0Walkモーションの実行)します。

このようにロボットのプログラムを作成することができます。
バトルで使用できるAI実行のロボットもプログラムで動いています。

予約語

予約語 機能 使用例
else if文の分岐 if(KEY=KEY_R1){
 :rmo(0TurnRight)
}else if(KEY=KEY_L1){
 :rmo(0TurnLeft)
}else{
}
else if if文の分岐
exit プログラムの停止 exit
goto ラベルまでジャンプする goto AAA
(別の行で:AAAが定義されていること)
help ヘルプの表示 help
if if文 elseを参照
motion モーション配列の実行 motion(_0Walk)
rmo モーションの実行 rmo(0Walk)
rmg モーショングループの実行 rmg(ZenGo)
run プログラムの実行 run(joystick)
または単に
run
と打つとmain.txtが実行されます
wait 1ミリ秒単位で、待ち時間の設定 wait(1)
: ラベル名の定義 :AAA
; 計算結果をコマンドウィンドウに表示させないようにする a=1;