コントローラーを使用すると、タスクを完了するためにロボットを簡単に運転および移動させることができます。 ただし、Drive プログラムの使用には制限があり、ロボットのビルドや実行中のタスクによっては、異なる制御が必要になる場合があります。 コントローラーをコーディングすると、コントローラーを最適化してロボットと当面のタスクにさらに適合させることができます。 VEXcode IQ でコントローラーをコーディングするにはいくつかの方法があります。 それぞれに利点と制限があり、望ましい結果に応じて、特定の状況により適した方法もあります。
この記事では、VEXcode IQ でコントローラーをカスタム コーディングするための 3 つの異なるオプションについて説明します。 各方法について、その利点、制限事項、および方法を選択する際の参考となる使用例とともに説明します。 この記事の目的のために、示されているすべてのコード例は Clawbot 用に作成されています。 ただし、同じ概念を builds.vex.com にある他の多数のビルドやカスタム ビルドに適用することできます。
オプション 1: デバイス構成でのボタンの割り当て
このオプションは、BaseBot や Clawbot などの標準ビルドを使用していて、すぐに起動して実行したい場合に最適です。
このオプションを使用すると、モーター、ドライブトレイン、またはモーター グループをデバイス構成のコントローラーのボタンに割り当てることができます。 デバイス設定でコントローラーにボタンを割り当てる方法の詳細について
オプション 1 の概要: デバイス構成でのボタンの割り当て
利点 |
制限事項 |
状況例 |
|
|
|
オプション 2: 永遠ループの使用
標準ビルドの代わりにカスタム ビルドを使用している場合、またはコントローラーでさらにカスタマイズできるようにしたい場合は、このオプションが適しています。 Forever ループの使用は、コントローラーのカスタム コードを作成するための優れた入門編です。
このオプションは、コントローラーとそれに関連付けられたボタンのすべての条件を永遠ループに配置します。 これにより、特にカスタム ビルド設計の場合に柔軟性が向上しますが、ある程度のコーディング経験も必要になります。 ただし、このオプションを使用する場合の考慮事項の 1 つは、プロジェクトの長さと複雑さです。 追加する条件が増えるほど、コード スタックが長くなる可能性があります。 これは、複数のブロックを順番に実行する必要があることを意味し、ブロックが多数ある場合、プロジェクトの実行が遅くなる可能性があります。 プロジェクトの実行が遅いと、コントローラーのボタンを押してからロボットの動作が表示されるまでに遅れが生じる可能性があります。
以下に示す具体的な例は、カスタム デザイン ロボット (カスタム ドライブトレインを備えたロボットなど) でフォーエバー ループを使用してロボットを駆動し、爪とアームを操作してオブジェクトと対話する方法の 1 つです。
「オプション 2」VEXcode IQ (第 2 世代) プロジェクト ファイルをダウンロード >
注: 第 1 世代 Clawbot を使用する場合、上記のプロジェクトで意図したとおりに動作するには、デバイス構成でアーム モーターを逆にする必要があります。
オプション 2 コードの説明。
コードピース |
説明 |
このコード例では Clawbot が使用されました。 コントローラーのボタンを使用してアームを上げ下げすると、ボタンを放すとすぐに重力によりアームが下がります。 アームとクローの両方を「ホールド」に設定すると、コントローラーのボタンを放した後でもアームとクローの両方が所定の位置に残ります。 |
|
このコード例では Clawbot が使用されました。 コントローラーのボタンを使用してアームを上げ下げすると、ボタンを放すとすぐに重力によりアームが下がります。 アームとクローの両方を「ホールド」に設定すると、コントローラーのボタンを放した後でもアームとクローの両方が所定の位置に残ります。 コントローラーのどのボタンが押されているかを継続的に確認するために、Forever ループが使用されます。 [モーター速度の設定] ブロックは、A 軸および D 軸に沿った現在のコントローラーの位置にモーター速度を設定するために使用されます。 これは、車をドライブに設定するのと同じです。 それは必ずしも車を動かすわけではなく、ただ設定するだけです。 ジョイスティックの各軸は -100 ~ +100 の値を返し、中心にある場合は値 0 を返します。 これは、ジョイスティックの軸を押すと、-100% ~ 100% に相当することを意味します。 軸が 100 または -100 に近づくほど、モーターの回転が速くなります。 次に[Spin]ブロックを使って実際にモーターを動かします。 これは、方向が決まったら車のアクセルを踏み込むのと同じです。 これにより、各モーターを 4 つのコントローラー軸のいずれかで制御できるようになります。 |
|
このコード例では Clawbot が使用されました。 コントローラーのボタンを使用してアームを上げ下げすると、ボタンを放すとすぐに重力によりアームが下がります。 アームとクローの両方を「ホールド」に設定すると、コントローラーのボタンを放した後でもアームとクローの両方が所定の位置に残ります。 [If then else if then else] ブロックは、コントローラーで押されるか放されるボタンに特定の動作をマッピングするために使用されます。 コードのこのセクションでは、E Up ボタンまたは E Down ボタンが押されたかどうかが条件として設定されます。 その場合、腕の上げ下げなどの特定の動作が発生します。 条件のelse部分もあります。どちらのボタンも押されていない場合、アームは動きを停止するように設定されます。 Claw のプロジェクトのコードの次のセクションも同じ説明に従っていることに注意してください。 |
オプション 2 の概要: 永遠ループの使用
利点 |
制限事項 |
状況例 |
|
|
|
オプション 3: イベントの使用
コントローラーを大幅にカスタマイズしたい場合は、イベントの使用が最適なオプションです。 ボタンを 1 回押すだけで、ボタンを押して爪を開いたり、アームを上げたり、設定された距離だけ前進したりするなど、複数のロボットの動作をトリガーできます。 Forever ループ内でボタンごとに複数の動作をコード化しようとすると、プロジェクトの実行が大幅に遅くなります。イベントを使用すると、これをより効果的に行うことができます。
このオプションでは、イベントを使用してプロジェクト フローを分割します。 これは Forever ループの使用に似ていますが、コードをより整理できるため、ボタンの実行の応答時間が短縮されます。 応答時間が速いということは、コントローラーのボタンを押してからロボットの動作が表示されるまでに遅れがなくなることを意味します。 この例は、前のプロジェクトと同じ動作を示していますが、フォーエバー ループの代わりにイベントを使用して実行されます。
「オプション 3」VEXcode IQ (第 2 世代) プロジェクト ファイルをダウンロード >
注: 第 1 世代 Clawbot を使用する場合、上記のプロジェクトで意図したとおりに動作するには、デバイス構成でアーム モーターを逆にする必要があります。
オプション 3 コードの説明。
コードピース |
説明 |
このコード例では Clawbot が使用されました。 コントローラーのボタンを使用してアームを上げ下げすると、ボタンを放すとすぐに重力によりアームが下がります。 アームとクローの両方を「ホールド」に設定すると、コントローラーのボタンを放した後でもアームとクローの両方が所定の位置に残ります。 |
|
このコード例では 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 の概要: イベントの使用
利点 |
制限事項 |
状況例 |
|
|
|