メインコンテンツまでスキップ

射程距離の調整

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のクロスヘアを再較正するだけです。

Image

以下は、上記のアイデアを使用したロボットの例です。ドライバーが運転を停止して「照準」ボタンを押すと、自動的に正しい範囲まで後退することに注目してください:

Image