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

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

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

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

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

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

VEXcode V5のデバイスメニューにコントローラーオプションが表示されています。ボタン操作の図は、2つのジョイスティックが戦車型駆動方式でロボットを操作することを示している。上下ボタンはアームモーターグループを制御し、R軸ボタンはクローモーターを制御します。

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

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

オプション2: 永久ループを使用する

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

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

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

オプション2のブロックプロジェクトを開いたVEXcode V5ワークスペース。このプロジェクトはブロックのスタックで構成されており、構成済みのデバイスが含まれています。デバイスメニューが横に開き、以下のデバイスが表示されます:コントローラー1、ポート3のクローモーター、ポート8のアームモーター、ポート1の左モーター、ポート10の右モーター。ワークスペースには、コントローラーの入力を処理するためのブロックのスタックがあります。スタックには「開始時に、停止中のArmMotorをホールドに設定し、停止中のClawMotorをホールドに設定する」と記載されています。スタックの残りの部分は、Foreverループの中に含まれています。「永遠に、左モーターの速度をコントローラー1の3ポジション%に設定し、左モーターを前方に回転させ、右モーターの速度をコントローラー1の2ポジション%に設定し、右モーターを前方に回転させます。」と表示されます。次に、コントローラー1の上ボタンが押された場合はアームモーターを上方向に回転させ、コントローラー1の下ボタンが押された場合はアームモーターを下方向に回転させ、それ以外の場合はアームモーターを停止します。最後に、コントローラー1のAボタンが押された場合はクローモーターを回転させて開き、コントローラー1のBボタンが押された場合はクローモーターを回転させて閉じ、それ以外の場合はクローモーターを停止します。

「オプション 2」VEXcode V5 プロジェクト ファイルをダウンロードします >

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

コードピース 説明
オプション2のVEXcode V5プロジェクトにおけるブロックの積み重ねのクローズアップ画像。 2つのブロックがハイライト表示されており、スタックのForeverループの外側にあります。それらは「set ArmMotor stopping to hold」と「set ClawMotor stopping to hold」です。 このコード例では Clawbot が使用されました。コントローラーのボタンを使用してアームを上げ下げすると、ボタンを放すとすぐに重力によりアームが下がります。アームとクローの両方を「ホールド」に設定すると、コントローラーのボタンを放した後でもアームとクローの両方が所定の位置に残ります。
オプション2のVEXcode V5プロジェクトにおけるブロックの積み重ねのクローズアップ画像。スタックのForeverループ内部で、4つのブロックが強調表示されています。彼らは「Forever」と読み、LeftMotorの速度をController1の3ポジション%に設定し、LeftMotorを前方に回転させ、RightMotorの速度をController1の2ポジション%に設定し、RightMotorを前方に回転させます。

 

V5コントローラーのボタン配置を視覚的に確認する。

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

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

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

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

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

オプション2のVEXcode V5プロジェクトにおけるブロックの積み重ねのクローズアップ画像。スタックの Forever ループ内で、if、else if、else ブロックが強調表示されています。コントローラー1が上方向に押された場合はアームモーターを上方向に回転させ、コントローラー1が下方向に押された場合はアームモーターを下方向に回転させ、それ以外の場合はアームモーターを停止します。

 

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

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

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

オプション 2 の要約: 永久ループの使用

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

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

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

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

オプション3のブロックプロジェクトを開いたVEXcode EXPワークスペース。このプロジェクトは11個の小さなブロックの積み重ねで構成されており、構成済みのデバイスが含まれています。デバイスメニューが横に開き、以下のデバイスが表示されます:コントローラー1、ポート3のクローモーター、ポート8のアームモーター、ポート1の左モーター、ポート10の右モーター。ワークスペースには、コントローラーの入力を処理する11個の小さなブロックのスタックがあります。最初のスタックには、「開始時に、ArmMotor の停止を保持状態に設定し、次に ClawMotor の停止を保持状態に設定します。」と記載されています。 2 番目のスタックには、「Controller1 の軸 3 が変更されたら、LeftMotor の速度を Controller1 3 の位置 % に設定し、LeftMotor を前方に回転させます。」と書かれています。 3番目のスタックには、「Controller1の軸2が変更されたら、RightMotorの速度をController1の2の位置%に設定し、RightMotorを前方に回転させます」と書かれています。 4番目のスタックには、「コントローラー1のボタンが上向きに押されたら、アームモーターを上向きに回転させる」と書かれている。 5番目のスタックには、「Controller1ボタンのUpボタンが離されたら、ArmMotorを停止する」と記載されています。 6番目のスタックには、「コントローラー1のボタンが下向きに押されたら、アームモーターを下向きに回転させる」と書かれている。 7番目のスタックには「Controller1ボタンの押下が解除されたら、ArmMotorを停止する」と書かれている。 8番目のスタックには、「コントローラー1のボタンAが押されたら、クローモーターを回転させて開く」と書かれている。 9番目のスタックには「コントローラー1のボタンAが離されたら、クローモーターを停止する」と書かれている。 10番目のスタックには「コントローラー1のボタンBが押されたら、クローモーターを回転させて閉じる」と書かれています。 11番目で最後のスタックには、「コントローラー1のボタンBが離されたら、クローモーターを停止する」と書かれている。

「オプション 3」VEXcode V5 プロジェクト ファイルをダウンロードします >

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

コードピース 説明
オプション3のVEXcode V5プロジェクトにおける、ブロックの積み重ねの一つをクローズアップした画像。スタックには「開始時に、ArmMotor の停止を保持状態に設定し、次に ClawMotor の停止を保持状態に設定」と記載されています。
このコード例では Clawbot が使用されました。コントローラーのボタンを使用してアームを上げ下げすると、ボタンを放すとすぐに重力によりアームが下がります。アームとクローの両方を「ホールド」に設定すると、コントローラーのボタンを放した後でもアームとクローの両方が所定の位置に残ります。
オプション3のVEXcode V5プロジェクトにおける、2つのブロックスタックのクローズアップ画像。最初のスタックには、「Controller1 の軸 3 が変更されたら、LeftMotor の速度を Controller1 3 の位置 % に設定し、LeftMotor を前方に回転させます。」と書かれています。 2 番目のスタックには、「Controller1 の軸 2 が変更されたら、RightMotor の速度を Controller1 2 の位置 % に設定し、RightMotor を前方に回転させます。」と書かれています。

 

V5コントローラーのボタン配置を視覚的に確認する。

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

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

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

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

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

VEXcode V5プロジェクトのオプション3における、4つのブロックスタックのクローズアップ画像。最初のスタックには「Controller1ボタンの上が押されたら、ArmMotorを上に回転させる」と書かれています。 2 番目のスタックには、「Controller1 ボタンの Up が離されたら、ArmMotor を停止する」と記載されています。 3番目のスタックには、「コントローラー1のボタンダウンが押されたら、アームモーターを下方向に回転させる」と書かれている。 4番目のスタックには、「Controller1ボタンのダウンが解除されたら、ArmMotorを停止する」と記載されています。

 

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

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

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

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

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

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

Last Updated: