LoginSignup
1
2

More than 1 year has passed since last update.

WEB版ETロボコンシミュレータについて(解説編)

Last updated at Posted at 2021-07-26

こちらの続きです。

WEB版ETロボコンシミュレータの位置づけ

ETロボコンシミュレータで検索すると色々な情報が引っ掛かりますので混乱する方もいらっしゃると思います。位置づけを簡単に整理すると下記の図のようになります。
WEB版ETロボコンシミュレータの位置づけ.png

WEB版ETロボコンシミュレータの画面説明

画面の説明は下図の通りです。API説明をクリックすると、本シミュレータで利用可能なAPIの説明とサンプルコードを見ることができます。本稿でも改めて説明します。
MiniScriptの仕様はMiniScriptから見ることができます。英語ですがとても簡単なので頑張って読んでみましょう。
シミュレータ操作はシミュレータ上にフォーカスが当たっているときに使える機能一覧です。ALTキーを押すとフォーカスを奪われる不具合が報告されていますので、予告なしに別のキーに変更される可能性があります。
AceエディタはMiniScriptの文法を理解し適切な色付けをしてくれます。実行結果はシミュレータ画面のDebug logをチェックするか、ブラウザのF12キーを押すことで確認できます。
スクリプト実行は Run Scriptボタンで行えます。この下にあるPauseボタンを押すとスクリプト実行を一時的に止めることができます。UninyのTimeScaleを0にすることで物理エンジンも止めています。もう一度Pauseボタンを押すと再開します。
スクリプト実行の横にあるLoad FileはローカルPCにあるファイルをAceエディタに読み込むことができます。Aceエディタのスクリプトを保存するには、Downloadボタンを押してください。ブラウザのダウンロード機能が働きます。Downloadボタンの左側にテキストを入力することで、ダウンロードファイル名を変更することができます。空の場合はランダムなファイル名になります。

WEB版ETロボコンシミュレータの説明.png

HackEV走行体のモータ制御について

HackEVは下図のような寸法となっており、右車輪、左車輪、アーム、しっぽをモータで動かすことができます。それぞれ、ev3_motor_set_power_left、ev3_motor_set_power_right、ev3_motor_set_power_arm、ev3_motor_set_power_tailという関数を用意しており、-100~100までの数値を取ることができます。また、ev3_motor_get_counts_left、ev3_motor_get_counts_right、ev3_motor_get_counts_arm、ev3_motor_get_counts_tailでモータの回転角度を取得できるため、HackEVの寸法と合わせて推測航法(デッドレコニング)を用いることで、走行体の走行距離や現在位置を算出することができます。

image.png

Hello, world

ETロボコンAPIを用いて簡単にロボット動かしてみたい人は、下記スクリプトを試してみてください。走行体がスタート地点から10秒間まっすぐ進みます。wait は MiniScriptの内蔵関数で、指定秒数スクリプトの実行を待ちます。このスクリプトを組み合わせることで、ロボットを好きな場所に簡単に移動させることができます。

ev3_motor_set_power_left 50
ev3_motor_set_power_right 50
wait 10

MiniScriptの制御構文

MiniScriptはif、for、whileなど、基本的な制御構文を備えています。例えば下記のように記載することで、直進2秒、左旋回0.3秒の動作を11回繰り返します。end forという表記が見慣れないですが、これによって{}やインデントに頼った文法になっていないのは良いことだと思います。

for i in range(0,10)
    ev3_motor_set_power_left 50
    ev3_motor_set_power_right 50
    wait 2
    ev3_motor_set_power_left -50
    ev3_motor_set_power_right 50
    wait 0.3
end for

WEB版ETロボコンシミュレータ用API

現在サポートしている関数は下記です。取り得る値の範囲はEV3 APIを参考にしてください。

EV3制御 関数名 引数 機能
ev3_motor_set_power_left パワー 左モータのパワーを設定する
ev3_motor_set_power_right パワー 右モータのパワーを設定する
ev3_motor_set_power_arm パワー アームモータのパワーを設定する
ev3_motor_set_power_tail パワー しっぽモータのパワーを設定する
ev3_motor_stop_left モード 左モータの停止モードを設定する
ev3_motor_stop_right モード 右モータの停止モードを設定する
ev3_motor_stop_arm モード アームモータの停止モードを設定する
ev3_motor_stop_tail モード しっぽモータの停止モードを設定する
ev3_led_set_color カラー LEDカラーを設定する
ev3_motor_get_counts_left 左モータの回転角(度)を取得する
ev3_motor_get_counts_right 右モータの回転角(度)を取得する
ev3_motor_get_counts_arm アームモータの回転角(度)を取得する
ev3_motor_get_counts_tail しっぽモータの回転角(度)を取得する
ev3_color_sensor_get_color カラーセンサが認識した色を取得する
ev3_color_sensor_get_reflect カラーセンサの反射光強度を取得する
ev3_color_sensor_get_r カラーセンサのR成分(赤)を取得する
ev3_color_sensor_get_g カラーセンサのG成分(緑)を取得する
ev3_color_sensor_get_b カラーセンサのB成分(青)を取得する
ev3_ultrasonic_sensor_get_distance 超音波センサの測定距離を取得する
ev3_ultrasonic_sensor_listen 超音波センサのListen状態を取得する
ev3_gyro_sensor_get_angle ジャイロセンサの角度を取得する
ev3_gyro_sensor_get_rate ジャイロセンサの角速度を取得する

Unity制御用API

デフォルトでは60FPS、TimeScale1.0で動作します。FPSを大きくとカラーセンサの更新周期を上げることができるため、ライントレースが安定する方向になります。FPSを小さくすると表示は間に合うようになるものの、ライントレースに失敗しやすくなります。TimeScaleを低くすることで遅いPCでも走行体の制御を間に合わすことができるかもしれません。ゲーミングマシンをお使いの方は、TimeScaleを大きくすることでシミュレーション時間を短縮できるかもしれません。

関数名 引数 機能
FPS Int 目標FPSを設定する
TimeScale Float TimeScaleを設定する

最後に

本稿ではWEB版ETロボコンシミュレータがサポートしている機能を説明しました。インストールレスで気軽にETロボコン気分を味わえる本シミュレータをぜひお試しください。

1
2
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
2