VEXcode IQ のカスタム コントローラー コード

コントローラーを使用すると、タスクを完了するためにロボットを簡単に運転および移動させることができます。 ただし、Drive プログラムの使用には制限があり、ロボットのビルドや実行中のタスクによっては、異なる制御が必要になる場合があります。 コントローラーをコーディングすると、コントローラーを最適化してロボットと当面のタスクにさらに適合させることができます。 VEXcode IQ でコントローラーをコーディングするにはいくつかの方法があります。 それぞれに利点と制限があり、望ましい結果に応じて、特定の状況により適した方法もあります。

この記事では、VEXcode IQ でコントローラーをカスタム コーディングするための 3 つの異なるオプションについて説明します。 各方法について、その利点、制限事項、および方法を選択する際の参考となる使用例とともに説明します。 この記事の目的のために、示されているすべてのコード例は Clawbot 用に作成されています。 ただし、同じ概念を builds.vex.com にある他の多数のビルドやカスタム ビルドに適用することできます。

オプション 1: デバイス構成でのボタンの割り当て

このオプションは、BaseBot や Clawbot などの標準ビルドを使用していて、すぐに起動して実行したい場合に最適です。

このオプションを使用すると、モーター、ドライブトレイン、またはモーター グループをデバイス構成のコントローラーのボタンに割り当てることができます。 デバイス設定でコントローラーにボタンを割り当てる方法の詳細について

VEX IQ コントローラー

オプション 1 の概要: デバイス構成でのボタンの割り当て

利点

制限事項

状況例

  • コーディング不要の素早いセットアップ
  • 最も簡単な方法
  • 簡単に調整可能
  • 個々のモーター、標準ドライブトレイン、およびモーターグループをボタンに割り当てることができます
  • ボタンの割り当てはコントローラーのボタンの数に制限されます
  • ドライブトレインは 4 モーターを超えたり、カスタマイズしたりすることはできません (標準ドライブのみがサポートされ、H ドライブ、ホロノミック、またはその他のカスタム ドライブトレインはサポートされません)。
  • BaseBot、Clawbot などの標準ビルド、またはそれらの標準ビルドの単純な変更を操作します。 たとえば、前面に吸気口が取り付けられた BaseBot は、モーター グループによって制御されます。
  • 多くのコーディングを行わずに、どのボタンがロボットのさまざまな動作に対応するかをすばやく操作します

オプション 2: 永遠ループの使用

標準ビルドの代わりにカスタム ビルドを使用している場合、またはコントローラーでさらにカスタマイズできるようにしたい場合は、このオプションが適しています。 Forever ループの使用は、コントローラーのカスタム コードを作成するための優れた入門編です。

このオプションは、コントローラーとそれに関連付けられたボタンのすべての条件を永遠ループに配置します。 これにより、特にカスタム ビルド設計の場合に柔軟性が向上しますが、ある程度のコーディング経験も必要になります。 ただし、このオプションを使用する場合の考慮事項の 1 つは、プロジェクトの長さと複雑さです。 追加する条件が増えるほど、コード スタックが長くなる可能性があります。 これは、複数のブロックを順番に実行する必要があることを意味し、ブロックが多数ある場合、プロジェクトの実行が遅くなる可能性があります。 プロジェクトの実行が遅いと、コントローラーのボタンを押してからロボットの動作が表示されるまでに遅れが生じる可能性があります。

以下に示す具体的な例は、カスタム デザイン ロボット (カスタム ドライブトレインを備えたロボットなど) でフォーエバー ループを使用してロボットを駆動し、爪とアームを操作してオブジェクトと対話する方法の 1 つです。

永久ループの使用イメージ

「オプション 2」VEXcode IQ (第 2 世代) プロジェクト ファイルをダウンロード >

: 第 1 世代 Clawbot を使用する場合、上記のプロジェクトで意図したとおりに動作するには、デバイス構成でアーム モーターを逆にする必要があります。

オプション 2 コードの説明。

コードピース

説明

ArmMotor の停止を保持に設定し、ClawMotor の停止を保持に設定します

このコード例では Clawbot が使用されました。 コントローラーのボタンを使用してアームを上げ下げすると、ボタンを放すとすぐに重力によりアームが下がります。 アームとクローの両方を「ホールド」に設定すると、コントローラーのボタンを放した後でもアームとクローの両方が所定の位置に残ります。

モーターの速度と回転の設定 VEX IQ コントローラーとボタンの図

このコード例では Clawbot が使用されました。 コントローラーのボタンを使用してアームを上げ下げすると、ボタンを放すとすぐに重力によりアームが下がります。 アームとクローの両方を「ホールド」に設定すると、コントローラーのボタンを放した後でもアームとクローの両方が所定の位置に残ります。

コントローラーのどのボタンが押されているかを継続的に確認するために、Forever ループが使用されます。

[モーター速度の設定] ブロックは、A 軸および D 軸に沿った現在のコントローラーの位置にモーター速度を設定するために使用されます。 これは、車をドライブに設定するのと同じです。 それは必ずしも車を動かすわけではなく、ただ設定するだけです。

ジョイスティックの各軸は -100 ~ +100 の値を返し、中心にある場合は値 0 を返します。 これは、ジョイスティックの軸を押すと、-100% ~ 100% に相当することを意味します。 軸が 100 または -100 に近づくほど、モーターの回転が速くなります。

次に[Spin​​]ブロックを使って実際にモーターを動かします。 これは、方向が決まったら車のアクセルを踏み込むのと同じです。 これにより、各モーターを 4 つのコントローラー軸のいずれかで制御できるようになります。

コントローラー E Up が押された場合の条件文

このコード例では Clawbot が使用されました。 コントローラーのボタンを使用してアームを上げ下げすると、ボタンを放すとすぐに重力によりアームが下がります。 アームとクローの両方を「ホールド」に設定すると、コントローラーのボタンを放した後でもアームとクローの両方が所定の位置に残ります。

[If then else if then else] ブロックは、コントローラーで押されるか放されるボタンに特定の動作をマッピングするために使用されます。 コードのこのセクションでは、E Up ボタンまたは E Down ボタンが押されたかどうかが条件として設定されます。 その場合、腕の上げ下げなどの特定の動作が発生します。 条件のelse部分もあります。どちらのボタンも押されていない場合、アームは動きを停止するように設定されます。

Claw のプロジェクトのコードの次のセクションも同じ説明に従っていることに注意してください。

オプション 2 の概要: 永遠ループの使用

利点

制限事項

状況例

  • カスタムビルド、特に 4 つ以上のモーターを備えたドライブトレインに対応可能
  • 1 つのボタンに複数の動作を割り当てることができます
  • コントローラーの異なる軸に動作を割り当てることができます (デバイス構成の左アーケード、右アーケード、分割アーケード、タンク ドライブのオプションとは対照的に)
  • ある程度のコーディングの知識が必要です (条件文、ループ、コントローラーのボタン/ジョイスティックの知識)
  • プロジェクトの実行が遅くなったり、ボタンの応答時間に遅れが生じたりする可能性があります。 すべてのコマンドは 1 つの Forever ループ内に含まれるため、設定された条件とコードの長さによっては、コードの実行が遅くなる可能性があります。
  • カスタム構築ロボット、特に非標準ドライブトレインでのコントローラーの使用
  • 1つのボタンに複数の動作を割り当てたい場合。 たとえば、F Up ボタンを押すと、クローが開いて前進し、オブジェクトの周囲で閉じることができます。

オプション 3: イベントの使用

コントローラーを大幅にカスタマイズしたい場合は、イベントの使用が最適なオプションです。 ボタンを 1 回押すだけで、ボタンを押して爪を開いたり、アームを上げたり、設定された距離だけ前進したりするなど、複数のロボットの動作をトリガーできます。 Forever ループ内でボタンごとに複数の動作をコード化しようとすると、プロジェクトの実行が大幅に遅くなります。イベントを使用すると、これをより効果的に行うことができます。

このオプションでは、イベントを使用してプロジェクト フローを分割します。 これは Forever ループの使用に似ていますが、コードをより整理できるため、ボタンの実行の応答時間が短縮されます。 応答時間が速いということは、コントローラーのボタンを押してからロボットの動作が表示されるまでに遅れがなくなることを意味します。 この例は、前のプロジェクトと同じ動作を示していますが、フォーエバー ループの代わりにイベントを使用して実行されます。

永遠ループの代わりにイベントを使用する

「オプション 3」VEXcode IQ (第 2 世代) プロジェクト ファイルをダウンロード >

: 第 1 世代 Clawbot を使用する場合、上記のプロジェクトで意図したとおりに動作するには、デバイス構成でアーム モーターを逆にする必要があります。

オプション 3 コードの説明。

コードピース

説明

ArmMotor の停止を保持に設定し、ClawMotor の停止を保持に設定します

このコード例では Clawbot が使用されました。 コントローラーのボタンを使用してアームを上げ下げすると、ボタンを放すとすぐに重力によりアームが下がります。 アームとクローの両方を「ホールド」に設定すると、コントローラーのボタンを放した後でもアームとクローの両方が所定の位置に残ります。

LeftMotor の速度をコントローラ A の位置 % に設定し、LeftMotor を前方に回転させます VEX IQ コントローラーとボタンの図

このコード例では Clawbot が使用されました。 コントローラーのボタンを使用してアームを上げ下げすると、ボタンを放すとすぐに重力によりアームが下がります。 アームとクローの両方を「ホールド」に設定すると、コントローラーのボタンを放した後でもアームとクローの両方が所定の位置に残ります。

{When controller axis} イベント ブロックは、コントローラーの 4 つの軸の 1 つがジョイスティックを使用して変更されたときに特定の動作をトリガーするために使用されます。

[モーター速度の設定] ブロックは、A 軸および D 軸に沿った現在のコントローラーの位置にモーター速度を設定するために使用されます。 これは、車をドライブに設定するのと同じです。 それは必ずしも車を動かすわけではなく、ただ設定するだけです。

ジョイスティックの各軸は -100 ~ +100 の値を返し、中心にある場合は値 0 を返します。 これは、ジョイスティックの軸を押すと、-100% ~ 100% に相当することを意味します。 軸が 100 または -100 に近づくほど、モーターの回転が速くなります。

次に[Spin​​]ブロックを使って実際にモーターを動かします。 これは、方向が決まったら車のアクセルを踏み込むのと同じです。 これにより、各モーターを 4 つのコントローラー軸のいずれかで制御できるようになります。

コントローラーのボタンを使用してアームを上げ下げすると、ボタンを放すとすぐに重力によりアームが下がります。

このコード例では Clawbot が使用されました。 コントローラーのボタンを使用してアームを上げ下げすると、ボタンを放すとすぐに重力によりアームが下がります。 アームとクローの両方を「ホールド」に設定すると、コントローラーのボタンを放した後でもアームとクローの両方が所定の位置に残ります。

{When controller axis} イベント ブロックは、コントローラー上で押されるか放されるボタンに特定の動作をマッピングするために使用されます。 コードのこのセクションでは、E Up ボタンまたは E Down ボタンが押されたかどうかが条件として設定されます。 その場合、腕を上げる、下げる、停止するなどの特定の動作が発生します。

Claw のプロジェクトのコードの最後のセクションも同じ説明に従っていることに注意してください。

オプション 3 の概要: イベントの使用

利点

制限事項

状況例

  • カスタムビルド、特に 4 つ以上のモーターを備えたドライブトレインに対応可能
  • 1 つのボタンに複数の動作を割り当てることができます
  • コントローラーの異なる軸に動作を割り当てることができます (デバイス構成の左アーケード、右アーケード、分割アーケード、タンク ドライブのオプションとは対照的に)
  • コードの実行が高速になり、ボタンの応答性が向上します (各条件が個別に呼び出され、単一のコード スタックに埋め込まれないため)
  • オプション (条件、ループ、イベント、およびコントローラーのボタン/ジョイスティックの知識) に関するコーディングの知識が最も必要です。
  • 第 1 世代 VEX IQ Brain を使用している場合、プロジェクト内にイベントが多すぎると、Brain の処理制限によりプロジェクトが実行されなくなる可能性があります。
  • カスタム構築ロボット、特に非標準ドライブトレインでのコントローラーの使用
  • 複数の動作を遅延なく 1 つのボタンに割り当てたい場合。 たとえば、F Up ボタンを押すと、クローが開いて前進し、オブジェクトの周囲で閉じることができます。

For more information, help, and tips, check out the many resources at VEX Professional Development Plus

Last Updated: