2022年5月12日
SPIKE 基本動作のマイブロック化
今回は、ライントレースの動作や決まった動作を何回もさせる場合に1つのプログラムの中で何度も使用されるものや、数値を何度も調整するプログラムを再利用しやすくするために、マイブロックという機能の使い方を紹介します。 マイブロックとは、いくつかのブロックをまとめて1つのブロックにしたもののことです。マイブロックにすることにより以下のようなメリットがあります。
- プログラム全体がシンプルになるのでプログラムが分かりやすくなる
- 数値の調整がしやすくなる
- 変更箇所が少なくなる
はじめに、ライントレースを行う車体を用意します。 画像のようなロボットを作成してください。
車体に使用しているハードウェア
- SPIKEプライムラージハブ
- Mモーター×2(E,Aポート)
- カラーセンサー(Fポート)
本記事内のプログラムの動作は以下のURLより動画で確認することができます。
https://youtu.be/3eizPsW-PJ8◆マイブロックを使用していない場合と、使用している場合を比較します。
◇プログラム1
このプログラムでは、コースを時計回りでライントレースします。 まずは実際に動かしてみてプログラムの動作を確認しましょう。
ライントレース自体がうまくいかないときはスピードやしきい値の調整をしましょう。動きが大きくて線から外れてしまうときや、小さすぎて曲がりきれないときは係数を調整しましょう。
◇プログラム2
次に、プログラム1にマイブロックを活用したプログラムを作成します。 パレットの「マイブロック」をクリックし、「ブロックを作る」をクリックしましょう。
ブロック名の部分には、内容を表す文章を記述することができます。今回は、しきい値を変更できるマイブロックを作成したいので、「しきい値を」と入力します。
続いて、「入力を追加」をクリックし、「number or text」の欄にしきい値の初期設定として50を入力します。
最後に、「ラベルを追加」をクリックし、「にしてライントレースをする」を入力します。
マイブロックを作る画面で、上記のように設定ができたら、「保存する」をクリックするとマイブロックが作成されます。
作成したマイブロックを使用するために、以下の画像のようにブロックを入れ替えます。
ここで、パレットから「しきい値を○○にしてライントレースをする」をドラックアンドドロップし、「プログラムがスタートしたとき」の下に繋げます。
また、ライントレースを行うためのしきい値は以下の画像のように、定義ブロックからドラックアンドドロップすることができます。
実際にプログラムをSPIKEにダウンロードして、プログラム1と同じ動作をするか確認しましょう。 ここで、作成したマイブロックに変数が入っていなくてもライントレースができているはずです。 これは、定義ブロックでしきい値の初期値を50に設定してあるからです。
しきい値を変更してみて、ライントレースに変化があるか確認してみましょう。
マイブロックは以下のような場合に使用するとプログラムが見やすくなります。
- ほとんど変更することが無いブロック群(ロボットの設定など)
- プログラム中で3回以上使うブロック群(アーム用プログラムなど)
- 繰くり返しの中のプログラム(ライントレースなど)
今回紹介したプログラム2は上記の3番に該当します。
また、必要以上にマイブロックを作ると、プログラムが見づらくなり、変更しづらくなります。慣れてくるまでは上記の3つをマイブロックにしましょう。
マイブロックの使用例 – ロボットの設定
プログラム1、プログラム2で使用したロボットにフォースセンサーを取り付けます。
車体に使用しているハードウェア
- SPIKEプライムラージハブ
- Mモーター×2(E,Aポート)
- カラーセンサー(Fポート)
- フォースセンサー(Bポート)
◇プログラム3
ロボコンではコース上を真っ直ぐ走る必要があります。しかし、コースの摩擦などによりロボットが真っ直ぐ走らない場合があります。そこで、カラーセンサーを使用したライントレースを行わない場合でも正確な移動ができるように、ジャイロセンサーの値を利用してロボットの動きを微調整するプログラムを作成します。
ここでは、以下の画像のように入力のないマイブロックを作成し、ラベル名を「初期設定」と「真っ直ぐ走る」として、初期設定を行うマイブロックと、ジャイロセンサーの値を監視しながら真っ直ぐ走るマイブロックを作成しています。
実際にプログラムをSPIKEにダウンロードして、ロボットが真っ直ぐ走るか確認しましょう。 このように、マイブロックを使用して名前づけをすることで、コメントを書かなくてもプログラムが何をしているのか分かりやすくなります。
◇プログラム3について
ジャイロセンサーの値を確認しながら直進するプログラムです。マイブロックの「初期設定」で移動に使うモーター、モーターの回転速度と回転数、ジャイロセンサーのヨー角、ステアリング値(変数)の初期化を行なっています。 そして、「ずっと」の中でマイブロックの「真っ直ぐ走る」によってモーターのステアリング値を調整しながら走行しています。また、「真っ直ぐ走る」の中では、どちらにステアリングを切っているのか分かるように、ライトを使って左・真ん中・右を示しています。 走行中のロボットの向きを手で変えると、最初にフォースセンサーを押した時の向きに戻ろうとします。
マイブロックの使用例 – アーム用プログラム
まず、画像のようなロボットを作成してください。
車体に使用しているハードウェア
- SPIKEプライムラージハブ
- Mモーター×2(E,Aポート)
- カラーセンサー(Fポート)
- フォースセンサー(Bポート)
- 距離センサー(Dポート)
- アームのモーター(Cポート)
◇プログラム4
ここでは、アーム用プログラムにマイブロックを使った例を示します。以下にロボットの動きの例を示します。ロボットはジャイロセンサーによってモーターの出力を変更しながら真っ直ぐ進み、障害物を検知したらロボットアームで障害物を左に避けて、次へ進みます。
プログラム3で作成したマイブロック(「真っ直ぐ走る」)を再利用することで、ロボットが旋回した後も元の方向に走ります。また、追加で「つかむ」と「はなす」マイブロックを作ることで、プログラムの流れがわかりやすくなります。「真っ直ぐ走る」のように、マイブロックを作成しておくことで他のプログラムに応用しやすくなります。
◇プログラム4について
プログラム3の「真っ直ぐ走る」をここでも使用しています。マイブロックの「つかむ」では、アームを閉じてロボットを左に旋回させる動きがプログラムされています。また、「はなす」では、ロボットを元の向きまで旋回させ、アームを開く動作が入っています。
※2022/4/4現在最新バージョン(2.0.4)のSPIKEアプリに基づく情報です。
※これらの仕様はアプリのアップデートによって変更される場合があります。
(2022/4/4 現在)