適切な距離に到達する
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;
}