適切な距離への移動
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のクロスヘアを再キャリブレーションするだけです。
![]()
上記のアイデアを使用したロボットの例を示します。ドライバーが運転を停止して「照準」ボタンを押すと、自動的に正しい距離まで後退することに注目してください:
