距離の推定
固定角度カメラの使用
ビジョントラッキングカメラがロボットに取り付けられており、地面と視線の間の角度が変化しない場合、この技術を使用してターゲットまでの距離を非常に正確に計算できます。この距離値を使用して、ロボットを前後に移動させて最適な射程距離に入るか、発射機構のパワーを調整することができます。
下の図を参照してください。この文脈では、すべての変数が既知です:ターゲットの高さ(h2)はフィールドの特性として既知です。カメラの床からの高さ(h1)は既知であり、取り付け角度(a1)も既知です。Limelight(またはビジョンシステム)はターゲットへのy角度(a2)を教えてくれます。

以下の方程式を使用してdを求めることができます:
tan(a1+a2) = (h2-h1) / d
"d = (h2-h1) / tan(a1+a2)"
「tan」関数は通常、ラジアンで測定された入力を期待します。角度の測定値を度からラジアンに変換するには、(3.14159/180.0)を掛けます。以下の完全なコード例を参照してください。
- Java
- C++
NetworkTable table = NetworkTableInstance.getDefault().getTable("limelight");
NetworkTableEntry ty = table.getEntry("ty");
double targetOffsetAngle_Vertical = ty.getDouble(0.0);
// limelightが垂直から何度後ろに傾いていますか?
double limelightMountAngleDegrees = 25.0;
// Limelightレンズの中心から床までの距離
double limelightLensHeightInches = 20.0;
// ターゲットから床までの距離
double goalHeightInches = 60.0;
double angleToGoalDegrees = limelightMountAngleDegrees + targetOffsetAngle_Vertical;
double angleToGoalRadians = angleToGoalDegrees * (3.14159 / 180.0);
// 距離を計算
double distanceFromLimelightToGoalInches = (goalHeightInches - limelightLensHeightInches) / Math.tan(angleToGoalRadians);
std::shared_ptr<NetworkTable> table = nt::NetworkTableInstance::GetDefault().GetTable("limelight");
double targetOffsetAngle_Vertical = table->GetNumber("ty",0.0);
// limelightが垂直から何度後ろに傾いていますか?
double limelightMountAngleDegrees = 25.0;
// Limelightレンズの中心から床までの距離
double limelightLensHeightInches = 20.0;
// ターゲットから床までの距離
double goalHeightInches = 60.0;
double angleToGoalDegrees = limelightMountAngleDegrees + targetOffsetAngle_Vertical;
double angleToGoalRadians = angleToGoalDegrees * (3.14159 / 180.0);
// 距離を計算
double distanceFromLimelightToGoalInches = (goalHeightInches - limelightLensHeightInches)/tan(angleToGoalRadians);
この技術を使用する際は、カメラの取り付け角度を慎重に選択することが重要です。近すぎる場合も遠すぎる場合もターゲットを見ることができるようにしたいです。また、この角度が変化しないようにしたいので、しっかりと固定し、取り付け部品にスロットを使用することは避けてください。
角度a1が何であるかを把握するのに問題がある場合は、上記の方程式を使用してa1を求めることもできます。ロボットを既知の距離(カメラのレンズから測定)に置き、同じ方程式をa1について解くだけです。
ターゲットがカメラとほぼ同じ高さにある場 合、この技術は有用ではありません。
面積を使用した距離の推定
距離を推定するもう一つの簡単な方法は、追跡している輪郭の面積を使用することです。これは実装が非常に簡単な方法ですが、極めて正確な結果は得られません。既知の距離からビジョンカメラをターゲットに向け、ブロブの面積を記録するだけです。実際のフィールドのビジョンターゲットの正確な表現を使用していることを確認し、希望する射撃位置からターゲットを狙っていることを確認してください。その後、いくつかの異なる距離からこれを行い、これらの値のテーブルを作成できます。2016年には、この方法を使用して、ゴールからの距離に基づいて2軸タレットの照準を調整しました。