適切な距離に到達する
FRCロボットは、スコアリングメカニズムを効果的に機能させるために、スコアリングゴールから特定の距離に位置する必要があることがよくあります。limelightの校正済みクロスヘアと簡単な比例制御ループを使用することで、ロボットをゴールから特定の距離に簡単に移動させることができます。
この例では、ロボットがゴールに向いていることを確認してください。後で照準合わせと距離調整を1つの機能に組み合わせますが、この例では距離を正しく調整するコードにのみ焦点を当てています。
照準合わせの例と同様に、ここではロボットの更新ループで実行できる関数を示します。
float KpDistance = -0.1f; // 距離の比例制御定数
float current_distance = Estimate_Distance(); // 'ケーススタディ:距離の推定'を参照
if (joystick->GetRawButton(9))
{
float distance_error = desired_distance - current_distance;
driving_adjust = KpDistance * distance_error;
left_command += distance_adjust;
right_command += distance_adjust;
}
KpDistanceの設定を調整することで、ロボットは非常に素早く正確に目的の距離まで移動するはずです。照準合わせと比較して、正しい距離まで移動することは通常簡単です。ほとんどのロボットは、その場で回転するよりも前後に移動する方がはるかに簡単だからです。
次に、正しい距離への移動をさらに簡単にするシンプルな方法を説明します。実際に距離を計算する代わりに、limelightのクロスヘアを使用できます。ロボットをターゲットから理想的な距離に配置し、クロスヘアのy位置を校正します。これで、ロボットが正しい距離にあるとき、y角度は0.0として報告されます。このトリックを使用すると、実際の距離を計算する必要がなくなり、コードは次のようになります:
float KpDistance = -0.1f;
std::shared_ptr<NetworkTable> table = NetworkTable::GetTable("limelight");
float distance_error = table->GetNumber("ty");
if (joystick->GetRawButton(9))
{
driving_adjust = KpDistance * distance_error;
left_command += distance_adjust;
right_command += distance_adjust;
}
射撃距離を変更する必要がある場合は、ロボットを新しい距離に移動し、limelightのクロスヘアを再校正するだけです。
以下は、上記のアイデアを使用したロボットの例です。ドライバーが運転を停止し、「照準」ボタンを押すと、自動的に正しい範囲にバックアップすることに注目してください: